diff --git a/tools/build.xml b/tools/build.xml
index 91cfa67..3b81928 100644
--- a/tools/build.xml
+++ b/tools/build.xml
@@ -1,7 +1,7 @@
 <project name="CLDR Distribution" default="all" basedir=".">
   <target name="init">
     <tstamp/>
-    <property name="version" value="37.0"/>
+    <property name="version" value="38.1"/>
     <property name="dist.dir" value="dist"/>
     <property name="dist.conf.dir" value="dist.conf"/>
     <property name="excludes.file" value="${dist.conf.dir}/distExcludes.txt"/>
diff --git a/tools/cldr-unittest/.settings/org.eclipse.jdt.ui.prefs b/tools/cldr-unittest/.settings/org.eclipse.jdt.ui.prefs
index 07f0b5b..0785818 100644
--- a/tools/cldr-unittest/.settings/org.eclipse.jdt.ui.prefs
+++ b/tools/cldr-unittest/.settings/org.eclipse.jdt.ui.prefs
@@ -28,7 +28,7 @@
 sp_cleanup.make_variable_declarations_final=false
 sp_cleanup.never_use_blocks=false
 sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=false
+sp_cleanup.on_save_use_additional_actions=true
 sp_cleanup.organize_imports=true
 sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
 sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
@@ -36,13 +36,15 @@
 sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
 sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
 sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_semicolons=true
 sp_cleanup.remove_redundant_type_arguments=true
-sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces=true
 sp_cleanup.remove_trailing_whitespaces_all=true
 sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
 sp_cleanup.remove_unnecessary_casts=true
 sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_imports=true
 sp_cleanup.remove_unused_local_variables=false
 sp_cleanup.remove_unused_private_fields=true
 sp_cleanup.remove_unused_private_members=false
diff --git a/tools/cldr-unittest/build.xml b/tools/cldr-unittest/build.xml
index 3775348..a2d9700 100644
--- a/tools/cldr-unittest/build.xml
+++ b/tools/cldr-unittest/build.xml
@@ -17,7 +17,7 @@
 		<property name="doc.params" value="" />
 
 		<!-- Load local definitions from an optional properties file, if 
-			available. build.properties is NOT checked into SVN. -->
+			available. build.properties is NOT checked into version control. -->
 		<property file="build.properties" />
 		<!-- Load environment variables -->
 		<property environment="env" />
@@ -35,7 +35,7 @@
 			2) JVM_EXTRA_OPTIONS=xxx in build.properties
 			3) Environment variable - JVM_EXTRA_OPTIONS=xxx
 			4) Final fallback - "-Xmx6g" below -->
-		<property name="env.JVM_EXTRA_OPTIONS" value="-Xmx6g" />
+		<property name="env.JVM_EXTRA_OPTIONS" value="-Xmx6g -enableassertions" />
 		<property name="JVM_EXTRA_OPTIONS" value="${env.JVM_EXTRA_OPTIONS}" />
 		<property name="jvm_options" value="${JVM_OPTIONS} ${JVM_EXTRA_OPTIONS}" />
 
@@ -43,6 +43,9 @@
 			<pathelement path="${java.class.path}/" />
 			<pathelement path="${build.dir}" />
 			<pathelement path="${CLDR_TOOLS}/classes" />
+                        <!-- tools/java/dist/for-build/ can contain cldr.jar in lieu of the
+                             classes dir. Must be earlier than other libs. -->
+			<fileset erroronmissingdir="false" dir="${CLDR_TOOLS}/dist/for-build" includes="cldr.jar" />
 			<fileset dir="${CLDR_TOOLS}/libs" includes="*.jar" /> <!-- all libs -->
 		</path>
 	</target>
@@ -92,6 +95,7 @@
 		<mkdir dir="${log.dir}" />
 		<javac srcdir="${src.dir}"
 			includes="org/unicode/cldr/**/*.java"
+			excludes="**/TestShim.java"
 			destdir="${build.dir}" classpathref="project.class.path" source="1.8"
 			target="1.8" debug="on" deprecation="off" includeantruntime="false"
 			encoding="UTF-8" />
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/CheckLanguageCodeConverter.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/CheckLanguageCodeConverter.java
index 5a1d7cb..3c0ac0f 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/CheckLanguageCodeConverter.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/CheckLanguageCodeConverter.java
@@ -103,7 +103,7 @@
             }
         }
 
-        LikelySubtags likely = new LikelySubtags(supplementalDataInfo);
+        LikelySubtags likely = new LikelySubtags();
         LanguageTagParser ltp = new LanguageTagParser();
         // get targets of language aliases for macros
         Map<String, String> macroToEncompassed = new HashMap<String, String>();
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/CheckYear.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/CheckYear.java
index e2f99fb..433dffc 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/CheckYear.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/CheckYear.java
@@ -25,7 +25,7 @@
 import org.unicode.cldr.util.With;
 import org.unicode.cldr.util.XPathParts;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
@@ -365,7 +365,7 @@
         PrintWriter out = FileUtilities.openUTF8Writer(CLDRPaths.GEN_DIRECTORY
             + "datecheck/", filename);
         out.println("Name\tid\t"
-            + CollectionUtilities.join(Category.values(), "\t"));
+            + Joiner.on("\t").join(Category.values()));
         for (Entry<String, String> entry : sorted.entrySet()) {
             String localeId = entry.getValue();
             boolean priority = getPriority(localeId);
@@ -378,7 +378,7 @@
             for (Category item : Category.values()) {
                 Set<String> items = localeInfo.category2base.get(item);
                 if (items != null) {
-                    out.print("\t" + CollectionUtilities.join(items, " "));
+                    out.print("\t" + Joiner.on(" ").join(items));
                 } else {
                     out.print("\t");
                 }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/DataDrivenTestHelper.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/DataDrivenTestHelper.java
index 3a3fa25..3ee29e4 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/DataDrivenTestHelper.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/DataDrivenTestHelper.java
@@ -8,10 +8,10 @@
 
 import org.unicode.cldr.draft.FileUtilities;
 
+import com.google.common.base.Joiner;
 import com.google.common.base.Objects;
 import com.google.common.base.Splitter;
 import com.ibm.icu.dev.test.TestFmwk;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.util.ICUUncheckedIOException;
 
 abstract public class DataDrivenTestHelper {
@@ -44,7 +44,7 @@
                 } else {
                     String first = components.iterator().next();
                     String sep = first.startsWith("@") ? "=" : SEPARATOR;
-                    out.append(CollectionUtilities.join(components, sep));
+                    out.append(Joiner.on(sep).join(components));
                     if (!comment.isEmpty()) {
                         out.append("\t# ").append(comment);
                     }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/LanguageInfoTest.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/LanguageInfoTest.java
index 25a8f94..53825e4 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/LanguageInfoTest.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/LanguageInfoTest.java
@@ -42,7 +42,7 @@
 
     public void testGetData() {
         Set<Pair<String, String>> alreadySeen = new HashSet<>();
-        for (R4<String, String, Integer, Boolean> foo : testInfo.getSupplementalDataInfo().getLanguageMatcherData("written")) {
+        for (R4<String, String, Integer, Boolean> foo : testInfo.getSupplementalDataInfo().getLanguageMatcherData("written_new")) {
             //            assertTrue("check bounds", foo.get2() >= 0 && foo.get2() <= 100);
 
             String desired = foo.get0();
@@ -75,7 +75,7 @@
     }
 
     public static String getName(String item) {
-        return item.contains("*") ? "n/a" : testInfo.getEnglish().getName(item);
+        return item.contains("*") ? "n/a" : item.contains("$") ? item : testInfo.getEnglish().getName(item);
     }
 
     public static void main(String[] args) {
@@ -83,6 +83,9 @@
     }
 
     public void testBasics() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         final LocaleMatcher matcher = new LocaleMatcher(LocalePriorityList
             .add(ULocale.FRENCH).add(ULocale.UK).add(ULocale.ENGLISH)
             .build(), data);
@@ -103,6 +106,9 @@
         //				"Problems with language matcher TestChinese.")) {
         //			return;
         //		}
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         LocaleMatcher matcher = new LocaleMatcher(LocalePriorityList.add(
             "zh_CN, zh_TW, iw").build(), data);
         ULocale taiwanChinese = new ULocale("zh_TW");
@@ -127,8 +133,10 @@
     static final ULocale MUL = new ULocale("mul");
 
     public void testFallbacks() {
-
-        for (R4<String, String, Integer, Boolean> foo : testInfo.getSupplementalDataInfo().getLanguageMatcherData("written")) {
+        if (logKnownIssue("ICU-21241", "waiting on LocaleMatcherData update")) {
+            return;
+        }
+        for (R4<String, String, Integer, Boolean> foo : testInfo.getSupplementalDataInfo().getLanguageMatcherData("written_new")) {
             String rawDesired = foo.get0();
             if (rawDesired.contains("*")) {
                 continue;
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/LikelySubtagsTest.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/LikelySubtagsTest.java
index 21ea72c..a7e5a96 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/LikelySubtagsTest.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/LikelySubtagsTest.java
@@ -34,8 +34,7 @@
         .getInstance().getSupplementalDataInfo();
     static final Map<String, String> likely = SUPPLEMENTAL_DATA_INFO
         .getLikelySubtags();
-    static final LikelySubtags LIKELY = new LikelySubtags(
-        SUPPLEMENTAL_DATA_INFO, likely);
+    static final LikelySubtags LIKELY = new LikelySubtags();
 
     public static void main(String[] args) {
         new LikelySubtagsTest().run(args);
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/LocaleMatcherShim.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/LocaleMatcherShim.java
index cc2b904..e637e13 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/LocaleMatcherShim.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/LocaleMatcherShim.java
@@ -12,7 +12,7 @@
     static final SupplementalDataInfo INFO = CONFIG.getSupplementalDataInfo();
     static final LanguageMatcherData LANGUAGE_MATCHER_DATA = new LanguageMatcherData();
     static {
-        for (R4<String, String, Integer, Boolean> foo : INFO.getLanguageMatcherData("written")) {
+        for (R4<String, String, Integer, Boolean> foo : INFO.getLanguageMatcherData("written_new")) {
             LANGUAGE_MATCHER_DATA.addDistance(foo.get0(), foo.get1(), foo.get2(), foo.get3());
         }
         LANGUAGE_MATCHER_DATA.freeze();
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/LocaleMatcherTest.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/LocaleMatcherTest.java
index c3e7956..ecf696f 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/LocaleMatcherTest.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/LocaleMatcherTest.java
@@ -52,6 +52,10 @@
     }
 
     public void testParentLocales() {
+        if (logKnownIssue("ICU-21241", "waiting on LocaleMatcherData update")) {
+            return;
+        }
+
         assertCloser("es_AR", "es_419", "es_ES");
         assertCloser("es_AR", "es_419", "es");
 
@@ -106,6 +110,9 @@
     //    }
 
     public void testChinese() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         LocaleMatcher matcher = newLocaleMatcher("zh_CN, zh_TW, iw");
         ULocale taiwanChinese = new ULocale("zh_TW");
         ULocale chinaChinese = new ULocale("zh_CN");
@@ -119,6 +126,10 @@
     }
 
     public void testenGB() {
+        if (logKnownIssue("ICU-21241", "waiting on LocaleMatcherData update")) {
+            return;
+        }
+
         final LocaleMatcher matcher = newLocaleMatcher("fr, en, en_GB, es_MX, es_419, es");
         assertEquals("en_GB", matcher.getBestMatch("en_NZ").toString());
         assertEquals("es", matcher.getBestMatch("es_ES").toString());
@@ -127,12 +138,18 @@
     }
 
     public void testFallbacks() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         LocalePriorityList lpl = LocalePriorityList.add("en, hi").build();
         final LocaleMatcher matcher = newLocaleMatcher(lpl, null, 0.09);
         assertEquals("hi", matcher.getBestMatch("sa").toString());
     }
 
     public void testOverrideData() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         double threshold = 0.05;
         LanguageMatcherData localeMatcherData = new LanguageMatcherData()
             .addDistance("br", "fr", 10, true)
@@ -154,6 +171,9 @@
     }
 
     public void testBasics() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         final LocaleMatcher matcher = newLocaleMatcher(LocalePriorityList.add(ULocale.FRENCH).add(ULocale.UK)
             .add(ULocale.ENGLISH).build());
         logln(matcher.toString());
@@ -165,6 +185,9 @@
     }
 
     public void testFallback() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         // check that script fallbacks are handled right
         final LocaleMatcher matcher = newLocaleMatcher("zh_CN, zh_TW, iw");
         assertEquals(new ULocale("zh_TW"), matcher.getBestMatch("zh_Hant"));
@@ -175,6 +198,9 @@
     }
 
     public void testSpecials() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         // check that nearby languages are handled
         final LocaleMatcher matcher = newLocaleMatcher("en, fil, ro, nn");
         assertEquals(new ULocale("fil"), matcher.getBestMatch("tl"));
@@ -185,6 +211,10 @@
     }
 
     public void testRegionalSpecials() {
+        if (logKnownIssue("ICU-21241", "waiting on LocaleMatcherData update")) {
+            return;
+        }
+
         // verify that en_AU is closer to en_GB than to en (which is en_US)
         final LocaleMatcher matcher = newLocaleMatcher("en, en_GB, es, es_419");
         assertEquals("es_MX in {en, en_GB, es, es_419}", new ULocale("es_419"), matcher.getBestMatch("es_MX"));
@@ -193,6 +223,10 @@
     }
 
     public void testHK() {
+        if (logKnownIssue("ICU-21241", "waiting on LocaleMatcherData update")) {
+            return;
+        }
+
         // HK and MO are closer to each other for Hant than to TW
         final LocaleMatcher matcher = newLocaleMatcher("zh, zh_TW, zh_MO");
         assertEquals("zh_HK in {zh, zh_TW, zh_MO}", ZH_MO, matcher.getBestMatch("zh_HK"));
@@ -201,6 +235,9 @@
     }
 
     public void TestLocaleMatcherCoverage() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         // Add tests for better code coverage
         LocaleMatcher matcher = newLocaleMatcher(LocalePriorityList.add(null, 0).build(), null);
         logln(matcher.toString());
@@ -227,6 +264,9 @@
     }
 
     public void testEmpty() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         final LocaleMatcher matcher = newLocaleMatcher("");
         assertNull(matcher.getBestMatch(ULocale.FRENCH));
     }
@@ -234,11 +274,17 @@
     static final ULocale ENGLISH_CANADA = new ULocale("en_CA");
 
     public void testMatch_exact() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         assertEquals(1.0,
             LocaleMatcher.match(ENGLISH_CANADA, ENGLISH_CANADA));
     }
 
     public void testMatch_none() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         double match = LocaleMatcher.match(
             new ULocale("ar_MK"),
             ENGLISH_CANADA);
@@ -247,6 +293,9 @@
     }
 
     public void testMatch_matchOnMazimized() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         ULocale undTw = new ULocale("und_TW");
         ULocale zhHant = new ULocale("zh_Hant");
         double matchZh = LocaleMatcher.match(undTw, new ULocale("zh"));
@@ -264,18 +313,27 @@
             matchEnHantTw < matchZh);
     }
 
-    public void testMatchGrandfatheredCode() {
+    public void testMatchLegacyCode() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         final LocaleMatcher matcher = newLocaleMatcher("fr, i_klingon, en_Latn_US");
         assertEquals("en_Latn_US", matcher.getBestMatch("en_GB_oed").toString());
         // assertEquals("tlh", matcher.getBestMatch("i_klingon").toString());
     }
 
     public void testGetBestMatchForList_exactMatch() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         final LocaleMatcher matcher = newLocaleMatcher("fr, en_GB, ja, es_ES, es_MX");
         assertEquals("ja", matcher.getBestMatch("ja, de").toString());
     }
 
     public void testGetBestMatchForList_simpleVariantMatch() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         final LocaleMatcher matcher = newLocaleMatcher("fr, en_GB, ja, es_ES, es_MX");
         // Intentionally avoiding a perfect_match or two candidates for variant
         // matches.
@@ -285,6 +343,9 @@
     }
 
     public void testGetBestMatchForList_matchOnMaximized() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         final LocaleMatcher matcher = newLocaleMatcher("en, ja");
         // final LocaleMatcher matcher =
         // newLocaleMatcher("fr, en, ja, es_ES, es_MX");
@@ -304,6 +365,9 @@
     }
 
     public void testGetBestMatchForList_noMatchOnMaximized() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         // Regression test for http://b/5714572 .
         final LocaleMatcher matcher = newLocaleMatcher("en, de, fr, ja");
         // de maximizes to de_DE. Pick the exact match for the secondary
@@ -312,6 +376,9 @@
     }
 
     public void testBestMatchForTraditionalChinese() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         // Scenario: An application that only supports Simplified Chinese (and
         // some other languages),
         // but does not support Traditional Chinese. zh_Hans_CN could be
@@ -341,6 +408,9 @@
     }
 
     public void testUndefined() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         // When the undefined language doesn't match anything in the list,
         // getBestMatch returns
         // the default, as usual.
@@ -377,6 +447,9 @@
     // }
 
     public void testGetBestMatch_googlePseudoLocales() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         // Google pseudo locales are primarily based on variant subtags.
         // See http://sites/intl_eng/pseudo_locales.
         // (See below for the region code based fall back options.)
@@ -389,6 +462,10 @@
     }
 
     public void testGetBestMatch_regionDistance() {
+        if (logKnownIssue("ICU-21241", "waiting on LocaleMatcherData update")) {
+            return;
+        }
+
         LocaleMatcher matcher = newLocaleMatcher("es_AR, es");
         assertEquals("es_AR", matcher.getBestMatch("es_MX").toString());
 
@@ -420,8 +497,11 @@
      * itself most closely
      */
     public void testExactMatches() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         String lastBase = "";
-        TreeSet<ULocale> sorted = new TreeSet<ULocale>();
+        TreeSet<ULocale> sorted = new TreeSet<>();
         for (ULocale loc : ULocale.getAvailableLocales()) {
             String language = loc.getLanguage();
             if (!lastBase.equals(language)) {
@@ -480,9 +560,9 @@
     // }
 
     public void testGetBestMatchForList_matchOnMaximized2() {
-//        if (logKnownIssue("Cldrbug:8811", "Problems with LocaleMatcher test")) {
-//            return;
-//        }
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         final LocaleMatcher matcher = newLocaleMatcher("fr, en-GB, ja, es-ES, es-MX");
         // ja-JP matches ja on likely subtags, and it's listed first, thus it wins over
         // thus it wins over the second preference en-GB.
@@ -494,20 +574,18 @@
     }
 
     public void testGetBestMatchForList_closeEnoughMatchOnMaximized() {
-//        if (logKnownIssue("Cldrbug:8811", "Problems with LocaleMatcher test")) {
-//            return;
-//        }
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         final LocaleMatcher matcher = newLocaleMatcher("en-GB, en, de, fr, ja");
         assertEquals("de", matcher.getBestMatch("de-CH, fr").toString());
         assertEquals("en", matcher.getBestMatch("en-US, ar, nl, de, ja").toString());
     }
 
     public void testGetBestMatchForPortuguese() {
-
-//        if (logKnownIssue("Cldrbug:8811", "Problems with LocaleMatcher test")) {
-//            return;
-//        }
-
+        if (logKnownIssue("ICU-21241", "waiting on LocaleMatcherData update")) {
+            return;
+        }
         final LocaleMatcher withPTExplicit = newLocaleMatcher("pt_PT, pt_BR, es, es_419");
         final LocaleMatcher withPTImplicit = newLocaleMatcher("pt_PT, pt, es, es_419");
         // Could happen because "pt_BR" is a tier_1 language and "pt_PT" is tier_2.
@@ -533,23 +611,26 @@
     }
 
     public void testVariantWithScriptMatch() {
-//        if (logKnownIssue("Cldrbug:8811", "Problems with LocaleMatcher test")) {
-//            return;
-//        }
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         final LocaleMatcher matcher = newLocaleMatcher("fr, en, sv");
         assertEquals("en", matcher.getBestMatch("en-GB").toString());
         assertEquals("en", matcher.getBestMatch("en-GB, sv").toString());
     }
 
     public void testVariantWithScriptMatch2() {
-//        if (logKnownIssue("Cldrbug:8811", "Problems with LocaleMatcher test")) {
-//            return;
-//        }
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         final LocaleMatcher matcher = newLocaleMatcher("en, sv");
         assertEquals("en", matcher.getBestMatch("en-GB, sv").toString());
     }
 
     public void testPerf() {
+        if (logKnownIssue("CLDR-14166", "Skip until CLDR updated for new ICU4J LocaleMatcher")) {
+            return;
+        }
         final String desired = "sv, en";
 
         final LocaleMatcher matcherShort = newLocaleMatcher(desired);
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/ObjectMatcherFactory.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/ObjectMatcherFactory.java
index 9831330..7396f4a 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/ObjectMatcherFactory.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/ObjectMatcherFactory.java
@@ -3,12 +3,12 @@
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
 import java.util.regex.Pattern;
 
 import org.unicode.cldr.util.PatternCache;
 
 import com.google.common.base.Splitter;
-import com.ibm.icu.dev.util.CollectionUtilities.ObjectMatcher;
 
 /**
  * Factory for ObjectMatchers that are not tightly coupled
@@ -23,7 +23,7 @@
      * @param pattern
      * @return
      */
-    public static ObjectMatcher<String> createRegexMatcher(String pattern) {
+    public static Predicate<String> createRegexMatcher(String pattern) {
         return new RegexMatcher().set(pattern);
     }
 
@@ -34,7 +34,7 @@
      * @param flags
      * @return
      */
-    public static ObjectMatcher<String> createRegexMatcher(String pattern,
+    public static Predicate<String> createRegexMatcher(String pattern,
         int flags) {
         return new RegexMatcher().set(pattern, flags);
     }
@@ -45,18 +45,18 @@
      * @param col
      * @return
      */
-    public static ObjectMatcher<String> createCollectionMatcher(
+    public static Predicate<String> createCollectionMatcher(
         Collection<String> col) {
         return new CollectionMatcher().set(col);
     }
 
-    public static ObjectMatcher<String> createOrMatcher(
-        ObjectMatcher<String> m1, ObjectMatcher<String> m2) {
+    public static Predicate<String> createOrMatcher(
+        Predicate<String> m1, Predicate<String> m2) {
         return new OrMatcher().set(m1, m2);
     }
 
-    public static ObjectMatcher<String> createListMatcher(
-        ObjectMatcher<String> matcher) {
+    public static Predicate<String> createListMatcher(
+        Predicate<String> matcher) {
         return new ListMatcher().set(matcher);
     }
 
@@ -65,7 +65,7 @@
      *
      * @return
      */
-    public static ObjectMatcher<String> createDefaultingMatcher(boolean retVal) {
+    public static Predicate<String> createDefaultingMatcher(boolean retVal) {
         return new DefaultingMatcher(retVal);
     }
 
@@ -78,7 +78,7 @@
      * @param valueIfAbsent
      * @return
      */
-    public static ObjectMatcher<String> createNullHandlingMatcher(
+    public static Predicate<String> createNullHandlingMatcher(
         Map<String, ObjectMatcherFactory.MatcherPattern> m, String key,
         boolean valueIfAbsent) {
         return new NullHandlingMatcher(m, key, valueIfAbsent);
@@ -91,74 +91,78 @@
      * @param toMatch
      * @return
      */
-    public static ObjectMatcher<String> createStringMatcher(String toMatch) {
+    public static Predicate<String> createStringMatcher(String toMatch) {
         return new StringMatcher(toMatch);
     }
 
-    private static class RegexMatcher implements ObjectMatcher<String> {
+    private static class RegexMatcher implements Predicate<String> {
         private java.util.regex.Matcher matcher;
 
-        public ObjectMatcher<String> set(String pattern) {
+        public Predicate<String> set(String pattern) {
             matcher = PatternCache.get(pattern).matcher("");
             return this;
         }
 
-        public ObjectMatcher<String> set(String pattern, int flags) {
+        public Predicate<String> set(String pattern, int flags) {
             matcher = Pattern.compile(pattern, flags).matcher("");
             return this;
         }
 
-        public boolean matches(String value) {
+        @Override
+        public boolean test(String value) {
             matcher.reset(value.toString());
             return matcher.matches();
         }
     }
 
-    private static class CollectionMatcher implements ObjectMatcher<String> {
+    private static class CollectionMatcher implements Predicate<String> {
         private Collection<String> collection;
 
-        public ObjectMatcher<String> set(Collection<String> collection) {
+        public Predicate<String> set(Collection<String> collection) {
             this.collection = collection;
             return this;
         }
 
-        public boolean matches(String value) {
+        @Override
+        public boolean test(String value) {
             return collection.contains(value);
         }
     }
 
-    private static class OrMatcher implements ObjectMatcher<String> {
-        private ObjectMatcher<String> a;
-        private ObjectMatcher<String> b;
+    private static class OrMatcher implements Predicate<String> {
+        private Predicate<String> a;
+        private Predicate<String> b;
 
-        public ObjectMatcher<String> set(ObjectMatcher<String> a,
-            ObjectMatcher<String> b) {
+        public Predicate<String> set(Predicate<String> a,
+            Predicate<String> b) {
             this.a = a;
             this.b = b;
             return this;
         }
 
-        public boolean matches(String value) {
-            return a.matches(value) || b.matches(value);
+        @Override
+        public boolean test(String value) {
+            return a.test(value) || b.test(value);
         }
     }
 
-    private static class ListMatcher implements ObjectMatcher<String> {
-        private ObjectMatcher<String> other;
+    private static class ListMatcher implements Predicate<String> {
+        private Predicate<String> other;
         private static final Splitter WHITESPACE_SPLITTER = Splitter
             .on(PatternCache.get("\\s+"));
 
-        public ObjectMatcher<String> set(ObjectMatcher<String> other) {
+        public Predicate<String> set(Predicate<String> other) {
             this.other = other;
             return this;
         }
 
-        public boolean matches(String value) {
+        @Override
+        public boolean test(String value) {
             List<String> values = WHITESPACE_SPLITTER.splitToList(value.trim());
             if (values.size() == 1 && values.get(0).length() == 0)
                 return true;
             for (String toMatch : values) {
-                if (!other.matches(toMatch)) {
+                if (!other.test(toMatch)) {
                     return false;
                 }
             }
@@ -166,21 +170,22 @@
         }
     }
 
-    private static class DefaultingMatcher implements ObjectMatcher<String> {
+    private static class DefaultingMatcher implements Predicate<String> {
         private final boolean defaultValue;
 
         public DefaultingMatcher(boolean val) {
             defaultValue = val;
         }
 
-        public boolean matches(String o) {
+        @Override
+        public boolean test(String o) {
             return defaultValue;
         }
     }
 
-    private static class NullHandlingMatcher implements ObjectMatcher<String> {
+    private static class NullHandlingMatcher implements Predicate<String> {
 
-        final ObjectMatcher<String> matcher;
+        final Predicate<String> matcher;
 
         public NullHandlingMatcher(
             Map<String, ObjectMatcherFactory.MatcherPattern> col,
@@ -191,23 +196,24 @@
         }
 
         @Override
-        public boolean matches(String o) {
-            return matcher.matches(o);
+        public boolean test(String o) {
+            return matcher.test(o);
         }
 
     }
 
     public static class MatcherPattern {
         public String value;
-        public ObjectMatcher<String> matcher;
+        public Predicate<String> matcher;
         public String pattern;
 
+        @Override
         public String toString() {
             return matcher.getClass().getName() + "\t" + pattern;
         }
     }
 
-    private static class StringMatcher implements ObjectMatcher<String> {
+    private static class StringMatcher implements Predicate<String> {
         private final String value;
 
         public StringMatcher(String value) {
@@ -215,7 +221,7 @@
         }
 
         @Override
-        public boolean matches(String o) {
+        public boolean test(String o) {
             return o.equals(value);
         }
 
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/RegexTransform.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/RegexTransform.java
index 901592c..f61c13b 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/RegexTransform.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/RegexTransform.java
@@ -18,6 +18,7 @@
     private final Processing processing;
     private final List<Row.R2<Matcher, String>> entries = new ArrayList<Row.R2<Matcher, String>>();
 
+    @Override
     public String transform(String source) {
         main: while (true) {
             for (R2<Matcher, String> entry : entries) {
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestAll.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestAll.java
index 476cb43..3f0cace 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestAll.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestAll.java
@@ -134,6 +134,7 @@
             millis = (int) (m - (seconds * 1000));
         }
 
+        @Override
         public String toString() {
             StringBuilder sb = new StringBuilder();
             if (hours > 0) {
@@ -157,6 +158,16 @@
     }
 
     public static void main(String[] args) {
+        int errCount = runTests(args);
+        if (errCount != 0) {
+            System.exit(1);
+        }
+    }
+
+    /**
+     * Run all tests, but do not System.exit at the end.
+     */
+    public static int runTests(String[] args) {
         final boolean doTimeStamps = false;
         TimeStampingPrintWriter tspw = new TimeStampingPrintWriter(System.out);
         if (!doTimeStamps) {
@@ -171,9 +182,7 @@
         sb.append("Tests took ");
         sb.append(dispBean.toString());
         System.out.println(sb.toString());
-        if (errCount != 0) {
-            System.exit(1);
-        }
+        return errCount;
     }
 
     public TestAll() {
@@ -226,6 +235,8 @@
             "org.unicode.cldr.unittest.TestCldrFactory",
             "org.unicode.cldr.unittest.TestUnContainment",
             "org.unicode.cldr.unittest.TestUnits",
+            "org.unicode.cldr.unittest.TestNumbers",
+            "org.unicode.cldr.unittest.TestLocaleCanonicalizer",
             //            "org.unicode.cldr.unittest.TestCollators" See Ticket #8288
             "org.unicode.cldr.api.AllTests",
         },
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestAlt.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestAlt.java
index 3592e31..be84f35 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestAlt.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestAlt.java
@@ -14,10 +14,10 @@
 import org.unicode.cldr.util.PathStarrer;
 import org.unicode.cldr.util.XPathParts;
 
+import com.google.common.base.Joiner;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.TreeMultimap;
 import com.ibm.icu.dev.test.TestFmwk;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R4;
 import com.ibm.icu.util.Output;
@@ -70,7 +70,7 @@
             }
         }
         for (Entry<String, Collection<R4<String, String, String, String>>> entry : altStarred.asMap().entrySet()) {
-            System.out.println(entry.getKey() + "\t" + CollectionUtilities.join(entry.getValue(), "\t"));
+            System.out.println(entry.getKey() + "\t" + Joiner.on("\t").join(entry.getValue()));
         }
     }
     
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestAnnotations.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestAnnotations.java
index b7af13e..8212baa 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestAnnotations.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestAnnotations.java
@@ -16,6 +16,7 @@
 import java.util.TreeSet;
 import java.util.regex.Pattern;
 
+import org.unicode.cldr.test.CoverageLevel2;
 import org.unicode.cldr.util.Annotations;
 import org.unicode.cldr.util.Annotations.AnnotationSet;
 import org.unicode.cldr.util.CLDRConfig;
@@ -24,20 +25,21 @@
 import org.unicode.cldr.util.CldrUtility;
 import org.unicode.cldr.util.Emoji;
 import org.unicode.cldr.util.Factory;
+import org.unicode.cldr.util.Level;
 import org.unicode.cldr.util.PathHeader.PageId;
 import org.unicode.cldr.util.SimpleFactory;
+import org.unicode.cldr.util.SupplementalDataInfo;
 import org.unicode.cldr.util.XListFormatter;
 import org.unicode.cldr.util.XListFormatter.ListTypeLength;
 
 import com.google.common.base.CharMatcher;
+import com.google.common.base.Joiner;
 import com.google.common.base.Splitter;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSortedSet;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.dev.util.UnicodeMap;
-import com.ibm.icu.dev.util.UnicodeMap.EntryRange;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R3;
 import com.ibm.icu.impl.Row.R4;
@@ -48,9 +50,6 @@
 public class TestAnnotations extends TestFmwkPlus {
     private static final boolean DEBUG = false;
 
-    private static final boolean SHOW_LIST = false;
-    private static final boolean SHOW_ENGLISH = false;
-
     public static void main(String[] args) {
         new TestAnnotations().run(args);
     }
@@ -101,19 +100,6 @@
         }
     }
 
-    public void TestList() {
-        if (!SHOW_LIST) {
-            return;
-        }
-        if (isVerbose()) {
-            for (String locale : Annotations.getAvailable()) {
-                for (EntryRange<Annotations> s : Annotations.getData(locale).entryRanges()) {
-                    logln(s.toString());
-                }
-            }
-        }
-    }
-
     final AnnotationSet eng = Annotations.getDataSet("en");
 
     public void TestNames() {
@@ -134,10 +120,10 @@
             { "👩‍👩‍👧", "family: woman, woman, girl", "family | woman | girl" },
             { "👦🏻", "boy: light skin tone", "boy | young | light skin tone" },
             { "👩🏿", "woman: dark skin tone", "adult | woman | dark skin tone" },
-            { "👨‍⚖", "man judge", "justice | man | man judge | scales" },
-            { "👨🏿‍⚖", "man judge: dark skin tone", "justice | man | man judge | scales | dark skin tone" },
-            { "👩‍⚖", "woman judge", "judge | scales | woman" },
-            { "👩🏼‍⚖", "woman judge: medium-light skin tone", "judge | scales | woman | medium-light skin tone" },
+            { "👨‍⚖", "man judge", "justice | man | judge | scales" },
+            { "👨🏿‍⚖", "man judge: dark skin tone", "justice | man | judge | scales | dark skin tone" },
+            { "👩‍⚖", "woman judge", "judge | justice | scales | woman" },
+            { "👩🏼‍⚖", "woman judge: medium-light skin tone", "judge | justice | scales | woman | medium-light skin tone" },
             { "👮", "police officer", "cop | officer | police" },
             { "👮🏿", "police officer: dark skin tone", "cop | officer | police | dark skin tone" },
             { "👮‍♂️", "man police officer", "cop | man | officer | police" },
@@ -171,7 +157,7 @@
                 final Set<String> keywords = eng.getKeywords(emoji);
                 System.out.println("{\"" + emoji
                     + "\",\"" + shortName
-                    + "\",\"" + CollectionUtilities.join(keywords, " | ")
+                    + "\",\"" + Joiner.on(" | ").join(keywords)
                     + "\"},");
             }
         }
@@ -191,7 +177,7 @@
             }
         }
     }
-    
+
     public void TestCategories() {
         if (DEBUG) System.out.println();
 
@@ -206,7 +192,8 @@
             }
             String minorCategory = Emoji.getMinorCategory(emoji);
             long emojiOrder = Emoji.getEmojiToOrder(emoji);
-            R3<String, String, String> row2 = Row.of(emoji, annotations.getShortName(), CollectionUtilities.join(annotations.getKeywords(), " | "));
+            R3<String, String, String> row2 = Row.of(emoji, annotations.getShortName(),
+                Joiner.on(" | ").join(annotations.getKeywords()));
             R4<PageId, Long, String, R3<String, String, String>> row = Row.of(majorCategory, emojiOrder, minorCategory, row2);
             sorted.add(row);
         }
@@ -218,7 +205,7 @@
             String emoji = row2.get0();
             String shortName = row2.get1();
             String keywords = row2.get2();
-            if (DEBUG) System.out.println(majorCategory 
+            if (DEBUG) System.out.println(majorCategory
                 + "\t" + emojiOrder
                 + "\t" + minorCategory
                 + "\t" + emoji
@@ -229,87 +216,63 @@
     }
 
     public void TestUniqueness() {
-//        if (logKnownIssue("cldrbug:10104", "Disable until the uniqueness problems are fixed")) {
-//            return;
-//        }
         Set<String> locales = new TreeSet<>();
-
         locales.add("en");
         locales.addAll(Annotations.getAvailable());
         locales.remove("root");
-//        if (getInclusion() < 6) {
-//            locales.retainAll(CLDRConfig.getInstance().getStandardCodes().getLocaleCoverageLocales(Organization.cldr));
-//        }
-        //locales.remove("sr_Latn");
-        Multimap<String, String> localeToNameToEmoji = TreeMultimap.create();
-        Multimap<String, String> nameToEmoji = TreeMultimap.create();
-        UnicodeMap<Annotations> english = Annotations.getData("en");
-        UnicodeSet englishKeys = getCurrent(english.keySet());
-        Map<String, UnicodeSet> localeToMissing = new TreeMap<>();
+        /*
+         * Note: "problems" here is a work-around for what appears to be a deficiency
+         * in the function sourceLocation, involving the call stack. Seemingly sourceLocation
+         * can't handle the "->" notation used for parallelStream().forEach() if
+         * uniquePerLocale calls errln directly.
+         */
+        Set<String> problems = new HashSet<>();
+        locales.parallelStream().forEach(locale -> uniquePerLocale(locale, problems));
+        if (!problems.isEmpty()) {
+            problems.forEach(s -> errln(s));
+        }
+    }
 
-        for (String locale : locales) {
-            logln("uniqueness: " + locale);
-            AnnotationSet data = Annotations.getDataSet(locale);
-            nameToEmoji.clear();
-            localeToMissing.put(locale, new UnicodeSet(englishKeys).removeAll(data.keySet()).freeze());
-            for (String emoji : Emoji.getAllRgi()) { // Entry<String, Annotations> value : data.entrySet()) {
-                String name = data.getShortName(emoji);
-                if (name == null) {
-                    continue;
-                }
-                if (name.contains(CldrUtility.INHERITANCE_MARKER)) {
-                    throw new IllegalArgumentException(CldrUtility.INHERITANCE_MARKER + " in name of " + emoji + " in " + locale);
-                }
-                nameToEmoji.put(name, emoji);
+    private void uniquePerLocale(String locale, Set<String> problems) {
+        logln("uniqueness: " + locale);
+        Multimap<String, String> nameToEmoji = TreeMultimap.create();
+        AnnotationSet data = Annotations.getDataSet(locale);
+        for (String emoji : Emoji.getAllRgi()) {
+            String name = data.getShortName(emoji);
+            if (name == null) {
+                continue;
             }
-            for (Entry<String, Collection<String>> entry : nameToEmoji.asMap().entrySet()) {
-                String name = entry.getKey();
-                Collection<String> emojis = entry.getValue();
-                if (emojis.size() > 1) {
-                    errln("Duplicate name in " + locale + ": “" + name + "” for "
-                        + CollectionUtilities.join(emojis, " & "));
-                    localeToNameToEmoji.putAll(locale + "\t" + name, emojis);
+            if (name.contains(CldrUtility.INHERITANCE_MARKER)) {
+                throw new IllegalArgumentException(CldrUtility.INHERITANCE_MARKER + " in name of " + emoji + " in " + locale);
+            }
+            nameToEmoji.put(name, emoji);
+        }
+        Multimap<String, String> duplicateNameToEmoji = null;
+        for (Entry<String, Collection<String>> entry : nameToEmoji.asMap().entrySet()) {
+            String name = entry.getKey();
+            Collection<String> emojis = entry.getValue();
+            if (emojis.size() > 1) {
+                synchronized(problems) {
+                    if (problems.add("Duplicate name in " + locale + ": “" + name + "” for "
+                        + Joiner.on(" & ").join(emojis))) {
+                        int debug = 0;
+                    }
                 }
+                if (duplicateNameToEmoji == null) {
+                    duplicateNameToEmoji = TreeMultimap.create();
+                }
+                duplicateNameToEmoji.putAll(name, emojis);
             }
         }
-        if (isVerbose() && !localeToNameToEmoji.isEmpty()) {
+        if (isVerbose() && duplicateNameToEmoji != null && !duplicateNameToEmoji.isEmpty()) {
             System.out.println("\nCollisions");
-            for (Entry<String, String> entry : localeToNameToEmoji.entries()) {
-                String locale = entry.getKey();
+            for (Entry<String, String> entry : duplicateNameToEmoji.entries()) {
                 String emoji = entry.getValue();
                 System.out.println(locale
                     + "\t" + eng.getShortName(emoji)
                     + "\t" + emoji);
             }
         }
-        if (SHOW_LIST && !localeToMissing.isEmpty()) {
-            System.out.println("\nMissing");
-            int count = 2;
-            for (Entry<String, UnicodeSet> entry : localeToMissing.entrySet()) {
-                String locale = entry.getKey();
-                for (String emoji : entry.getValue()) {
-                    System.out.println(locale
-                        + "\t" + emoji
-                        + "\t" + eng.getShortName(emoji)
-                        + "\t" + "=GOOGLETRANSLATE(C" + count + ",\"en\",A" + count + ")"
-                        // =GOOGLETRANSLATE(C2,"en",A2)
-                        );
-                    ++count;
-                }
-            }
-        }
-
-    }
-
-    private UnicodeSet getCurrent(UnicodeSet keySet) {
-        UnicodeSet currentAge = new UnicodeSet("[:age=9.0:]");
-        UnicodeSet result = new UnicodeSet();
-        for (String s : keySet) {
-            if (currentAge.containsAll(s)) {
-                result.add(s);
-            }
-        }
-        return result.freeze();
     }
 
     public void testAnnotationPaths() {
@@ -322,16 +285,21 @@
                 Pattern.compile("//ldml/annotations/annotation.*tts.*").matcher(""),
                 new TreeSet<>());
             Set<String> annotationPathsExpected = Emoji.getNamePaths();
-            checkAMinusBIsC("(" + locale + ".xml - Emoji.getNamePaths)", annotationPaths, annotationPathsExpected, Collections.<String> emptySet());
+            if (!checkAMinusBIsC("(" + locale + ".xml - Emoji.getNamePaths)", annotationPaths, annotationPathsExpected, Collections.<String> emptySet())) {
+                System.out.println("Check Emoji.SPECIALS");
+            }
             checkAMinusBIsC("(Emoji.getNamePaths - " + locale + ".xml)", annotationPathsExpected, annotationPaths, Collections.<String> emptySet());
         }
     }
     public void testEmojiImages() {
+        if (CLDRPaths.ANNOTATIONS_DIRECTORY.contains("cldr-staging/production/"))  {
+            return; // don't bother checking production for this: the images are only in master, not production
+        }
         Factory factoryAnnotations = SimpleFactory.make(CLDRPaths.ANNOTATIONS_DIRECTORY, ".*");
         CLDRFile enAnnotations = factoryAnnotations.make("en", false);
 
-        String emojiImageDir = CLDRPaths.BASE_DIRECTORY + "/tools/cldr-apps/WebContent/images/emoji";
-        for (String emoji : Emoji.getNonConstructed()) { 
+        String emojiImageDir = CLDRPaths.BASE_DIRECTORY + "/tools/cldr-apps/src/main/webapp/images/emoji";
+        for (String emoji : Emoji.getNonConstructed()) {
             String noVs = emoji.replace(Emoji.EMOJI_VARIANT, "");
 
             // example: emoji_1f1e7_1f1ec.png
@@ -386,11 +354,11 @@
                 int errorType = ERR;
                 if (logKnownIssue("cldr13660", "slightly out of order")) {
                     errorType = WARN;
-                };
-                msg("Out of order: " 
-                + lastEmoji + " (" + lastEmojiOrdering + ") " + lastName
-                + " > " 
-                + emoji + " (" + emojiOrdering + ") " + name, errorType, true, true);
+                }
+                msg("Out of order: "
+                    + lastEmoji + " (" + lastEmojiOrdering + ") " + lastName
+                    + " > "
+                    + emoji + " (" + emojiOrdering + ") " + name, errorType, true, true);
             }
 
             String major = Emoji.getMajorCategory(emoji);
@@ -401,7 +369,7 @@
             String oldMajor = minorToMajor.get(minor);
             // never get major1:minor1 and major2:minor1
             if (oldMajor == null) {
-                minorToMajor.put(minor, major); 
+                minorToMajor.put(minor, major);
             } else {
                 assertEquals(minor + " maps to different majors for " + Utility.hex(emoji), oldMajor, major);
             }
@@ -440,6 +408,9 @@
 
 
     public void testSuperfluousAnnotationPaths() {
+        if (CLDRPaths.ANNOTATIONS_DIRECTORY.contains("cldr-staging/production/"))  {
+            return; // don't bother checking production for this: root is empty
+        }
         Factory factoryAnnotations = SimpleFactory.make(CLDRPaths.ANNOTATIONS_DIRECTORY, ".*");
         ImmutableSet<String> rootPaths = ImmutableSortedSet.copyOf(factoryAnnotations.make("root", false).iterator("//ldml/annotations/"));
 
@@ -460,7 +431,9 @@
         for (String locale : factoryAnnotations.getAvailable()) {
             ImmutableSet<String> currentPaths = ImmutableSortedSet.copyOf(factoryAnnotations.make(locale, false).iterator("//ldml/annotations/"));
             Set<String> superfluous = setDifference(currentPaths, rootPaths);
-            assertTrue("root contains " + locale, superfluous.isEmpty());
+            if (!assertTrue("root contains " + locale, superfluous.isEmpty())) {
+                int debug = 0;
+            }
             allSuperfluous.addAll(superfluous);
             for (String s : currentPaths) {
                 if (s.contains("\uFE0F")) {
@@ -485,7 +458,7 @@
         return superfluous;
     }
 
-    private void checkAMinusBIsC(String title, Set<String> a, Set<String> b, Set<String> c) {
+    private boolean checkAMinusBIsC(String title, Set<String> a, Set<String> b, Set<String> c) {
         Set<String> aMb = new TreeSet<>(a);
         aMb.removeAll(b);
         for (Iterator<String> it = aMb.iterator(); it.hasNext();) {
@@ -494,7 +467,7 @@
                 it.remove();
             }
         }
-        assertEquals(title + " (" + aMb.size() + ")", c, aMb);
+        return assertEquals(title + " (" + aMb.size() + ")", c, aMb);
     }
 
     public void testListFormatter() {
@@ -515,4 +488,39 @@
             assertEquals(test[0] + ", " + listTypeLength + ", " + source, expected, actual);
         }
     }
+
+    public void testCoverage() {
+        UnicodeMap<Level> levels = new UnicodeMap<>();
+        UnicodeSet shouldBeComprehensive = new UnicodeSet("[‾‽‸⁂↚↛↮↙↜↝↞↟↠↡↢↣↤↥↦↧↨↫↬↭↯↰↱↲↳↴↵↶↷↸↹↺↻↼↽↾↿⇀⇁⇂⇃⇄⇇⇈⇉⇊⇋⇌⇐⇍⇑⇒⇏⇓⇔⇎⇖⇗⇘⇙⇚⇛⇜⇝⇞⇟⇠⇡⇢⇣⇤⇥⇦⇧⇨⇩⇪⇵∀∂∃∅∉∋∎∏∑≮≯∓∕⁄∗∘∙∝∟∠∣∥∧∫∬∮∴∵∶∷∼∽∾≃≅≌≒≖≣≦≧≪≫≬≳≺≻⊁⊃⊆⊇⊕⊖⊗⊘⊙⊚⊛⊞⊟⊥⊮⊰⊱⋭⊶⊹⊿⋁⋂⋃⋅⋆⋈⋒⋘⋙⋮⋯⋰⋱■□▢▣▤▥▦▧▨▩▬▭▮▰△▴▵▷▸▹►▻▽▾▿◁◂◃◄◅◆◇◈◉◌◍◎◐◑◒◓◔◕◖◗◘◙◜◝◞◟◠◡◢◣◤◥◦◳◷◻◽◿⨧⨯⨼⩣⩽⪍⪚⪺₢₣₤₰₳₶₷₨﷼]").freeze();
+        for (String minorCategory : Emoji.getMinorCategoriesWithExtras()) {
+            for (String s : Emoji.getEmojiInMinorCategoriesWithExtras(minorCategory)) {
+                if (s.contentEquals("‾")) {
+                    int debug = 0;
+                }
+                CoverageLevel2 coverageLevel = CoverageLevel2.getInstance(SupplementalDataInfo.getInstance(), "en");
+                final String pathKeyword = "//ldml/annotations/annotation[@cp=\"" + s + "\"]";
+                final String pathName = pathKeyword + "[@type=\"tts\"]";
+                Level levelKeyword = coverageLevel.getLevel(pathKeyword);
+                Level levelName = coverageLevel.getLevel(pathName);
+                assertEquals(s, levelName, levelKeyword);
+                levels.put(s, levelName);
+            }
+        }
+        for (Level level : Level.values()) {
+            UnicodeSet us = levels.getSet(level);
+            System.out.println(level + "\t" + us.size());
+            switch(level) {
+            case COMPREHENSIVE:
+                UnicodeSet us2 = new UnicodeSet(us).removeAll(us.strings());
+                assertEquals(level.toString(), shouldBeComprehensive.toPattern(false), us2.toPattern(false));
+                break;
+            case MODERN:
+                assertNotEquals(level.toString(), 0, us.size());
+                break;
+            default:
+                assertEquals(level.toString(), 0, us.size());
+                break;
+            }
+        }
+    }
 }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestAttributeValues.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestAttributeValues.java
index ff4830b..5b240a5 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestAttributeValues.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestAttributeValues.java
@@ -23,6 +23,7 @@
 import java.util.stream.Stream;
 
 import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
@@ -45,9 +46,9 @@
 import org.unicode.cldr.util.StandardCodes;
 import org.unicode.cldr.util.StandardCodes.LstrField;
 import org.unicode.cldr.util.StandardCodes.LstrType;
+import org.unicode.cldr.util.StripUTF8BOMInputStream;
 import org.unicode.cldr.util.SupplementalDataInfo.AttributeValidityInfo;
 import org.unicode.cldr.util.Validity;
-import org.unicode.cldr.util.XMLFileReader.FilterBomInputStream;
 import org.unicode.cldr.util.XPathParts;
 import org.xml.sax.Attributes;
 
@@ -59,7 +60,6 @@
 import com.google.common.collect.ImmutableSortedSet;
 import com.google.common.collect.Multimap;
 import com.ibm.icu.dev.test.TestFmwk;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Row.R3;
 import com.ibm.icu.util.ICUException;
 import com.ibm.icu.util.Output;
@@ -84,7 +84,7 @@
         String dtdTypeArg = params.props == null ? null : (String) params.props.get("dtdtype");
 
         // short- circuits for testing. null means do all
-        Set<DtdType> checkTypes = dtdTypeArg == null ? DtdType.STANDARD_SET 
+        Set<DtdType> checkTypes = dtdTypeArg == null ? DtdType.STANDARD_SET
             : Collections.singleton(DtdType.valueOf(dtdTypeArg)) ;
         ImmutableSet<ValueStatus> showStatuses = null ; // ImmutableSet.of(ValueStatus.invalid, ValueStatus.unknown);
 
@@ -94,14 +94,14 @@
                 Set<String> files = new TreeSet<>();
                 for (String stringDir : dtdType.directories) {
                     addXMLFiles(dtdType, mainDirs + stringDir, files);
-                    if (isVerbose()) 
+                    if (isVerbose())
                         synchronized (pathChecker.testLog) {
                         warnln(mainDirs + stringDir);
                     }
                 }
                 Stream<String> stream = SERIAL ? files.stream() : files.parallelStream();
                 stream.forEach(file -> checkFile(pathChecker, file));
-                
+
 //                for (String file : files) {
 //                    checkFile(pathChecker, file);
 //                }
@@ -134,7 +134,7 @@
             return;
         }
         if (!dirFile.isDirectory()) {
-            if (getInclusion() <= 5 
+            if (getInclusion() <= 5
                 && dtdType == DtdType.ldml) {
                 if (path.contains("/annotationsDerived/")) {
                     return;
@@ -171,7 +171,7 @@
         try {
             // should convert these over to new io.
             try (InputStream fis0 = new FileInputStream(fullFile);
-                InputStream fis = new FilterBomInputStream(fis0);
+                InputStream fis = new StripUTF8BOMInputStream(fis0);
                 InputStreamReader inputStreamReader = new InputStreamReader(fis, Charset.forName("UTF-8"));
                 BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                 ) {
@@ -180,7 +180,7 @@
                 while(r.hasNext()) {
                     try {
                         switch(r.next()){
-                        case XMLStreamReader.START_ELEMENT:
+                        case XMLStreamConstants.START_ELEMENT:
                             element = r.getLocalName();
                             ++_elementCount;
                             int attributeSize = r.getAttributeCount();
@@ -215,7 +215,7 @@
     }
 
     static class PathChecker {
-        private final ChainedMap.M5<ValueStatus, String, String, String, Boolean> valueStatusInfo 
+        private final ChainedMap.M5<ValueStatus, String, String, String, Boolean> valueStatusInfo
         = ChainedMap.of(new TreeMap(), new TreeMap(), new TreeMap(), new TreeMap(), Boolean.class);
         private final Set<String> seen = new HashSet<>();
         private final Map<String,Map<String,Map<String,Boolean>>> seenEAV = new ConcurrentHashMap<>();
@@ -302,7 +302,7 @@
             boolean haveProblems = false;
 //          if (testLog.logKnownIssue("cldrbug 10120", "Don't enable error until complete")) {
 //              testLog.warnln("Counts: " + counter.toString());
-//          } else 
+//          } else
             for (ValueStatus valueStatus : ValueStatus.values()) {
                 if (valueStatus == ValueStatus.valid) {
                     continue;
@@ -324,7 +324,7 @@
             out.append("attribute\tCount:\t" + dtdData.dtdType + "\t" + attributeCount + "\n");
 
             out.append("\nStatus\tDtdType\tElement\tAttribute\tMatch expression\t#Failures\tFailing values\n");
-            
+
             for (Entry<ValueStatus, Map<String, Map<String, Map<String, Boolean>>>> entry : valueStatusInfo) {
                 ValueStatus valueStatus = entry.getKey();
                 if (retain != null && !retain.contains(valueStatus)) {
@@ -340,17 +340,17 @@
                         Set<String> validFound = entry3.getValue().keySet();
                         String matchValue = matchValues.get(elementName + "\t" + attributeName);
                         out.append(
-                            valueStatus 
-                            + "\t" + dtdData.dtdType 
-                            + "\t" + elementName 
-                            + "\t" + attributeName 
+                            valueStatus
+                            + "\t" + dtdData.dtdType
+                            + "\t" + elementName
+                            + "\t" + attributeName
                             + "\t" + (matchValue == null ? "" : matchValue)
                             + "\t" + validFound.size()
-                            + "\t" + CollectionUtilities.join(validFound, ", ")
+                            + "\t" + Joiner.on(", ").join(validFound)
                             + "\n"
                             );
                         if (valueStatus == ValueStatus.valid) try {
-                            LstrType lstr = LstrType.valueOf(elementName);
+                            LstrType lstr = LstrType.fromString(elementName);
                             Map<String, Validity.Status> codeToStatus = VALIDITY.getCodeToStatus(lstr);
                             Set<String> missing = new TreeSet<>(codeToStatus.keySet());
                             if (lstr == LstrType.variant) {
@@ -366,19 +366,19 @@
                             }
                             if (!missing.isEmpty()) {
                                 out.append(
-                                    "unused" 
-                                        + "\t" + dtdData.dtdType 
-                                        + "\t" + elementName 
-                                        + "\t" + attributeName 
-                                        + "\t" + "" 
-                                        + "\t" + "" 
-                                        + "\t" + CollectionUtilities.join(missing, ", ")
+                                    "unused"
+                                        + "\t" + dtdData.dtdType
+                                        + "\t" + elementName
+                                        + "\t" + attributeName
+                                        + "\t" + ""
+                                        + "\t" + ""
+                                        + "\t" + Joiner.on(", ").join(missing)
                                         + "\n"
                                     );
                             }
                         } catch (Exception e) {}
                     }
-                } 
+                }
             }
             synchronized (testLog) {
                 testLog.errln(out.toString());
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestBCP47.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestBCP47.java
index cb914e7..994373d 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestBCP47.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestBCP47.java
@@ -46,20 +46,20 @@
         String.class);
     static {
         for (String path : With.in(ENGLISH.iterator("//ldml/localeDisplayNames/keys/key"))) {
-            XPathParts parts = XPathParts.getInstance(path);
+            XPathParts parts = XPathParts.getFrozenInstance(path);
             String value = ENGLISH.getStringValue(path);
             String key = parts.getAttributeValue(-1, "type");
             keyTypeTranslations.put(key, "", value);
         }
         for (String path : With.in(ENGLISH.iterator("//ldml/localeDisplayNames/types/type"))) {
-            XPathParts parts = XPathParts.getInstance(path);
+            XPathParts parts = XPathParts.getFrozenInstance(path);
             String value = ENGLISH.getStringValue(path);
             String key = parts.getAttributeValue(-1, "key");
             String type = parts.getAttributeValue(-1, "type");
             keyTypeTranslations.put(key, type, value);
         }
         for (String path : With.in(ENGLISH.iterator("//ldml/localeDisplayNames/transformNames/transformName"))) {
-            XPathParts parts = XPathParts.getInstance(path);
+            XPathParts parts = XPathParts.getFrozenInstance(path);
             String value = ENGLISH.getStringValue(path);
             String type = parts.getAttributeValue(-1, "type");
             keyTypeTranslations.put("d0", type, value);
@@ -129,7 +129,7 @@
         }
     }
 
-    static final ImmutableSet<String> SKIP_TYPES = ImmutableSet.of("REORDER_CODE", "RG_KEY_VALUE", "SUBDIVISION_CODE", "CODEPOINTS", "PRIVATE_USE");
+    static final ImmutableSet<String> SKIP_TYPES = ImmutableSet.of("REORDER_CODE", "RG_KEY_VALUE", "SCRIPT_CODE", "SUBDIVISION_CODE", "CODEPOINTS", "PRIVATE_USE");
 
     private void checkKeyType(
         String bcp47Key,
@@ -181,7 +181,7 @@
         return "key: " + key + "\taliases: " + keyAliases + (type.isEmpty() ? "" : "\ttype: " + type + "\taliases: " + typeAliases) + "\tbcp: "
             + bcp47Description + ",\teng: " + eng;
     }
-    
+
     static final Set<String> BOGUS_TZIDS = ImmutableSet.of(
         "ACT", "AET", "AGT", "ART", "AST", "BET", "BST", "CAT", "CET", "CNT", "CST", "CTT", "EAT", "ECT", "EET", "Factory", "IET", "IST", "JST", "MET", "MIT",
         "NET", "NST", "PLT", "PNT", "PRT", "PST", "SST", "SystemV/AST4", "SystemV/AST4ADT", "SystemV/CST6", "SystemV/CST6CDT", "SystemV/EST5",
@@ -212,7 +212,7 @@
                 }
             }
         }
-        
+
         warnln("CLDR deprecated bcp47 ids: " + deprecatedBcp47s);
         warnln("CLDR deprecated tzids: " + deprecatedAliases);
 
@@ -250,7 +250,7 @@
         } else if (!bcp47IdsNotUsed.isEmpty()) {
             warnln("CLDR has unused (but deprecated) bcp47 ids: " + bcp47IdsNotUsed);
         }
-        
+
         diff = new LinkedHashSet<>(missingAliases);
         diff.removeAll(deprecatedAliases);
         if (!diff.isEmpty()) {
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestBagFormatter.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestBagFormatter.java
index 3439ef3..25a58f9 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestBagFormatter.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestBagFormatter.java
@@ -71,6 +71,7 @@
     }
 
     static class NumberComparator implements Comparator {
+        @Override
         public int compare(Object o1, Object o2) {
             if (o1 == o2) return 0;
             if (o1 == null) return 1;
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestBasic.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestBasic.java
index df09443..b802e57 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestBasic.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestBasic.java
@@ -50,6 +50,7 @@
 import org.unicode.cldr.util.LocaleIDParser;
 import org.unicode.cldr.util.Pair;
 import org.unicode.cldr.util.PathHeader;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.SupplementalDataInfo;
 import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo;
 import org.unicode.cldr.util.SupplementalDataInfo.PluralType;
@@ -61,12 +62,12 @@
 import org.xml.sax.SAXParseException;
 import org.xml.sax.XMLReader;
 
+import com.google.common.base.Joiner;
 import com.google.common.base.Objects;
 import com.google.common.collect.ImmutableMultimap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
@@ -169,13 +170,13 @@
         List<TimingInfo> data) throws IOException {
         boolean deepCheck = getInclusion() >= 10;
         File[] listFiles = directoryFile.listFiles();
-        String canonicalPath = directoryFile.getCanonicalPath();
+        String normalizedPath = PathUtilities.getNormalizedPathString(directoryFile);
         String indent = Utility.repeat("\t", level);
         if (listFiles == null) {
             throw new IllegalArgumentException(indent + "Empty directory: "
-                + canonicalPath);
+                + normalizedPath);
         }
-        logln("Checking files for DTD errors in: " + indent + canonicalPath);
+        logln("Checking files for DTD errors in: " + indent + normalizedPath);
         for (File fileName : listFiles) {
             String name = fileName.getName();
             if (CLDRConfig.isJunkFile(name)) {
@@ -318,16 +319,19 @@
     }
 
     class MyErrorHandler implements ErrorHandler {
+        @Override
         public void error(SAXParseException exception) throws SAXException {
             errln("error: " + XMLFileReader.showSAX(exception));
             throw exception;
         }
 
+        @Override
         public void fatalError(SAXParseException exception) throws SAXException {
             errln("fatalError: " + XMLFileReader.showSAX(exception));
             throw exception;
         }
 
+        @Override
         public void warning(SAXParseException exception) throws SAXException {
             errln("warning: " + XMLFileReader.showSAX(exception));
             throw exception;
@@ -371,7 +375,7 @@
         Set<String> currencies = testInfo.getStandardCodes().getAvailableCodes(
             "currency");
 
-        final UnicodeSet CHARACTERS_THAT_SHOULD_HAVE_FALLBACKS = (UnicodeSet) new UnicodeSet(
+        final UnicodeSet CHARACTERS_THAT_SHOULD_HAVE_FALLBACKS = new UnicodeSet(
             "[[:sc:]-[\\u0000-\\u00FF]]").freeze();
 
         CharacterFallbacks fallbacks = CharacterFallbacks.make();
@@ -381,7 +385,7 @@
             if (file.isNonInheriting())
                 continue;
 
-            final UnicodeSet OK_CURRENCY_FALLBACK = (UnicodeSet) new UnicodeSet(
+            final UnicodeSet OK_CURRENCY_FALLBACK = new UnicodeSet(
                 "[\\u0000-\\u00FF]").addAll(safeExemplars(file, ""))
                     .addAll(safeExemplars(file, "auxiliary"))
                     .freeze();
@@ -720,6 +724,14 @@
         Set<String> defaultContents = Inheritance.defaultContents;
         Multimap<String, String> parentToChildren = Inheritance.parentToChildren;
 
+        // Put a list of locales that should be default content here.
+        final String expectDC[] = {
+            "os_GE" // see CLDR-14118
+        };
+        for(final String locale : expectDC) {
+            assertTrue("expect "+locale+" to be a default content locale", defaultContents.contains(locale));
+        }
+
         if (DEBUG) {
             Inheritance.showChain("", "", "root");
         }
@@ -895,9 +907,9 @@
                     int debug = 0;
                 }
                 if (leaves.size() == 1) {
-                    System.out.println(prefix + CollectionUtilities.join(presentation, " "));
+                    System.out.println(prefix + Joiner.on(" ").join(presentation));
                 } else {
-                    System.out.println(prefix + "{" + CollectionUtilities.join(presentation, " ") + "}");
+                    System.out.println(prefix + "{" + Joiner.on(" ").join(presentation) + "}");
                 }
             }
             for (String parent : parents) {
@@ -1447,7 +1459,7 @@
         MyHandler myHandler = new MyHandler(overrideDtdType);
         XMLFileReader xfr = new XMLFileReader().setHandler(myHandler);
         try {
-            myHandler.fileName = fileToRead.getCanonicalPath();
+            myHandler.fileName = PathUtilities.getNormalizedPathString(fileToRead);
             xfr.read(myHandler.fileName, -1, true);
             logln(myHandler.fileName);
         } catch (Exception e) {
@@ -1475,6 +1487,7 @@
             dtdType = overrideDtdType;
         }
 
+        @Override
         public void handlePathValue(String path, @SuppressWarnings("unused") String value) {
             if (dtdType == null) {
                 try {
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCLDRFile.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCLDRFile.java
index 06ffc4d..3e6fdd8 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCLDRFile.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCLDRFile.java
@@ -1,6 +1,7 @@
 package org.unicode.cldr.unittest;
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
@@ -26,25 +27,37 @@
 import org.unicode.cldr.util.CLDRLocale;
 import org.unicode.cldr.util.CLDRPaths;
 import org.unicode.cldr.util.CldrUtility;
+import org.unicode.cldr.util.Counter;
 import org.unicode.cldr.util.DtdType;
 import org.unicode.cldr.util.Factory;
+import org.unicode.cldr.util.GrammarInfo;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalFeature;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalTarget;
 import org.unicode.cldr.util.LanguageTagParser;
 import org.unicode.cldr.util.Level;
 import org.unicode.cldr.util.LocaleIDParser;
 import org.unicode.cldr.util.PathHeader;
+import org.unicode.cldr.util.PathHeader.PageId;
+import org.unicode.cldr.util.PathHeader.SectionId;
 import org.unicode.cldr.util.PatternCache;
+import org.unicode.cldr.util.PatternPlaceholders;
+import org.unicode.cldr.util.PatternPlaceholders.PlaceholderStatus;
 import org.unicode.cldr.util.SimpleFactory;
 import org.unicode.cldr.util.SupplementalDataInfo;
 import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo;
 import org.unicode.cldr.util.SupplementalDataInfo.PluralType;
 
+import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Multimap;
+import com.google.common.collect.Sets;
 import com.google.common.collect.TreeMultimap;
 import com.ibm.icu.dev.test.TestFmwk;
 import com.ibm.icu.impl.Relation;
+import com.ibm.icu.impl.Row.R2;
 import com.ibm.icu.text.NumberFormat;
 import com.ibm.icu.text.UTF16;
+import com.ibm.icu.text.UnicodeSet;
 import com.ibm.icu.util.Output;
 
 public class TestCLDRFile extends TestFmwk {
@@ -81,6 +94,8 @@
     static final Pattern COUNT_MATCHER = Pattern
         .compile("\\[@count=\"([^\"]+)\"]");
 
+    static final UnicodeSet DIGITS = new UnicodeSet('0', '9').freeze();
+
     private void checkPlurals(String locale) {
         CLDRFile cldrFile = testInfo.getCLDRFile(locale, true);
         Matcher m = COUNT_MATCHER.matcher("");
@@ -96,6 +111,9 @@
             if (!m.reset(path).find()) {
                 throw new IllegalArgumentException();
             }
+            if (DIGITS.containsAll(m.group(1))) {
+                continue;
+            }
             String skeleton = path.substring(0, m.start(1)) + ".*"
                 + path.substring(m.end(1));
             skeletonToKeywords.put(skeleton, m.group(1));
@@ -113,7 +131,7 @@
     static class LocaleInfo {
         final String locale;
         final CLDRFile cldrFile;
-        final Set<String> paths = new HashSet<String>();
+        final Set<String> paths = new HashSet<>();
 
         LocaleInfo(String locale) {
             this.locale = locale;
@@ -132,8 +150,100 @@
         }
     }
 
+    static final boolean DEBUG = false;
+    static final boolean DEBUG_testExtraPaths = true;
+
     public void testExtraPaths() {
-        Map<String, LocaleInfo> localeInfos = new LinkedHashMap<String, LocaleInfo>();
+        // for debugging
+        final CLDRFile german = CLDRConfig.getInstance().getCldrFactory().make("de", true);
+        System.out.println();
+        Set<String> sorted = new TreeSet<>(german.getExtraPaths());
+        PathHeader.Factory phf = PathHeader.getFactory();
+        PatternPlaceholders pph = PatternPlaceholders.getInstance();
+
+        for (String path : sorted) {
+            if (DEBUG_testExtraPaths && path.equals("//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"acceleration-g-force\"]/unitPattern")) {
+                List<String> failures = new ArrayList<>();
+                phf.fromPath(path, failures );
+            }
+            PathHeader ph = phf.fromPath(path);
+            if (ph.getPageId() != PageId.Deprecated) {
+                assertNotEquals("bad placeholder: " + path + " ; " + ph, SectionId.Special, ph.getSectionId());
+            }
+            PlaceholderStatus phStatus = pph.getStatus(path);
+
+            PlaceholderStatus expected = path.contains("/metazone") || path.contains("/timeZoneNames") || path.contains("/gender")
+                || path.startsWith("//ldml/numbers/currencies/currency") ? PlaceholderStatus.DISALLOWED
+                    : path.contains("/compoundUnitPattern1") ? PlaceholderStatus.REQUIRED
+                        : PlaceholderStatus.LOCALE_DEPENDENT;
+            if (!assertEquals(path, expected, phStatus)) {
+                int debug = 0;
+            }
+
+            if (DEBUG) {
+                if (GrammaticalFeature.pathHasFeature(path) != null || path.endsWith("/gender")) {
+                    System.out.println(path + "\t" + german.getStringValue(path));
+                    String newPath = path.replace("[@case=\"accusative\"]", "");
+                    if (!newPath.contentEquals(path) && !sorted.contains(newPath)) {
+                        System.out.println(newPath + "\t" + german.getStringValue(newPath));
+                    }
+                }
+            }
+        }
+
+        Set<String> badCoverage = new TreeSet<>();
+        Counter<String> extraPaths = new Counter<>();
+        final Factory fullCldrFactory = CLDRConfig.getInstance().getFullCldrFactory();
+
+        for (String locale : sdi.hasGrammarInfo()) {
+            if (sdi.getGrammarInfo(locale).hasInfo(GrammaticalTarget.nominal)) {
+                if (!fullCldrFactory.getAvailable().contains(locale)) {
+                    if (CLDRConfig.SKIP_SEED) {
+                        continue; // don't check if skipping seed, for production
+                    }
+                }
+                final CLDRFile cldrFile = fullCldrFactory.make(locale, true);
+                Set<String> sorted2 = new TreeSet<>(cldrFile.getExtraPaths());
+                for (String path : sorted2) {
+                    if (path.contains("/gender") || path.contains("@gender") || path.contains("@case")) {
+                        Level level = sdi.getCoverageLevel(path, locale);
+                        if (level.compareTo(Level.MODERN) > 0) {
+                            badCoverage.add(path);
+                        }
+                        extraPaths.add(locale, 1);
+                    }
+                }
+
+            }
+        }
+        System.out.println("Units with grammar info: " + GrammarInfo.SPECIAL_TRANSLATION_UNITS.size());
+        System.out.println("Inflection Paths");
+        for (R2<Long, String> locale : extraPaths.getEntrySetSortedByCount(false, null)) {
+            System.out.println(locale.get0() + "\t" + locale.get1());
+        }
+        if (!badCoverage.isEmpty()) {
+            errln("Paths not at modern: " + Joiner.on("\n\t").join(badCoverage));
+        }
+
+//        Set<String> validUnits = Validity.getInstance().getStatusToCodes(LstrType.unit).get(Validity.Status.regular);
+//        validUnits.forEach(System.out::println);
+//
+//        grammarInfo = testInfo.getSupplementalDataInfo().getGrammarInfo();
+//        for (Entry<String, GrammarInfo> entry : grammarInfo.entrySet()) {
+//            System.out.println(entry);
+//        }
+
+//        CLDRFile toCheck = testInfo.getCldrFactory().make("de", true); // testInfo.getFullCldrFactory().make("en", false);
+//        Set<String> sorted = new TreeSet<>(CLDRFile.getComparator(DtdType.ldml));
+//        sorted.addAll(toCheck.getExtraPaths());
+//        for (String path : sorted) {
+//            XPathParts parts = XPathParts.getFrozenInstance(path);
+//            assertEquals("parts: ", parts.toString(), path);
+//            System.out.println(path);
+//        }
+//        int debug = 0;
+
+        Map<String, LocaleInfo> localeInfos = new LinkedHashMap<>();
         Relation<String, String> missingPathsToLocales = Relation.of(
             new TreeMap<String, Set<String>>(CLDRFile
                 .getComparator(DtdType.ldml)),
@@ -237,9 +347,11 @@
             String originalLocale = englishInfo.cldrFile.getSourceLocaleID(
                 path, status);
             String engName = "en"
-                + (englishInfo.cldrFile.isHere(path) ? "" : " (source_locale:"
+                + (englishInfo.cldrFile.isHere(path) ? ""
+                    : " (source_locale:"
                     + originalLocale
-                    + (path.equals(status.pathWhereFound) ? "" : ", source_path: "
+                    + (path.equals(status.pathWhereFound) ? ""
+                        : ", source_path: "
                         + status)
                     + ")");
             if (path.startsWith("//ldml/localeDisplayNames/")
@@ -367,7 +479,7 @@
     }
 
     private Set<String> getNonAliased(Set<String> paths, CLDRFile file) {
-        Set<String> result = new LinkedHashSet<String>();
+        Set<String> result = new LinkedHashSet<>();
         for (String path : paths) {
             if (file.isHere(path)) {
                 result.add(path);
@@ -426,10 +538,10 @@
 
             CLDRFile cldrFileUnresolved = testInfo.getCLDRFile(locale, false);
             Status status = new Status();
-            Output<String> localeWhereFound = new Output<String>();
-            Output<String> pathWhereFound = new Output<String>();
+            Output<String> localeWhereFound = new Output<>();
+            Output<String> pathWhereFound = new Output<>();
 
-            Map<String, String> diff = new TreeMap<String, String>(
+            Map<String, String> diff = new TreeMap<>(
                 CLDRFile.getComparator(DtdType.ldml));
 
             Size countSuperfluous = new Size();
@@ -437,8 +549,7 @@
             Size countOrdinary = new Size();
 
             for (String path : cldrFile.fullIterable()) {
-                String baileyValue = cldrFile.getBaileyValue(path,
-                    pathWhereFound, localeWhereFound);
+                String baileyValue = cldrFile.getBaileyValue(path, pathWhereFound, localeWhereFound);
                 String topValue = cldrFileUnresolved.getStringValue(path);
                 String resolvedValue = cldrFile.getStringValue(path);
 
@@ -450,22 +561,34 @@
                     if (topValue != null && !CldrUtility.INHERITANCE_MARKER.equals(topValue)) {
                         assertEquals(
                             "top≠resolved\t" + locale + "\t" + phf.fromPath(path),
-                                topValue,
-                                resolvedValue);
+                            topValue,
+                            resolvedValue);
                     } else {
-                        String locale2 = cldrFile.getSourceLocaleID(path,
-                            status);
-                        assertEquals(
+                        String locale2 = cldrFile.getSourceLocaleID(path, status);
+                        if (!assertEquals(
                             "bailey value≠\t" + locale + "\t" + phf.fromPath(path),
-                                resolvedValue,
-                                baileyValue);
-                        assertEquals(
+                            resolvedValue,
+                            baileyValue)) {
+                            int debug = 0;
+                            baileyValue = cldrFile.getBaileyValue(path, pathWhereFound, localeWhereFound);
+                            topValue = cldrFileUnresolved.getStringValue(path);
+                            resolvedValue = cldrFile.getStringValue(path);
+                        }
+                        if (!assertEquals(
                             "bailey locale≠\t" + locale + "\t" + phf.fromPath(path),
-                                locale2,
-                                localeWhereFound.value);
-                        assertEquals(
+                            locale2,
+                            localeWhereFound.value)) {
+                            baileyValue = cldrFile.getBaileyValue(path, pathWhereFound, localeWhereFound);
+                            topValue = cldrFileUnresolved.getStringValue(path);
+                            resolvedValue = cldrFile.getStringValue(path);
+                        }
+                        if (!assertEquals(
                             "bailey path≠\t" + locale + "\t" + phf.fromPath(path),
-                                status.pathWhereFound, pathWhereFound.value);
+                            status.pathWhereFound, pathWhereFound.value)) {
+                            baileyValue = cldrFile.getBaileyValue(path, pathWhereFound, localeWhereFound);
+                            topValue = cldrFileUnresolved.getStringValue(path);
+                            resolvedValue = cldrFile.getStringValue(path);
+                        }
                     }
                 }
 
@@ -530,6 +653,9 @@
                 "COLLATION_DIRECTORY is not a directory: "
                     + CLDRPaths.COLLATION_DIRECTORY);
         }
+        if (CLDRConfig.SKIP_SEED) {
+            return;
+        }
         File seedDir = new File(CLDRPaths.SEED_DIRECTORY);
         if (!seedDir.isDirectory()) {
             throw new IllegalArgumentException(
@@ -542,6 +668,7 @@
                 "SEED_COLLATION_DIRECTORY is not a directory: "
                     + CLDRPaths.SEED_COLLATION_DIRECTORY);
         }
+
         File[] md = { mainDir, mainCollationDir };
         File[] sd = { seedDir, seedCollationDir };
         Factory mf = SimpleFactory.make(md, ".*", DraftStatus.unconfirmed);
@@ -560,7 +687,7 @@
         TreeSet<String> mainList = new TreeSet<>(Arrays.asList(new File(CLDRPaths.MAIN_DIRECTORY).list()));
 
         for (String dir : DtdType.ldml.directories) {
-            Set<String> dirFiles = new TreeSet<String>(Arrays.asList(new File(CLDRPaths.BASE_DIRECTORY + "common/" + dir).list()));
+            Set<String> dirFiles = new TreeSet<>(Arrays.asList(new File(CLDRPaths.BASE_DIRECTORY + "common/" + dir).list()));
             if (!mainList.containsAll(dirFiles)) {
                 dirFiles.removeAll(mainList);
                 errln(dir + " has extra files" + dirFiles);
@@ -617,7 +744,7 @@
                 }
             }
 
-            // establish that the parent of locale is somewhere in the same 
+            // establish that the parent of locale is somewhere in the same
 //                assertEquals(dir + " locale file has minimal id: ", min, loc);
 //            if (!dir.endsWith("exemplars")) {
 //                continue;
@@ -694,7 +821,7 @@
             }
             String value = swissHighGerman.getStringValue(xpath);
             if (value.indexOf('ß') >= 0) {
-                System.err.println("«" + value + "» contains ß at " + xpath);
+                warnln("«" + value + "» contains ß at " + xpath);
             }
         }
     }
@@ -702,8 +829,7 @@
     public void TestExtraPaths() {
         List<String> testCases = Arrays.asList(
             "//ldml/localeDisplayNames/languages/language[@type=\"ccp\"]",
-            "//ldml/dates/calendars/calendar[@type=\"generic\"]/dateTimeFormats/intervalFormats/intervalFormatItem[@id=\"Gy\"]/greatestDifference[@id=\"G\"]"
-            );
+            "//ldml/dates/calendars/calendar[@type=\"generic\"]/dateTimeFormats/intervalFormats/intervalFormatItem[@id=\"Gy\"]/greatestDifference[@id=\"G\"]");
         CLDRFile af = testInfo.getCldrFactory().make("af", true);
         Set<String> missing = new HashSet<>(testCases);
         CoverageLevel2 coverageLevel2 = CoverageLevel2.getInstance("af");
@@ -719,16 +845,22 @@
                 System.out.println(""
                     + "\nPathHeader:\t" + ph
                     + "\nValue:\t" + value
-                    + "\nLevel:\t" + level 
-                    + "\nReq. Locale:\t" + "af" 
+                    + "\nLevel:\t" + level
+                    + "\nReq. Locale:\t" + "af"
                     + "\nSource Locale:\t" + source
-                    + "\nReq. XPath:\t" + xpath 
-                    + "\nSource Path:\t" + status
-                    );
+                    + "\nReq. XPath:\t" + xpath
+                    + "\nSource Path:\t" + status);
                 missing.remove(xpath);
             }
         }
         assertTrue("Should be empty", missing.isEmpty());
     }
 
+    public void TestExtraPaths13954() {
+        CLDRFile es = cldrFactory.make("es", true);
+        CLDRFile es_US = cldrFactory.make("es_US", true);
+        if (!es_US.getRawExtraPaths().containsAll(es.getRawExtraPaths())) {
+            errln("Failure: " + Joiner.on('\n').join(Sets.difference(es.getRawExtraPaths(), es_US.getRawExtraPaths())));
+        }
+    }
 }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCLDRLocaleCoverage.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCLDRLocaleCoverage.java
index 050d988..f3b925e 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCLDRLocaleCoverage.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCLDRLocaleCoverage.java
@@ -28,13 +28,13 @@
 import org.unicode.cldr.util.Validity;
 import org.unicode.cldr.util.Validity.Status;
 
+import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Multimaps;
 import com.google.common.collect.Sets;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.text.UnicodeSet;
 
 public class TestCLDRLocaleCoverage extends TestFmwkPlus {
@@ -171,7 +171,7 @@
     }
 
     private boolean assertContains(String title, Collection<String> set, Collection<String> subset) {
-        boolean result = assertTrue(title, set.containsAll(subset));
+        boolean result = set.containsAll(subset);
         if (!result) {
             Set<String> temp = new LinkedHashSet<>(subset);
             temp.removeAll(set);
@@ -179,8 +179,9 @@
             for (String locale : temp) {
                 temp2.add(locale + "\t" + ENGLISH.getName(locale));
             }
-            warnln("Missing:\t" + temp.size() + "\n\t" + CollectionUtilities.join(temp2, "\n\t"));
+            warnln("Missing:\t" + temp.size() + "\n\t" + Joiner.on("\n\t").join(temp2));
         }
+        assertTrue(title, result);
         return result;
     }
     
@@ -231,7 +232,7 @@
             diff2.removeAll(skip);
             if (!diff2.isEmpty()) {
                 String diffString = diff2.toString();
-                String levelString = CollectionUtilities.join(level, "+");
+                String levelString = Joiner.on("+").join(level);
                 for (String localeId : diff2) {
                     diffString += "\n\t" + localeId + "\t" + CLDRConfig.getInstance().getEnglish().getName(localeId);
                 }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCLDRUtils.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCLDRUtils.java
index d7e1728..b285fa7 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCLDRUtils.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCLDRUtils.java
@@ -29,6 +29,7 @@
 public class TestCLDRUtils extends TestFmwk {
 
     static Transform<String, String> SHORT_ALT_PICKER = new Transform<String, String>() {
+        @Override
         public String transform(@SuppressWarnings("unused") String source) {
             return "short";
         }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCheckCLDR.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCheckCLDR.java
index f3cbdec..a31014b 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCheckCLDR.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCheckCLDR.java
@@ -37,6 +37,7 @@
 import org.unicode.cldr.util.CLDRInfo.PathValueInfo;
 import org.unicode.cldr.util.CLDRInfo.UserInfo;
 import org.unicode.cldr.util.CLDRLocale;
+import org.unicode.cldr.util.CldrUtility;
 import org.unicode.cldr.util.Counter;
 import org.unicode.cldr.util.DayPeriodInfo;
 import org.unicode.cldr.util.DayPeriodInfo.DayPeriod;
@@ -59,6 +60,7 @@
 import org.unicode.cldr.util.Validity;
 import org.unicode.cldr.util.Validity.Status;
 import org.unicode.cldr.util.VoteResolver.VoterInfo;
+import org.unicode.cldr.util.XMLSource;
 
 import com.google.common.collect.ImmutableSet;
 import com.ibm.icu.dev.test.TestFmwk;
@@ -68,7 +70,7 @@
 
 public class TestCheckCLDR extends TestFmwk {
     static CLDRConfig testInfo = CLDRConfig.getInstance();
-    private final Set<String> eightPointLocales = new TreeSet<String>(
+    private final Set<String> eightPointLocales = new TreeSet<>(
         Arrays.asList("ar ca cs da de el es fi fr he hi hr hu id it ja ko lt lv nb nl pl pt pt_PT ro ru sk sl sr sv th tr uk vi zh zh_Hant".split(" ")));
 
     public static void main(String[] args) {
@@ -108,8 +110,8 @@
     public static void TestCheckConsistentCasing() {
         CheckConsistentCasing c = new CheckConsistentCasing(
             testInfo.getCldrFactory());
-        Map<String, String> options = new LinkedHashMap<String, String>();
-        List<CheckStatus> possibleErrors = new ArrayList<CheckStatus>();
+        Map<String, String> options = new LinkedHashMap<>();
+        List<CheckStatus> possibleErrors = new ArrayList<>();
         final CLDRFile english = testInfo.getEnglish();
         c.setCldrFileToCheck(english, options, possibleErrors);
         for (String path : english) {
@@ -126,7 +128,7 @@
         CLDRLocale locale = CLDRLocale.getInstance(localeString);
         CheckCLDR.Options checkCldrOptions = new Options(locale, Phase.SUBMISSION, "default", "basic");
         TestCache testCache = new TestCache();
-        testCache.setFactory(testInfo.getCldrFactory(), ".*"); 
+        testCache.setFactory(testInfo.getCldrFactory(), ".*");
         TestResultBundle bundle = testCache.getBundle(checkCldrOptions);
         final CLDRFile cldrFile = testInfo.getCLDRFile(localeString, true);
         /*
@@ -140,7 +142,7 @@
         int maxPathCount = (getInclusion() < 5) ? 1000 : 100000;
         double[] deltaTime = {0, 0};
         for (int i = 0; i < 2; i++) {
-            List<CheckStatus> possibleErrors = new ArrayList<CheckStatus>();
+            List<CheckStatus> possibleErrors = new ArrayList<>();
             int pathCount = 0;
             double startTime = System.currentTimeMillis();
             for (String path : cldrFile) {
@@ -155,7 +157,7 @@
             /*
              * Expect possibleErrors to have size zero.
              * A future enhancement of this test could modify some values to force errors,
-             * and confirm that the errors are returned identically the first and second times. 
+             * and confirm that the errors are returned identically the first and second times.
              */
             assertEquals("possibleErrors, loop index " + i, possibleErrors.size(), 0);
         }
@@ -178,7 +180,88 @@
 
     private static final boolean DEBUG = true;
 
+    static final Factory cldrFactory = CLDRConfig.getInstance().getCldrFactory();
+
+    public void testPlaceholderSamples() {
+        CLDRFile root = cldrFactory.make("root", true);
+        String[][] tests = {
+            {"he", "//ldml/numbers/minimalPairs/pluralMinimalPairs[@count=\"one\"]", "שנה"},
+            // test edge cases
+            // locale, path, value, 0..n Subtype errors
+            {"en", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern", "{0}huh?{1}"},
+            {"en", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern", "huh?", "missingPlaceholders"},
+            {"en", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern", "huh?{0}", "missingPlaceholders"},
+            {"en", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern", "huh?{1}", "missingPlaceholders", "gapsInPlaceholderNumbers"},
+            {"en", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern", "{0}huh?{1}{2}", "extraPlaceholders"},
+            {"en", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern", "{0}huh?{1}{0}", "duplicatePlaceholders"},
+
+            {"fr", "//ldml/numbers/minimalPairs/ordinalMinimalPairs[@ordinal=\"other\"]", "Prenez la e à droite.", "missingPlaceholders"},
+            {"fr", "//ldml/numbers/minimalPairs/ordinalMinimalPairs[@ordinal=\"other\"]", "Prenez la {0}e à droite."},
+
+            {"fr", "//ldml/numbers/minimalPairs/pluralMinimalPairs[@count=\"other\"]", "jours", "missingPlaceholders"},
+            {"fr", "//ldml/numbers/minimalPairs/pluralMinimalPairs[@count=\"other\"]", "{0} jours"},
+
+            {"cy", "//ldml/numbers/minimalPairs/pluralMinimalPairs[@count=\"other\"]", "ci cath", "missingPlaceholders"},
+            {"cy", "//ldml/numbers/minimalPairs/pluralMinimalPairs[@count=\"other\"]", "{0} ci"},
+            {"cy", "//ldml/numbers/minimalPairs/pluralMinimalPairs[@count=\"other\"]", "{0} ci, {0} cath"},
+
+            {"pl", "//ldml/numbers/minimalPairs/caseMinimalPairs[@case=\"accusative\"]", "biernik", "missingPlaceholders"},
+            {"pl", "//ldml/numbers/minimalPairs/caseMinimalPairs[@case=\"accusative\"]", "{0} biernik"},
+
+            {"fr", "//ldml/numbers/minimalPairs/genderMinimalPairs[@gender=\"feminine\"]", "de genre féminin", "missingPlaceholders"},
+            {"fr", "//ldml/numbers/minimalPairs/genderMinimalPairs[@gender=\"feminine\"]", "la {0}"},
+
+            {"ar", "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"duration-hour\"]/unitPattern[@count=\"one\"]", "ساعة"},
+            {"ar", "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"duration-hour\"]/unitPattern[@count=\"one\"]", "{0} ساعة"},
+            {"ar", "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"duration-hour\"]/unitPattern[@count=\"one\"]", "{1}{0} ساعة", "extraPlaceholders"},
+
+            {"he", "//ldml/numbers/minimalPairs/pluralMinimalPairs[@count=\"one\"]", "שנה"},
+            {"he", "//ldml/numbers/minimalPairs/pluralMinimalPairs[@count=\"two\"]", "שנתיים"},
+            {"he", "//ldml/numbers/minimalPairs/pluralMinimalPairs[@count=\"many\"]", "שנה", "missingPlaceholders"},
+            {"he", "//ldml/numbers/minimalPairs/pluralMinimalPairs[@count=\"other\"]", "שנים", "missingPlaceholders"},
+        };
+        for (String[] row : tests) {
+            String localeId = row[0];
+            String path = row[1];
+            String value = row[2];
+            Set<Subtype> expected = new TreeSet<>();
+            for (int i = 3; i < row.length; ++i) {
+                expected.add(Subtype.valueOf(row[i]));
+            }
+            List<CheckStatus> possibleErrors = new ArrayList<>();
+            checkPathValue(root, localeId, path, value, possibleErrors);
+            Set<Subtype> actual = new TreeSet<>();
+            for (CheckStatus item : possibleErrors) {
+                if (PatternPlaceholders.PLACEHOLDER_SUBTYPES.contains(item.getSubtype())) {
+                    actual .add(item.getSubtype());
+                }
+            }
+            if (!assertEquals(Arrays.asList(row).toString(), expected, actual)) {
+                int debug = 0;
+            }
+        }
+    }
+
+    public void checkPathValue(CLDRFile root, String localeId, String path, String value, List<CheckStatus> possibleErrors) {
+        XMLSource localeSource = new SimpleXMLSource(localeId);
+        localeSource.putValueAtPath(path, value);
+
+        TestFactory currFactory = makeTestFactory(root, localeSource);
+        CLDRFile cldrFile = currFactory.make(localeSource.getLocaleID(), true);
+        CheckForExemplars check = new CheckForExemplars(currFactory);
+
+        Options options = new Options();
+        check.setCldrFileToCheck(cldrFile , options, possibleErrors);
+        check.handleCheck(path, path, value, options, possibleErrors);
+    }
+
     public void TestPlaceholders() {
+        CheckCLDR.setDisplayInformation(english);
+        checkPlaceholders(english);
+        checkPlaceholders(factory.make("de", true));
+    }
+
+    public void checkPlaceholders(CLDRFile cldrFileToTest) {
         // verify that every item with {0} has a pattern in pattern
         // placeholders,
         // and that every one generates an error in CheckCDLR for patterns when
@@ -190,14 +273,14 @@
             .getInstance();
 
         CheckCLDR test = CheckCLDR.getCheckAll(factory, ".*");
-        List<CheckStatus> possibleErrors = new ArrayList<CheckStatus>();
+        List<CheckStatus> possibleErrors = new ArrayList<>();
         Options options = new Options();
-        test.setCldrFileToCheck(english, options, possibleErrors);
-        List<CheckStatus> result = new ArrayList<CheckStatus>();
+        test.setCldrFileToCheck(cldrFileToTest, options, possibleErrors);
+        List<CheckStatus> result = new ArrayList<>();
 
-        PathHeader.Factory pathHeaderFactory = PathHeader.getFactory(english);
-        Set<PathHeader> sorted = new TreeSet<PathHeader>();
-        for (String path : english.fullIterable()) {
+        PathHeader.Factory pathHeaderFactory = PathHeader.getFactory(cldrFileToTest);
+        Set<PathHeader> sorted = new TreeSet<>();
+        for (String path : cldrFileToTest.fullIterable()) {
             sorted.add(pathHeaderFactory.fromPath(path));
         }
         final String testPath = "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"duration-day-future\"]/unitPattern[@count=\"0\"]";
@@ -205,9 +288,9 @@
 
         for (PathHeader pathHeader : sorted) {
             String path = pathHeader.getOriginalPath();
-            String value = english.getStringValue(path);
+            String value = cldrFileToTest.getStringValue(path);
             if (value == null) {
-                value = "?";
+                continue;
             }
             boolean containsMessagePattern = messagePlaceholder.reset(value)
                 .find();
@@ -215,72 +298,35 @@
                 .get(path);
             final PlaceholderStatus placeholderStatus = patternPlaceholders
                 .getStatus(path);
-            if (containsMessagePattern && placeholderStatus == PlaceholderStatus.DISALLOWED
-                || !containsMessagePattern && placeholderStatus == PlaceholderStatus.REQUIRED) {
-                errln("Value (" + value + ") looks like placeholder = "
-                    + containsMessagePattern + ", but placeholder info = "
-                    + placeholderStatus + "\t" + path);
-                continue;
-            } else if (placeholderStatus != PlaceholderStatus.DISALLOWED) {
+            if (placeholderStatus == PlaceholderStatus.DISALLOWED) {
                 if (containsMessagePattern) {
-                    Set<String> found = new HashSet<String>();
-                    do {
-                        found.add(messagePlaceholder.group());
-                    } while (messagePlaceholder.find());
-                    if (!found.equals(placeholderInfo.keySet())) {
-                        // ^//ldml/characterLabels/characterLabelPattern[@type="category_list"] ; {0}=CATEGORY_TYPE family; {1}=REMAINING_ITEMS man, woman, girl
-                        if (path.equals("//ldml/characterLabels/characterLabelPattern[@type=\"category-list\"]")) {
-                            logKnownIssue("cldrbug:9534", "commenting out characterLabelPattern[@type=\"category-list\"] for now, pending real fix.");
-                        } else {
-                            errln("Value ("
-                                + value
-                                + ") has different placeholders than placeholder info ("
-                                + placeholderInfo.keySet() + ")\t" + path);
-                        }
-                        continue;
-                    } else {
-                        logln("placeholder info = " + placeholderInfo + "\t"
-                            + path);
-                    }
+                    errln(cldrFileToTest.getLocaleID() + " Value (" + value + ") contains placeholder, but placeholder info = «" + placeholderStatus + "»\t" + path);
+                    continue;
                 }
-
-                // check that the error messages are right
-
-                test.handleCheck(path, english.getFullXPath(path), "?",
-                    options, result);
-                CheckStatus gotIt = null;
-                for (CheckStatus i : result) {
-                    if (i.getSubtype() == Subtype.missingPlaceholders) {
-                        gotIt = i;
-                    }
+            } else { // not disallowed
+                if (!containsMessagePattern) {
+                    errln(cldrFileToTest.getLocaleID() + " Value (" + value + ") contains placeholder, but placeholder info = «" + placeholderStatus + "»\t" + path);
+                    continue;
                 }
-                if (placeholderStatus == PlaceholderStatus.REQUIRED
-                    && gotIt == null) {
-                    errln("CheckForExemplars SHOULD have detected "
-                        + Subtype.missingPlaceholders + " for "
-                        + placeholderStatus + " in " + path);
-                    if (DEBUG) {
-                        test.handleCheck(path, english.getFullXPath(path), "?",
-                            options, result);
-                    }
-                } else if (placeholderStatus == PlaceholderStatus.OPTIONAL
-                    && gotIt != null) {
-                    errln("CheckForExemplars should NOT have detected "
-                        + Subtype.missingPlaceholders + " for "
-                        + placeholderStatus + " in " + path);
-                    if (DEBUG) {
-                        test.handleCheck(path, english.getFullXPath(path), "?",
-                            options, result);
+                // get the set of placeholders
+                HashSet<String> found = new HashSet<>();
+                do {
+                    found.add(messagePlaceholder.group()); // we loaded first one up above
+                } while (messagePlaceholder.find());
+
+                if (!found.equals(placeholderInfo.keySet())) {
+                    if (placeholderStatus != PlaceholderStatus.LOCALE_DEPENDENT) {
+                        errln(cldrFileToTest.getLocaleID() + " Value (" + value + ") has different placeholders than placeholder info «" + placeholderInfo.keySet() + "»\t" + path);
                     }
                 } else {
-                    logln("CheckForExemplars found " + result);
+                    logln("placeholder info = " + placeholderInfo + "\t"
+                        + path);
                 }
             }
         }
     }
 
     public void TestFullErrors() {
-
         CheckCLDR test = CheckCLDR.getCheckAll(factory, INDIVIDUAL_TESTS);
         CheckCLDR.setDisplayInformation(english);
 
@@ -291,9 +337,9 @@
     public void TestAllLocales() {
         CheckCLDR test = CheckCLDR.getCheckAll(factory, INDIVIDUAL_TESTS);
         CheckCLDR.setDisplayInformation(english);
-        Set<String> unique = new HashSet<String>();
+        Set<String> unique = new HashSet<>();
         LanguageTagParser ltp = new LanguageTagParser();
-        Set<String> locales = new HashSet<String>();
+        Set<String> locales = new HashSet<>();
         for (String locale : getInclusion() <= 5 ? eightPointLocales : factory.getAvailable()) {
             /*
              * Only test locales without regions. E.g., test "pt", skip "pt_PT"
@@ -303,7 +349,7 @@
             }
         }
         // With ICU4J libs of 2020-03-23, using locales.parallelStream().forEach below
-        // hangs, or crashes with NPE. Likely an ICU4J issue, but we don't really need 
+        // hangs, or crashes with NPE. Likely an ICU4J issue, but we don't really need
         // parallelStream() here anyway since we are only handling around 35 locales.
         // (And in fact this test seems faster without it)
         locales.forEach(locale -> checkLocale(test, locale, null, unique));
@@ -314,7 +360,7 @@
 
         CheckCLDR test = CheckCLDR.getCheckAll(factory, INDIVIDUAL_TESTS);
         CheckCLDR.setDisplayInformation(english);
-        Set<String> unique = new HashSet<String>();
+        Set<String> unique = new HashSet<>();
 
         checkLocale(test, "ko", null, unique);
     }
@@ -327,14 +373,14 @@
     public void checkLocale(CheckCLDR test, CLDRFile nativeFile,
         String dummyValue, Set<String> unique) {
         String localeID = nativeFile.getLocaleID();
-        List<CheckStatus> possibleErrors = new ArrayList<CheckStatus>();
+        List<CheckStatus> possibleErrors = new ArrayList<>();
         CheckCLDR.Options options = new CheckCLDR.Options();
         test.setCldrFileToCheck(nativeFile, options, possibleErrors);
-        List<CheckStatus> result = new ArrayList<CheckStatus>();
+        List<CheckStatus> result = new ArrayList<>();
 
         CLDRFile patched = nativeFile; // new CLDRFile(override);
         PathHeader.Factory pathHeaderFactory = PathHeader.getFactory(english);
-        Set<PathHeader> sorted = new TreeSet<PathHeader>();
+        Set<PathHeader> sorted = new TreeSet<>();
         for (String path : patched) {
             final PathHeader pathHeader = pathHeaderFactory.fromPath(path);
             if (pathHeader != null) {
@@ -404,8 +450,8 @@
 
     public void TestCheckNames() {
         CheckCLDR c = new CheckNames();
-        Map<String, String> options = new LinkedHashMap<String, String>();
-        List<CheckStatus> possibleErrors = new ArrayList<CheckStatus>();
+        Map<String, String> options = new LinkedHashMap<>();
+        List<CheckStatus> possibleErrors = new ArrayList<>();
         final CLDRFile english = testInfo.getEnglish();
         c.setCldrFileToCheck(english, options, possibleErrors);
         String xpath = "//ldml/localeDisplayNames/languages/language[@type=\"mga\"]";
@@ -427,7 +473,7 @@
         // * run GenerateBirths (if you haven't done so)
         // * look at readable results in the log file in CLDRPaths.TMP_DIRECTORY + "dropbox/births/"
         // * for fr.txt (or may change locale)
-        // * find a path that is outdated. 
+        // * find a path that is outdated.
         //   * To work on both limited and full submissions, choose one with English = trunk
         //   * Sometimes the English change is suppressed in a limited release if the change is small. Pick another in that case.
         // * check the data files to ensure that it is in fact outdated.
@@ -436,8 +482,8 @@
         String locale = "fr";
         String path = "//ldml/localeDisplayNames/territories/territory[@type=\"MO\"][@alt=\"short\"]";
         CheckCLDR c = new CheckNew(testInfo.getCommonAndSeedAndMainAndAnnotationsFactory());
-        List<CheckStatus> result = new ArrayList<CheckStatus>();
-        Map<String, String> options = new HashMap<String, String>();
+        List<CheckStatus> result = new ArrayList<>();
+        Map<String, String> options = new HashMap<>();
         c.setCldrFileToCheck(testInfo.getCLDRFile(locale, true), options, result);
         c.check(path, path, "foobar", options, result);
         for (CheckStatus status : result) {
@@ -453,6 +499,56 @@
         errln("No failure message.");
     }
 
+    public void TestCheckNewRootFailure() {
+        // Check that we get an error with the root value for an emoji.
+        final Factory annotationsFactory = testInfo.getAnnotationsFactory();
+        String locale = "yo"; // the name doesn't matter, since we're going to create a new one
+        String path = "//ldml/annotations/annotation[@cp=\"😀\"][@type=\"tts\"]";
+        CheckCLDR c = new CheckNew(annotationsFactory);
+        List<CheckStatus> result = new ArrayList<>();
+        Map<String, String> options = new HashMap<>();
+        for (Phase phase : Phase.values()) {
+            options.put(Options.Option.phase.getKey(), phase.toString());
+            for (String value : Arrays.asList("E10-836", CldrUtility.INHERITANCE_MARKER)) {
+
+                // make a fake locale, starting with real root
+
+                CLDRFile root = annotationsFactory.make("root", false);
+                XMLSource localeSource = new SimpleXMLSource(locale);
+                localeSource.putValueAtPath(path, value);
+
+                TestFactory currFactory = makeTestFactory(root, localeSource);
+                CLDRFile cldrFile = currFactory.make(localeSource.getLocaleID(), true);
+
+                c.setCldrFileToCheck(cldrFile, options, result);
+                c.check(path, path, value, options, result);
+                boolean gotOne = false;
+                for (CheckStatus status : result) {
+                    if (status.getSubtype() == Subtype.valueMustBeOverridden) {
+                        gotOne = true;
+                        assertEquals(
+                            phase + " Error message check",
+                            "This value must be a real translation, NOT the name/keyword placeholder.",
+                            status.getMessage());
+                    }
+                }
+                if (!gotOne) {
+                    errln(phase + " Missing failure message for value=" + value + "; path=" + path);
+                }
+            }
+        }
+    }
+
+    public TestFactory makeTestFactory(CLDRFile root, XMLSource localeSource) {
+        CLDRFile localeCldr = new CLDRFile(localeSource);
+
+        TestFactory factory = new TestFactory();
+        factory.addFile(root);
+        factory.addFile(localeCldr);
+        return factory;
+    }
+
+
     public void TestCheckDates() {
         CheckCLDR.setDisplayInformation(testInfo.getEnglish()); // just in case
         String prefix = "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dayPeriods/dayPeriodContext[@type=\"";
@@ -461,7 +557,7 @@
 
         TestFactory testFactory = new TestFactory();
 
-        List<CheckStatus> result = new ArrayList<CheckStatus>();
+        List<CheckStatus> result = new ArrayList<>();
         Options options = new Options();
         final String collidingValue = "foobar";
 
@@ -628,7 +724,7 @@
         Map<Key,Pair<Boolean,String>> actionToExamplePath = new TreeMap<>();
         Counter<Key> counter = new Counter<>();
 
-        for (String locale : Arrays.asList("jv", "fr", "vo")) {
+        for (String locale : Arrays.asList("jv", "fr", "nds")) {
             DummyPathValueInfo dummyPathValueInfo = new DummyPathValueInfo();
             dummyPathValueInfo.locale = CLDRLocale.getInstance(locale);
             CLDRFile cldrFile = testInfo.getCldrFactory().make(locale, true);
@@ -652,9 +748,9 @@
                         dummyPathValueInfo.xpath = path;
                         dummyPathValueInfo.baselineValue = cldrFileUnresolved.getStringValue(path);
                         StatusAction action = phase.getShowRowAction(
-                            dummyPathValueInfo, 
-                            InputMethod.DIRECT, 
-                            surveyToolStatus, 
+                            dummyPathValueInfo,
+                            InputMethod.DIRECT,
+                            surveyToolStatus,
                             dummyUserInfo);
 
                         if (surveyToolStatus == SurveyToolStatus.HIDE) {
@@ -677,9 +773,9 @@
                                 // for debugging
                                 if (locale.equals("vo") && action == StatusAction.ALLOW) {
                                     StatusAction action2 = phase.getShowRowAction(
-                                        dummyPathValueInfo, 
-                                        InputMethod.DIRECT, 
-                                        surveyToolStatus, 
+                                        dummyPathValueInfo,
+                                        InputMethod.DIRECT,
+                                        surveyToolStatus,
                                         dummyUserInfo);
                                 }
                                 actionToExamplePath.put(key, Pair.of(dummyPathValueInfo.baselineValue != null, path));
@@ -716,11 +812,12 @@
 
 //    private static final CoverageInfo coverageInfo = new CoverageInfo(testInfo.getSupplementalDataInfo());
 
-    private static final VoterInfo dummyVoterInfo = new VoterInfo(Organization.cldr, 
-        org.unicode.cldr.util.VoteResolver.Level.vetter, 
+    private static final VoterInfo dummyVoterInfo = new VoterInfo(Organization.cldr,
+        org.unicode.cldr.util.VoteResolver.Level.vetter,
         "somename");
 
     private static final UserInfo dummyUserInfo = new UserInfo() {
+        @Override
         public VoterInfo getVoterInfo() {
             return dummyVoterInfo;
         }
@@ -750,24 +847,31 @@
 
         };
 
+        @Override
         public Collection<? extends CandidateInfo> getValues() {
             throw new UnsupportedOperationException();
         }
+        @Override
         public CandidateInfo getCurrentItem() {
             return candidateInfo;
         }
+        @Override
         public String getBaselineValue() {
             return baselineValue;
         }
+        @Override
         public Level getCoverageLevel() {
             return Level.MODERN;
         }
+        @Override
         public boolean hadVotesSometimeThisRelease() {
             throw new UnsupportedOperationException();
         }
+        @Override
         public CLDRLocale getLocale() {
             return locale;
         }
+        @Override
         public String getXpath() {
             return xpath;
         }
@@ -826,9 +930,9 @@
         case "sat": desiredScript = "Olck"; break;
         case "mni": desiredScript = "Beng"; break;
         case "chr": desiredScript = "Cher"; break;
-        default: 
-            if (!explicitScript.isEmpty()) { 
-                desiredScript = explicitScript; 
+        default:
+            if (!explicitScript.isEmpty()) {
+                desiredScript = explicitScript;
             }
             break;
         }
@@ -838,13 +942,13 @@
     }
 
     final Set<String> sampleNewPaths = ImmutableSet.of(
-        "//ldml/annotations/annotation[@cp=\\\"🐻‍❄\\\"][@type=\\\"tts\\\"]", 
-        "//ldml/annotations/annotation[@cp=\\\"√\\\"][@type=\\\"tts\\\"]", 
-        "//ldml/units/unitLength[@type=\\\"short\\\"]/compoundUnit[@type=\\\"10p-1\\\"]/unitPrefixPattern", 
-        "//ldml/localeDisplayNames/languages/language[@type=\\\"fa_AF\\\"]", 
+        "//ldml/annotations/annotation[@cp=\\\"🐻‍❄\\\"][@type=\\\"tts\\\"]",
+        "//ldml/annotations/annotation[@cp=\\\"√\\\"][@type=\\\"tts\\\"]",
+        "//ldml/units/unitLength[@type=\\\"short\\\"]/compoundUnit[@type=\\\"10p-1\\\"]/unitPrefixPattern",
+        "//ldml/localeDisplayNames/languages/language[@type=\\\"fa_AF\\\"]",
         "//ldml/units/unitLength[@type=\\\"long\\\"]/compoundUnit[@type=\\\"power2\\\"]/compoundUnitPattern1"
         );
-    
+
     final Set<String> SAMPLE_EXCEPTIONAL_PATHS = ImmutableSet.of(
         "//ldml/annotations/annotation[@cp=\"🤵\"]",
         "//ldml/annotations/annotation[@cp=\"🤵‍♂\"][@type=\"tts\"]"
@@ -859,28 +963,52 @@
         if (!CheckCLDR.LIMITED_SUBMISSION) {
             return;
         }
-        
+
         for (String path : sampleNewPaths) {
             assertTrue(path,  SubmissionLocales.allowEvenIfLimited("fr", path, false, true));
         }
-        
+
         for (String path : SAMPLE_EXCEPTIONAL_PATHS) {
             assertTrue(path,  SubmissionLocales.allowEvenIfLimited("fr", path, false, false));
         }
-        
-        assertFalse(sampleDisallowedInLimitedSubmission, 
+
+        assertFalse(sampleDisallowedInLimitedSubmission,
             SubmissionLocales.allowEvenIfLimited("fr", sampleDisallowedInLimitedSubmission, false, false));
 
         // test non-cldr locale
-        
+
         for (String path : sampleNewPaths) {
             assertFalse(path,  SubmissionLocales.allowEvenIfLimited("xx", path, false, true));
         }
         for (String path : SAMPLE_EXCEPTIONAL_PATHS) {
             assertFalse(path,  SubmissionLocales.allowEvenIfLimited("xx", path, false, false));
         }
-        
+
         // TODO enhance to check more conditions
         // like old:         assertFalse("vo, !engSame, !isError, !isMissing", SubmissionLocales.allowEvenIfLimited("vo", pathNotSameValue, false, false));
-   }
+    }
+
+    public void TestInfohubLinks13979() {
+       CLDRFile root = cldrFactory.make("root", true);
+       List<CheckStatus> possibleErrors = new ArrayList<>();
+       String[][] tests = {
+           // test edge cases
+           // locale, path, value, expected
+           {"fr", "//ldml/numbers/minimalPairs/genderMinimalPairs[@gender=\"feminine\"]", "de genre féminin",
+               "Need at least 1 placeholder(s), but only have 0. Placeholders are: {{0}={GENDER}, e.g. “‹noun phrase in this gender›”}; see <a href='http://cldr.unicode.org/translation/error-codes#missingPlaceholders'  target='cldr_error_codes'>missing placeholders</a>."},
+       };
+       for (String[] row : tests) {
+           String localeId = row[0];
+           String path = row[1];
+           String value = row[2];
+           String expected = row[3];
+
+           checkPathValue(root, localeId, path,value, possibleErrors);
+           for (CheckStatus error : possibleErrors) {
+               if (error.getSubtype() == Subtype.missingPlaceholders) {
+                assertEquals("message", expected, error.getMessage());
+               }
+           }
+       }
+    }
 }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCheckDisplayCollisions.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCheckDisplayCollisions.java
index 8d10933..9db66a2 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCheckDisplayCollisions.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCheckDisplayCollisions.java
@@ -19,24 +19,25 @@
 import org.unicode.cldr.util.XMLSource;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 
 public class TestCheckDisplayCollisions extends TestFmwkPlus {
     private static final String ukRegion =  "//ldml/localeDisplayNames/territories/territory[@type=\"GB\"]";
     private static final String englandSubdivision = "//ldml/localeDisplayNames/subdivisions/subdivision[@type=\"gbeng\"]";
-    
+
     private static final String scorpioEmoji = "//ldml/annotations/annotation[@cp=\"♏\"][@type=\"tts\"]";
     private static final String scorpionEmoji = "//ldml/annotations/annotation[@cp=\"🦂\"][@type=\"tts\"]";
-    
+
     private static final String japanRegion = "//ldml/localeDisplayNames/territories/territory[@type=\"JP\"]";
     private static final String japanMap = "//ldml/annotations/annotation[@cp=\"🗾\"][@type=\"tts\"]";
-    
+
     private static final String milli = "//ldml/units/unitLength[@type=\"short\"]/compoundUnit[@type=\"10p-3\"]/unitPrefixPattern";
     private static final String mega = "//ldml/units/unitLength[@type=\"short\"]/compoundUnit[@type=\"10p6\"]/unitPrefixPattern";
-    
+
     private static final String deciLong = "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"10p-1\"]/unitPrefixPattern";
     private static final String deciNarrow = "//ldml/units/unitLength[@type=\"narrow\"]/compoundUnit[@type=\"10p-1\"]/unitPrefixPattern";
     private static final String deciShort = "//ldml/units/unitLength[@type=\"short\"]/compoundUnit[@type=\"10p-1\"]/unitPrefixPattern";
-    
+
         public static void main(String[] args) {
         new TestCheckDisplayCollisions().run(args);
     }
@@ -57,7 +58,7 @@
         frSource.putValueAtDPath(japanMap, "carte du Japon");
         frSource.putValueAtDPath(milli, "m{0}");
         frSource.putValueAtDPath(mega, "M{0}");
-        
+
         frSource.putValueAtDPath(deciLong, "d{0}");
         frSource.putValueAtDPath(deciNarrow, "d{0}");
         frSource.putValueAtDPath(deciShort, "d{0}");
@@ -78,15 +79,69 @@
 
         CheckDisplayCollisions cdc = new CheckDisplayCollisions(factory);
         cdc.setEnglishFile(CLDRConfig.getInstance().getEnglish());
-        
+
         CLDRFile frResolved = factory.make("fr", true);
         checkFile(cdc, fr, frResolved);
 
         CLDRFile frCaResolved = factory.make("fr_CA", false);
-        checkFile(cdc, frCA, frCaResolved, 
+        checkFile(cdc, frCA, frCaResolved,
             scorpioEmoji, ukRegion);
     }
-    
+
+    public void testUnitPatternCollisions() {
+        final String unitPattern1 = "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"graphics-dot\"]/unitPattern[@count=\"one\"]";
+        /**
+         * different count as # 1. MUST NOT COLLIDE WITH #1
+         */
+        final String unitPattern2 = "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"graphics-dot\"]/unitPattern[@count=\"other\"]";
+        /**
+         * different unit as # 1. MUST COLLIDE WITH #1
+         */
+        final String unitPattern3 = "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"length-point\"]/unitPattern[@count=\"one\"]";
+        /**
+         * #4 and #5 must NOT collide; case="nominative" and case="accusative" when paths are otherwise identical and have the same value
+         */
+        final String unitPattern4 = "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"volume-dram\"]/unitPattern[@count=\"other\"][@case=\"nominative\"]";
+        final String unitPattern5 = "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"volume-dram\"]/unitPattern[@count=\"other\"][@case=\"accusative\"]";
+
+        mustCollide(false, unitPattern1, unitPattern2);
+        mustCollide(true, unitPattern1, unitPattern3);
+        mustCollide(false, unitPattern4, unitPattern5);
+    }
+
+    private void mustCollide(boolean expectCollisionErrors, String unitPatternA, String unitPatternB) {
+        final String testLocale = "pt";
+        final String duplicatedValue = "{0}pontos";
+
+        final XMLSource rootSource = new SimpleXMLSource("root");
+        final CLDRFile root = new CLDRFile(rootSource);
+
+        final XMLSource enSource = new SimpleXMLSource("en");
+        final CLDRFile en = new CLDRFile(enSource);
+
+        final XMLSource source = new SimpleXMLSource(testLocale);
+
+        source.putValueAtPath(unitPatternA, duplicatedValue);
+        source.putValueAtPath(unitPatternB, duplicatedValue);
+
+        CLDRFile file = new CLDRFile(source);
+
+        TestFactory factory = new TestFactory();
+        factory.addFile(root);
+        factory.addFile(en);
+        factory.addFile(file);
+
+        CheckDisplayCollisions cdc = new CheckDisplayCollisions(factory);
+        cdc.setEnglishFile(CLDRConfig.getInstance().getEnglish());
+
+        CLDRFile ptResolved = factory.make(testLocale, true);
+        if (expectCollisionErrors) {
+            checkFile(cdc, file, ptResolved, unitPatternA, unitPatternB);
+        } else {
+            checkFile(cdc, file, ptResolved);
+        }
+    }
+
     private void checkFile(CheckDisplayCollisions cdc, CLDRFile cldrFile, CLDRFile cldrFileResolved, String... expectedErrors) {
         List<CheckStatus> possibleErrors = new ArrayList<>();
         Options options = new Options();
@@ -119,7 +174,52 @@
             } else {
                 errln(cldrFile.getLocaleID() + " unexpected error: " + path + " : " + entry.getValue());
             }
+            checkUnknown(path, entry);
         }
         assertEquals(cldrFile.getLocaleID() + " expected to be errors: ", Collections.emptySet(), expected);
     }
+
+    /**
+     * Report an error if the CheckStatus parameters contain the word "Unknown",
+     * which can be a symptom of errors such as removal of required "count" attribute.
+     * "Unknown" may not always be an error, but for the data used in this test we don't expect it.
+     *
+     * @param path
+     * @param entry
+     */
+    private void checkUnknown(String path, Entry<String, List<CheckStatus>> entry) {
+        CheckStatus cs = entry.getValue().get(0);
+        String s = cs.getParameters()[0].toString();
+        if (s.contains("Unknown")) {
+            errln("Found Unknown in : " + path + ":\n" + s);
+        }
+    }
+
+    public void TestDotPixel14031 () {
+        TestFactory factory = new TestFactory();
+        XMLSource rootSource = new SimpleXMLSource("root");
+        factory.addFile(new CLDRFile(rootSource));
+
+        XMLSource localeSource = new SimpleXMLSource("de");
+        Map<String,String> m = ImmutableMap.of(
+            "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"graphics-dot\"]/displayName", "Punkt",
+            "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"graphics-pixel\"]/displayName", "Punkt",
+            "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"graphics-pixel-per-centimeter\"]/displayName", "Punkt pro Zentimeter",
+            "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"graphics-dot-per-centimeter\"]/displayName", "Punkt pro Zentimeter"
+            );
+        for (Entry<String, String> entry : m.entrySet()) {
+            localeSource.putValueAtPath(entry.getKey(), entry.getValue());
+        }
+        factory.addFile(new CLDRFile(localeSource));
+
+        CheckDisplayCollisions cdc = new CheckDisplayCollisions(factory);
+        cdc.setEnglishFile(CLDRConfig.getInstance().getEnglish());
+
+        List<CheckStatus> possibleErrors = new ArrayList<>();
+        cdc.setCldrFileToCheck(factory.make("de", true), ImmutableMap.of(), possibleErrors);
+        for (Entry<String, String> entry : m.entrySet()) {
+            cdc.check(entry.getKey(), entry.getKey(), entry.getValue(), ImmutableMap.of(), possibleErrors);
+            assertEquals(entry.toString(), Collections.emptyList(), possibleErrors);
+        }
+    }
 }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCheckNumbers.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCheckNumbers.java
new file mode 100644
index 0000000..36a10ae
--- /dev/null
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCheckNumbers.java
@@ -0,0 +1,66 @@
+package org.unicode.cldr.unittest;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.unicode.cldr.test.CheckCLDR.CheckStatus;
+import org.unicode.cldr.test.CheckCLDR.CheckStatus.Subtype;
+import org.unicode.cldr.test.CheckCLDR.CheckStatus.Type;
+import org.unicode.cldr.test.CheckNumbers;
+import org.unicode.cldr.unittest.TestXMLSource.DummyXMLSource;
+import org.unicode.cldr.util.CLDRConfig;
+import org.unicode.cldr.util.CLDRFile;
+import org.unicode.cldr.util.XMLSource;
+
+public class TestCheckNumbers extends TestFmwkPlus {
+
+
+    public static void main(String[] args) {
+        new TestCheckNumbers().run(args);
+    }
+
+    public void TestSingularity() {
+        CheckNumbers checkNumbers = new CheckNumbers(CLDRConfig.getInstance().getCldrFactory());
+
+        // construct fake locale and test
+
+        // should succeed, since "one" only has one number in ast.
+        checkSingularity(checkNumbers, "en",
+            "//ldml/numbers/decimalFormats[@numberSystem=\"latn\"]/decimalFormatLength[@type=\"short\"]/decimalFormat[@type=\"standard\"]/pattern[@type=\"1000\"][@count=\"one\"]", 
+            "K", null
+            );
+        // should fail, "one" may match both 1 and zero in french
+        checkSingularity(checkNumbers, "fr",
+            "//ldml/numbers/decimalFormats[@numberSystem=\"latn\"]/decimalFormatLength[@type=\"short\"]/decimalFormat[@type=\"standard\"]/pattern[@type=\"1000\"][@count=\"one\"]", 
+            "K", Subtype.missingZeros
+            );
+
+    }
+
+    public void checkSingularity(CheckNumbers checkNumbers, String locale, final String path, final String value, Subtype expectedSubtype) {
+        XMLSource xmlSource = new DummyXMLSource();
+        xmlSource.putValueAtDPath(path, value);
+        xmlSource.setLocaleID(locale);
+        CLDRFile cldrFileToCheck = new CLDRFile(xmlSource);
+
+        Map<String, String> options = Collections.emptyMap();
+        List<CheckStatus> possibleErrors = new ArrayList<>();
+        checkNumbers.setCldrFileToCheck(cldrFileToCheck, options, possibleErrors);
+        assertEquals("setCldrFileToCheck", Collections.EMPTY_LIST, possibleErrors);
+        possibleErrors.clear();
+
+        checkNumbers.check(path, path, value, options, possibleErrors);
+        if (expectedSubtype == null) {
+            assertEquals("should have no errors: ", Collections.emptyList(), possibleErrors);
+        } else {
+            if (assertEquals("should have one error: ", 1, possibleErrors.size())) {
+                CheckStatus err = possibleErrors.get(0);
+                assertEquals("errorType", Type.Error, err.getType());
+                Subtype exp = err.getSubtype();
+                assertEquals("errorSubType", expectedSubtype, err.getSubtype());
+            }
+        }
+    }
+}
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCldrFactory.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCldrFactory.java
index 58c799c..f9c0076 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCldrFactory.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCldrFactory.java
@@ -24,7 +24,6 @@
 
 import com.google.common.base.Objects;
 import com.google.common.collect.ImmutableMap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 
 public class TestCldrFactory extends TestFmwkPlus {
     private static final boolean DEBUG = false;
@@ -138,8 +137,8 @@
     private String differentPathValue(CLDRFile a, CLDRFile b) {
         int debugCount = 0;
         Set<String> paths = new TreeSet<>();
-        CollectionUtilities.addAll(a.iterator(), paths);
-        CollectionUtilities.addAll(b.iterator(), paths);
+        a.forEach(paths::add);
+        b.forEach(paths::add);
         for (String xpath : paths) {
             if (++debugCount < 100) {
                 logln(debugCount + "\t" + xpath);
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCldrResolver.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCldrResolver.java
index 5abee87..502407a 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCldrResolver.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCldrResolver.java
@@ -151,18 +151,18 @@
                 // Check to make sure that all paths from the tool-resolved
                 // version are
                 // also in the CLDR-resolved version
-                for (String canonicalPath : toolResolved.keySet()) {
+                for (String normalizedPath : toolResolved.keySet()) {
                     // Check if path should be ignored
-                    if (!shouldIgnorePath(canonicalPath, cldrResolved)) {
+                    if (!shouldIgnorePath(normalizedPath, cldrResolved)) {
                         assertTrue(
                             "Path "
-                                + canonicalPath
+                                + normalizedPath
                                 + " is present in tool resolved file for locale "
                                 + locale
                                 + " but not in CLDR resolved file.",
-                            cldrPaths.contains(canonicalPath)
+                            cldrPaths.contains(normalizedPath)
                                 || toolResolved
-                                    .get(canonicalPath)
+                                    .get(normalizedPath)
                                     .equals(CldrUtility.NO_INHERITANCE_MARKER));
                     }
                 }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCollationMapMaker.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCollationMapMaker.java
index a3b5919..eec810c 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCollationMapMaker.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCollationMapMaker.java
@@ -53,7 +53,7 @@
         UnicodeSetPrettyPrinter pretty = new UnicodeSetPrettyPrinter().setOrdering(
             Collator.getInstance(ULocale.ROOT)).setSpaceComparator(
                 Collator.getInstance(ULocale.ROOT).setStrength2(
-                    RuleBasedCollator.PRIMARY));
+                    Collator.PRIMARY));
         for (String target : inverse.keySet()) {
             unicodeSet.clear();
             unicodeSet.addAll(inverse.getAll(target));
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestComparisonBuilder.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestComparisonBuilder.java
index 8498e47..cec13b5 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestComparisonBuilder.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestComparisonBuilder.java
@@ -242,6 +242,7 @@
         for (Ordering order : Ordering.values()) {
             Builder<String> builder = new Builder<String>(order);
             builder.setFallbackComparator(new Comparator<String>() {
+                @Override
                 public int compare(String o1, String o2) {
                     return o1.compareTo(o2);
                 }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCompatibility.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCompatibility.java
index 36ec8e6..7c0670c 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCompatibility.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCompatibility.java
@@ -1,5 +1,7 @@
 package org.unicode.cldr.unittest;
 
+import static org.unicode.cldr.util.PathUtilities.getNormalizedPathString;
+
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
@@ -8,6 +10,7 @@
 import org.unicode.cldr.util.CLDRFile;
 import org.unicode.cldr.util.CLDRPaths;
 import org.unicode.cldr.util.Factory;
+import org.unicode.cldr.util.PathUtilities;
 
 public class TestCompatibility extends TestFmwkPlus {
     private static final File ARCHIVE = new File(CLDRPaths.ARCHIVE_DIRECTORY);
@@ -33,23 +36,23 @@
 
     // for now, only look at common main
     private void checkXmlFile(File file) throws IOException {
-        if (!file.getCanonicalPath().contains("cldr-27.0")) {
+        if (!getNormalizedPathString(file).contains("cldr-27.0")) {
             return;
         }
-        Factory factory = Factory.make(file.getCanonicalPath(), ".*");
+        Factory factory = Factory.make(getNormalizedPathString(file), ".*");
         for (String language : factory.getAvailableLanguages()) {
             CLDRFile cldrFile;
             try {
                 cldrFile = factory.make(language, false);
             } catch (Exception e) {
-                errln("Couldn't read " + language + ":\t" + e.getLocalizedMessage() + ", in " + file.getCanonicalPath());
+                errln("Couldn't read " + language + ":\t" + e.getLocalizedMessage() + ", in " + getNormalizedPathString(file));
                 continue;
             }
             try (StringWriter sw = new StringWriter();
                 PrintWriter pw = new PrintWriter(sw);) {
                 cldrFile.write(pw);
             } catch (Exception e) {
-                errln("Couldn't write " + language + ":\t" + e.getLocalizedMessage() + ", in " + file.getCanonicalPath());
+                errln("Couldn't write " + language + ":\t" + e.getLocalizedMessage() + ", in " + getNormalizedPathString(file));
             }
         }
     }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCoverageLevel.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCoverageLevel.java
index b4edb6b..50b8890 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCoverageLevel.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestCoverageLevel.java
@@ -1,10 +1,13 @@
 package org.unicode.cldr.unittest;
 
+import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -24,9 +27,11 @@
 import org.unicode.cldr.util.DtdData;
 import org.unicode.cldr.util.DtdData.Element;
 import org.unicode.cldr.util.DtdType;
+import org.unicode.cldr.util.GrammarInfo;
 import org.unicode.cldr.util.LanguageTagParser;
 import org.unicode.cldr.util.Level;
 import org.unicode.cldr.util.LogicalGrouping;
+import org.unicode.cldr.util.LogicalGrouping.PathType;
 import org.unicode.cldr.util.PathHeader;
 import org.unicode.cldr.util.PathHeader.Factory;
 import org.unicode.cldr.util.PathStarrer;
@@ -40,10 +45,12 @@
 import org.unicode.cldr.util.SupplementalDataInfo.PopulationData;
 import org.unicode.cldr.util.XPathParts;
 
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableListMultimap;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row.R2;
 import com.ibm.icu.text.CompactDecimalFormat;
@@ -88,7 +95,7 @@
         SupplementalDataInfo sdi = SupplementalDataInfo
             .getInstance(CLDRPaths.DEFAULT_SUPPLEMENTAL_DIRECTORY);
 
-        Set<String> allPaths = new HashSet<String>();
+        Set<String> allPaths = new HashSet<>();
         M4<String, String, Level, Boolean> starredToLocalesToLevels = ChainedMap
             .of(new TreeMap<String, Object>(),
                 new TreeMap<String, Object>(),
@@ -106,7 +113,7 @@
         }
 
         Set<Level> levelsFound = EnumSet.noneOf(Level.class);
-        Set<String> localesWithUniqueLevels = new TreeSet<String>();
+        Set<String> localesWithUniqueLevels = new TreeSet<>();
         for (Entry<String, Map<String, Map<Level, Boolean>>> entry : starredToLocalesToLevels) {
             String starred = entry.getKey();
             Map<String, Map<Level, Boolean>> localesToLevels = entry.getValue();
@@ -131,15 +138,14 @@
             System.out.println(maxLevelCount
                 + "\t"
                 + localesWithUniqueLevels.size()
-                    / localeCount
+                / localeCount
                 + "\t"
                 + starred
                 + "\t"
-                + CollectionUtilities.join(levelsFound, ", ")
+                + Joiner.on(", ").join(levelsFound)
                 + "\t"
                 + (maxLevelCount == 1 ? "all" : localesWithUniqueLevels
-                    .size() == 0 ? "none" : CollectionUtilities.join(
-                        localesWithUniqueLevels, ", ")));
+                    .size() == 0 ? "none" : Joiner.on(", ").join(localesWithUniqueLevels)));
         }
     }
 
@@ -154,12 +160,12 @@
 
     static Relation<String, LanguageStatus> languageStatus = Relation.of(
         new HashMap<String, Set<LanguageStatus>>(), TreeSet.class);
-    static Counter2<String> languageLiteratePopulation = new Counter2<String>();
-    static Map<String, Date> currencyToLast = new HashMap<String, Date>();
-    static Set<String> officialSomewhere = new HashSet<String>();
+    static Counter2<String> languageLiteratePopulation = new Counter2<>();
+    static Map<String, Date> currencyToLast = new HashMap<>();
+    static Set<String> officialSomewhere = new HashSet<>();
 
     static {
-        Counter2<String> territoryLiteratePopulation = new Counter2<String>();
+        Counter2<String> territoryLiteratePopulation = new Counter2<>();
         LanguageTagParser parser = new LanguageTagParser();
         // cf
         // http://cldr.unicode.org/development/development-process/design-proposals/languages-to-show-for-translation
@@ -253,15 +259,15 @@
             switch (field) {
             case CLDRFile.LANGUAGE_NAME:
                 dep = SDI.getLocaleAliasInfo()
-                    .get("language");
+                .get("language");
                 break;
             case CLDRFile.TERRITORY_NAME:
                 dep = SDI.getLocaleAliasInfo()
-                    .get("territory");
+                .get("territory");
                 break;
             case CLDRFile.SCRIPT_NAME:
                 dep = SDI.getLocaleAliasInfo()
-                    .get("script");
+                .get("script");
                 break;
             default:
                 dep = null;
@@ -269,6 +275,7 @@
             }
         }
 
+        @Override
         public String transform(String source) {
             String result = ENGLISH.getName(field, source);
             String extra = "";
@@ -292,11 +299,12 @@
 
     RegexLookup<Level> exceptions = RegexLookup.of(null,
         new Transform<String, Level>() {
-            public Level transform(String source) {
-                return Level.fromLevel(Integer.parseInt(source));
-            }
-        }, null).loadFromFile(TestCoverageLevel.class,
-            "TestCoverageLevel.txt");
+        @Override
+        public Level transform(String source) {
+            return Level.fromLevel(Integer.parseInt(source));
+        }
+    }, null).loadFromFile(TestCoverageLevel.class,
+        "TestCoverageLevel.txt");
 
     public void TestExceptions() {
         for (Map.Entry<Finder, Level> x : exceptions) {
@@ -370,7 +378,7 @@
             + "kj|anp|an|niu|mni|dv|swb|pau|gor|nqo|krc|crs|gwi|zza|mad|nog|lez|byn|sad|ssy|mag|iba|"
             + "tpi|kum|wal|mos|dzg|gez|io|tn|snk|mai|ady|chy|mwl|sco|av|efi|war|mic|loz|scn|smj|tem|"
             + "dgr|mak|inh|lun|ts|fj|na|kpe|sr_ME|trv|rap|bug|ban|xal|oc|alt|nia|myv|ain|rar|krl|ay|"
-            + "syr|kv|umb|)");
+            + "syr|kv|umb|cu|prg|vo)");
 
         final Pattern script100 = PatternCache.get("("
             + "Adlm|Afak|Aghb|Ahom|Aran|Armi|Avst|Bali|Bamu|Bass|Batk|Bhks|Blis|Brah|Bugi|Buhd|"
@@ -613,7 +621,9 @@
                 }
             } else if (path.startsWith("//ldml/units")) {
                 // Skip paths for narrow unit fields.
-                if ("narrow".equals(xpp.findAttributeValue("unitLength", "type"))) {
+                if ("narrow".equals(xpp.findAttributeValue("unitLength", "type"))
+                    || path.endsWith("/compoundUnitPattern1")
+                    ) {
                     continue;
                 }
             }
@@ -661,4 +671,145 @@
             ++count;
         }
     }
+
+    public void testLogicalGroupingSamples() {
+        System.out.println(GrammarInfo.SEED_LOCALES);
+        String[][] test = {
+            {"de",
+                "SINGLETON",
+                "//ldml/localeDisplayNames/localeDisplayPattern/localePattern",
+            },
+            {"de",
+                "METAZONE",
+                "//ldml/dates/timeZoneNames/metazone[@type=\"Alaska\"]/long/generic",
+                "//ldml/dates/timeZoneNames/metazone[@type=\"Alaska\"]/long/standard",
+                "//ldml/dates/timeZoneNames/metazone[@type=\"Alaska\"]/long/daylight",
+            },
+            {"de",
+                "DAYS",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/days/dayContext[@type=\"format\"]/dayWidth[@type=\"wide\"]/day[@type=\"sun\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/days/dayContext[@type=\"format\"]/dayWidth[@type=\"wide\"]/day[@type=\"mon\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/days/dayContext[@type=\"format\"]/dayWidth[@type=\"wide\"]/day[@type=\"tue\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/days/dayContext[@type=\"format\"]/dayWidth[@type=\"wide\"]/day[@type=\"wed\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/days/dayContext[@type=\"format\"]/dayWidth[@type=\"wide\"]/day[@type=\"thu\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/days/dayContext[@type=\"format\"]/dayWidth[@type=\"wide\"]/day[@type=\"fri\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/days/dayContext[@type=\"format\"]/dayWidth[@type=\"wide\"]/day[@type=\"sat\"]",
+            },
+            {"nl",
+                "DAY_PERIODS",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dayPeriods/dayPeriodContext[@type=\"format\"]/dayPeriodWidth[@type=\"wide\"]/dayPeriod[@type=\"morning1\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dayPeriods/dayPeriodContext[@type=\"format\"]/dayPeriodWidth[@type=\"wide\"]/dayPeriod[@type=\"afternoon1\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dayPeriods/dayPeriodContext[@type=\"format\"]/dayPeriodWidth[@type=\"wide\"]/dayPeriod[@type=\"evening1\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dayPeriods/dayPeriodContext[@type=\"format\"]/dayPeriodWidth[@type=\"wide\"]/dayPeriod[@type=\"night1\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dayPeriods/dayPeriodContext[@type=\"format\"]/dayPeriodWidth[@type=\"wide\"]/dayPeriod[@type=\"midnight\"]",
+            },
+            {"de",
+                "QUARTERS",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/quarters/quarterContext[@type=\"format\"]/quarterWidth[@type=\"wide\"]/quarter[@type=\"1\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/quarters/quarterContext[@type=\"format\"]/quarterWidth[@type=\"wide\"]/quarter[@type=\"2\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/quarters/quarterContext[@type=\"format\"]/quarterWidth[@type=\"wide\"]/quarter[@type=\"3\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/quarters/quarterContext[@type=\"format\"]/quarterWidth[@type=\"wide\"]/quarter[@type=\"4\"]",
+            },
+            {"de",
+                "MONTHS",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/months/monthContext[@type=\"format\"]/monthWidth[@type=\"wide\"]/month[@type=\"1\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/months/monthContext[@type=\"format\"]/monthWidth[@type=\"wide\"]/month[@type=\"2\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/months/monthContext[@type=\"format\"]/monthWidth[@type=\"wide\"]/month[@type=\"3\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/months/monthContext[@type=\"format\"]/monthWidth[@type=\"wide\"]/month[@type=\"4\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/months/monthContext[@type=\"format\"]/monthWidth[@type=\"wide\"]/month[@type=\"5\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/months/monthContext[@type=\"format\"]/monthWidth[@type=\"wide\"]/month[@type=\"6\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/months/monthContext[@type=\"format\"]/monthWidth[@type=\"wide\"]/month[@type=\"7\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/months/monthContext[@type=\"format\"]/monthWidth[@type=\"wide\"]/month[@type=\"8\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/months/monthContext[@type=\"format\"]/monthWidth[@type=\"wide\"]/month[@type=\"9\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/months/monthContext[@type=\"format\"]/monthWidth[@type=\"wide\"]/month[@type=\"10\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/months/monthContext[@type=\"format\"]/monthWidth[@type=\"wide\"]/month[@type=\"11\"]",
+                "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/months/monthContext[@type=\"format\"]/monthWidth[@type=\"wide\"]/month[@type=\"12\"]",
+            },
+            {"de",
+                "RELATIVE",
+                "//ldml/dates/fields/field[@type=\"week-short\"]/relative[@type=\"-1\"]",
+                "//ldml/dates/fields/field[@type=\"week-short\"]/relative[@type=\"0\"]",
+                "//ldml/dates/fields/field[@type=\"week-short\"]/relative[@type=\"1\"]",
+            },
+            {"de",
+                "DECIMAL_FORMAT_LENGTH",
+                "//ldml/numbers/decimalFormats[@numberSystem=\"latn\"]/decimalFormatLength[@type=\"long\"]/decimalFormat[@type=\"standard\"]/pattern[@type=\"1000\"][@count=\"one\"]",
+                "//ldml/numbers/decimalFormats[@numberSystem=\"latn\"]/decimalFormatLength[@type=\"long\"]/decimalFormat[@type=\"standard\"]/pattern[@type=\"1000\"][@count=\"other\"]",
+                "//ldml/numbers/decimalFormats[@numberSystem=\"latn\"]/decimalFormatLength[@type=\"long\"]/decimalFormat[@type=\"standard\"]/pattern[@type=\"10000\"][@count=\"one\"]",
+                "//ldml/numbers/decimalFormats[@numberSystem=\"latn\"]/decimalFormatLength[@type=\"long\"]/decimalFormat[@type=\"standard\"]/pattern[@type=\"10000\"][@count=\"other\"]",
+                "//ldml/numbers/decimalFormats[@numberSystem=\"latn\"]/decimalFormatLength[@type=\"long\"]/decimalFormat[@type=\"standard\"]/pattern[@type=\"100000\"][@count=\"one\"]",
+                "//ldml/numbers/decimalFormats[@numberSystem=\"latn\"]/decimalFormatLength[@type=\"long\"]/decimalFormat[@type=\"standard\"]/pattern[@type=\"100000\"][@count=\"other\"]",
+            },
+            {"cs",
+                "COUNT",
+                "//ldml/numbers/currencies/currency[@type=\"BMD\"]/displayName[@count=\"one\"]",
+                "//ldml/numbers/currencies/currency[@type=\"BMD\"]/displayName[@count=\"few\"]",
+                "//ldml/numbers/currencies/currency[@type=\"BMD\"]/displayName[@count=\"many\"]",
+                "//ldml/numbers/currencies/currency[@type=\"BMD\"]/displayName[@count=\"other\"]",
+            },
+            {"de",
+                "COUNT",
+                "//ldml/numbers/minimalPairs/pluralMinimalPairs[@count=\"one\"]",
+                "//ldml/numbers/minimalPairs/pluralMinimalPairs[@count=\"other\"]",
+            },
+            {"de",
+                "COUNT_CASE",
+                "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"area-square-kilometer\"]/unitPattern[@count=\"one\"][@case=\"accusative\"]",
+                "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"area-square-kilometer\"]/unitPattern[@count=\"one\"][@case=\"dative\"]",
+                "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"area-square-kilometer\"]/unitPattern[@count=\"one\"][@case=\"genitive\"]",
+                "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"area-square-kilometer\"]/unitPattern[@count=\"one\"]",
+                "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"area-square-kilometer\"]/unitPattern[@count=\"other\"][@case=\"accusative\"]",
+                "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"area-square-kilometer\"]/unitPattern[@count=\"other\"][@case=\"dative\"]",
+                "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"area-square-kilometer\"]/unitPattern[@count=\"other\"][@case=\"genitive\"]",
+                "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"area-square-kilometer\"]/unitPattern[@count=\"other\"]",
+            },
+            {"hi",
+                "COUNT_CASE_GENDER",
+                "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"]",
+                "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"][@gender=\"feminine\"]",
+                "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"]",
+                "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"][@gender=\"feminine\"]",
+                "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"][@case=\"oblique\"]",
+                "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"][@gender=\"feminine\"][@case=\"oblique\"]",
+                "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"][@case=\"oblique\"]",
+                "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"][@gender=\"feminine\"][@case=\"oblique\"]"
+            }
+        };
+        Set<PathType> seenPt = new TreeSet<>(Arrays.asList(PathType.values()));
+        for (String[] row : test) {
+            String locale = row[0];
+            PathType expectedPathType = PathType.valueOf(row[1]);
+            CLDRFile cldrFile = testInfo.getCldrFactory().make(locale, true);
+            List<String> paths = Arrays.asList(row);
+            paths = paths.subList(2, paths.size());
+            Set<String> expected = new TreeSet<>(paths);
+            Set<Multimap<String, String>> seen = new LinkedHashSet<>();
+            for (String path : expected) {
+                Set<String> grouping = new TreeSet<>(LogicalGrouping.getPaths(cldrFile, path));
+                final Multimap<String, String> deltaValue = delta(expected, grouping);
+                if (seen.add(deltaValue)) {
+                    assertEquals("Logical group for " + path, ImmutableListMultimap.of(), deltaValue);
+                }
+                PathType actualPathType = PathType.getPathTypeFromPath(path);
+                assertEquals("PathType", expectedPathType, actualPathType);
+            }
+            seenPt.remove(expectedPathType);
+        }
+        assertEquals("PathTypes tested", Collections.emptySet(), seenPt);
+        logKnownIssue("CLDR-13951", "Add more LogicalGrouping tests, fix DECIMAL_FORMAT_LENGTH, etc.");
+    }
+
+    private Multimap<String,String> delta(Set<String> expected, Set<String> grouping) {
+        if (expected.equals(grouping)) {
+            return ImmutableListMultimap.of();
+        }
+        Multimap<String,String> result = LinkedHashMultimap.create();
+        TreeSet<String> aMinusB = new TreeSet<>(expected);
+        aMinusB.removeAll(grouping);
+        result.putAll("expected-actual", aMinusB);
+        TreeSet<String> bMinusA = new TreeSet<>(grouping);
+        bMinusA.removeAll(expected);
+        result.putAll("actual-expected", bMinusA);
+        return result;
+    }
 }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestDayPeriods.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestDayPeriods.java
index 80863b2..2805666 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestDayPeriods.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestDayPeriods.java
@@ -51,7 +51,7 @@
         for (int i = 0; i < dayPeriodInfo.getPeriodCount(); ++i) {
             R3<Integer, Boolean, DayPeriod> info = dayPeriodInfo.getPeriod(i);
             int start = info.get0();
-            assertEquals("Time is even hours", (int) (start / DayPeriodInfo.HOUR) * DayPeriodInfo.HOUR, (int) start);
+            assertEquals("Time is even hours", start / DayPeriodInfo.HOUR * DayPeriodInfo.HOUR, start);
             R2<Integer, DayPeriod> row = Row.of(start, info.get2());
             sorted.add(row);
         }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestDisplayAndInputProcessor.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestDisplayAndInputProcessor.java
index 322fc64..282f500 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestDisplayAndInputProcessor.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestDisplayAndInputProcessor.java
@@ -382,4 +382,14 @@
         }
         return "?";
     }
+
+    /**
+     * Test whether DisplayAndInputProcessor.processInput removes backspaces
+     */
+    public void TestBackspaceFilter() {
+        DisplayAndInputProcessor daip = new DisplayAndInputProcessor(info.getEnglish(), false);
+        String xpath = "//ldml/localeDisplayNames/languages/language[@type=\"fr\"]";
+        String value = daip.processInput(xpath, "\btest\bTEST\b", null);
+        assertEquals("Backspaces are filtered out", "testTEST", value);
+    }
 }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestDtdData.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestDtdData.java
index b6fb43b..38d6c37 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestDtdData.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestDtdData.java
@@ -30,10 +30,10 @@
 import org.unicode.cldr.util.XMLFileReader;
 import org.unicode.cldr.util.XPathParts;
 
+import com.google.common.base.Joiner;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.TreeMultimap;
 import com.ibm.icu.dev.test.TestFmwk;
-import com.ibm.icu.dev.util.CollectionUtilities;
 
 public class TestDtdData extends TestFmwk {
     private static final String COMMON_DIR = CLDRPaths.BASE_DIRECTORY + "common/";
@@ -50,7 +50,7 @@
 
             /*
              * TODO: re-enable the first test or something like it.
-             * It began to fail as a result of copying dtdData in XPathParts.cloneAsThawed rather than always making it null. 
+             * It began to fail as a result of copying dtdData in XPathParts.cloneAsThawed rather than always making it null.
              * Reference: https://unicode.org/cldr/trac/ticket/12007
              */
             // has a value & value attribute
@@ -130,7 +130,7 @@
                     actual.add(item + "==VALUE");
                 }
             }
-            TreeSet<String> temp = new TreeSet<String>(actual);
+            TreeSet<String> temp = new TreeSet<>(actual);
             temp.removeAll(expected);
             assertEquals("too many, extra:  " + path, Collections.emptySet(), temp);
             temp.clear();
@@ -176,7 +176,7 @@
             DtdData dtdData = DtdData.getInstance(type);
             Element special = dtdData.getElementFromName().get("special");
             checkEmpty(m, type, dtdData.ROOT, special, new HashSet<Element>(),
-                new ArrayList<Element>(Arrays.asList(dtdData.ROOT)));
+                new ArrayList<>(Arrays.asList(dtdData.ROOT)));
         }
         Collection<String> items = m.get("error");
         if (items != null) {
@@ -195,9 +195,9 @@
     }
 
     /** make sure that if the final element is empty, there is a value attribute required somewhere in the path
-     * @param m 
-     * @param type 
-     * @param seen 
+     * @param m
+     * @param type
+     * @param seen
      */
     private void checkEmpty(Multimap<String, String> m, DtdType type, Element element, Element special, HashSet<Element> seen,
         List<Element> parents) {
@@ -284,7 +284,7 @@
     }
 
     private String showPath(List<Element> parents) {
-        return "!//" + CollectionUtilities.join(parents, "/");
+        return "!//" + Joiner.on("/").join(parents);
     }
 
     public void TestNewDtdData() {
@@ -339,17 +339,17 @@
 //                        continue;
 //                    }
 //                    switch (attribute.getStatus()) {
-//                    case value: 
+//                    case value:
 //                        errln(type + "\t" + element + "\t" + attribute + "\t");
 //                    }
 //                }
 //            }
 //        }
-//        
+//
 //    }
 
     // TESTING CODE
-    static final Set<String> orderedElements = Collections.unmodifiableSet(new HashSet<String>(Arrays
+    static final Set<String> orderedElements = Collections.unmodifiableSet(new HashSet<>(Arrays
         .asList(
             // can prettyprint with TestAttributes
 
@@ -462,7 +462,14 @@
                 || (elementName.equals("parseLenients") && (attribute.equals("scope") || attribute.equals("level")))
                 || (elementName.equals("parseLenient") && attribute.equals("sample"))
                 || (elementName.equals("ordinalMinimalPairs") && attribute.equals("ordinal"))
-                || (elementName.equals("styleName") && attribute.equals("subtype"));
+                || (elementName.equals("styleName") && attribute.equals("subtype"))
+                || (elementName.equals("unitPattern") && attribute.equals("case"))
+                || (elementName.equals("compoundUnitPattern") && attribute.equals("case"))
+                || (elementName.equals("compoundUnitPattern1") && (attribute.equals("case") || attribute.equals("gender")))
+                || (elementName.equals("genderMinimalPairs") && attribute.equals("gender"))
+                || (elementName.equals("caseMinimalPairs") && attribute.equals("case"))
+                ;
+
         case ldmlBCP47:
             return attribute.equals("_q")
                 //|| attribute.equals("alias")
@@ -570,9 +577,17 @@
                 || (elementName.equals("transform") && (attribute.equals("source") || attribute.equals("target") || attribute.equals("direction") || attribute
                     .equals("variant")))
                 || (elementName.equals("grammaticalFeatures") && (attribute.equals("locales") || attribute.equals("targets")))
+                || (elementName.equals("grammaticalDefiniteness") && attribute.equals("scope"))
+                || (elementName.equals("grammaticalCase") && attribute.equals("scope"))
+                || (elementName.equals("grammaticalGender") && attribute.equals("scope"))
                 || (elementName.equals("convertUnit") && (attribute.equals("source") || attribute.equals("target")))
                 || (elementName.equals("unitConstant") && attribute.equals("constant"))
                 || (elementName.equals("unitQuantity") && attribute.equals("baseUnit"))
+
+                || attribute.equals("scope")
+                || elementName.equals("deriveComponent") && (attribute.equals("feature") || attribute.equals("structure"))
+                || elementName.equals("grammaticalDerivations") && attribute.equals("locales")
+                || elementName.equals("deriveCompound") && (attribute.equals("feature")|| attribute.equals("structure"))
                 ;
 
         case keyboard:
@@ -642,7 +657,7 @@
             final String inputText = (String)test[1];
             int startOfValues = test[2] instanceof String ? 3 : 2;
             String expectedFormat = startOfValues == 3 ? (String) test[2] : inputText;
-            Set<Enum> expected = new TreeSet<Enum>();
+            Set<Enum> expected = new TreeSet<>();
             for (Object item : Arrays.asList(test).subList(startOfValues, test.length)) {
                 expected.add((Enum)item);
             }
@@ -664,7 +679,7 @@
             MatchValue matcher = MatchValue.of((String)test[0]);
             final String toMatch = (String)test[1];
             boolean expectedValue = test.length < 3 ? true : Boolean.valueOf((String)test[2]);
-            
+
             final boolean actual = matcher.is(toMatch);
             assertEquals(Arrays.asList(test).toString(), expectedValue, actual);
         }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestExampleDependencies.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestExampleDependencies.java
index 3592a68..03c7a9d 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestExampleDependencies.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestExampleDependencies.java
@@ -1,8 +1,10 @@
 package org.unicode.cldr.unittest;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -18,20 +20,28 @@
 import org.unicode.cldr.util.Factory;
 import org.unicode.cldr.util.LocaleIDParser;
 import org.unicode.cldr.util.PathStarrer;
+import org.unicode.cldr.util.RecordingCLDRFile;
 import org.unicode.cldr.util.XMLSource;
 
+import com.google.common.collect.Multimap;
+import com.google.common.collect.TreeMultimap;
 import com.ibm.icu.dev.test.TestFmwk;
-import com.ibm.icu.dev.util.CollectionUtilities;
 
 public class TestExampleDependencies extends TestFmwk {
-    CLDRConfig info = CLDRConfig.getInstance();
 
-    static boolean testDependencies = false; // make true to test
+    private final boolean USE_STARRED_PATHS = true;
+    private final boolean USE_RECORDING = true;
+    private final String fileExtension = USE_RECORDING ? ".java" : ".json";
+
+    private CLDRConfig info;
+    private CLDRFile englishFile;
+    private Factory factory;
+    private Set<String> locales;
+    private String outputDir;
+    private PathStarrer pathStarrer;
 
     public static void main(String[] args) {
-        testDependencies = true;
         new TestExampleDependencies().run(args);
-        testDependencies = false;
     }
 
     /**
@@ -39,95 +49,146 @@
      *
      * The goal is to optimize example caching by only regenerating examples when necessary.
      *
-     * Still under construction. Reference: https://unicode-org.atlassian.net/browse/CLDR-13331
+     * Reference: https://unicode-org.atlassian.net/browse/CLDR-13636
      *
      * @throws IOException
      */
     public void TestExampleGeneratorDependencies() throws IOException {
-        if (!testDependencies) {
-            return;
+        info = CLDRConfig.getInstance();
+        englishFile = info.getEnglish();
+        factory = info.getCldrFactory();
+        locales = factory.getAvailable();
+        outputDir = CLDRPaths.GEN_DIRECTORY + "test" + File.separator;
+        pathStarrer = USE_STARRED_PATHS ? new PathStarrer().setSubstitutionPattern("*") : null;
+
+        System.out.println("...");
+        System.out.println("Looping through " + locales.size() + " locales ...");
+
+        if (USE_RECORDING) {
+            /*
+             * Fast method: use RecordingCLDRFile to learn which paths are checked
+             * to produce the example for a given path. This is fast enough that we
+             * can do it for all locales at once to produce a single file.
+             */
+            useRecording();
+        } else {
+            /*
+             * Slow method: loop through all paths, modifying the value for each path
+             * and then doing an inner loop through all paths to see whether the example
+             * changed for each other path. This is extremely slow, so we produce one file
+             * for each locale, with the intention of merging the files afterwards.
+             */
+            useModifying();
         }
-        final boolean JUST_LIST_PATHS = false;
-        final boolean USE_STARRED_PATHS = true;
+    }
 
-        /*
-         * Different localeId gives different dependencies.
-         * So far, have tested with these locales:
-         *   "fr": 650 "type A"
-         *   "de": 652 "type A"
-         *   "am": 618 "type A"
-         *   "zh": 12521 "type A"!
-         *   "ar": ?
-         */
-        final String localeId = "sr_Cyrl_BA";
+    private void useRecording() throws IOException {
+        final Multimap<String, String> dependencies = TreeMultimap.create();
+        for (String localeId : locales) {
+            System.out.println(localeId);
+            addDependenciesForLocale(dependencies, localeId);
+        }
+        String fileName = "ExampleDependencies" + fileExtension;
+        System.out.println("Creating " + outputDir + fileName + " ...");
+        writeDependenciesToFile(dependencies, outputDir, fileName);
+    }
 
-        CLDRFile englishFile = info.getEnglish();
+    private void addDependenciesForLocale(Multimap<String, String> dependencies, String localeId) {
+        RecordingCLDRFile cldrFile = makeRecordingCldrFile(localeId);
+        cldrFile.disableCaching();
 
-        Factory factory = CLDRConfig.getInstance().getCldrFactory();
+        Set<String> paths = new TreeSet<>(cldrFile.getComparator());
+        // time-consuming
+        cldrFile.forEach(paths::add);
+
+        ExampleGenerator egTest = new ExampleGenerator(cldrFile, englishFile, CLDRPaths.DEFAULT_SUPPLEMENTAL_DIRECTORY);
+        egTest.setCachingEnabled(false); // will not employ a cache -- this should save some time, since cache would be wasted
+
+        for (String pathB : paths) {
+            if (skipPathForDependencies(pathB)) {
+                continue;
+            }
+            String valueB = cldrFile.getStringValue(pathB);
+            if (valueB == null) {
+                continue;
+            }
+            String starredB = USE_STARRED_PATHS ? pathStarrer.set(pathB) : null;
+            cldrFile.clearRecordedPaths();
+            egTest.getExampleHtml(pathB, valueB);
+            HashSet<String> pathsA = cldrFile.getRecordedPaths();
+            for (String pathA: pathsA) {
+                if (pathA.equals(pathB) || skipPathForDependencies(pathA)) {
+                    continue;
+                }
+                String starredA = USE_STARRED_PATHS ? pathStarrer.set(pathA) : null;
+                dependencies.put(USE_STARRED_PATHS ? starredA : pathA,
+                                  USE_STARRED_PATHS ? starredB : pathB);
+            }
+        }
+    }
+
+    private RecordingCLDRFile makeRecordingCldrFile(String localeId) {
+        XMLSource topSource = factory.makeSource(localeId);
+        List<XMLSource> parents = getParentSources(factory, localeId);
+        XMLSource[] a = new XMLSource[parents.size()];
+        return new RecordingCLDRFile(topSource, parents.toArray(a));
+    }
+
+    private void useModifying() throws IOException {
+        for (String localeId : locales) {
+            String fileName = "example_dependencies_A_"
+                + localeId
+                + (USE_STARRED_PATHS ? "_star" : "")
+                + fileExtension;
+
+            if (new File(outputDir, fileName).exists()) {
+                System.out.println("Locale: " + localeId + " -- skipping since " +
+                    outputDir + fileName + " already exists");
+            } else {
+                System.out.println("Locale: " + localeId + " -- creating "
+                    + outputDir + fileName + " ...");
+                writeOneLocale(localeId, outputDir, fileName);
+            }
+        }
+    }
+
+    private void writeOneLocale(String localeId, String outputDir, String fileName) throws IOException {
         CLDRFile cldrFile = makeMutableResolved(factory, localeId); // time-consuming
         cldrFile.disableCaching();
-        CLDRFile top = cldrFile.getUnresolved(); // can mutate top
 
-        Set<String> paths = new TreeSet<String>(cldrFile.getComparator());
-        CollectionUtilities.addAll(cldrFile.iterator(), paths); // time-consuming
-        if (JUST_LIST_PATHS) {
-            String dir = CLDRPaths.GEN_DIRECTORY + "test/";
-            String name = "allpaths_" + localeId + ".txt";
-            PrintWriter writer = FileUtilities.openUTF8Writer(dir, name);
-            ArrayList<String> list = new ArrayList<String>(paths);
-            Collections.sort(list);
-            for (String path : list) {
-                // writer.println(path);
-                writer.println(path.replaceAll("\"", "\\\\\""));
-            }
-            return;
-        }
-        final PathStarrer pathStarrer = USE_STARRED_PATHS ? new PathStarrer().setSubstitutionPattern("*") : null;
+        Set<String> paths = new TreeSet<>(cldrFile.getComparator());
+        // time-consuming
+        cldrFile.forEach(paths::add);
 
         ExampleGenerator egBase = new ExampleGenerator(cldrFile, englishFile, CLDRPaths.DEFAULT_SUPPLEMENTAL_DIRECTORY);
 
-        HashMap<String, String> originalValues = new HashMap<String, String>();
+        HashMap<String, String> originalValues = new HashMap<>();
 
-        /*
-         * Get all the examples so they'll be added to the cache for egBase.
-         */
-        for (String path : paths) {
-            if (path.endsWith("/alias") || path.startsWith("//ldml/identity")) {
-                continue;
-            }
-            String value = cldrFile.getStringValue(path);
-            if (value == null) {
-                continue;
-            }
-            originalValues.put(path, value);
-            if (false && path.equals("//ldml/numbers/currencies/currency[@type=\"EUR\"]/symbol")) {
-                System.out.println("Got " + path + " in first loop ...");
-            }
-            egBase.getExampleHtml(path, value);
-        }
+        getExamplesForBase(egBase, cldrFile, paths, originalValues);
         /*
          * Make egBase "cacheOnly" so that getExampleHtml will throw an exception if future queries
          * are not found in the cache. Alternatively, could just make a local hashmap originalExamples,
          * similar to originalValues. That might be more robust, require more memory, faster or slower?
          * Should try both ways.
          */
-        egBase.makeCacheOnly();
+        egBase.setCacheOnly(true);
 
         ExampleGenerator egTest = new ExampleGenerator(cldrFile, englishFile, CLDRPaths.DEFAULT_SUPPLEMENTAL_DIRECTORY);
-        egTest.disableCaching(); // will not employ a cache -- this should save some time, since cache would be wasted
+        egTest.setCachingEnabled(false); // will not employ a cache -- this should save some time, since cache would be wasted
+
+        CLDRFile top = cldrFile.getUnresolved(); // can mutate top
+
+        final Multimap<String, String> dependencies = TreeMultimap.create();
+        long count = 0;
+        long skipCount = 0;
+        long dependencyCount = 0;
 
         /*
          * For each path (A), temporarily change its value, and then check each other path (B),
          * to see whether changing the value for A changed the example for B.
          */
-        HashMap<String, HashSet<String>> dependenciesA = new HashMap<String, HashSet<String>>();
-        // HashMap<String, HashSet<String>> dependenciesB = new HashMap<String, HashSet<String>>();
-        long count = 0;
-        long skipCount = 0;
-        long dependencyCount = 0;
-
         for (String pathA : paths) {
-            if (skipPathForDependencies(pathA, true)) {
+            if (skipPathForDependencies(pathA)) {
                 ++skipCount;
                 continue;
             }
@@ -141,6 +202,7 @@
             if (count > 500000) {
                 break;
             }
+            String starredA = USE_STARRED_PATHS ? pathStarrer.set(pathA) : null;
             /*
              * Modify the value for pathA in some random way
              */
@@ -157,21 +219,14 @@
              * Reality check, did we really change the value returned by cldrFile.getStringValue?
              */
             String valueAX = cldrFile.getStringValue(pathA);
-            if (valueAX.equals(newValue)) {
-                // Good, expected
-                // System.out.println("Changing top changed cldrFile: newValue = " + newValue
-                //    + "; valueAX = " + valueAX + "; valueA = " + valueA);
-            } else {
+            if (!valueAX.equals(newValue)) {
                 // Bad, didn't work as expected
                 System.out.println("Changing top did not change cldrFile: newValue = " + newValue
                     + "; valueAX = " + valueAX + "; valueA = " + valueA);
             }
-            String starredA = USE_STARRED_PATHS ? pathStarrer.set(pathA) : null;
-            HashSet<String> a = USE_STARRED_PATHS ? dependenciesA.get(starredA) : null;
-            boolean maybeTypeA = ExampleGenerator.pathMightBeTypeA(pathA);
 
             for (String pathB : paths) {
-                if (pathA.equals(pathB) || skipPathForDependencies(pathB, false)) {
+                if (pathA.equals(pathB) || skipPathForDependencies(pathB)) {
                     continue;
                 }
                 /*
@@ -182,14 +237,9 @@
                  * pathB and the original valueB.
                  */
                 String valueB = originalValues.get(pathB);
-                // String valueB = cldrFile.getStringValue(pathB);
                 if (valueB == null) {
                     continue;
                 }
-                if (false && pathA.equals("//ldml/localeDisplayNames/languages/language[@type=\"aa\"]")
-                    && pathB.equals("//ldml/numbers/currencies/currency[@type=\"EUR\"]/symbol")) {
-                    System.out.println("Got our paths in inner loop...");
-                }
                 pathB = pathB.intern();
 
                 // egTest.icuServiceBuilder.setCldrFile(cldrFile); // clear caches in icuServiceBuilder; has to be public
@@ -198,29 +248,10 @@
                 if ((exTest == null) != (exBase == null)) {
                     throw new InternalError("One null but not both? " + pathA + " --- " + pathB);
                 } else if (exTest != null && !exTest.equals(exBase)) {
-                    if (!maybeTypeA) {
-                        System.out.println("Warning: !maybeTypeA: " + pathA);
-                    }
-                    if (a == null) {
-                        a = new HashSet<String>();
-                    }
-                    a.add(USE_STARRED_PATHS ? pathStarrer.set(pathB).intern() : pathB);
-
-                    /***
-                    HashSet<String> b = dependenciesB.get(pathB);
-                    if (b == null) {
-                        b = new HashSet<String>();
-                    }
-                    b.add(pathA);
-                    dependenciesB.put(pathB, b);
-                    ***/
-
+                    dependencies.put(USE_STARRED_PATHS ? starredA : pathA, USE_STARRED_PATHS ? pathStarrer.set(pathB).intern() : pathB);
                     ++dependencyCount;
                 }
             }
-            if (a != null && !a.isEmpty()) {
-                dependenciesA.put(USE_STARRED_PATHS ? starredA : pathA, a);
-            }
             /*
              * Restore the original value, so that the changes due to this pathA don't get
              * carried over to the next pathA. Again call valueChanged to clear getSourceLocaleIDCache.
@@ -233,21 +264,41 @@
                     + "; valueA = " + valueA);
             }
         }
-        final boolean countOnly = false;
-        writeDependenciesToFile(dependenciesA, "example_dependencies_A_" + localeId
-                + (USE_STARRED_PATHS ? "_star" : ""), countOnly);
-        // writeDependenciesToFile(dependenciesB, "example_dependencies_B_" + localeId, countOnly);
+        writeDependenciesToFile(dependencies, outputDir, fileName);
         System.out.println("count = " + count + "; skipCount = " + skipCount + "; dependencyCount = " + dependencyCount);
     }
 
     /**
+     * Get all the examples so they'll be added to the cache for egBase.
+     * Also fill originalValues.
+     *
+     * @param egBase
+     * @param cldrFile
+     * @param paths
+     * @param originalValues
+     */
+    private void getExamplesForBase(ExampleGenerator egBase, CLDRFile cldrFile, Set<String> paths, HashMap<String, String> originalValues) {
+        for (String path : paths) {
+            if (skipPathForDependencies(path)) {
+                continue;
+            }
+            String value = cldrFile.getStringValue(path);
+            if (value == null) {
+                continue;
+            }
+            originalValues.put(path, value);
+            egBase.getExampleHtml(path, value);
+        }
+    }
+
+    /**
      * Modify the given value string for testing dependencies
      *
      * @param value
      * @return the modified value, guaranteed to be different from value
      *
-     * TODO: avoid IllegalArgumentException thrown/caught in, e.g., ICUServiceBuilder.getSymbolString;
-     * this function might need path as parameter, to generate only "legal" values for specific paths.
+     * Note: it might be best to avoid IllegalArgumentException thrown/caught in, e.g., ICUServiceBuilder.getSymbolString;
+     * in which case this function might need path as parameter, to generate only "legal" values for specific paths.
      */
     private String modifyValueRandomly(String value) {
         /*
@@ -268,7 +319,6 @@
          * String concatenation, e.g., change "foo" to "foo1"
          */
         return value + "1";
-        // return "1".equals(value) ? "2" : "1";
     }
 
     /**
@@ -280,12 +330,12 @@
      * will be a SimpleXMLSource.
      *
      * @param factory
-     * @param localeID
+     * @param localeId
      * @return the CLDRFile
      */
-    private static CLDRFile makeMutableResolved(Factory factory, String localeID) {
-        XMLSource topSource = factory.makeSource(localeID).cloneAsThawed(); // make top one modifiable
-        List<XMLSource> parents = getParentSources(factory, localeID);
+    private static CLDRFile makeMutableResolved(Factory factory, String localeId) {
+        XMLSource topSource = factory.makeSource(localeId).cloneAsThawed(); // make top one modifiable
+        List<XMLSource> parents = getParentSources(factory, localeId);
         XMLSource[] a = new XMLSource[parents.size()];
         return new CLDRFile(topSource, parents.toArray(a));
     }
@@ -294,14 +344,14 @@
      * Get the parent sources for the given localeId
      *
      * @param factory
-     * @param localeID
+     * @param localeId
      * @return the List of XMLSource objects
      *
      * Called only by makeMutableResolved
      */
-    private static List<XMLSource> getParentSources(Factory factory, String localeID) {
+    private static List<XMLSource> getParentSources(Factory factory, String localeId) {
         List<XMLSource> parents = new ArrayList<>();
-        for (String currentLocaleID = LocaleIDParser.getParent(localeID);
+        for (String currentLocaleID = LocaleIDParser.getParent(localeId);
             currentLocaleID != null;
             currentLocaleID = LocaleIDParser.getParent(currentLocaleID)) {
             parents.add(factory.makeSource(currentLocaleID));
@@ -316,58 +366,62 @@
      * @param isTypeA true if path is playing role of pathA not pathB
      * @return true to skip, else false
      */
-    private static boolean skipPathForDependencies(String path, boolean isTypeA) {
+    private static boolean skipPathForDependencies(String path) {
         if (path.endsWith("/alias") || path.startsWith("//ldml/identity")) {
             return true;
         }
-        if (false && isTypeA) {
-            final String[] toSkip = {
-                "//ldml/characters/ellipsis",
-                "//ldml/characters/exemplarCharacters",
-                "//ldml/characters/parseLenients",
-                "//ldml/layout/orientation/lineOrder",
-                "//ldml/localeDisplayNames/codePatterns/codePattern",
-                "//ldml/localeDisplayNames/keys/key",
-                "//ldml/localeDisplayNames/languages/language",
-                "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern",
-                "//ldml/localeDisplayNames/localeDisplayPattern/localePattern",
-                "//ldml/localeDisplayNames/scripts/script",
-                "//ldml/localeDisplayNames/territories/territory",
-                "//ldml/localeDisplayNames/types/type",
-                "//ldml/localeDisplayNames/variants/variant",
-            };
-            for (String s: toSkip) {
-                if (path.startsWith(s)) {
-                    return true;
-                }
-            }
-        }
         return false;
     }
 
     /**
-     * Write the given map of example-generator path dependencies to a json file.
+     * Write the given map of example-generator path dependencies to a json or java file.
      *
-     * If this function is to be used and revised long-term, it would be better to use JSONObject,
+     * If this function is to be used for json and revised long-term, it would be better to use JSONObject,
      * or write a format other than json.
      * JSONObject isn't currently linked to cldr-unittest TestAll, package org.unicode.cldr.unittest.
      *
-     * @param dependencies the map of example-generator path dependencies
-     * @param fileName the name of the file to create, without path or extension
-     * @param countOnly true to show only the count of the set for each key path in the map
-     *                  false to include all the paths
+     * @param dependencies the multimap of example-generator path dependencies
+     * @param dir the directory in which to create the file
+     * @param fileName the name of the file to create
      *
      * @throws IOException
      */
-    private void writeDependenciesToFile(HashMap<String, HashSet<String>> dependencies, String fileName, boolean countOnly) throws IOException {
-        // JSONObject json = new JSONObject(dependencies);
-        // json.write(writer);
-        String dir = CLDRPaths.GEN_DIRECTORY + "test/";
-        String name = fileName + ".json";
+    private void writeDependenciesToFile(Multimap<String, String> dependencies, String dir, String name) throws IOException {
         PrintWriter writer = FileUtilities.openUTF8Writer(dir, name);
-        writer.println("{");
+        if (fileExtension.equals(".json")) {
+            writeJson(dependencies, dir, name, writer);
+        } else {
+            writeJava(dependencies, dir, name, writer);
+        }
+    }
 
-        ArrayList<String> list = new ArrayList<String>(dependencies.keySet());
+    private void writeJava(Multimap<String, String> dependencies, String dir, String name, PrintWriter writer) {
+        writer.println("package org.unicode.cldr.test;");
+        writer.println("import com.google.common.collect.ImmutableSetMultimap;");
+        writer.println("public class ExampleDependencies {");
+        writer.println("    public static ImmutableSetMultimap<String, String> dependencies");
+        writer.println("            = new ImmutableSetMultimap.Builder<String, String>()");
+        int dependenciesWritten = 0;
+        ArrayList<String> listA = new ArrayList<>(dependencies.keySet());
+        Collections.sort(listA);
+        for (String pathA : listA) {
+            ArrayList<String> listB = new ArrayList<>(dependencies.get(pathA));
+            Collections.sort(listB);
+            String a = "\"" + pathA.replaceAll("\"", "\\\\\"") + "\"";
+            for (String pathB : listB) {
+                String b = "\"" + pathB.replaceAll("\"", "\\\\\"") + "\"";
+                writer.println("        .put(" + a + ", " + b + ")");
+                ++dependenciesWritten;
+            }
+        }
+        writer.println("        .build();");
+        writer.println("}");
+        writer.close();
+        System.out.println("Wrote " + dependenciesWritten + " dependencies to " + dir + name);
+    }
+
+    private void writeJson(Multimap<String, String> dependencies, String dir, String name, PrintWriter writer) {
+        ArrayList<String> list = new ArrayList<>(dependencies.keySet());
         Collections.sort(list);
         boolean firstPathA = true;
         int keysWritten = 0;
@@ -377,28 +431,22 @@
             } else {
                 writer.println(",");
             }
-            HashSet<String> set = dependencies.get(pathA);
+            Collection<String> values = dependencies.get(pathA);
             writer.print("  " + "\"" + pathA.replaceAll("\"", "\\\\\"") + "\"" + ": ");
-            if (countOnly) {
-                Integer count = set.size();
-                writer.println(count.toString());
-            } else {
-                writer.println("[");
-                boolean firstPathB = true;
-                for (String pathB : set) {
-                    if (firstPathB) {
-                        firstPathB = false;
-                    } else {
-                        writer.println(",");
-                    }
-                    writer.print("    " + "\"" + pathB.replaceAll("\"", "\\\\\"") + "\"");
+            writer.println("[");
+            boolean firstPathB = true;
+            for (String pathB : values) {
+                if (firstPathB) {
+                    firstPathB = false;
+                } else {
+                    writer.println(",");
                 }
-                writer.println("");
-                writer.print("  ]");
+                writer.print("    " + "\"" + pathB.replaceAll("\"", "\\\\\"") + "\"");
             }
+            writer.println("");
+            writer.print("  ]");
             ++keysWritten;
         }
-
         writer.println("");
         writer.println("}");
         writer.close();
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestExampleGenerator.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestExampleGenerator.java
index 8b6f8ba..539148f 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestExampleGenerator.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestExampleGenerator.java
@@ -1,6 +1,7 @@
 package org.unicode.cldr.unittest;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Set;
@@ -14,11 +15,11 @@
 import org.unicode.cldr.util.Factory;
 import org.unicode.cldr.util.PathStarrer;
 import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo.Count;
+import org.unicode.cldr.util.UnitPathType;
 import org.unicode.cldr.util.With;
 
 import com.google.common.collect.ImmutableSet;
 import com.ibm.icu.dev.test.TestFmwk;
-import com.ibm.icu.dev.util.CollectionUtilities;
 
 public class TestExampleGenerator extends TestFmwk {
     CLDRConfig info = CLDRConfig.getInstance();
@@ -65,7 +66,7 @@
         }
     }
 
-    /**  
+    /**
      * Only add to this if the example should NEVER appear.
      * <br>WARNING - do not disable the test by putting in too broad a match. Make sure the paths are reasonably granular.
      */
@@ -104,7 +105,7 @@
         );
     // Only add to above if the example should NEVER appear.
 
-    /**  
+    /**
      * Add to this if the example SHOULD appear, but we don't have it yet.
      * <br>TODO Add later
      */
@@ -160,14 +161,14 @@
 
         "//ldml/localeDisplayNames/subdivisions/subdivision[@type=\"([^\"]*+)\"]",
 
-        "//ldml/dates/timeZoneNames/zone[@type=\"([^\"]*+)\"]/long/standard" // Error: (TestExampleGenerator.java:245) No background:   <Coordinated Universal Time>    〖Coordinated Universal Time〗    
+        "//ldml/dates/timeZoneNames/zone[@type=\"([^\"]*+)\"]/long/standard" // Error: (TestExampleGenerator.java:245) No background:   <Coordinated Universal Time>    〖Coordinated Universal Time〗
         );
     // Add to above if the example SHOULD appear, but we don't have it yet. TODO Add later
 
 
-    /**  
+    /**
      * Only add to this if the background should NEVER appear.
-     * <br>The background is used when the element is used as part of another format. 
+     * <br>The background is used when the element is used as part of another format.
      * <br>WARNING - do not disable the test by putting in too broad a match. Make sure the paths are reasonably granular.
      */
     static final Set<String> DELIBERATE_OK_TO_MISS_BACKGROUND = ImmutableSet.of(
@@ -193,9 +194,9 @@
     // Only add to above if the background should NEVER appear.
 
 
-    /**  
+    /**
      * Add to this if the background SHOULD appear, but we don't have them yet.
-     * <br> The background is used when the element is used as part of another format. 
+     * <br> The background is used when the element is used as part of another format.
      * <br> TODO Add later
      */
     static final Set<String> TEMPORARY_OK_TO_MISS_BACKGROUND = ImmutableSet.of(
@@ -210,10 +211,11 @@
     public void TestAllPaths() {
         ExampleGenerator exampleGenerator = getExampleGenerator("en");
         PathStarrer ps = new PathStarrer();
-        Set<String> seen = new HashSet<String>();
+        Set<String> seen = new HashSet<>();
         CLDRFile cldrFile = exampleGenerator.getCldrFile();
-        for (String path : CollectionUtilities.addAll(cldrFile.fullIterable()
-            .iterator(), new TreeSet<String>(cldrFile.getComparator()))) {
+        TreeSet<String> target = new TreeSet<>(cldrFile.getComparator());
+        cldrFile.fullIterable().forEach(target::add);
+        for (String path : target) {
             String plainStarred = ps.set(path);
             String value = cldrFile.getStringValue(path);
             if (value == null || path.endsWith("/alias")
@@ -241,6 +243,10 @@
 
                 if (simplified.contains("null")) {
                     if (true || !seen.contains(javaEscapedStarred)) {
+                        // debug
+                        exampleGenerator.getExampleHtml(path, value);
+                        ExampleGenerator.simplify(example, false);
+
                         errln("'null' in message:\t<" + value + ">\t"
                             + simplified + "\t" + javaEscapedStarred);
                         // String example2 =
@@ -307,17 +313,17 @@
     }
 
     public void TestCompoundUnit() {
-        String[][] tests = { 
+        String[][] tests = {
             { "per", "LONG", "one", "〖❬1 meter❭ per ❬second❭〗" },
             { "per", "SHORT", "one", "〖❬1 m❭/❬sec❭〗" },
             { "per", "NARROW", "one", "〖❬1m❭/❬s❭〗" },
             { "per", "LONG", "other", "〖❬1.5 meters❭ per ❬second❭〗" },
             { "per", "SHORT", "other", "〖❬1.5 m❭/❬sec❭〗" },
             { "per", "NARROW", "other", "〖❬1.5m❭/❬s❭〗" },
-            { "times", "LONG", "one", "〖❬1 newton❭⋅❬meter❭〗" },
+            { "times", "LONG", "one", "〖❬1 newton❭-❬meter❭〗" },
             { "times", "SHORT", "one", "〖❬1 N❭⋅❬m❭〗" },
             { "times", "NARROW", "one", "〖❬1N❭⋅❬m❭〗" },
-            { "times", "LONG", "other", "〖❬1.5 newton❭⋅❬meters❭〗" },
+            { "times", "LONG", "other", "〖❬1.5 newton❭-❬meters❭〗" },
             { "times", "SHORT", "other", "〖❬1.5 N❭⋅❬m❭〗" },
             { "times", "NARROW", "other", "〖❬1.5N❭⋅❬m❭〗" },
         };
@@ -333,7 +339,7 @@
         ExampleGenerator exampleGenerator = getExampleGenerator(locale);
         for (String[] test : tests) {
             String actual = exampleGenerator.handleCompoundUnit(
-                UnitLength.valueOf(test[1]), 
+                UnitLength.valueOf(test[1]),
                 test[0],
                 Count.valueOf(test[2]));
             assertEquals("CompoundUnit", test[3],
@@ -341,8 +347,34 @@
         }
     }
 
+    public void TestTranslationPaths() {
+        for (String locale : Arrays.asList("en", "el")) {
+            CLDRFile cldrFile = CLDRConfig.getInstance().getCldrFactory().make(locale, true);
+            ExampleGenerator exampleGenerator = getExampleGenerator(locale);
+
+            for (UnitPathType pathType : UnitPathType.values()) {
+                for (String width : Arrays.asList("long", "short", "narrow")) {
+                    if (pathType == UnitPathType.gender && !width.equals("long")) {
+                        continue;
+                    }
+                    for (String unit : pathType.sampleShortUnitType) {
+                        String path = pathType.getTranslationPath(cldrFile, width, unit, "one", "nominative", null);
+                        String value = cldrFile.getStringValue(path);
+                        if (value != null) {
+                            String example = exampleGenerator.getExampleHtml(path, value);
+                            if (assertNotNull(locale + "/" + path, example)) {
+                                String simplified = ExampleGenerator.simplify(example, false);
+                                warnln(locale + "/" + pathType.toString() + " ==>" + simplified);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
     public void TestCompoundUnit2() {
-        String[][] tests = { 
+        String[][] tests = {
             { "de", "LONG", "other", "Quadrat{0}", "〖❬1,5 ❭Quadrat❬meter❭〗" },
 
             { "en", "SHORT", "one", "z{0}", "〖❬1 ❭z❬m❭〗" },
@@ -362,7 +394,7 @@
             ExampleGenerator exampleGenerator = getExampleGenerator(test[0]);
 
             String actual = exampleGenerator.handleCompoundUnit1(
-                UnitLength.valueOf(test[1]), 
+                UnitLength.valueOf(test[1]),
                 Count.valueOf(test[2]),
                 test[3]);
             assertEquals("CompoundUnit", test[4],
@@ -372,35 +404,35 @@
 
     public void TestCompoundUnit3() {
         final Factory cldrFactory = CLDRConfig.getInstance().getCldrFactory();
-        String[][] tests = { 
+        String[][] tests = {
             // locale, path, value, expected-example
-            { "en", "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1", 
+            { "en", "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1",
                 "LOCALE", "〖square ❬meters❭〗" }, //
-            { "en", "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"]", 
+            { "en", "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"]",
                     "LOCALE", "〖❬1 ❭square ❬meter❭〗" }, //
-            { "en", "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"]", 
+            { "en", "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"]",
                         "LOCALE", "〖❬1.5 ❭square ❬meters❭〗" }, //
 
-            { "en", "//ldml/units/unitLength[@type=\"narrow\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1", 
+            { "en", "//ldml/units/unitLength[@type=\"narrow\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1",
                             "LOCALE", "〖❬m❭²〗" },
-            { "en", "//ldml/units/unitLength[@type=\"narrow\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"]", 
+            { "en", "//ldml/units/unitLength[@type=\"narrow\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"]",
                                 "LOCALE", "〖❬1m❭²〗" },
-            { "en", "//ldml/units/unitLength[@type=\"narrow\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"]", 
+            { "en", "//ldml/units/unitLength[@type=\"narrow\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"]",
                                     "LOCALE", "〖❬1.5m❭²〗" },
 
             // warning, french patterns has U+00A0 in them
-            { "fr", "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1", 
+            { "fr", "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1",
                                         "Square {0}", "〖Square ❬mètres❭〗" },
-            { "fr", "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"]", 
+            { "fr", "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"]",
                                             "square {0}", "〖❬1,5 ❭square ❬mètre❭〗" },
-            { "fr", "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"]", 
+            { "fr", "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"]",
                                                 "squares {0}", "〖❬3,5 ❭squares ❬mètres❭〗" },
 
-            { "fr", "//ldml/units/unitLength[@type=\"narrow\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1", 
+            { "fr", "//ldml/units/unitLength[@type=\"narrow\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1",
                                                     "LOCALE", "〖❬m❭²〗" },
-            { "fr", "//ldml/units/unitLength[@type=\"narrow\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"]", 
+            { "fr", "//ldml/units/unitLength[@type=\"narrow\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"]",
                                                         "LOCALE", "〖❬1,5m❭²〗" },
-            { "fr", "//ldml/units/unitLength[@type=\"narrow\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"]", 
+            { "fr", "//ldml/units/unitLength[@type=\"narrow\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"]",
                                                             "LOCALE", "〖❬3,5m❭²〗" },
         };
 
@@ -411,22 +443,22 @@
             final String xpath = test[1];
             String value = test[2];
             String expected = test[3];
-            
+
             ExampleGenerator exampleGenerator = getExampleGenerator(localeID);
 
             if (value.equals("LOCALE")) {
                 value = cldrFactory.make(localeID, true).getStringValue(xpath);
             }
             String actual = exampleGenerator.getExampleHtml(xpath, value);
-            assertEquals(++lineCount + ") " 
-                + localeID 
+            assertEquals(++lineCount + ") "
+                + localeID
                 + ", CompoundUnit3", expected,
                 ExampleGenerator.simplify(actual, false));
         }
 
     }
 
-    HashMap<String, ExampleGenerator> ExampleGeneratorCache = new HashMap<String, ExampleGenerator>();
+    HashMap<String, ExampleGenerator> ExampleGeneratorCache = new HashMap<>();
 
     private ExampleGenerator getExampleGenerator(String locale) {
         ExampleGenerator result = ExampleGeneratorCache.get(locale);
@@ -637,16 +669,17 @@
             }
             String value = cldrFile.getStringValue(xpath);
             checkPathValue(exampleGenerator, xpath, value, null);
-            if (xpath.contains("count=\"one\"")) {
-                String xpath2 = xpath.replace("count=\"one\"", "count=\"1\"");
-                checkPathValue(exampleGenerator, xpath2, value, null);
-            }
+            // remove this, no longer used
+//            if (xpath.contains("count=\"one\"")) {
+//                String xpath2 = xpath.replace("count=\"one\"", "count=\"1\"");
+//                checkPathValue(exampleGenerator, xpath2, value, null);
+//            }
         }
     }
 
     private void checkPathValue(ExampleGenerator exampleGenerator,
         String xpath, String value, String expected) {
-        Set<String> alreadySeen = new HashSet<String>();
+        Set<String> alreadySeen = new HashSet<>();
         try {
             String text = exampleGenerator.getExampleHtml(xpath, value);
             if (text == null) {
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestFmwkPlus.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestFmwkPlus.java
index ded46bc..91eacb1 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestFmwkPlus.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestFmwkPlus.java
@@ -7,8 +7,8 @@
 
 import org.unicode.cldr.util.CldrUtility;
 
+import com.google.common.base.Joiner;
 import com.ibm.icu.dev.test.TestFmwk;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.text.Transform;
 import com.ibm.icu.text.Transliterator;
 import com.ibm.icu.text.UnicodeSet;
@@ -160,7 +160,7 @@
 
         @Override
         public String toString() {
-            return CollectionUtilities.join(others, " and ");
+            return Joiner.on(" and ").join(others);
         }
     }
 
@@ -185,7 +185,7 @@
 
         @Override
         public String toString() {
-            return CollectionUtilities.join(others, " or ");
+            return Joiner.on(" or ").join(others);
         }
     }
 
@@ -336,6 +336,7 @@
             return true;
         }
 
+        @Override
         public String showFirst(UnicodeSet a) {
             return show(a.toPattern(false));
         }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestIdentity.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestIdentity.java
index dea2afa..384fe73 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestIdentity.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestIdentity.java
@@ -27,12 +27,10 @@
 
         List<Factory> factories = new ArrayList<Factory>();
         factories.add(testInfo.getFullCldrFactory());
-        if (getInclusion() > 5) { // Only do these in exhaustive move
-            factories.add(testInfo.getExemplarsFactory());
-            factories.add(testInfo.getCollationFactory());
-            factories.add(testInfo.getRBNFFactory());
-            factories.add(testInfo.getAnnotationsFactory());
-        }
+        factories.add(testInfo.getExemplarsFactory());
+        factories.add(testInfo.getCollationFactory());
+        factories.add(testInfo.getRBNFFactory());
+        factories.add(testInfo.getAnnotationsFactory());
         for (Factory factory : factories) {
             for (String locale : factory.getAvailable()) {
                 String canonicalLocaleID = ltc.transform(locale);
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestInheritance.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestInheritance.java
index 8f6ec8b..9aa2a69 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestInheritance.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestInheritance.java
@@ -36,8 +36,8 @@
 import org.unicode.cldr.util.SupplementalDataInfo.OfficialStatus;
 import org.unicode.cldr.util.SupplementalDataInfo.PopulationData;
 
+import com.google.common.base.Joiner;
 import com.ibm.icu.dev.test.TestFmwk;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row.R2;
 
@@ -66,7 +66,7 @@
     public void TestLocalesHaveOfficial() {
         // If we have a language, we have all the region locales where the
         // language is official
-        Set<String> SKIP_TERRITORIES = new HashSet<String>(Arrays.asList("001",
+        Set<String> SKIP_TERRITORIES = new HashSet<>(Arrays.asList("001",
             "150"));
         for (Entry<String, R2<List<String>, String>> s : dataInfo
             .getLocaleAliasInfo().get("territory").entrySet()) {
@@ -145,7 +145,7 @@
                 }
                 Set<String> officalChildren = entry.getValue().keySet();
                 if (!children.containsAll(officalChildren)) {
-                    Set<String> missing = new TreeSet<String>(officalChildren);
+                    Set<String> missing = new TreeSet<>(officalChildren);
                     missing.removeAll(children);
                     String message = "Missing CLDR locales for " + status
                         + " languages: " + missing;
@@ -159,7 +159,7 @@
         }
 
         if (DEBUG) {
-            Set<String> languages = new TreeSet<String>(
+            Set<String> languages = new TreeSet<>(
                 languageToChildren.keySet());
             languages.addAll(languageToOfficialChildren.keySet());
             System.out.print("\ncode\tlanguage");
@@ -247,18 +247,18 @@
         // find multiscript locales
         Relation<String, String> base2scripts = Relation.of(
             new TreeMap<String, Set<String>>(), TreeSet.class);
-        Map<String, String> parent2default = new TreeMap<String, String>();
-        Map<String, String> default2parent = new TreeMap<String, String>();
+        Map<String, String> parent2default = new TreeMap<>();
+        Map<String, String> default2parent = new TreeMap<>();
         Relation<String, String> base2locales = Relation.of(
             new TreeMap<String, Set<String>>(), TreeSet.class);
 
-        Set<String> knownMultiScriptLanguages = new HashSet<String>(Arrays.asList("bm", "ha"));
+        Set<String> knownMultiScriptLanguages = new HashSet<>(Arrays.asList("bm", "ha"));
         // get multiscript locales
         for (String localeID : availableLocales) {
             String script = ltp.set(localeID).getScript();
             final String base = ltp.getLanguage();
-            if (!availableLocales.contains(base)) {
-                errln("Missing base locale for: " + localeID);
+            if (!availableLocales.contains(base) && !base.equals("und")) {
+                errln("Missing lang-subtag for: " + localeID);
             }
             base2locales.put(base, localeID);
             if (!script.isEmpty() && !base.equals("en")) { // HACK for en
@@ -290,8 +290,8 @@
             checkLocale(likelyAndMaximized.getKey(), true);
             checkLocale(likelyAndMaximized.getValue(), true);
         }
-        Map<String, String> exceptionDcLikely = new HashMap<String, String>();
-        Map<String, String> exceptionLikelyDc = new HashMap<String, String>();
+        Map<String, String> exceptionDcLikely = new HashMap<>();
+        Map<String, String> exceptionLikelyDc = new HashMap<>();
         for (String[] s : new String[][] { { "ar_001", "ar_Arab_EG" }, }) {
             exceptionDcLikely.put(s[0], s[1]);
             exceptionLikelyDc.put(s[1], s[0]);
@@ -372,7 +372,7 @@
         for (String loc : availableLocales) {
             String currentLoc = loc;
             boolean foundError = false;
-            List<String> inheritanceChain = new ArrayList<String>(Arrays.asList(loc));
+            List<String> inheritanceChain = new ArrayList<>(Arrays.asList(loc));
             while (currentLoc != null && !foundError) {
                 currentLoc = LocaleIDParser.getParent(currentLoc);
                 if (inheritanceChain.contains(currentLoc)) {
@@ -392,7 +392,7 @@
         Set<String> skip = Builder.with(new HashSet<String>())
             .addAll("root", "und")
             .freeze();
-        Set<String> languagesWithOneOrLessLocaleScriptInCommon = new HashSet<String>(Arrays.asList("bm", "ha", "hi", "ms", "iu", "mn"));
+        Set<String> languagesWithOneOrLessLocaleScriptInCommon = new HashSet<>(Arrays.asList("bm", "ha", "hi", "ms", "iu", "mn"));
         // for each base we have to have,
         // if multiscript, we have default contents for base+script,
         // base+script+region;
@@ -465,7 +465,7 @@
         // Then default contents la => la_Scrp && la_Scrp => la_Scrp_RG
         // or default contents la => la_RG && ! la_Scrp => la_Scrp_RG
 
-        TreeSet<String> additionalDefaultContents = new TreeSet<String>();
+        TreeSet<String> additionalDefaultContents = new TreeSet<>();
 
         for (Entry<String, String> entry : likely2Maximized.entrySet()) {
             String source = entry.getKey();
@@ -540,7 +540,7 @@
         }
         if (additionalDefaultContents.size() != 0) {
             errln("Suggested additions to supplementalMetadata/../defaultContent:\n"
-                + CollectionUtilities.join(additionalDefaultContents, " "));
+                + Joiner.on(" ").join(additionalDefaultContents));
         }
     }
 
@@ -677,7 +677,7 @@
     }
 
     public void TestDeprecatedTerritoryDataLocaleIds() {
-        HashSet<String> checked = new HashSet<String>();
+        HashSet<String> checked = new HashSet<>();
         for (String language : dataInfo
             .getLanguagesForTerritoriesPopulationData()) {
             checkLocale(language, false); // checks la_Scrp and la
@@ -925,7 +925,7 @@
     // TODO move this into central utilities
     private <K, V> String showDifferences(Map<K, V> a, Map<K, V> b) {
         StringBuilder result = new StringBuilder();
-        Set<K> keys = new LinkedHashSet<K>();
+        Set<K> keys = new LinkedHashSet<>();
         keys.addAll(a.keySet());
         keys.addAll(b.keySet());
         for (K key : keys) {
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestKeyboard.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestKeyboard.java
index a4fac48..c6d712d 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestKeyboard.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestKeyboard.java
@@ -1,5 +1,7 @@
 package org.unicode.cldr.unittest;
 
+import static org.unicode.cldr.util.PathUtilities.getNormalizedPathString;
+
 import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
@@ -10,22 +12,15 @@
 import org.unicode.cldr.draft.Keyboard;
 import org.unicode.cldr.draft.Keyboard.KeyboardWarningException;
 import org.unicode.cldr.util.CLDRConfig;
+import org.unicode.cldr.util.PathUtilities;
 
 public class TestKeyboard extends TestFmwkPlus {
     public static void main(String[] args) {
         new TestKeyboard().run(args);
     }
 
-    static final String dtdLocation;
-    static {
-        try {
-            dtdLocation = CLDRConfig.getInstance().getCldrBaseDirectory()
-                .getCanonicalPath()
-                + "/keyboards/dtd/ldmlKeyboard.dtd";
-        } catch (IOException e) {
-            throw new IllegalArgumentException(e);
-        }
-    }
+    static final String dtdLocation =
+            getNormalizedPathString(CLDRConfig.getInstance().getCldrBaseDirectory()) + "/keyboards/dtd/ldmlKeyboard.dtd";
 
     public void TestGoodSample() throws IOException {
         // preload these to make debugging easier
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestLdml2ICU.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestLdml2ICU.java
deleted file mode 100644
index 2b478a1..0000000
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestLdml2ICU.java
+++ /dev/null
@@ -1,263 +0,0 @@
-package org.unicode.cldr.unittest;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.unicode.cldr.icu.NewLdml2IcuConverter;
-import org.unicode.cldr.util.CLDRConfig;
-import org.unicode.cldr.util.CLDRFile;
-import org.unicode.cldr.util.CLDRFile.DraftStatus;
-import org.unicode.cldr.util.CLDRPaths;
-import org.unicode.cldr.util.CldrUtility.VariableReplacer;
-import org.unicode.cldr.util.Pair;
-import org.unicode.cldr.util.RegexFileParser;
-import org.unicode.cldr.util.RegexFileParser.RegexLineParser;
-import org.unicode.cldr.util.RegexFileParser.VariableProcessor;
-import org.unicode.cldr.util.RegexLookup;
-import org.unicode.cldr.util.RegexLookup.RegexFinder;
-import org.unicode.cldr.util.XMLFileReader;
-import org.unicode.cldr.util.XPathParts;
-
-import com.ibm.icu.dev.test.TestFmwk;
-import com.ibm.icu.text.Transform;
-import com.ibm.icu.util.Output;
-
-/**
- * Tests the parts of the Ldml2IcuConverter that uses RegexLookups to convert
- * values to ICU. Data that is converted using other methods isn't tested here.
- *
- * @author jchye
- */
-public class TestLdml2ICU extends TestFmwk {
-    private static final boolean DEBUG = false;
-
-    static final CLDRConfig info = CLDRConfig.getInstance();
-
-    private static final Transform<String, RegexFinder> XPATH_TRANSFORM = new Transform<String, RegexFinder>() {
-        public RegexFinder transform(String source) {
-            final String newSource = source.replace("[@", "\\[@");
-            return new RegexFinder("^" + newSource + "$");
-        }
-    };
-
-    public static void main(String[] args) {
-        new TestLdml2ICU().run(args);
-    }
-
-    enum ExclusionType {
-        UNCONVERTED, IGNORE, // May be converted or not, but we don't care
-        WARNING;
-        public static Transform<String, Pair<ExclusionType, String>> TRANSFORM = new Transform<String, Pair<ExclusionType, String>>() {
-            public Pair<ExclusionType, String> transform(String source) {
-                String value = null;
-                if (source.contains(";")) {
-                    String[] split = source.split("\\s*;\\s*");
-                    source = split[0];
-                    value = split[1];
-                }
-                ExclusionType type = ExclusionType
-                    .valueOf(source.toUpperCase());
-                return Pair.of(type, value);
-            }
-        };
-    }
-
-    static final RegexLookup<Pair<ExclusionType, String>> exclusions = RegexLookup
-        .of(ExclusionType.TRANSFORM)
-        .setPatternTransform(RegexLookup.RegexFinderTransformPath)
-        .loadFromFile(TestLdml2ICU.class, "../util/data/testLdml2Icu.txt");
-
-    public void TestEnglish() {
-        checkLocaleRegexes("en");
-    }
-
-    public void TestArabic() {
-        checkLocaleRegexes("ar");
-    }
-
-    public void TestRoot() {
-        checkLocaleRegexes("root");
-    }
-
-    public void TestRussian() {
-        checkLocaleRegexes("ru");
-    }
-
-    public void TestJapanese() {
-        checkLocaleRegexes("ja");
-    }
-
-    public void TestTamil() {
-        checkLocaleRegexes("ta");
-    }
-
-    public void TestSupplemental() {
-        checkSupplementalRegexes("supplementalData");
-    }
-
-    public void TestSupplmentalMetadata() {
-        checkSupplementalRegexes("supplementalMetadata");
-    }
-
-//    public void TestTelephoneCodeData() {
-//        checkSupplementalRegexes("telephoneCodeData");
-//    }
-//
-    public void TestMetaZones() {
-        checkSupplementalRegexes("metaZones");
-    }
-
-    public void TestLanguageInfo() {
-        checkSupplementalRegexes("languageInfo");
-    }
-
-    public void TestLikelySubtags() {
-        checkSupplementalRegexes("likelySubtags");
-    }
-
-    public void TestNumberingSystems() {
-        checkSupplementalRegexes("numberingSystems");
-    }
-
-    public void TestWindowsZones() {
-        checkSupplementalRegexes("windowsZones");
-    }
-
-    public void TestGenderList() {
-        checkSupplementalRegexes("genderList");
-    }
-
-//    public void TestPostalCodeData() {
-//        checkSupplementalRegexes("postalCodeData");
-//    }
-
-    /**
-     * Loads the regex files used to convert XPaths to ICU paths.
-     */
-    private static RegexLookup<Object> loadRegexes(String filename) {
-        final RegexLookup<Object> lookup = RegexLookup.of()
-            .setPatternTransform(XPATH_TRANSFORM);
-        RegexFileParser parser = new RegexFileParser();
-        parser.setLineParser(new RegexLineParser() {
-            int patternNum = 0;
-
-            @Override
-            public void parse(String line) {
-                int pos = line.indexOf(";");
-                // We only care about the patterns.
-                if (pos == 0)
-                    return;
-                String pattern = pos < 0 ? line : line.substring(0, pos).trim();
-                lookup.add(pattern, patternNum++);
-            }
-        });
-        parser.setVariableProcessor(new VariableProcessor() {
-            VariableReplacer variables = new VariableReplacer();
-
-            @Override
-            public void add(String variableName, String value) {
-                if (value.startsWith("//")) { // is xpath
-                    value = "[^\"]++";
-                }
-                variables.add(variableName, value);
-            }
-
-            @Override
-            public String replace(String str) {
-                return variables.replace(str);
-            }
-
-        });
-        parser.parse(NewLdml2IcuConverter.class, filename);
-        return lookup;
-    }
-
-    /**
-     * Checks conversion of XML files in the supplemental directory.
-     *
-     * @param name
-     *            the name of the XML file to be converted (minus the extension)
-     */
-    private void checkSupplementalRegexes(String name) {
-        RegexLookup<Object> lookup = loadRegexes("ldml2icu_supplemental.txt");
-        List<Pair<String, String>> cldrData = new ArrayList<Pair<String, String>>();
-        XMLFileReader.loadPathValues(CLDRPaths.DEFAULT_SUPPLEMENTAL_DIRECTORY
-            + name + ".xml", cldrData, true);
-        for (Pair<String, String> pair : cldrData) {
-            String xpath = CLDRFile.getNondraftNonaltXPath(pair.getFirst());
-            XPathParts parts = XPathParts.getFrozenInstance(xpath);
-            xpath = parts.toString();
-            checkPath(lookup, xpath, pair.getSecond());
-        }
-    }
-
-    Set<String> unconverted = new HashSet<String>();
-
-    /**
-     * Checks if an xpath was matched by a RegexLookup.
-     */
-    private <T> void checkPath(RegexLookup<T> lookup, String xpath, String value) {
-        Pair<ExclusionType, String> exclusionInfo = exclusions.get(xpath);
-        ExclusionType exclusionType = null;
-        if (exclusionInfo != null) {
-            exclusionType = exclusionInfo.getFirst();
-        }
-
-        if (lookup.get(xpath) == null) {
-            String errorMessage = "CLDR xpath  <" + xpath + "> with value <"
-                + value + "> was not converted to ICU.";
-            if (exclusionType == null) {
-                logRegexLookup(this, lookup, xpath);
-                errln(errorMessage);
-            } else if (exclusionType == ExclusionType.WARNING) {
-                logln(errorMessage);
-            } else if (exclusionType == ExclusionType.UNCONVERTED) {
-                String template = xpath.replaceAll("\"[^\"]++\"", "*");
-                if (!unconverted.add(template)) {
-                    logln("Not converted: " + xpath);
-                }
-            }
-        } else if (exclusionType == ExclusionType.UNCONVERTED) {
-            logRegexLookup(this, exclusions, xpath);
-            errln("CLDR xpath <"
-                + xpath
-                + "> is in the exclusions list but was matched. "
-                + "To make the test pass, remove the relevant regex from org/unicode/cldr/util/data/testLdml2Icu.txt");
-        }
-    }
-
-    private static <T> void logRegexLookup(TestFmwk testFramework, RegexLookup<T> lookup, String toLookup) {
-        Output<String[]> arguments = new Output<>();
-        Output<RegexLookup.Finder> matcherFound = new Output<>();
-        List<String> failures = new ArrayList<String>();
-        lookup.get(toLookup, null, arguments, matcherFound, failures);
-        testFramework.logln("lookup arguments: " + (arguments.value == null ? "null" : Arrays.asList(arguments.value)));
-        testFramework.logln("lookup matcherFound: " + matcherFound);
-        for (String s : failures) {
-            testFramework.logln(s);
-        }
-    }
-
-    /**
-     * Checks conversion of XML locale files.
-     *
-     * @param name
-     *            the name of the XML file to be converted (minus the extension)
-     */
-    private void checkLocaleRegexes(String locale) {
-        CLDRFile plain = info.getCldrFactory().make(locale, false,
-            DraftStatus.contributed);
-        RegexLookup<Object> lookup = loadRegexes("ldml2icu_locale.txt");
-        for (String xpath : plain) {
-            if (DEBUG && xpath.contains("defaultNumberingSystem")) {
-                int debug = 0;
-            }
-            String fullPath = CLDRFile.getNondraftNonaltXPath(plain
-                .getFullXPath(xpath));
-            checkPath(lookup, fullPath, plain.getStringValue(xpath));
-        }
-    }
-}
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestLdml2IcuCompleteness.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestLdml2IcuCompleteness.java
deleted file mode 100644
index d97e7c7..0000000
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestLdml2IcuCompleteness.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.unicode.cldr.unittest;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashSet;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import org.unicode.cldr.util.CLDRConfig;
-
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Multimap;
-import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.test.TestFmwk;
-import com.ibm.icu.util.ICUUncheckedIOException;
-
-public class TestLdml2IcuCompleteness extends TestFmwk {
-
-    private static final String CLDR_BASE = CLDRConfig.getInstance().getCldrBaseDirectory() + "/common";
-    private static final String ICU_BASE = CLDRConfig.getInstance().getCldrBaseDirectory() + "/../icu4c/data/"; // "/Users/markdavis/workspace/icu4c/data";
-
-    static Multimap<String, File> icuFiles = TreeMultimap.create();
-    static Multimap<String, File> cldrFiles = TreeMultimap.create();
-
-    static Set<String> SKIP_DIRS = ImmutableSet.of(
-        "transforms", "translit", // temp
-        "unidata",
-        "sprep",
-        "mappings");
-    static Set<String> SKIP_FILES = ImmutableSet.of(
-        "attributeValueValidity",
-        "tzdbNames");
-
-    static {
-        fillMap(new File(ICU_BASE), ".txt", icuFiles);
-//        for (Entry<String, Collection<File>> s : icuFiles.asMap().entrySet()) {
-//            System.out.println(s.getKey() + "\t\t" + s.getValue());
-//        }
-
-        fillMap(new File(CLDR_BASE), ".xml", cldrFiles);
-        for (Entry<String, Collection<File>> s : cldrFiles.asMap().entrySet()) {
-            System.out.println(s.getKey() + "\t\t" + s.getValue());
-        }
-    }
-
-    static void fillMap(File file, String suffix, Multimap<String, File> fileList) {
-        try {
-            for (File f : file.listFiles()) {
-                String name = f.getName();
-                if (f.isDirectory()) {
-                    if (SKIP_DIRS.contains(name)) {
-                        continue;
-                    }
-                    fillMap(f, suffix, fileList);
-                } else {
-                    if (!name.endsWith(suffix)) {
-                        continue;
-                    }
-                    // hack
-                    if (name.endsWith("dict.txt") || name.contains("readme")) {
-                        continue;
-                    }
-                    name = name.substring(0, name.length() - suffix.length());
-                    if (SKIP_FILES.contains(name)) {
-                        continue;
-                    }
-                    fileList.put(name, f.getParentFile().getCanonicalFile());
-                }
-            }
-        } catch (IOException e) {
-            throw new ICUUncheckedIOException(e);
-        }
-    }
-
-    public static void main(String[] args) {
-        new TestLdml2IcuCompleteness().run(args);
-    }
-
-    public void TestFiles() {
-        verifySuperset("cldrFiles-icuFiles", cldrFiles.keySet(), icuFiles.keySet());
-        verifySuperset("icuFiles-cldrFiles", icuFiles.keySet(), cldrFiles.keySet());
-    }
-
-    private void verifySuperset(String title, Set<String> set1, Set<String> set2) {
-        LinkedHashSet<String> diff = new LinkedHashSet<>(set1);
-        diff.removeAll(set2);
-        assertEquals(title, Collections.EMPTY_SET, diff);
-    }
-
-    public void TestLocales() {
-        for (Entry<String, Collection<File>> entry : cldrFiles.asMap().entrySet()) {
-            String file = entry.getKey();
-            Set<String> values = collectCldrValues(file, entry.getValue());
-        }
-    }
-
-    // TODO flesh out
-    private Set<String> collectCldrValues(String file, Collection<File> value) {
-        for (File f : value) {
-            //org.unicode.cldr.util.XMLFileReader.loadPathValues(filename, data, validating)
-        }
-        return null;
-    }
-}
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestLocalCurrency.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestLocalCurrency.java
index 0914753..f43e36c 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestLocalCurrency.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestLocalCurrency.java
@@ -15,6 +15,7 @@
 import org.unicode.cldr.util.SupplementalDataInfo;
 import org.unicode.cldr.util.SupplementalDataInfo.CurrencyDateInfo;
 
+import com.google.common.collect.ImmutableSet;
 import com.ibm.icu.dev.test.TestFmwk;
 
 public class TestLocalCurrency extends TestFmwk {
@@ -24,11 +25,12 @@
         new TestLocalCurrency().run(args);
     }
 
+    static final Set<String> regionsWithTwoCurrencySymbols = ImmutableSet.of("AE", "AZ",
+        "BA", "CA", "CN", "DZ", "ET", "IQ", "IR", "LK", "KM", "MA", "MR", "MK", "PK",
+        "NE", "GW", "CM", "SN", "BF", // << ff_Adlm regions are multiscript, Latn+Adlm
+        "RS", "SD", "SY", "TN", "UZ");
+
     private int maxLocalizedSymbols(String region) {
-        final List<String> regionsWithTwoCurrencySymbols = Arrays.asList("AE", "AZ",
-            "BA", "CN", "DZ", "ET", "IQ", "IR", "LK", "KM", "MA", "MR", "MK", "PK",
-            "NE", "GW", "CM", "SN", "BF", // << ff_Adlm regions are multiscript, Latn+Adlm
-            "RS", "SD", "SY", "TN", "UZ");
         if (regionsWithTwoCurrencySymbols.contains(region)) {
             return 2;
         }
@@ -40,9 +42,9 @@
         LanguageTagParser ltp = new LanguageTagParser();
         SupplementalDataInfo supplementalDataInfo = testInfo
             .getSupplementalDataInfo();
-        Map<String, String> localeToLocalCurrencySymbol = new HashMap<String, String>();
-        Map<String, Set<String>> localizedCurrencySymbols = new HashMap<String, Set<String>>();
-        Map<String, Set<String>> regionToLocales = new HashMap<String, Set<String>>();
+        Map<String, String> localeToLocalCurrencySymbol = new HashMap<>();
+        Map<String, Set<String>> localizedCurrencySymbols = new HashMap<>();
+        Map<String, Set<String>> regionToLocales = new HashMap<>();
 
         List<String> nonLocalizedOK = Arrays.asList("AED", "AZN", "CHF", "CVE", "GEL",
             "HRK", "HUF", "IQD", "IRR", "ISK", "KPW", "LTL", "MAD", "MDL", "RON", "RSD",
@@ -84,7 +86,7 @@
 
             Set<String> localSymbols = localizedCurrencySymbols.get(region);
             if (localSymbols == null) {
-                localSymbols = new TreeSet<String>();
+                localSymbols = new TreeSet<>();
             }
 
             if (localCurrencySymbol.equals(localCurrency)
@@ -98,7 +100,7 @@
 
             Set<String> regionLocales = regionToLocales.get(region);
             if (regionLocales == null) {
-                regionLocales = new TreeSet<String>();
+                regionLocales = new TreeSet<>();
             }
 
             regionLocales.add(locale);
@@ -118,7 +120,7 @@
                         + localeToLocalCurrencySymbol.get(locale));
                     errmsg.append('\n');
                 }
-                errln(errmsg.toString());
+                errln(errmsg.toString()); // if this fails, see if it warrants changing regionsWithTwoCurrencySymbols.
             }
         }
     }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestLocale.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestLocale.java
index b7f88ee..dd49e2d 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestLocale.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestLocale.java
@@ -43,7 +43,6 @@
 import com.google.common.base.Splitter;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.io.Files;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
@@ -543,6 +542,9 @@
             case "tz": 
                 showName(cldrFile, seen, localeBase, "uslax", "gblon", "chzrh");
                 continue keyLoop;
+            case "dx": 
+                // skip for now, probably need to fix something in CLDRFile
+                continue keyLoop;
             }
             for (String value : keyValues.getValue()) {
                 if ("true".equals(deprecatedMap.get(Row.of(key, value)))) {
@@ -707,6 +709,9 @@
         case "REORDER_CODE":    // [u, kr, REORDER_CODE] 
             valuesSet = ImmutableSet.of("arab", "digit-deva-latn");
             break;
+        case "SCRIPT_CODE":    // [u, dx, SCRIPT_CODE] 
+            valuesSet = ImmutableSet.of("thai", "thai-laoo");
+            break;
         case "RG_KEY_VALUE":    // [u, rg, RG_KEY_VALUE]
             valuesSet = ImmutableSet.of("ustx", "gbeng");
             break;
@@ -726,7 +731,7 @@
     private void showItem(LanguageTagParser ltp, String extension, String key, String gorp, String... values) {
 
         String locale = "en-GB-" + extension + (extension.equals("t") ? "-hi" : "")
-            + "-" + key + "-" + CollectionUtilities.join(values, "-") + gorp;
+            + "-" + key + "-" + String.join("-", values) + gorp;
         ltp.set(locale);
 
         logln(ltp.toString(Format.bcp47) 
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestLsrvCanonicalizer.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestLsrvCanonicalizer.java
new file mode 100644
index 0000000..d0987e0
--- /dev/null
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestLsrvCanonicalizer.java
@@ -0,0 +1,255 @@
+package org.unicode.cldr.unittest;
+
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.unicode.cldr.util.CLDRConfig;
+import org.unicode.cldr.util.CLDRFile;
+import org.unicode.cldr.util.LsrvCanonicalizer;
+import org.unicode.cldr.util.LsrvCanonicalizer.ReplacementRule;
+import org.unicode.cldr.util.LsrvCanonicalizer.TestDataTypes;
+import org.unicode.cldr.util.LsrvCanonicalizer.XLanguageTag;
+import org.unicode.cldr.util.StandardCodes;
+import org.unicode.cldr.util.StandardCodes.LstrField;
+import org.unicode.cldr.util.StandardCodes.LstrType;
+import org.unicode.cldr.util.SupplementalDataInfo;
+
+import com.google.common.base.Joiner;
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.ibm.icu.dev.test.TestFmwk;
+import com.ibm.icu.impl.Row.R2;
+
+/**
+ * TestLsrvCanonicalizer is used to verify the correctness of the specification algorithm,
+ * sanity-check the supplementalMetadata.xml alias data,
+ * and generate test files for use by implementations.
+ */
+public class TestLsrvCanonicalizer extends TestFmwk {
+
+    static final LsrvCanonicalizer rrs = LsrvCanonicalizer.getInstance();
+    private static final boolean DEBUG = false;
+
+    public static void main(String[] args) {
+        final TestLsrvCanonicalizer testLocaleCanonicalizer = new TestLsrvCanonicalizer();
+        testLocaleCanonicalizer.run(args);
+    }
+
+    public void testAgainstData() {
+        if (DEBUG) {
+            System.out.println(Joiner.on('\n').join(rrs.filter(LstrType.variant, null)));
+            System.out.println(Joiner.on('\n').join(rrs.filter(LstrType.language, "no")));
+        }
+
+        List<ReplacementRule> rules = new ArrayList<>();
+        for (Entry<TestDataTypes, Map<String, String>> mainEntry : rrs.getTestData(null).entrySet()) {
+            TestDataTypes type = mainEntry.getKey();
+            for (Entry<String, String> entry : mainEntry.getValue().entrySet()) {
+                String toTest = entry.getKey();
+                String expected = entry.getValue();
+                final XLanguageTag source2 = XLanguageTag.fromTag(LstrType.language, toTest);
+                XLanguageTag newTag = rrs.canonicalizeToX(source2, rules);
+                String actual = newTag.toLocaleString();
+                if (DEBUG && rules.size() > 1) {
+                    System.out.println(
+                        "source: " + toTest
+                        + ", expected: " + expected
+                        + ", actual: " + actual
+                        + ", rules: " + rules
+                        );
+                }
+                if (!Objects.equal(expected, actual)) {
+                    errln("Error: "
+                        + "source: " + toTest
+                        + ", expected: " + expected
+                        + ", actual: " + actual
+                        + ", rules: " + rules
+                        );
+                }
+            }
+        }
+    }
+
+    public void TestAgainstLanguageSubtagRegistry() {
+        Map<String,String> exceptions = ImmutableMap.<String, String>builder()
+            .put("drh", "mn") // Darkhat => Halh Mongolian
+            .put("drw", "fa_af") // Darwazi => Dari
+            .put("tnf", "fa_af") // Tangshewi => Dari
+            .put("AN", "CW SX BQ") // Netherlands Antilles => list
+            .put("CS", "RS ME") // Serbia and Montenegro => list
+            .put("NT", "SA IQ") // Neutral Zone => ???
+            .put("SU", "RU AM AZ BY EE GE KZ KG LV LT MD TJ TM UA UZ") // Union of Soviet Socialist Republics => list
+            .put("YU", "RS ME") // Yugoslavia => list
+            .put("cel-gaulish", "xtg")
+            .put("i-enochian", "und_x_i_enochian")
+            .put("zh-guoyu", "zh") // Mandarin Chinese
+            .put("zh-min", "nan_x_zh_min") // special code
+            .put("sgn-NO", "nsi") // Norwegian Sign Language
+            .put("zh-cmn", "zh") // Chinese
+            .put("zh-cmn-Hans", "zh_Hans") // Simplified Chinese
+            .put("zh-cmn-Hant", "zh_Hant") // Traditional Chinese
+            .put("agp", "apf") // Paranan => ???
+            .put("ais", "ami") // Nataoran Amis => ???
+            .put("baz", "nvo") // Tunen => ???
+            .put("bhk", "fbl") // Albay Bicolano => ???
+            .put("bjq", "bzc") // Southern Betsimisaraka Malagasy => ???
+            .put("bkb", "ebk") // Finallig => ???
+            .put("btb", "beb") // Beti (Cameroon) => ???
+            .put("daf", "dnj") // Dan => ???
+            .put("dap", "njz") // Nisi (India) => ???
+            .put("djl", "dze") // Djiwarli => ???
+            .put("dkl", "aqd") // Kolum So Dogon => ???
+            .put("dud", "uth") // Hun-Saare => ???
+            .put("duj", "dwu") // Dhuwal => ???
+            .put("dwl", "dbt") // Walo Kumbe Dogon => ???
+            .put("elp", "amq") // Elpaputih => ???
+            .put("gbc", "wny") // Garawa => ???
+            .put("ggo", "esg") // Southern Gondi => ???
+            .put("ggr", "gtu") // Aghu Tharnggalu => ???
+            .put("gio", "aou") // Gelao => ???
+            .put("ill", "ilm") // Iranun => ???
+            .put("izi", "eza") // Izi-Ezaa-Ikwo-Mgbo => ???
+            .put("jar", "jgk") // Jarawa (Nigeria) => ???
+            .put("kdv", "zkd") // Kado => ???
+            .put("kgd", "ncq") // Kataang => ???
+            .put("kpp", "jkm") // Paku Karen => ???
+            .put("kzh", "dgl") // Kenuzi-Dongola => ???
+            .put("leg", "enl") // Lengua => ???
+            .put("mgx", "jbk") // Omati => ???
+            .put("mnt", "wnn") // Maykulan => ???
+            .put("mof", "xnt") // Mohegan-Montauk-Narragansett => ???
+            .put("mwd", "dmw") // Mudbura => ???
+            .put("nbf", "nru") // Naxi => ???
+            .put("nbx", "ekc") // Ngura => ???
+            .put("nln", "azd") // Durango Nahuatl => ???
+            .put("nlr", "nrk") // Ngarla => ???
+            .put("noo", "dtd") // Nootka => ???
+            .put("rmr", "emx") // Caló => ???
+            .put("sap", "aqt") // Sanapaná => ???
+            .put("sgl", "isk") // Sanglechi-Ishkashimi => ???
+            .put("sul", "sgd") // Surigaonon => ???
+            .put("sum", "ulw") // Sumo-Mayangna => ???
+            .put("tgg", "bjp") // Tangga => ???
+            .put("tid", "itd") // Tidong => ???
+            .put("unp", "wro") // Worora => ???
+            .put("wgw", "wgb") // Wagawaga => ???
+            .put("wit", "nol") // Wintu => ???
+            .put("wiw", "nwo") // Wirangu => ???
+            .put("yen", "ynq") // Yendang => ???
+            .put("yiy", "yrm") // Yir Yoront => ???
+            .build();
+        Set<String> SKIP = ImmutableSet.of(
+            // handled via languageAliases
+            "arevela", "arevmda",
+            // newly added
+            "bmy", "btl", "bxx", "byy", "cbe", "cbh", "cum", "dha", "dzd", "emo", "iap", "ime", "kbf", "kox", "lba", "lsg", "mhh", "mja", "mld", "mwx",
+            "mwy", "myi", "myq", "ome", "pbz", "pgy", "pod", "prb", "puk", "rie", "rna", "rsi", "sgo", "snh", "svr", "toe", "xbx", "xip", "yds", "ynh", "yri"
+            );
+
+//        Error: (TestLsrvCanonicalizer.java:110) : drh: expected "khk", got "mn"
+//        Error: (TestLsrvCanonicalizer.java:110) : drw: expected "prs", got "fa_af"
+//        Error: (TestLsrvCanonicalizer.java:110) : tnf: expected "prs", got "fa_af"
+//        Error: (TestLsrvCanonicalizer.java:110) : AN: expected null, got "CW SX BQ"
+//        Error: (TestLsrvCanonicalizer.java:110) : CS: expected null, got "RS ME"
+//        Error: (TestLsrvCanonicalizer.java:110) : NT: expected null, got "SA IQ"
+//        Error: (TestLsrvCanonicalizer.java:110) : SU: expected null, got "RU AM AZ BY EE GE KZ KG LV LT MD TJ TM UA UZ"
+//        Error: (TestLsrvCanonicalizer.java:110) : YU: expected null, got "RS ME"
+//        Error: (TestLsrvCanonicalizer.java:110) : cel_gaulish: expected null, got "xtg"
+//        Error: (TestLsrvCanonicalizer.java:110) : i_enochian: expected null, got "und_x_i_enochian"
+//        Error: (TestLsrvCanonicalizer.java:110) : zh_guoyu: expected "cmn", got "zh"
+//        Error: (TestLsrvCanonicalizer.java:110) : zh_min: expected null, got "nan_x_zh_min"
+//        Error: (TestLsrvCanonicalizer.java:110) : sgn_NO: expected "nsl", got "nsi"
+//        Error: (TestLsrvCanonicalizer.java:119) Can't access aliasInfo for the following. Suggested additions are:
+
+        SupplementalDataInfo SDI = SupplementalDataInfo.getInstance();
+        Map<String, Map<String, R2<List<String>, String>>> aliasInfo = SDI.getLocaleAliasInfo();
+        Set<String> shouldHave = new LinkedHashSet<>();
+        Set<String> shouldSkip = new LinkedHashSet<>();
+        Set<String> addExceptions = new LinkedHashSet<>();
+
+        for ( Entry<LstrType, Map<String, Map<LstrField, String>>> entry1 : StandardCodes.getEnumLstreg().entrySet()) {
+            LstrType type = entry1.getKey();
+            if (type == LstrType.extlang) {
+                continue;
+            }
+            final String typeCompat = type.toCompatString();
+            Map<String, R2<List<String>, String>> aliasInfo2 = aliasInfo.get(typeCompat);
+            if (aliasInfo2 == null) {
+                errln("Can't access aliasInfo for: " + type);
+                continue;
+            }
+
+            for (Entry<String, Map<LstrField, String>> entry2 : entry1.getValue().entrySet()) {
+                String subtag = entry2.getKey();
+                final Map<LstrField, String> subtagInfo = entry2.getValue();
+                String deprecated = subtagInfo.get(LstrField.Deprecated);
+                if (deprecated == null) {
+                    continue;
+                }
+                String preferredValue = subtagInfo.get(LstrField.Preferred_Value);
+                final String preferredValueCompat = preferredValue == null ? null : preferredValue.replace('-', '_');
+                final String subtagCompat = subtag.replace('-', '_');
+                R2<List<String>, String> aliasInfo3 = aliasInfo2.get(subtagCompat);
+                if (aliasInfo3 == null) {
+                    if (SKIP.contains(subtag)) {
+                        continue;
+                    }
+                    String possibleReplacement = preferredValueCompat != null ? preferredValueCompat : subtagInfo.get(LstrField.Comments);
+                    // <languageAlias type="sgn_BR" replacement="bzs" reason="deprecated"/>
+                    if (possibleReplacement != null) {
+                        shouldHave.add("<" + typeCompat + "Alias"
+                            + " type=\"" + subtagCompat + "\""
+                            + (possibleReplacement == null || possibleReplacement.isEmpty() ? "" : " replacement=\"" + possibleReplacement + "\"")
+                            + " reason=\"" + (type == LstrType.legacy || type == LstrType.redundant ? type.toString() : "deprecated") + "\""
+                            + "/>  <!-- " + subtagInfo.get(LstrField.Description) + " -->");
+                    } else {
+                        shouldSkip.add(subtag);
+                    }
+                    continue;
+                }
+                List<String> replacement = aliasInfo3.get0();
+                String reason = aliasInfo3.get1();
+                final String replacementString = Joiner.on(' ').join(replacement);
+                if (!Objects.equal(preferredValueCompat, replacementString)) {
+                    String exception = exceptions.get(subtag);
+                    if (Objects.equal(exception, replacementString)) {
+                        continue;
+                    }
+                    CLDRFile english = CLDRConfig.getInstance().getEnglish();
+                    String typeName = english.getName(typeCompat, subtag);
+                    String replacementName = preferredValueCompat == null ? "???" : english.getName(typeCompat, replacementString);
+                    addExceptions.add(".put(\"" + subtag + "\", \"" + replacementString + "\")" + " // " + typeName + " => " + replacementName);
+                }
+
+//                for (Entry<LstrField, String> entry3 : entry2.getValue().entrySet()) {
+//                    LstrField field = entry3.getKey();
+//                    String data = entry3.getValue();
+//                }
+            }
+        }
+        if (!addExceptions.isEmpty()) {
+            errln("The following have different replacements.\n"
+                + "    Here are suggested exception values to add to the test code, but research each one:");
+            System.out.println(Joiner.on('\n').join(addExceptions));
+            System.out.println();
+        }
+
+        if (!shouldHave.isEmpty()) {
+            errln("Can't access aliasInfo for the following.\n"
+                + "    Here are suggested additions to supplementalMetadata , but check them:");
+            System.out.println(Joiner.on('\n').join(shouldHave));
+            System.out.println();
+        }
+        if (!shouldSkip.isEmpty()) {
+            errln("No replacement.\n"
+                + "    Here are suggested additions to SKIP in the test code, but check them:");
+            System.out.println("\"" + Joiner.on("\", \"").join(shouldSkip) + "\"");
+            System.out.println();
+        }
+    }
+}
\ No newline at end of file
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestMetazoneTransitions.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestMetazoneTransitions.java
index 8854c43..3f3112e 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestMetazoneTransitions.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestMetazoneTransitions.java
@@ -90,11 +90,13 @@
 
         int offset;
 
+        @Override
         public boolean equals(Object that) {
             ZoneTransition other = (ZoneTransition) that;
             return date == other.date && offset == other.offset;
         }
 
+        @Override
         public int hashCode() {
             return (int) (date ^ (date >>> 32) ^ offset);
         }
@@ -111,6 +113,7 @@
          * @param o
          * @return
          */
+        @Override
         public int compareTo(ZoneTransition o) {
             int delta = offset - o.offset;
             if (delta != 0)
@@ -133,11 +136,13 @@
     private static class ZoneTransitions implements Comparable<ZoneTransitions> {
         List<ZoneTransition> chronologicalList = new ArrayList<ZoneTransition>();
 
+        @Override
         public boolean equals(Object that) {
             ZoneTransitions other = (ZoneTransitions) that;
             return chronologicalList.equals(other.chronologicalList);
         }
 
+        @Override
         public int hashCode() {
             return chronologicalList.hashCode();
         }
@@ -173,6 +178,7 @@
             chronologicalList.add(new ZoneTransition(date, offset));
         }
 
+        @Override
         public int compareTo(ZoneTransitions other) {
             int minSize = Math.min(chronologicalList.size(),
                 other.chronologicalList.size());
@@ -204,6 +210,7 @@
             return CldrUtility.join(chronologicalList, separator);
         }
 
+        @Override
         public String toString() {
             return toString("; ", -1);
         }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPathHeader.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPathHeader.java
index d18f44f..4c67d23 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPathHeader.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPathHeader.java
@@ -53,12 +53,12 @@
 import org.unicode.cldr.util.XMLFileReader;
 import org.unicode.cldr.util.XPathParts;
 
+import com.google.common.base.Joiner;
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.LinkedListMultimap;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
@@ -101,6 +101,8 @@
         assertRelation("pathheader", true, ph3, TestFmwkPlus.LEQ, ph2);
     }
 
+    static final String[] MIN_LOCALES = {"root", "en", "de", "ru", "ko"}; // choose locales with range of case/gender structures
+
     public void tempTestCompletenessLdmlDtd() {
         // List<String> failures = null;
         pathHeaderFactory.clearCache();
@@ -108,7 +110,7 @@
         for (String directory : DtdType.ldml.directories) {
             Factory factory2 = CLDRConfig.getInstance().getMainAndAnnotationsFactory();
             Set<String> source = factory2.getAvailable();
-            for (String file : getFilesToTest(source, "root", "en", "da")) {
+            for (String file : getFilesToTest(source, MIN_LOCALES)) {
                 if (DEBUG) warnln(" TestCompletenessLdmlDtd: " + directory + ", " + file);
                 DtdData dtdData = null;
                 CLDRFile cldrFile = factory2.make(file, true);
@@ -268,7 +270,7 @@
     }
 
     public void TestPluralOrder() {
-        Set<PathHeader> sorted = new TreeSet<PathHeader>();
+        Set<PathHeader> sorted = new TreeSet<>();
         for (String locale : new String[] { "ru", "ar", "ja" }) {
             sorted.clear();
             CLDRFile cldrFile = info.getCLDRFile(locale, true);
@@ -340,7 +342,7 @@
 
     public void TestOptional() {
         if (true) return;
-        Map<PathHeader, String> sorted = new TreeMap<PathHeader, String>();
+        Map<PathHeader, String> sorted = new TreeMap<>();
         for (String locale : new String[] { "af" }) {
             sorted.clear();
             CLDRFile cldrFile = info.getCLDRFile(locale, true);
@@ -368,7 +370,7 @@
                     locale + "\t" + status + "\t" + p + "\t"
                         + p.getOriginalPath());
             }
-            Set<String> codes = new LinkedHashSet<String>();
+            Set<String> codes = new LinkedHashSet<>();
             PathHeader old = null;
             String line = null;
             for (Entry<PathHeader, String> s : sorted.entrySet()) {
@@ -450,7 +452,7 @@
     }
 
     public void TestCoverage() {
-        Map<Row.R2<SectionId, PageId>, Counter<Level>> data = new TreeMap<Row.R2<SectionId, PageId>, Counter<Level>>();
+        Map<Row.R2<SectionId, PageId>, Counter<Level>> data = new TreeMap<>();
         CLDRFile cldrFile = english;
         for (String path : cldrFile.fullIterable()) {
             if (supplemental.isDeprecated(DtdType.ldml, path)) {
@@ -478,7 +480,7 @@
                 p.getPageId());
             Counter<Level> counter = data.get(key);
             if (counter == null) {
-                data.put(key, counter = new Counter<Level>());
+                data.put(key, counter = new Counter<>());
             }
             counter.add(level, 1);
         }
@@ -503,9 +505,9 @@
 
     public void Test00AFile() {
         final String localeId = "en";
-        Counter<Level> counter = new Counter<Level>();
-        Map<String, PathHeader> uniqueness = new HashMap<String, PathHeader>();
-        Set<String> alreadySeen = new HashSet<String>();
+        Counter<Level> counter = new Counter<>();
+        Map<String, PathHeader> uniqueness = new HashMap<>();
+        Set<String> alreadySeen = new HashSet<>();
         check(localeId, true, uniqueness, alreadySeen);
         // check paths
         for (Entry<SectionId, Set<PageId>> sectionAndPages : PathHeader.Factory
@@ -586,7 +588,7 @@
     }
 
     public Set<PathHeader> getPathHeaders(CLDRFile nativeFile) {
-        Set<PathHeader> pathHeaders = new TreeSet<PathHeader>();
+        Set<PathHeader> pathHeaders = new TreeSet<>();
         for (String path : nativeFile.fullIterable()) {
             PathHeader p = pathHeaderFactory.fromPath(path);
             pathHeaders.add(p);
@@ -627,34 +629,38 @@
     }
 
     public void TestUniqueness() {
-        CLDRFile nativeFile = info.getEnglish();
-        Map<PathHeader, String> headerToPath = new HashMap<PathHeader, String>();
-        Map<String, String> headerVisibleToPath = new HashMap<String, String>();
-        for (String path : nativeFile.fullIterable()) {
-            PathHeader p = pathHeaderFactory.fromPath(path);
-            if (p.getSectionId() == SectionId.Special) {
-                continue;
-            }
-            String old = headerToPath.get(p);
-            if (old == null) {
-                headerToPath.put(p, path);
-            } else if (!old.equals(path)) {
-                if (true) { // for debugging
-                    pathHeaderFactory.clearCache();
-                    List<String> failuresOld = new ArrayList<>();
-                    pathHeaderFactory.fromPath(old, failuresOld);
-                    List<String> failuresPath = new ArrayList<>();
-                    pathHeaderFactory.fromPath(path, failuresPath);
+        Factory factory2 = CLDRConfig.getInstance().getMainAndAnnotationsFactory();
+        Set<String> source = factory2.getAvailable();
+        for (String file : getFilesToTest(source, MIN_LOCALES)) {
+            CLDRFile nativeFile = factory2.make(file,true);
+            Map<PathHeader, String> headerToPath = new HashMap<>();
+            Map<String, String> headerVisibleToPath = new HashMap<>();
+            for (String path : nativeFile.fullIterable()) {
+                PathHeader p = pathHeaderFactory.fromPath(path);
+                if (p.getSectionId() == SectionId.Special) {
+                    continue;
                 }
-                errln("Collision with path " + p + "\t" + old + "\t" + path);
-            }
-            final String visible = p.toString();
-            old = headerVisibleToPath.get(visible);
-            if (old == null) {
-                headerVisibleToPath.put(visible, path);
-            } else if (!old.equals(path)) {
-                errln("Collision with path " + visible + "\t" + old + "\t"
-                    + path);
+                String old = headerToPath.get(p);
+                if (old == null) {
+                    headerToPath.put(p, path);
+                } else if (!old.equals(path)) {
+                    if (true) { // for debugging
+                        pathHeaderFactory.clearCache();
+                        List<String> failuresOld = new ArrayList<>();
+                        pathHeaderFactory.fromPath(old, failuresOld);
+                        List<String> failuresPath = new ArrayList<>();
+                        pathHeaderFactory.fromPath(path, failuresPath);
+                    }
+                    errln(file + " collision with path " + p + "\t" + old + "\t" + path);
+                }
+                final String visible = p.toString();
+                old = headerVisibleToPath.get(visible);
+                if (old == null) {
+                    headerVisibleToPath.put(visible, path);
+                } else if (!old.equals(path)) {
+                    errln("Collision with path " + visible + "\t" + old + "\t"
+                        + path);
+                }
             }
         }
     }
@@ -662,11 +668,11 @@
     public void TestStatus() {
         CLDRFile nativeFile = info.getEnglish();
         PathStarrer starrer = new PathStarrer();
-        EnumMap<SurveyToolStatus, Relation<String, String>> info2 = new EnumMap<SurveyToolStatus, Relation<String, String>>(
+        EnumMap<SurveyToolStatus, Relation<String, String>> info2 = new EnumMap<>(
             SurveyToolStatus.class);
-        Set<String> nuked = new HashSet<String>();
-        Set<String> deprecatedStar = new HashSet<String>();
-        Set<String> differentStar = new HashSet<String>();
+        Set<String> nuked = new HashSet<>();
+        Set<String> deprecatedStar = new HashSet<>();
+        Set<String> differentStar = new HashSet<>();
 
         for (String path : nativeFile.fullIterable()) {
 
@@ -718,7 +724,7 @@
                     data = Relation.of(new TreeMap<String, Set<String>>(),
                         TreeSet.class));
             }
-            data.put(starred, CollectionUtilities.join(attr, "|"));
+            data.put(starred, Joiner.on("|").join(attr));
         }
         for (Entry<SurveyToolStatus, Relation<String, String>> entry : info2
             .entrySet()) {
@@ -736,11 +742,11 @@
     }
 
     public void TestPathsNotInEnglish() {
-        Set<String> englishPaths = new HashSet<String>();
+        Set<String> englishPaths = new HashSet<>();
         for (String path : english.fullIterable()) {
             englishPaths.add(path);
         }
-        Set<String> alreadySeen = new HashSet<String>(englishPaths);
+        Set<String> alreadySeen = new HashSet<>(englishPaths);
 
         for (String locale : factory.getAvailable()) {
             CLDRFile nativeFile = info.getCLDRFile(locale, false);
@@ -768,7 +774,7 @@
         Matcher normal = PatternCache.get(
             "http://cldr.org/translation/[-a-zA-Z0-9_]").matcher("");
         // http://cldr.unicode.org/translation/plurals#TOC-Minimal-Pairs
-        Set<String> alreadySeen = new HashSet<String>();
+        Set<String> alreadySeen = new HashSet<>();
         PathStarrer starrer = new PathStarrer();
 
         checkPathDescriptionCompleteness(pathDescription, normal,
@@ -816,7 +822,7 @@
     public void TestTerritoryOrder() {
         final Set<String> goodAvailableCodes = CLDRConfig.getInstance()
             .getStandardCodes().getGoodAvailableCodes("territory");
-        Set<String> results = showContained("001", 0, new HashSet<String>(
+        Set<String> results = showContained("001", 0, new HashSet<>(
             goodAvailableCodes));
         results.remove("ZZ");
         for (String territory : results) {
@@ -854,8 +860,8 @@
     }
 
     public void TestZCompleteness() {
-        Map<String, PathHeader> uniqueness = new HashMap<String, PathHeader>();
-        Set<String> alreadySeen = new HashSet<String>();
+        Map<String, PathHeader> uniqueness = new HashMap<>();
+        Set<String> alreadySeen = new HashSet<>();
         LanguageTagParser ltp = new LanguageTagParser();
         int count = 0;
         for (String locale : factory.getAvailable()) {
@@ -973,10 +979,10 @@
         PathStarrer pathStarrer = new PathStarrer();
         pathStarrer.setSubstitutionPattern("%A");
 
-        Set<PathHeader> sorted = new TreeSet<PathHeader>();
-        Map<String, String> missing = new TreeMap<String, String>();
-        Map<String, String> skipped = new TreeMap<String, String>();
-        Map<String, String> collide = new TreeMap<String, String>();
+        Set<PathHeader> sorted = new TreeSet<>();
+        Map<String, String> missing = new TreeMap<>();
+        Map<String, String> skipped = new TreeMap<>();
+        Map<String, String> collide = new TreeMap<>();
 
         logln("Traversing Paths");
         for (String path : english) {
@@ -998,7 +1004,7 @@
         String lastHeader = "";
         String lastPage = "";
         String lastSection = "";
-        List<String> threeLevel = new ArrayList<String>();
+        List<String> threeLevel = new ArrayList<>();
         Status status = new Status();
         CoverageLevel2 coverageLevel2 = CoverageLevel2.getInstance("en");
 
@@ -1060,7 +1066,7 @@
         for (String item : threeLevel) {
             logln(item);
         }
-        LinkedHashMap<String, Set<String>> sectionsToPages = pathHeaderFactory
+        LinkedHashMap<String, Set<String>> sectionsToPages = org.unicode.cldr.util.PathHeader.Factory
             .getSectionsToPages();
         logln("\nMenus:\t" + sectionsToPages.size());
         for (Entry<String, Set<String>> item : sectionsToPages.entrySet()) {
@@ -1077,6 +1083,16 @@
         }
     }
 
+    public static final Set<String> GERMAN_UNIT_ORDER = ImmutableSet.of(
+        "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]",
+        "//ldml/units/unitLength[@type=\"short\"]/compoundUnit[@type=\"power2\"]",
+        "//ldml/units/unitLength[@type=\"narrow\"]/compoundUnit[@type=\"power2\"]",
+        "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"volume-liter\"]",
+        "//ldml/units/unitLength[@type=\"short\"]/unit[@type=\"volume-liter\"]",
+        "//ldml/units/unitLength[@type=\"narrrow\"]/unit[@type=\"volume-liter\"]",
+        "//ldml/numbers/minimalPairs/caseMinimalPairs",
+        "//ldml/numbers/minimalPairs/genderMinimalPairs"
+        );
     public void TestOrder() {
         String[] paths = {
             "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dayPeriods/dayPeriodContext[@type=\"format\"]/dayPeriodWidth[@type=\"narrow\"]/dayPeriod[@type=\"noon\"]",
@@ -1090,7 +1106,90 @@
             }
             pathHeaderLast = pathHeader;
         }
+        CLDRFile german = factory.make("de", true);
+        Multimap<PathHeader, String> pathHeaderToPaths = TreeMultimap.create();
+        for (String path : german.fullIterable()) {
+            for (String prefix : GERMAN_UNIT_ORDER) {
+                if (path.startsWith(prefix)) {
+                    PathHeader pathHeader = pathHeaderFactory.fromPath(path);
+                    pathHeaderToPaths.put(pathHeader, path);
+                }
+            }
+        }
+        String[] germanExpected = {
+            "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"volume-liter\"]/gender",
+            "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"volume-liter\"]/displayName",
+            "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"volume-liter\"]/perUnitPattern",
+            "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"volume-liter\"]/unitPattern[@count=\"one\"][@case=\"accusative\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"volume-liter\"]/unitPattern[@count=\"one\"][@case=\"dative\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"volume-liter\"]/unitPattern[@count=\"one\"][@case=\"genitive\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"volume-liter\"]/unitPattern[@count=\"one\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"volume-liter\"]/unitPattern[@count=\"other\"][@case=\"accusative\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"volume-liter\"]/unitPattern[@count=\"other\"][@case=\"dative\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"volume-liter\"]/unitPattern[@count=\"other\"][@case=\"genitive\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"volume-liter\"]/unitPattern[@count=\"other\"]",
+            "//ldml/units/unitLength[@type=\"short\"]/unit[@type=\"volume-liter\"]/displayName",
+            "//ldml/units/unitLength[@type=\"short\"]/unit[@type=\"volume-liter\"]/perUnitPattern",
+            "//ldml/units/unitLength[@type=\"short\"]/unit[@type=\"volume-liter\"]/unitPattern[@count=\"one\"]",
+            "//ldml/units/unitLength[@type=\"short\"]/unit[@type=\"volume-liter\"]/unitPattern[@count=\"other\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"][@case=\"accusative\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"][@gender=\"feminine\"][@case=\"accusative\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"][@gender=\"masculine\"][@case=\"accusative\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"][@case=\"dative\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"][@gender=\"feminine\"][@case=\"dative\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"][@gender=\"masculine\"][@case=\"dative\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"][@case=\"genitive\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"][@gender=\"feminine\"][@case=\"genitive\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"][@gender=\"masculine\"][@case=\"genitive\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"][@gender=\"feminine\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"][@gender=\"masculine\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"][@case=\"accusative\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"][@gender=\"feminine\"][@case=\"accusative\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"][@gender=\"masculine\"][@case=\"accusative\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"][@case=\"dative\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"][@gender=\"feminine\"][@case=\"dative\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"][@gender=\"masculine\"][@case=\"dative\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"][@case=\"genitive\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"][@gender=\"feminine\"][@case=\"genitive\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"][@gender=\"masculine\"][@case=\"genitive\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"][@gender=\"feminine\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"][@gender=\"masculine\"]",
+            "//ldml/units/unitLength[@type=\"short\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"]",
+            "//ldml/units/unitLength[@type=\"short\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"]",
+            "//ldml/units/unitLength[@type=\"narrow\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"]",
+            "//ldml/units/unitLength[@type=\"narrow\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"]",
+            "//ldml/numbers/minimalPairs/caseMinimalPairs[@case=\"accusative\"]",
+            "//ldml/numbers/minimalPairs/caseMinimalPairs[@case=\"dative\"]",
+            "//ldml/numbers/minimalPairs/caseMinimalPairs[@case=\"genitive\"]",
+            "//ldml/numbers/minimalPairs/caseMinimalPairs[@case=\"nominative\"]",
+            "//ldml/numbers/minimalPairs/genderMinimalPairs[@gender=\"feminine\"]",
+            "//ldml/numbers/minimalPairs/genderMinimalPairs[@gender=\"masculine\"]",
+            "//ldml/numbers/minimalPairs/genderMinimalPairs[@gender=\"neuter\"]",
+            "//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1",
+            "//ldml/units/unitLength[@type=\"short\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1",
+            "//ldml/units/unitLength[@type=\"narrow\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1"};
 
+        int germanExpectedIndex = 0;
+        int errorCount = 0;
+        for (Entry<PathHeader, Collection<String>> entry : pathHeaderToPaths.asMap().entrySet()) {
+            PathHeader ph = entry.getKey();
+            Collection<String> epaths = entry.getValue();
+            if (!assertEquals(entry.toString(), 1, epaths.size())) {
+                ++errorCount;
+            }
+            if (!assertEquals("PathHeader order", germanExpected[germanExpectedIndex++], epaths.iterator().next())) {
+                ++errorCount;
+            }
+        }
+        if (errorCount != 0) {
+            for (Entry<PathHeader, Collection<String>> entry : pathHeaderToPaths.asMap().entrySet()) {
+                PathHeader ph = entry.getKey();
+                Collection<String> epaths = entry.getValue();
+                System.out.println("\"" + epaths.iterator().next().replace("\"", "\\\"") + "\",\t// " + ph);
+            }
+        }
     }
 
     public void Test8414() {
@@ -1144,7 +1243,6 @@
                         }
                         pathChecker.checkPathHeader(dtdData, path);
                     }
-                    ;
                 }
             }
         }
@@ -1216,7 +1314,7 @@
             String star = starrer.set(path);
             if (badHeaders.add(star)) {
                 errln(star + message + ", " + ph);
-                System.out.println("\tNo match in PathHeader.txt for " + path 
+                System.out.println("\tNo match in PathHeader.txt for " + path
                     + "\n\tYou get only one message for all paths matching " + star
                     + "\n\tFor example, check to see if the field in PathHeader.txt is in PathHeader.PageId."
                     + "\n\tIf not, either correct PathHeader.txt or add it to PageId"
@@ -1272,7 +1370,7 @@
     // Moved from TestAnnotations and generalized
     public void testPathHeaderSize() {
         String locale = "ar"; // choose one with lots of plurals
-        int maxSize = 700;
+        int maxSize = 750;
         boolean showTable = false; // only printed if test fails or verbose
 
         Factory factory = CLDRConfig.getInstance().getCommonAndSeedAndMainAndAnnotationsFactory();
@@ -1343,4 +1441,16 @@
         }
     }
 
+    public void TestQuotes() {
+        // quotes should never appear in result
+        PathHeader.Factory phf = PathHeader.getFactory();
+        String[] tests = {
+            "//supplementalData/plurals[@type=\"ordinal\"]/pluralRules[@locales=\"ig\"]/pluralRule[@count=\"other\"]",
+            "//supplementalData/transforms/transform[@source=\"und-Khmr\"][@target=\"und-Latn\"]"
+        };
+        for (String test : tests) {
+            PathHeader trial = phf.fromPath(test);
+            assertEquals("No quotes in pathheader", false, trial.toString().contains("\""));
+        }
+    }
 }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPaths.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPaths.java
index 9bfc693..6816fee 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPaths.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPaths.java
@@ -36,7 +36,6 @@
 import org.unicode.cldr.util.XPathParts;
 
 import com.google.common.collect.ImmutableSet;
-import com.ibm.icu.dev.util.CollectionUtilities;
 
 public class TestPaths extends TestFmwkPlus {
     static CLDRConfig testInfo = CLDRConfig.getInstance();
@@ -46,11 +45,10 @@
     }
 
     public void VerifyEnglishVsRoot() {
-        Set<String> rootPaths = CollectionUtilities.addAll(testInfo
-            .getRoot().iterator(),
-            new HashSet<String>());
-        Set<String> englishPaths = CollectionUtilities.addAll(testInfo
-            .getEnglish().iterator(), new HashSet<String>());
+        HashSet<String> rootPaths = new HashSet<String>();
+        testInfo.getRoot().forEach(rootPaths::add);
+        HashSet<String> englishPaths = new HashSet<String>();
+        testInfo.getEnglish().forEach(englishPaths::add);
         englishPaths.removeAll(rootPaths);
         if (englishPaths.size() == 0) {
             return;
@@ -92,10 +90,10 @@
         StringBuilder b = new StringBuilder();
         for (PathHeader path : altPaths) {
             b.append("\n\t\t")
-                .append(path)
-                .append(":\t")
-                .append(testInfo.getEnglish().getStringValue(
-                    path.getOriginalPath()));
+            .append(path)
+            .append(":\t")
+            .append(testInfo.getEnglish().getStringValue(
+                path.getOriginalPath()));
         }
         return b.toString();
     }
@@ -151,22 +149,28 @@
         String fullPath = file.getFullXPath(path);
         String value = file.getStringValue(path);
         String source = file.getSourceLocaleID(path, status);
+
+        assertEquals("CanonicalOrder", XPathParts.getFrozenInstance(path).toString(), path);
+
         if (fullPath == null) {
-            errln("Locale: " + locale + ",\t FullPath: " + path);
+            errln("Locale: " + locale + ",\t Null FullPath: " + path);
+        } else if (!path.equals(fullPath)) {
+            assertEquals("CanonicalOrder (FP)", XPathParts.getFrozenInstance(fullPath).toString(), fullPath);
         }
+
         if (value == null) {
-            /*
-             * Allow null value for some exceptional extra paths.
-             */
-            if (!isExtraPath || !extraPathAllowsNullValue(path)) {
-                errln("Locale: " + locale + ",\t Value: " + path);
+            if (isExtraPath && extraPathAllowsNullValue(path)) {
+                return;
             }
+            errln("Locale: " + locale + ",\t Null Value: " + path);
         }
+
         if (source == null) {
-            errln("Locale: " + locale + ",\t Source: " + path);
+            errln("Locale: " + locale + ",\t Null Source: " + path);
         }
+
         if (status.pathWhereFound == null) {
-            errln("Locale: " + locale + ",\t Found Path: " + path);
+            errln("Locale: " + locale + ",\t Null Found Path: " + path);
         }
     }
 
@@ -195,9 +199,14 @@
      * Reference: https://unicode-org.atlassian.net/browse/CLDR-11238
      */
     private boolean extraPathAllowsNullValue(String path) {
-        if (path.contains("timeZoneNames/metazone") ||
-            path.contains("timeZoneNames/zone") ||
-            path.contains("dayPeriods/dayPeriodContext")) {
+        if (path.contains("/timeZoneNames/metazone")
+            || path.contains("/timeZoneNames/zone")
+            || path.contains("/dayPeriods/dayPeriodContext")
+            || path.contains("/unitPattern")
+            || path.contains("/gender")
+            || path.contains("/caseMinimalPairs")
+            || path.contains("/genderMinimalPairs")
+            ) {
             return true;
         }
         return false;
@@ -226,10 +235,9 @@
     }
 
     private Collection<String> getLocalesToTest() {
-        return params.inclusion <= 5 ? Arrays.asList("root", "en", "ja", "ar")
-            : params.inclusion < 10 ? testInfo.getCldrFactory()
-                .getAvailableLanguages() : testInfo.getCldrFactory()
-                    .getAvailable();
+        return params.inclusion <= 5 ? Arrays.asList("root", "en", "ja", "ar", "de", "ru")
+            : params.inclusion < 10 ? testInfo.getCldrFactory().getAvailableLanguages() 
+                : testInfo.getCldrFactory().getAvailable();
     }
 
     /**
@@ -270,11 +278,20 @@
                 for (Entry<String, String> attributeNValue : parts.getAttributes(i).entrySet()) {
                     String attributeName = attributeNValue.getKey();
                     if (dtdData.isDeprecated(elementName, attributeName, "*")) {
-                        testPaths.errln("Deprecated attribute in data: "
-                            + dtdData.dtdType
-                            + ":" + elementName
-                            + ":" + attributeName
-                            + " \t;" + fullName);
+                        if (attributeName.equals("draft")) {
+                            testPaths.errln("Deprecated attribute in data: "
+                                            + dtdData.dtdType
+                                            + ":" + elementName
+                                            + ":" + attributeName
+                                            + " \t;" + fullName +
+                                            " - consider adding to DtdData.DRAFT_ON_NON_LEAF_ALLOWED if you are sure this is ok.");
+                        } else {
+                            testPaths.errln("Deprecated attribute in data: "
+                                            + dtdData.dtdType
+                                            + ":" + elementName
+                                            + ":" + attributeName
+                                            + " \t;" + fullName);
+                        }
                         return true;
                     }
                     String attributeValue = attributeNValue.getValue();
@@ -359,7 +376,7 @@
         String[] normalizedPath = { "" };
 
         int counter = 0;
-        for (String directory : Arrays.asList("keyboards/", "common/")) {
+        for (String directory : Arrays.asList("keyboards/", "common/", "seed/", "exemplars/")) {
             String dirPath = CLDRPaths.BASE_DIRECTORY + directory;
             for (String fileName : new File(dirPath).list()) {
                 File dir2 = new File(dirPath + fileName);
@@ -370,7 +387,7 @@
 //                    || fileName.equals("dtd")  // TODO as flat files
 //                    || fileName.equals(".project")  // TODO as flat files
 //                    //|| dir.equals("uca") // TODO as flat files
-                ) {
+                    ) {
                     continue;
                 }
 
@@ -391,7 +408,7 @@
                     for (Pair<String, String> pathValue : XMLFileReader.loadPathValues(fullName, new ArrayList<Pair<String, String>>(), true)) {
                         String path = pathValue.getFirst();
                         final String value = pathValue.getSecond();
-                        XPathParts parts = XPathParts.getInstance(path); // not frozen, for removeNonDistinguishing
+                        XPathParts parts = XPathParts.getFrozenInstance(path);
                         if (dtdData == null) {
                             type = DtdType.valueOf(parts.getElement(0));
                             dtdData = DtdData.getInstance(type);
@@ -441,6 +458,7 @@
                         if (!normalizedPath.equals(path) && !normalizedPath[0].equals(dpath)) {
                             checkParts(normalizedPath[0], dtdData);
                         }
+                        parts = parts.cloneAsThawed();
                         counter = removeNonDistinguishing(parts, dtdData, counter, removed, nonFinalValues);
                         String cleaned = parts.toString();
                         Pair<String, String> pair = Pair.of(type == DtdType.ldml ? file : type.toString(), cleaned);
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPathsModule.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPathsModule.java
index fb3a8da..acfaf00 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPathsModule.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPathsModule.java
@@ -17,6 +17,7 @@
 import org.unicode.cldr.util.CLDRPaths;
 import org.unicode.cldr.util.CldrUtility;
 import org.unicode.cldr.util.DtdType;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.PatternCache;
 import org.unicode.cldr.util.XMLFileReader;
 import org.unicode.cldr.util.XMLFileReader.SimpleHandler;
@@ -62,7 +63,7 @@
         // Only test against /main for now.
         File dir = new File(CLDRPaths.MAIN_DIRECTORY);
         for (File file : dir.listFiles()) {
-            String fullFileName = file.getCanonicalPath();
+            String fullFileName = PathUtilities.getNormalizedPathString(file);
             String filename = file.getName();
             if (filename.startsWith("#") || !filename.endsWith(".xml")
                 || !FILE_FILTER.reset(filename).find())
@@ -99,6 +100,7 @@
             }
         }
 
+        @Override
         public void handlePathValue(String path, String value) {
             if (!PATH_FILTER.reset(path).find()) {
                 return;
@@ -197,6 +199,7 @@
 
         private Map<String, OrderedChildren> orderedChildrenStatus = new TreeMap<String, OrderedChildren>();
 
+        @Override
         public void test(XPathParts fullParts, String value) {
             super.test(fullParts, value);
             int size = fullParts.size();
@@ -268,6 +271,7 @@
             return firstQ;
         }
 
+        @Override
         public void finish() {
             super.finish();
             for (R3<DtdType, String, String> item : nonFinalNonDistingishing
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPerf.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPerf.java
index c0b17d3..51ccd7f 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPerf.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPerf.java
@@ -15,7 +15,6 @@
 import org.unicode.cldr.util.Timer;
 import org.unicode.cldr.util.XPathParts;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.util.Output;
 
 public class TestPerf extends TestFmwkPlus {
@@ -33,8 +32,8 @@
 
     static {
         Set<String> testPaths_ = new HashSet<String>();
-        CollectionUtilities.addAll(CLDRConfig.getInstance().getEnglish()
-            .iterator(), testPaths_);
+        CLDRConfig.getInstance().getEnglish()
+            .forEach(testPaths_::add);
         testPaths = Collections.unmodifiableSet(testPaths_);
         Set<String> sorted = new TreeSet<String>(
             CLDRFile.getComparator(DtdType.ldml));
@@ -124,7 +123,7 @@
         int size = 0;
         for (String p : testPaths) {
             for (int i = 0; i < ITERATIONS; ++i) {
-                XPathParts xpp = XPathParts.getInstance(p);
+                XPathParts xpp = XPathParts.getFrozenInstance(p);
                 size += xpp.size();
             }
         }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPluralRuleGeneration.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPluralRuleGeneration.java
index ee00053..e865bd9 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPluralRuleGeneration.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestPluralRuleGeneration.java
@@ -1,6 +1,10 @@
 package org.unicode.cldr.unittest;
 
+import java.text.ParseException;
+import java.util.Arrays;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
 
@@ -9,8 +13,24 @@
 import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo;
 import org.unicode.cldr.util.SupplementalDataInfo.PluralType;
 
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.ibm.icu.impl.number.DecimalQuantity_DualStorageBCD;
+import com.ibm.icu.math.BigDecimal;
+import com.ibm.icu.number.Notation;
+import com.ibm.icu.number.NumberFormatter;
+import com.ibm.icu.number.NumberFormatter.UnitWidth;
+import com.ibm.icu.number.Precision;
+import com.ibm.icu.number.UnlocalizedNumberFormatter;
+import com.ibm.icu.text.DecimalFormat;
+import com.ibm.icu.text.FixedDecimal;
 import com.ibm.icu.text.PluralRules;
+import com.ibm.icu.text.PluralRules.IFixedDecimal;
+import com.ibm.icu.text.PluralRules.Operand;
 import com.ibm.icu.text.PluralRules.SampleType;
+import com.ibm.icu.util.ICUException;
+import com.ibm.icu.util.MeasureUnit;
+import com.ibm.icu.util.ULocale;
 
 public class TestPluralRuleGeneration extends TestFmwkPlus {
     public static void main(String[] args) {
@@ -89,4 +109,274 @@
         }
 
     }
+
+    public void TestEFixedDecimal() {
+        PluralRules test;
+        try {
+            test = PluralRules.parseDescription("many: e = 0 and i != 0 and i % 1000000 = 0 and v = 0 or e != 0 .. 5 @integer 1000000");
+        } catch (ParseException e) {
+            throw new ICUException(e);
+        }
+        Object[][] checkItems = {
+            // compare each group of items against one another, where a group is bounded by {},
+            // source,  f,      v,  e,  plural (, skipString — if toString doesn't roundtrip)?
+            {"2300000", 2300000d, 0, 0, "other"},
+            {"2.3e6", 2300000d, 0, 6, "many"},
+            {},
+            {"1.20050e3",1200.5d, 2, 3, "other", "skipString"},
+            {},
+            {"1200.5", 1200.5d, 1, 0, "other"},
+            {"1.2005e3", 1200.5d, 1, 3, "other"},
+            {},
+            {"1200000", 1200000d, 0, 0, "other"},
+            {"1.2e6", 1200000d, 0, 6, "many"},
+            {"1.20e6", 1200000d, 0, 6, "many", "skipString"},
+            {},
+            {"1234567.8", 1234567.8, 1, 0, "other"},
+            {"123456.78e1", 1234567.8, 1, 1, "other"},
+            {"12.345678e5", 1234567.8, 1, 5, "other"},
+            {"1.2345678e6", 1234567.8, 1, 6, "many"},
+        };
+        String lastSource = null;
+        FixedDecimal lastFromString = null;
+        Map<Operand, Double> lastOperands = null;
+        for (Object[] row : checkItems) {
+            if (row.length == 0) {
+                // reset to different group
+                lastSource = null;
+                lastFromString = null;
+                lastOperands = null;
+                continue;
+            }
+            String rowString = Arrays.asList(row).toString();
+
+            final String source = (String)row[0];
+            final double fExpected = (double)row[1];
+            final int vExpected = (int)row[2];
+            final int eExpected = (int)row[3];
+            final String pluralExpected = (String)row[4];
+            final boolean checkString = row.length < 6 || !"skipString".equals(row[5]);
+
+            // basics
+
+            FixedDecimal fromString = new FixedDecimal(source);
+
+            final String fromToString = fromString.toString();
+            if (checkString && !assertEquals(rowString + " source vs fromString", source, fromToString)) {
+                fromString.toString(); // for debugging
+            }
+            if (!assertEquals(rowString + " double vs toString", fExpected, fromString.doubleValue())) {
+                fromString.doubleValue(); // for debugging
+            }
+            String pluralActual = test.select(fromString);
+            assertEquals(rowString + " plural category", pluralExpected, pluralActual);
+
+            // previous in group
+
+            Map<Operand, Double> operands = getOperandMap(fromString);
+            if (lastFromString != null) {
+                if (!assertTrue(lastSource + (checkString ? " < " :  " ≤ ") + source, lastFromString.compareTo(fromString) < (checkString ? 0 : 1))) {
+                    lastFromString.compareTo(fromString); // for debugging
+                }
+                assertEquals("double " + lastSource + " vs " + source, lastFromString.doubleValue(), lastFromString.doubleValue());
+                assertEquals("operands " + lastSource + " vs " + source, lastOperands, operands);
+            }
+
+            // different constructor
+
+            FixedDecimal fromDoubleAndExponent = FixedDecimal.createWithExponent(fExpected, vExpected, eExpected);
+
+            if (!assertEquals(rowString + " fromString vs fromDoubleAndExponent", fromString, fromDoubleAndExponent)) {
+                FixedDecimal.createWithExponent(fExpected, vExpected, eExpected);
+            }
+            assertEquals(rowString + " double vs fromDoubleAndExponent", fExpected, fromDoubleAndExponent.doubleValue());
+
+            assertEquals(rowString + " exponent, fromString vs fromDoubleAndExponent", fromString.getPluralOperand(Operand.e), fromDoubleAndExponent.getPluralOperand(Operand.e));
+
+            assertEquals(rowString + " fromString vs fromDoubleAndExponent", 0, fromString.compareTo(fromDoubleAndExponent));
+
+
+            lastSource = source;
+            lastFromString = fromString;
+            lastOperands = operands;
+        }
+    }
+
+    private Map<Operand,Double> getOperandMap(FixedDecimal fixedDecimal) {
+        Map<Operand,Double> result = new LinkedHashMap<>();
+        for (Operand op : Operand.values()) {
+            switch (op) {
+            case e: case j:
+                continue;
+            }
+            result.put(op, fixedDecimal.getPluralOperand(op));
+        }
+        return ImmutableMap.copyOf(result);
+    }
+
+    static final Set<Operand> orderedOperands = ImmutableSet.of(Operand.n, Operand.i, Operand.v, Operand.w, Operand.f, Operand.t, Operand.e);
+
+    public void TestEFixedDecimal2() {
+        UnlocalizedNumberFormatter unfScientific = NumberFormatter.with()
+            .unit(MeasureUnit.KILOMETER)
+            .unitWidth(UnitWidth.FULL_NAME)
+            .notation(Notation.engineering());
+
+        UnlocalizedNumberFormatter unfCompact = unfScientific.notation(Notation.compactLong());
+        unfScientific = unfScientific.precision(Precision.minMaxSignificantDigits(1, 3));
+
+        ImmutableSet<ULocale> locales = ImmutableSet.of(ULocale.ENGLISH, ULocale.FRENCH);
+        ImmutableSet<String> tests = ImmutableSet.of(
+            "1", "1.0", "1.00",
+            "1.3", "1.30", "1.03", "1.230",
+            "1200000", "1.2e6",
+            "123e6",
+            "123e5",
+            "1200.50",
+            "1.20050e3"
+            );
+
+        for (String test : tests) {
+            final FixedDecimal source = new FixedDecimal(test);
+            assertEquals("check toString", test, source.toString());
+        }
+
+        System.out.println();
+        String ops = "";
+        for (Operand op : orderedOperands) {
+            ops += "\t" + op.toString();
+        }
+        System.out.println("locale\tsource"
+            + ops
+            + "\tpluralCat"
+            );
+        for (ULocale locale : locales) {
+            PluralRules pr = PluralRules.forLocale(locale);
+
+            for (String test : tests) {
+                final FixedDecimal source = new FixedDecimal(test);
+                System.out.println(locale
+                    + "\t" + FixedDecimal.toSampleString(source)
+                    + "\t" + pluralInfo(pr, source)
+                    );
+            }
+            System.out.println();
+
+        }
+    }
+
+    public void TestDecimalQuantity() {
+        ImmutableSet<String> tests = ImmutableSet.of(
+            "1000.5",
+            "1.0005e3",
+            "1",
+            "1.0",
+            "1.00",
+            "1.3",
+            "1.30",
+            "1.03",
+            "1.230",
+            "1200000",
+            "1.2e6",
+            "123e6",
+            "123e5",
+            "1200.5",
+            "1.2005e3",
+            "2300000",
+            "2.3e6",
+            //"1.20050e3",
+            "1200.5",
+            "1.2005e3",
+            "1200000",
+            "1.2e6",
+            //"1.20e6",
+            "1234567.8",
+            "123456.78e1",
+            "12.345678e5",
+            "1.2345678e6",
+            "1.20050e3"
+            );
+
+        boolean ok;
+        for (int i = 0; i < 3; ++i) {
+            for (String test : tests) {
+                IFixedDecimal sourceFixedDecimal = new FixedDecimal(test);
+                DecimalQuantity_DualStorageBCD sourceDecimalQuantity = quantityFromSampleString(test);
+                switch(i) {
+                case 0:
+                    ok = assertEquals(test + " — check FixedDecimal toString", test, sourceFixedDecimal.toString());
+                    if (!ok) {
+                        sourceFixedDecimal = new FixedDecimal(test); // for debugging
+                        sourceFixedDecimal.toString();
+                    }
+                    break;
+                case 1:
+                    ok = assertEquals(test + " — check quantity toScientificString",
+                        test, FixedDecimal.toSampleString(sourceDecimalQuantity));
+                    if (!ok) {
+                        sourceFixedDecimal = quantityFromSampleString(test); // for debugging
+                    }
+                    break;
+                case 2:
+                    ok = assertEquals(test + " — check operands FixedDecimal vs DecimalQuantity", "",
+                        showOperandDifferences("FD", sourceFixedDecimal, "DC", sourceDecimalQuantity));
+                    break;
+                }
+            }
+        }
+    }
+
+    public static String showOperandDifferences(String myTitle, IFixedDecimal me, String otherTitle, IFixedDecimal other) {
+        StringBuilder result = new StringBuilder();
+        for (Operand op : Operand.values()) {
+            if (me.getPluralOperand(op) != other.getPluralOperand(op)) {
+                if (result.length() != 0) {
+                    result.append("; ");
+                }
+                result.append(op)
+                .append(": "
+                    + myTitle
+                    + "=").append(me.getPluralOperand(op))
+                .append(" "
+                    + otherTitle
+                    + "=").append(other.getPluralOperand(op))
+                ;
+            }
+        }
+        return result.toString();
+    }
+
+    public static DecimalQuantity_DualStorageBCD quantityFromSampleString(String num) {
+        final DecimalQuantity_DualStorageBCD sourceQuantity;
+        int exponent = 0;
+        int ePos = num.indexOf('e');
+        if (ePos >= 0) {
+            String exponentStr = num.substring(ePos + 1);
+            exponent = Integer.parseInt(exponentStr);
+            num = num.substring(0, ePos);
+        }
+
+        int v = FixedDecimal.getVisibleFractionCount(num) + exponent;
+
+        BigDecimal altBD = new BigDecimal(num);
+        altBD = altBD.movePointRight(exponent);
+        sourceQuantity = new DecimalQuantity_DualStorageBCD(altBD);
+        sourceQuantity.setMinFraction(v-exponent); //"1.20050e3" v should be 2, is 4
+        sourceQuantity.adjustMagnitude(-exponent);
+        sourceQuantity.adjustExponent(exponent);
+
+        return sourceQuantity;
+    }
+
+    static final DecimalFormat nf = new DecimalFormat("0.#####");
+
+    public CharSequence pluralInfo(PluralRules pr, final FixedDecimal formatted) {
+        StringBuilder buffer = new StringBuilder();
+        for (Operand op :orderedOperands) {
+            double opValue = formatted.getPluralOperand(op);
+            buffer.append(nf.format(opValue) + "\t");
+        }
+        buffer.append(pr.select(formatted));
+        return buffer;
+    }
 }
\ No newline at end of file
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestScriptMetadata.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestScriptMetadata.java
index c171045..2017e0a 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestScriptMetadata.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestScriptMetadata.java
@@ -24,7 +24,7 @@
 import org.unicode.cldr.util.With;
 import org.unicode.cldr.util.XPathParts;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.lang.UCharacter;
@@ -69,11 +69,11 @@
             if (ScriptMetadata.errors.size() == 1) {
                 logln("ScriptMetadata initialization errors\t"
                     + ScriptMetadata.errors.size() + "\t"
-                    + CollectionUtilities.join(ScriptMetadata.errors, "\n"));
+                    + Joiner.on("\n").join(ScriptMetadata.errors));
             } else {
                 errln("ScriptMetadata initialization errors\t"
                     + ScriptMetadata.errors.size() + "\t"
-                    + CollectionUtilities.join(ScriptMetadata.errors, "\n"));
+                    + Joiner.on("\n").join(ScriptMetadata.errors));
             }
         }
 
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestShim.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestShim.java
new file mode 100644
index 0000000..84040b5
--- /dev/null
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestShim.java
@@ -0,0 +1,34 @@
+package org.unicode.cldr.unittest;
+
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+import org.unicode.cldr.util.TestShimUtils;
+
+// NOTE: When not under Maven, you'll see compile errs in eclipse.
+// Ignore them.
+
+/**
+ * a JUnit test that calls TestAll.
+ */
+class TestShim {
+    @Test
+    public void TestAll() {
+        String args[] = TestShimUtils.getArgs(TestShim.class, "-n -q");
+        // regular main() will System.exit() which is not too friendly.
+        // call this instead.
+        int errCount = TestAll.runTests(args);
+        assertEquals(0, errCount, "Test had errors");
+    }
+
+    @Test
+    public void TestTestShimUtilTest() {
+        // Note: checks the system property corresponding to java.lang
+        // We expect the system property "java.lang.testArgs" will not be set,
+        // and so the default "-a -b -c" will be used.
+        String args[] = TestShimUtils.getArgs(java.lang.String.class, "-a -b -c");
+        String expectArgs[] = { "-a", "-b", "-c" };
+        assertArrayEquals(args, expectArgs, "Expected arg parse");
+    }
+}
\ No newline at end of file
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestSupplementalInfo.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestSupplementalInfo.java
index ad27b34..3fcdf6c 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestSupplementalInfo.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestSupplementalInfo.java
@@ -33,6 +33,10 @@
 import org.unicode.cldr.util.CLDRFile.WinningChoice;
 import org.unicode.cldr.util.CLDRLocale;
 import org.unicode.cldr.util.CldrUtility;
+import org.unicode.cldr.util.GrammarInfo;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalFeature;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalScope;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalTarget;
 import org.unicode.cldr.util.Iso639Data;
 import org.unicode.cldr.util.Iso639Data.Scope;
 import org.unicode.cldr.util.IsoCurrencyParser;
@@ -64,10 +68,10 @@
 import org.unicode.cldr.util.Validity;
 import org.unicode.cldr.util.Validity.Status;
 
+import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
@@ -80,6 +84,7 @@
 import com.ibm.icu.text.PluralRules.FixedDecimal;
 import com.ibm.icu.text.PluralRules.FixedDecimalRange;
 import com.ibm.icu.text.PluralRules.FixedDecimalSamples;
+import com.ibm.icu.text.PluralRules.Operand;
 import com.ibm.icu.text.PluralRules.SampleType;
 import com.ibm.icu.text.StringTransform;
 import com.ibm.icu.text.UnicodeSet;
@@ -88,6 +93,8 @@
 import com.ibm.icu.util.ULocale;
 
 public class TestSupplementalInfo extends TestFmwkPlus {
+    private static final boolean DEBUG = true;
+
     static CLDRConfig testInfo = CLDRConfig.getInstance();
 
     private static final StandardCodes STANDARD_CODES = testInfo
@@ -101,7 +108,7 @@
     }
 
     public void TestPluralSampleOrder() {
-        HashSet<PluralInfo> seen = new HashSet<PluralInfo>();
+        HashSet<PluralInfo> seen = new HashSet<>();
         for (String locale : SUPPLEMENTAL.getPluralLocales()) {
             if (locale.equals("root")) {
                 continue;
@@ -125,7 +132,7 @@
                     FixedDecimalRange lastSample = null;
                     for (FixedDecimalRange sample : sSamples.samples) {
                         if (lastSample != null) {
-                            if (lastSample.start.compareTo(sample.start) > 0) {
+                            if (compare(lastSample.start,sample.start) > 0) {
                                 errln(locale + ":" + c + ": out of order with "
                                     + lastSample + " > " + sample);
                             } else if (false) {
@@ -140,9 +147,33 @@
         }
     }
 
+    /**
+     * Hack until ICU's FixedDecimal is fixed
+     *
+     */
+    public static int compare(PluralRules.FixedDecimal me, PluralRules.FixedDecimal other) {
+        if (me.getPluralOperand(Operand.e) != other.getPluralOperand(Operand.e)) {
+            return me.getPluralOperand(Operand.e) < other.getPluralOperand(Operand.e) ? -1 : 1;
+        }
+        if (me.getIntegerValue() != other.getIntegerValue()) {
+            return me.getIntegerValue() < other.getIntegerValue() ? -1 : 1;
+        }
+        if (me.getSource() != other.getSource()) {
+            return me.getSource() < other.getSource() ? -1 : 1;
+        }
+        if (me.getVisibleDecimalDigitCount() != other.getVisibleDecimalDigitCount()) {
+            return me.getVisibleDecimalDigitCount() < other.getVisibleDecimalDigitCount() ? -1 : 1;
+        }
+        long diff = me.getDecimalDigits() - other.getDecimalDigits();
+        if (diff != 0) {
+            return diff < 0 ? -1 : 1;
+        }
+        return 0;
+    }
+
     public void TestPluralRanges() {
         PluralRulesFactory prf = PluralRulesFactory.getInstance(SUPPLEMENTAL);
-        Set<String> localesToTest = new TreeSet<String>(
+        Set<String> localesToTest = new TreeSet<>(
             SUPPLEMENTAL.getPluralRangesLocales());
         for (String locale : StandardCodes.make().getLocaleCoverageLocales(
             "google")) { // superset
@@ -155,8 +186,8 @@
             .getLocaleCoverageLocales(Organization.cldr,
                 EnumSet.of(Level.MODERN));
 
-        Output<FixedDecimal> maxSample = new Output<FixedDecimal>();
-        Output<FixedDecimal> minSample = new Output<FixedDecimal>();
+        Output<FixedDecimal> maxSample = new Output<>();
+        Output<FixedDecimal> minSample = new Output<>();
 
         for (String locale : localesToTest) {
             final String templateLine = "Template for " + ULocale.getDisplayName(locale, "en") + " (" + locale + ") translators to fix:";
@@ -190,8 +221,8 @@
                     && !counts.contains(count)) {
                     assertTrue(
                         locale
-                            + "\t pluralRanges categories must be valid for locale:\t"
-                            + count + " must be in " + counts,
+                        + "\t pluralRanges categories must be valid for locale:\t"
+                        + count + " must be in " + counts,
                         !pluralRanges.isExplicitlySet(count));
                 }
                 for (Count end : Count.values()) {
@@ -382,7 +413,7 @@
         PluralInfo pluralInfo = SUPPLEMENTAL.getPlurals(
             PluralType.valueOf(row[1]), row[0]);
         Count count = pluralInfo.getCount(new FixedDecimal(row[2]));
-        assertEquals(CollectionUtilities.join(row, ", "),
+        assertEquals(String.join(", ", row),
             Count.valueOf(row[3]), count);
     }
 
@@ -391,7 +422,7 @@
         for (PluralType type : PluralType.values()) {
             Relation<PluralInfo, String> pluralsToLocale = Relation.of(
                 new HashMap<PluralInfo, Set<String>>(), TreeSet.class);
-            for (String locale : new TreeSet<String>(
+            for (String locale : new TreeSet<>(
                 SUPPLEMENTAL.getPluralLocales(type))) {
                 PluralInfo pluralInfo = SUPPLEMENTAL.getPlurals(type, locale);
                 pluralsToLocale.put(pluralInfo, locale);
@@ -418,7 +449,7 @@
                     }
                     assertFalse(
                         "Rule '" + rule + "' for " + Arrays.asList(locales)
-                            + " doesn't contain 'within'",
+                        + " doesn't contain 'within'",
                         rule.contains("within"));
                 }
             }
@@ -437,25 +468,25 @@
             { "en", "other", "4", "1000-9999, 1000.0, 1000.1, 1000.2, …" },
             { "hr", "one", "1", "1, 0.1, 2.10, 1.1, …" },
             { "hr", "one", "2",
-                "21, 31, 41, 51, 61, 71, …, 10.1, 12.10, 11.1, …" },
+            "21, 31, 41, 51, 61, 71, …, 10.1, 12.10, 11.1, …" },
             { "hr", "one", "3",
-                "101, 121, 131, 141, 151, 161, …, 100.1, 102.10, 101.1, …" },
+            "101, 121, 131, 141, 151, 161, …, 100.1, 102.10, 101.1, …" },
             { "hr", "one", "4",
-                "1001, 1021, 1031, 1041, 1051, 1061, …, 1000.1, 1002.10, 1001.1, …" },
+            "1001, 1021, 1031, 1041, 1051, 1061, …, 1000.1, 1002.10, 1001.1, …" },
             { "hr", "few", "1", "2-4, 0.2, 0.3, 0.4, …" },
             { "hr", "few", "2",
-                "22-24, 32-34, 42-44, …, 10.2, 10.3, 10.4, …" },
+            "22-24, 32-34, 42-44, …, 10.2, 10.3, 10.4, …" },
             { "hr", "few", "3",
-                "102-104, 122-124, 132-134, …, 100.2, 100.3, 100.4, …" },
+            "102-104, 122-124, 132-134, …, 100.2, 100.3, 100.4, …" },
             { "hr", "few", "4",
-                "1002-1004, 1022-1024, 1032-1034, …, 1000.2, 1000.3, 1000.4, …" },
+            "1002-1004, 1022-1024, 1032-1034, …, 1000.2, 1000.3, 1000.4, …" },
             { "hr", "other", "1", "0, 5-9, 0.0, 0.5, 0.6, …" },
             { "hr", "other", "2",
-                "10-20, 25-30, 35-40, …, 10.0, 10.5, 10.6, …" },
+            "10-20, 25-30, 35-40, …, 10.0, 10.5, 10.6, …" },
             { "hr", "other", "3",
-                "100, 105-120, 125-130, 135-140, …, 100.0, 100.5, 100.6, …" },
+            "100, 105-120, 125-130, 135-140, …, 100.0, 100.5, 100.6, …" },
             { "hr", "other", "4",
-                "1000, 1005-1020, 1025-1030, 1035-1040, …, 1000.0, 1000.5, 1000.6, …" }, };
+            "1000, 1005-1020, 1025-1030, 1035-1040, …, 1000.0, 1000.5, 1000.6, …" }, };
         for (String[] row : tests) {
             PluralInfo plurals = SUPPLEMENTAL.getPlurals(row[0]);
             SampleList uset = plurals.getSamples9999(Count.valueOf(row[1]),
@@ -468,7 +499,8 @@
     public void TestDigitPluralCompleteness() {
         String[][] exceptionStrings = {
             // defaults
-            { "*", "zero", "0,00,000,0000" }, { "*", "one", "0" },
+            { "*", "zero", "0,00,000,0000" },
+            { "*", "one", "0" },
             { "*", "two", "0,00,000,0000" },
             { "*", "few", "0,00,000,0000" },
             { "*", "many", "0,00,000,0000" },
@@ -555,9 +587,10 @@
             // % 100 = 1
             {"kw", "many", "00,000,0000"},  // n != 1 and n % 100 = 1,21,41,61,81
             {"kw", "zero", "0"},    // n = 0
+            {"fr", "many", ""},    // e is special
         };
         // parse out the exceptions
-        Map<PluralInfo, Relation<Count, Integer>> exceptions = new HashMap<PluralInfo, Relation<Count, Integer>>();
+        Map<PluralInfo, Relation<Count, Integer>> exceptions = new HashMap<>();
         Relation<Count, Integer> fallback = Relation.of(
             new EnumMap<Count, Set<Integer>>(Count.class), TreeSet.class);
         for (String[] row : exceptionStrings) {
@@ -582,8 +615,8 @@
                 countToDigits.put(c, digit.length());
             }
         }
-        Set<PluralInfo> seen = new HashSet<PluralInfo>();
-        Set<String> sorted = new TreeSet<String>(
+        Set<PluralInfo> seen = new HashSet<>();
+        Set<String> sorted = new TreeSet<>(
             SUPPLEMENTAL.getPluralLocales(PluralType.cardinal));
         Relation<String, String> ruleToExceptions = Relation.of(
             new TreeMap<String, Set<String>>(), TreeSet.class);
@@ -598,7 +631,7 @@
                 countToDigits = fallback;
             }
             for (Count c : plurals.getCounts()) {
-                List<String> compose = new ArrayList<String>();
+                List<String> compose = new ArrayList<>();
                 boolean needLine = false;
                 Set<Integer> digitSet = countToDigits.get(c);
                 if (digitSet == null) {
@@ -620,14 +653,14 @@
                         c.toString());
                     ruleToExceptions.put(countRules == null ? "" : countRules,
                         "{\"" + locale + "\", \"" + c + "\", \""
-                            + CollectionUtilities.join(compose, ",")
+                            + Joiner.on(",").join(compose)
                             + "\"},");
                 }
             }
         }
         if (!ruleToExceptions.isEmpty()) {
             System.out
-                .println("To fix the above, review the following, then replace in TestDigitPluralCompleteness");
+            .println("To fix the above, review the following, then replace in TestDigitPluralCompleteness");
             for (Entry<String, String> entry : ruleToExceptions.entrySet()) {
                 System.out.println(entry.getValue() + "\t// " + entry.getKey());
             }
@@ -670,8 +703,8 @@
     }
 
     public void TestEquivalentLocales() {
-        Set<Set<String>> seen = new HashSet<Set<String>>();
-        Set<String> toTest = new TreeSet<String>(testInfo.getCldrFactory()
+        Set<Set<String>> seen = new HashSet<>();
+        Set<String> toTest = new TreeSet<>(testInfo.getCldrFactory()
             .getAvailable());
         toTest.addAll(SUPPLEMENTAL.getLikelySubtags().keySet());
         toTest.addAll(SUPPLEMENTAL.getLikelySubtags().values());
@@ -687,7 +720,7 @@
             }
             // System.out.println(s + " => " + VettingViewer.gatherCodes(s));
 
-            List<String> ss = new ArrayList<String>(s);
+            List<String> ss = new ArrayList<>(s);
             String last = ss.get(ss.size() - 1);
             ltp.set(last);
             if (!ltp.getVariants().isEmpty() || !ltp.getExtensions().isEmpty()) {
@@ -736,14 +769,14 @@
 
     private String showLocaleParts(Set<String> s) {
         LanguageTagParser ltp = new LanguageTagParser();
-        Set<String> b = new LinkedHashSet<String>();
+        Set<String> b = new LinkedHashSet<>();
         for (String ss : s) {
             ltp.set(ss);
             addName(CLDRFile.LANGUAGE_NAME, ltp.getLanguage(), b);
             addName(CLDRFile.SCRIPT_NAME, ltp.getScript(), b);
             addName(CLDRFile.TERRITORY_NAME, ltp.getRegion(), b);
         }
-        return CollectionUtilities.join(b, "; ");
+        return Joiner.on("; ").join(b);
     }
 
     private void addName(int languageName, String code, Set<String> b) {
@@ -792,14 +825,14 @@
     public void TestTimeData() {
         Map<String, PreferredAndAllowedHour> timeData = SUPPLEMENTAL
             .getTimeData();
-        Set<String> regionsSoFar = new HashSet<String>();
-        Set<String> current24only = new HashSet<String>();
-        Set<String> current12preferred = new HashSet<String>();
+        Set<String> regionsSoFar = new HashSet<>();
+        Set<String> current24only = new HashSet<>();
+        Set<String> current12preferred = new HashSet<>();
 
         boolean haveWorld = false;
-        
+
         ImmutableSet<HourStyle> oldSchool = ImmutableSet.copyOf(EnumSet.of(HourStyle.H, HourStyle.h, HourStyle.K, HourStyle.k));
-        
+
         for (Entry<String, PreferredAndAllowedHour> e : timeData.entrySet()) {
             String region = e.getKey();
             if (region.equals("001")) {
@@ -808,10 +841,10 @@
             regionsSoFar.add(region);
             PreferredAndAllowedHour preferredAndAllowedHour = e.getValue();
             assertNotNull("Preferred must not be null", preferredAndAllowedHour.preferred);
-            
+
             // find first h or H
             HourStyle found = null;
-            
+
             for (HourStyle item : preferredAndAllowedHour.allowed) {
                 if (oldSchool.contains(item)) {
                     found = item;
@@ -819,7 +852,7 @@
                         String message = "Inconsistent values for " + region + ": preferred=" + preferredAndAllowedHour.preferred
                             + " but that isn't the first " + oldSchool + " in allowed: " + preferredAndAllowedHour.allowed;
                         //if (!logKnownIssue("cldrbug:11448", message)) {
-                            errln(message);
+                        errln(message);
                         //}
                     }
                     break;
@@ -854,7 +887,7 @@
                 current12preferred.add(region);
             }
         }
-        Set<String> missing = new TreeSet<String>(
+        Set<String> missing = new TreeSet<>(
             STANDARD_CODES.getGoodAvailableCodes(CodeType.territory));
         missing.removeAll(regionsSoFar);
         for (Iterator<String> it = missing.iterator(); it.hasNext();) {
@@ -874,13 +907,13 @@
 
         // The feedback gathered from our translators is that the following use
         // 24 hour time ONLY:
-        Set<String> only24lang = new TreeSet<String>(
+        Set<String> only24lang = new TreeSet<>(
             Arrays.asList(("sq, br, bu, ca, hr, cs, da, de, nl, et, eu, fi, "
                 + "fr, gl, he, is, id, it, nb, pt, ro, ru, sr, sk, sl, sv, tr, hy")
-                    .split(",\\s*")));
-        // With the new preferences, this is changed 
-        Set<String> only24region = new TreeSet<String>();
-        Set<String> either24or12region = new TreeSet<String>();
+                .split(",\\s*")));
+        // With the new preferences, this is changed
+        Set<String> only24region = new TreeSet<>();
+        Set<String> either24or12region = new TreeSet<>();
 
         // get all countries where official or de-facto official
         // add them two one of two lists, based on the above list of languages
@@ -913,7 +946,7 @@
         only24region.removeAll(current12preferred);
         // now verify
         if (!current24only.containsAll(only24region)) {
-            Set<String> missing24only = new TreeSet<String>(only24region);
+            Set<String> missing24only = new TreeSet<>(only24region);
             missing24only.removeAll(current24only);
 
             errln("24-hour-only doesn't include needed items:\n"
@@ -978,8 +1011,8 @@
                 }
             }
 
-            Set<R3<String, List<String>, List<String>>> failures = new LinkedHashSet<R3<String, List<String>, List<String>>>();
-            Set<String> nullReplacements = new TreeSet<String>();
+            Set<R3<String, List<String>, List<String>>> failures = new LinkedHashSet<>();
+            Set<String> nullReplacements = new TreeSet<>();
             for (Entry<String, R2<List<String>, String>> codeRep : codeReplacement
                 .entrySet()) {
                 String code = codeRep.getKey();
@@ -988,7 +1021,7 @@
                     nullReplacements.add(code);
                     continue;
                 }
-                Set<String> fixedReplacements = new LinkedHashSet<String>();
+                Set<String> fixedReplacements = new LinkedHashSet<>();
                 for (String replacement : replacements) {
                     R2<List<String>, String> newReplacement = codeReplacement
                         .get(replacement);
@@ -1001,7 +1034,7 @@
                         fixedReplacements.add(replacement);
                     }
                 }
-                List<String> fixedList = new ArrayList<String>(
+                List<String> fixedList = new ArrayList<>(
                     fixedReplacements);
                 if (!replacements.equals(fixedList)) {
                     R3<String, List<String>, List<String>> row = Row.of(code,
@@ -1020,7 +1053,7 @@
                     errln(code + "\t=>\t" + oldReplacement + "\tshould be:\n\t"
                         + "<" + type + "Alias type=\"" + code
                         + "\" replacement=\""
-                        + CollectionUtilities.join(newReplacement, " ")
+                        + Joiner.on(" ").join(newReplacement)
                         + "\" reason=\"XXX\"/> <!-- YYY -->\n");
                 }
             }
@@ -1038,7 +1071,7 @@
         Relation<String, String> map = SUPPLEMENTAL
             .getTerritoryToContained(ContainmentStyle.all);
         Relation<String, String> mapCore = SUPPLEMENTAL.getContainmentCore();
-        Set<String> mapItems = new LinkedHashSet<String>();
+        Set<String> mapItems = new LinkedHashSet<>();
         // get all the items
         for (String item : map.keySet()) {
             mapItems.add(item);
@@ -1048,7 +1081,7 @@
             .getLStreg().get("region");
 
         // verify that all regions are covered
-        Set<String> bcp47Regions = new LinkedHashSet<String>(
+        Set<String> bcp47Regions = new LinkedHashSet<>(
             bcp47RegionData.keySet());
         bcp47Regions.remove("ZZ"); // We don't care about ZZ since it is the
         // unknown region...
@@ -1100,7 +1133,7 @@
 
     private void errlnDiff(String title, Set<String> mapItems,
         Set<String> keySet) {
-        Set<String> diff = new LinkedHashSet<String>(mapItems);
+        Set<String> diff = new LinkedHashSet<>(mapItems);
         diff.removeAll(keySet);
         if (diff.size() != 0) {
             errln(title + diff);
@@ -1313,11 +1346,11 @@
     }
 
     // these are settings for exceptional cases we want to allow
-    private static final Set<String> EXCEPTION_CURRENCIES_WITH_NEW = new TreeSet<String>(
+    private static final Set<String> EXCEPTION_CURRENCIES_WITH_NEW = new TreeSet<>(
         Arrays.asList("ILS", "NZD", "PGK", "TWD"));
 
     // ok since there is no problem with confusion
-    private static final Set<String> OK_TO_NOT_HAVE_OLD = new TreeSet<String>(
+    private static final Set<String> OK_TO_NOT_HAVE_OLD = new TreeSet<>(
         Arrays.asList("ADP", "ATS", "BEF", "CYP", "DEM", "ESP", "FIM",
             "FRF", "GRD", "IEP", "ITL", "LUF", "MTL", "MTP", "NLG",
             "PTE", "YUM", "ARA", "BAD", "BGL", "BOP", "BRC", "BRN",
@@ -1329,6 +1362,7 @@
     private static final Date LIMIT_FOR_NEW_CURRENCY = new Date(
         new Date().getYear() - 5, 1, 1);
     private static final Date NOW = new Date();
+
     private Matcher oldMatcher = Pattern.compile(
         "\\bold\\b|\\([0-9]{4}-[0-9]{4}\\)", Pattern.CASE_INSENSITIVE)
         .matcher("");
@@ -1351,10 +1385,10 @@
         Relation<String, Pair<String, CurrencyDateInfo>> modernCurrencyCodes = Relation
             .of(new TreeMap<String, Set<Pair<String, CurrencyDateInfo>>>(),
                 TreeSet.class);
-        Set<String> territoriesWithoutModernCurrencies = new TreeSet<String>(
+        Set<String> territoriesWithoutModernCurrencies = new TreeSet<>(
             STANDARD_CODES.getGoodAvailableCodes("territory"));
-        Map<String, Date> currencyFirstValid = new TreeMap<String, Date>();
-        Map<String, Date> currencyLastValid = new TreeMap<String, Date>();
+        Map<String, Date> currencyFirstValid = new TreeMap<>();
+        Map<String, Date> currencyLastValid = new TreeMap<>();
         territoriesWithoutModernCurrencies.remove("ZZ");
 
         for (String territory : STANDARD_CODES
@@ -1376,7 +1410,7 @@
                 final Date end = dateInfo.getEnd();
                 if (dateInfo.getErrors().length() != 0) {
                     logln("parsing " + territory + "\t" + dateInfo.toString()
-                        + "\t" + dateInfo.getErrors());
+                    + "\t" + dateInfo.getErrors());
                 }
                 Date firstValue = currencyFirstValid.get(currency);
                 if (firstValue == null || firstValue.compareTo(start) < 0) {
@@ -1390,12 +1424,12 @@
                     // is
                     // OK...
                     modernCurrencyCodes.put(currency,
-                        new Pair<String, CurrencyDateInfo>(territory,
+                        new Pair<>(territory,
                             dateInfo));
                     territoriesWithoutModernCurrencies.remove(territory);
                 } else {
                     nonModernCurrencyCodes.put(currency,
-                        new Pair<String, CurrencyDateInfo>(territory,
+                        new Pair<>(territory,
                             dateInfo));
                 }
                 logln(territory
@@ -1414,7 +1448,7 @@
         // now print error messages
         logln("Modern Codes: " + modernCurrencyCodes.size() + "\t"
             + modernCurrencyCodes);
-        Set<String> missing = new TreeSet<String>(
+        Set<String> missing = new TreeSet<>(
             isoCurrenciesToCountries.keySet());
         missing.removeAll(modernCurrencyCodes.keySet());
         if (missing.size() != 0) {
@@ -1430,10 +1464,10 @@
             Set<String> isoCountries = isoCurrenciesToCountries
                 .getAll(currency);
             if (isoCountries == null) {
-                isoCountries = new TreeSet<String>();
+                isoCountries = new TreeSet<>();
             }
 
-            TreeSet<String> cldrCountries = new TreeSet<String>();
+            TreeSet<String> cldrCountries = new TreeSet<>();
             for (Pair<String, CurrencyDateInfo> x : data) {
                 cldrCountries.add(x.getFirst());
             }
@@ -1472,7 +1506,7 @@
             }
         }
         logln("Non-Modern Codes (with dates): " + nonModernCurrencyCodes.size()
-            + "\t" + nonModernCurrencyCodes);
+        + "\t" + nonModernCurrencyCodes);
         for (String currency : nonModernCurrencyCodes.keySet()) {
             final String name = testInfo.getEnglish().getName(
                 CLDRFile.CURRENCY_NAME, currency);
@@ -1516,7 +1550,7 @@
 
             }
         }
-        Set<String> remainder = new TreeSet<String>();
+        Set<String> remainder = new TreeSet<>();
         remainder.addAll(currencyCodes);
         remainder.removeAll(nonModernCurrencyCodes.keySet());
         // TODO make this an error, except for allowed exceptions.
@@ -1564,7 +1598,7 @@
     public void TestDefaultScripts() {
         SupplementalDataInfo supp = SUPPLEMENTAL;
         Map<String, String> likelyData = supp.getLikelySubtags();
-        Map<String, String> baseToDefaultContentScript = new HashMap<String, String>();
+        Map<String, String> baseToDefaultContentScript = new HashMap<>();
         for (CLDRLocale locale : supp.getDefaultContentCLDRLocales()) {
             String script = locale.getScript();
             if (!script.isEmpty() && locale.getCountry().isEmpty()) {
@@ -1655,7 +1689,7 @@
             }
             CoverageIssue needsCoverage = testLocales.contains(locale)
                 ? CoverageIssue.error
-                : CoverageIssue.log;
+                    : CoverageIssue.log;
             CoverageIssue needsCoverage2 = needsCoverage == CoverageIssue.error ? CoverageIssue.warn : needsCoverage;
 
             //            if (logKnownIssue("Cldrbug:8809", "Missing plural rules/samples be and ga locales")) {
@@ -1678,7 +1712,7 @@
                 // if (counts.size() == 1) {
                 // continue; // skip checking samples
                 // }
-                HashSet<String> samples = new HashSet<String>();
+                HashSet<String> samples = new HashSet<>();
                 EnumSet<Count> countsWithNoSamples = EnumSet
                     .noneOf(Count.class);
                 Relation<String, Count> samplesToCounts = Relation.of(
@@ -1687,7 +1721,7 @@
                     type.standardType);
                 StringBuilder failureCases = new StringBuilder();
                 for (Count count : counts) {
-                    String pattern = prf.getSamplePattern(locale, type.standardType, count);
+                    String pattern = PluralRulesFactory.getSamplePattern(locale, type.standardType, count);
                     final String rangeLine = getRangeLine(count, pluralInfo.getPluralRules(), pattern);
                     failureCases.append('\n').append(locale).append('\t').append(type).append('\t').append(rangeLine);
                     if (countsFound == null || !countsFound.contains(count)) {
@@ -1707,7 +1741,7 @@
                     .keyValuesSet()) {
                     if (entry.getValue().size() != 1) {
                         errOrLog(needsCoverage, locale + "\t" + type + "\t duplicate samples: " + entry.getValue()
-                            + " => «" + entry.getKey() + "»", "cldrbug:7119", "Some duplicate minimal pairs");
+                        + " => «" + entry.getKey() + "»", "cldrbug:7119", "Some duplicate minimal pairs");
                         errOrLog(needsCoverage2, failureCases.toString());
                     }
                 }
@@ -1770,7 +1804,7 @@
     }
 
     public void TestNumberingSystemDigitCompleteness() {
-        List<Integer> unicodeDigits = new ArrayList<Integer>();
+        List<Integer> unicodeDigits = new ArrayList<>();
         for (int cp = UCharacter.MIN_CODE_POINT; cp <= UCharacter.MAX_CODE_POINT; cp++) {
             if (UCharacter.getType(cp) == UCharacterEnums.ECharacterCategory.DECIMAL_DIGIT_NUMBER) {
                 unicodeDigits.add(Integer.valueOf(cp));
@@ -1838,7 +1872,7 @@
         assertTrue("yue*10 < zh", yueCNData.getPopulation() < zhCNData.getPopulation());
     }
 
-    public void Test10765() { // 
+    public void Test10765() { //
         Set<String> surveyToolLanguages = SUPPLEMENTAL.getCLDRLanguageCodes(); // codes that show up in Survey Tool
         Set<String> mainLanguages = new TreeSet<>();
         LanguageTagParser ltp = new LanguageTagParser();
@@ -1881,4 +1915,35 @@
         }
         return tempNames;
     }
+
+    public void TestGrammarInfo() {
+        Multimap<String,String> allValues = TreeMultimap.create();
+        for (String locale : SUPPLEMENTAL.hasGrammarInfo()) {
+            if (locale.contentEquals("tr")) {
+                int debug = 0;
+            }
+            GrammarInfo grammarInfo = SUPPLEMENTAL.getGrammarInfo(locale);
+            for (GrammaticalTarget target : GrammaticalTarget.values()) {
+                for (GrammaticalFeature feature : GrammaticalFeature.values()) {
+                    Collection<String> general = grammarInfo.get(target, feature, GrammaticalScope.general);
+                    for (GrammaticalScope scope : GrammaticalScope.values()) {
+                        Collection<String> units = grammarInfo.get(target, feature, scope);
+                        allValues.putAll(target + "/" + feature + "/" + scope, units);
+                        if (scope != GrammaticalScope.general) {
+                            assertTrue(general + " > " + scope + " " + units, general.containsAll(units));
+                        }
+                    }
+                }
+            }
+            if (DEBUG) {
+                System.out.println(grammarInfo.toString("\n" + locale + "\t"));
+            }
+        }
+        if (DEBUG) {
+            System.out.println();
+            for (Entry<String, Collection<String>> entry : allValues.asMap().entrySet()) {
+                System.out.println(entry.getKey() + "\t" + Joiner.on(", ").join(entry.getValue()));
+            }
+        }
+    }
 }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestTransforms.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestTransforms.java
index c230606..7707ca3 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestTransforms.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestTransforms.java
@@ -24,12 +24,14 @@
 import org.unicode.cldr.util.CLDRTransforms;
 import org.unicode.cldr.util.Factory;
 import org.unicode.cldr.util.Pair;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.XMLFileReader;
 import org.unicode.cldr.util.XPathParts;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Utility;
 import com.ibm.icu.lang.UCharacter;
+import com.ibm.icu.lang.UCharacterEnums.ECharacterCategory;
 import com.ibm.icu.text.Normalizer2;
 import com.ibm.icu.text.Transliterator;
 import com.ibm.icu.text.UnicodeSet;
@@ -130,9 +132,9 @@
                 }
             }
             logln("Success! " + latinFromCyrillicSucceeds.size() + "\n"
-                + CollectionUtilities.join(latinFromCyrillicSucceeds, "\n"));
+                + Joiner.on("\n").join(latinFromCyrillicSucceeds));
             logln("\nFAILS!" + latinFromCyrillicFails.size() + "\n"
-                + CollectionUtilities.join(latinFromCyrillicFails, "\n"));
+                + Joiner.on("\n").join(latinFromCyrillicFails));
         }
     }
 
@@ -140,8 +142,8 @@
         String prefixSource, String suffix) {
         String result = cyrillicToLatin.transform(prefixSource);
         if (!result.isEmpty()
-            && UCharacter.getType(suffix.codePointAt(0)) != UCharacter.UPPERCASE_LETTER
-            && UCharacter.getType(result.codePointAt(0)) == UCharacter.UPPERCASE_LETTER) {
+            && UCharacter.getType(suffix.codePointAt(0)) != ECharacterCategory.UPPERCASE_LETTER
+            && UCharacter.getType(result.codePointAt(0)) == ECharacterCategory.UPPERCASE_LETTER) {
             result = UCharacter.toTitleCase(result, null);
         }
         return result + suffix;
@@ -409,7 +411,7 @@
             }
             name = name.substring(5);
             File fileDirectory = new File(CLDRPaths.TEST_DATA + "transforms/");
-            String fileDirectoryName = fileDirectory.getCanonicalPath();
+            String fileDirectoryName = PathUtilities.getNormalizedPathString(fileDirectory);
             assertTrue(fileDirectoryName, fileDirectory.exists());
             
             logln("Testing files in: " + fileDirectoryName);
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestUnits.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestUnits.java
index 2d3a19c..e5184df 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestUnits.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestUnits.java
@@ -25,17 +25,35 @@
 import java.util.TreeSet;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
 
 import org.unicode.cldr.draft.FileUtilities;
+import org.unicode.cldr.test.CheckCLDR.CheckStatus;
+import org.unicode.cldr.test.CheckCLDR.Options;
+import org.unicode.cldr.test.CheckUnits;
 import org.unicode.cldr.test.ExampleGenerator;
 import org.unicode.cldr.util.CLDRConfig;
 import org.unicode.cldr.util.CLDRFile;
+import org.unicode.cldr.util.ChainedMap;
+import org.unicode.cldr.util.ChainedMap.M3;
+import org.unicode.cldr.util.ChainedMap.M4;
 import org.unicode.cldr.util.CldrUtility;
+import org.unicode.cldr.util.Counter;
+import org.unicode.cldr.util.DtdData;
 import org.unicode.cldr.util.DtdType;
 import org.unicode.cldr.util.Factory;
+import org.unicode.cldr.util.GrammarDerivation;
+import org.unicode.cldr.util.GrammarInfo;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalFeature;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalScope;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalTarget;
+import org.unicode.cldr.util.LocaleStringProvider;
 import org.unicode.cldr.util.MapComparator;
+import org.unicode.cldr.util.Organization;
 import org.unicode.cldr.util.Pair;
+import org.unicode.cldr.util.PathHeader;
 import org.unicode.cldr.util.Rational;
 import org.unicode.cldr.util.Rational.ContinuedFraction;
 import org.unicode.cldr.util.Rational.FormatStyle;
@@ -50,16 +68,20 @@
 import org.unicode.cldr.util.UnitConverter.Continuation;
 import org.unicode.cldr.util.UnitConverter.ConversionInfo;
 import org.unicode.cldr.util.UnitConverter.TargetInfo;
+import org.unicode.cldr.util.UnitConverter.UnitComplexity;
 import org.unicode.cldr.util.UnitConverter.UnitId;
+import org.unicode.cldr.util.UnitPathType;
 import org.unicode.cldr.util.UnitPreferences;
 import org.unicode.cldr.util.UnitPreferences.UnitPreference;
 import org.unicode.cldr.util.Units;
 import org.unicode.cldr.util.Validity;
 import org.unicode.cldr.util.Validity.Status;
 import org.unicode.cldr.util.XMLSource;
+import org.unicode.cldr.util.XPathParts;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Splitter;
+import com.google.common.collect.BiMap;
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -70,18 +92,22 @@
 import com.google.common.collect.Multimaps;
 import com.google.common.collect.TreeMultimap;
 import com.ibm.icu.dev.test.TestFmwk;
+import com.ibm.icu.impl.Row.R2;
+import com.ibm.icu.text.PluralRules;
 import com.ibm.icu.text.UnicodeSet;
 import com.ibm.icu.util.ICUUncheckedIOException;
 import com.ibm.icu.util.Output;
 
 public class TestUnits extends TestFmwk {
+    private static final CLDRConfig CLDR_CONFIG = CLDRConfig.getInstance();
+    private static final Integer INTEGER_ONE = Integer.valueOf(1);
     private static final boolean SHOW_DATA = CldrUtility.getProperty("TestUnits:SHOW_DATA", false); // set for verbose debugging information
     private static final boolean GENERATE_TESTS = CldrUtility.getProperty("TestUnits:GENERATE_TESTS", false);
 
     private static final String TEST_SEP = ";\t";
 
     private static final ImmutableSet<String> WORLD_SET = ImmutableSet.of("001");
-    private static final CLDRConfig info = CLDRConfig.getInstance();
+    private static final CLDRConfig info = CLDR_CONFIG;
     private static final SupplementalDataInfo SDI = info.getSupplementalDataInfo();
 
     static final UnitConverter converter = SDI.getUnitConverter();
@@ -98,7 +124,7 @@
     private Map<String, String> BASE_UNIT_TO_QUANTITY = converter.getBaseUnitToQuantity();
 
     public void TestSpaceInNarrowUnits() {
-        final CLDRFile english = CLDRConfig.getInstance().getEnglish();
+        final CLDRFile english = CLDR_CONFIG.getEnglish();
         final Matcher m = Pattern.compile("narrow.*unitPattern").matcher("");
         for (String path : english) {
             if (m.reset(path).find()) {
@@ -205,10 +231,10 @@
 
     static final String PATH_METER_PATTERN = "//ldml/units/unitLength[@type=\"{0}\"]/unit[@type=\"length-meter\"]/unitPattern[@count=\"{1}\"]";
     static final String PATH_MILLIMETER_PATTERN = "//ldml/units/unitLength[@type=\"{0}\"]/unit[@type=\"length-millimeter\"]/unitPattern[@count=\"{1}\"]";
-    static final String PATH_SQUARE_METER_PATTERN = "//ldml/units/unitLength[@type=\"{0}\"]/unit[@type=\"area-square-meter\"]/unitPattern[@count=\"{1}\"]";    
+    static final String PATH_SQUARE_METER_PATTERN = "//ldml/units/unitLength[@type=\"{0}\"]/unit[@type=\"area-square-meter\"]/unitPattern[@count=\"{1}\"]";
 
     public void TestCompoundUnit3() {
-        Factory factory = CLDRConfig.getInstance().getCldrFactory();
+        Factory factory = CLDR_CONFIG.getCldrFactory();
 
         Map<String,String> prefixToType = new LinkedHashMap<>();
         for (String[] prefixRow : PREFIX_NAME_TYPE) {
@@ -233,7 +259,7 @@
                 final boolean isPrefix = prefixType.startsWith("1");
 
                 for (String len : Arrays.asList("long", "short", "narrow")) {
-                    String prefixPath = ExampleGenerator.format(isPrefix ? PATH_PREFIX_PATTERN 
+                    String prefixPath = ExampleGenerator.format(isPrefix ? PATH_PREFIX_PATTERN
                         : PATH_SUFFIX_PATTERN,
                         len, prefixType);
                     String prefixValue = file.getStringValue(prefixPath);
@@ -253,14 +279,14 @@
                                 continue;
                             }
                         }
-                        if (!assertEquals2(errMsg, testCount++ + ") " 
-                            + locale + "/" + len + "/" + count + "/" + prefix + "+" + baseUnit 
+                        if (!assertEquals2(errMsg, testCount++ + ") "
+                            + locale + "/" + len + "/" + count + "/" + prefix + "+" + baseUnit
                             + ": constructed pattern",
-                            targetUnitPattern, 
+                            targetUnitPattern,
                             composedTargetUnitPattern)) {
                             Units.combinePattern(baseUnitPattern, prefixValue, lowercaseIfSpaced);
                             int debug = 0;
-                        };
+                        }
                     }
                 }
             }
@@ -305,7 +331,7 @@
                 String value = english.getStringValue(path);
                 prefixes.add(value.replace("{0}", "").trim());
             }
-        }        
+        }
         Map<Status, Set<String>> unitValidity = Validity.getInstance().getStatusToCodes(LstrType.unit);
         Multimap<String, String> from = LinkedHashMultimap.create();
         for (String unit : unitValidity.get(Status.regular)) {
@@ -342,7 +368,6 @@
     static final boolean DEBUG = false;
 
     public void TestConversion() {
-        UnitConverter converter = SDI.getUnitConverter();
         Object[][] tests = {
             {"foot", 12, "inch"},
             {"gallon", 4, "quart"},
@@ -432,7 +457,7 @@
             String canonicalUnit = converter.getBaseUnit(simple);
             UnitId unitId = converter.createUnitId(canonicalUnit);
             String output = unitId.toString();
-            if (!assertEquals(simple + ": targets should be in canonical form", 
+            if (!assertEquals(simple + ": targets should be in canonical form",
                 output, canonicalUnit)) {
                 // for debugging
                 converter.createUnitId(canonicalUnit);
@@ -445,7 +470,7 @@
             try {
                 UnitId unitId = converter.createUnitId(baseUnit);
                 String output = unitId.toString();
-                if (!assertEquals(quantity + ": targets should be in canonical form", 
+                if (!assertEquals(quantity + ": targets should be in canonical form",
                     output, baseUnit)) {
                     // for debugging
                     converter.createUnitId(baseUnit);
@@ -461,7 +486,7 @@
                 UnitId unitId = converter.createUnitId(baseUnit);
                 assertNotNull("Can't parse baseUnit: " + baseUnit, unitId);
             } catch (Exception e) {
-                UnitId unitId = converter.createUnitId(baseUnit); // for debugging
+                converter.createUnitId(baseUnit); // for debugging
                 errln("Can't parse baseUnit: " + baseUnit);
             }
         }
@@ -483,7 +508,7 @@
             assertEquals(source, expectedRational, unitInfo.factor);
         }
 
-        // check all 
+        // check all
         if (GENERATE_TESTS) System.out.println();
         Set<String> badUnits = new LinkedHashSet<>();
         Set<String> noQuantity = new LinkedHashSet<>();
@@ -501,9 +526,9 @@
         }
         if (GENERATE_TESTS) { // test data
             System.out.println(
-                "# Test data for unit conversions\n" 
+                "# Test data for unit conversions\n"
                     + CldrUtility.getCopyrightString("#  ") + "\n"
-                    + "#\n" 
+                    + "#\n"
                     + "# Format:\n"
                     + "#\tQuantity\t;\tx\t;\ty\t;\tconversion to y (rational)\t;\ttest: 1000 x ⟹ y\n"
                     + "#\n"
@@ -524,8 +549,8 @@
 
     static final Set<String> NOT_CONVERTABLE = ImmutableSet.of("generic");
 
-    private void checkUnitConvertability(UnitConverter converter, Output<String> compoundBaseUnit, 
-        Set<String> badUnits, Set<String> noQuantity, String type, String unit, 
+    private void checkUnitConvertability(UnitConverter converter, Output<String> compoundBaseUnit,
+        Set<String> badUnits, Set<String> noQuantity, String type, String unit,
         Multimap<Pair<String, Double>, String> testPrintout) {
 
         if (converter.isBaseUnit(unit)) {
@@ -614,7 +639,7 @@
         assertEquals("", 6.02214076E+23d, parser.parse("6.02214076E+23").toBigDecimal().doubleValue());
         Rational temp = parser.parse("gal_to_m3");
         //System.out.println(" " + temp);
-        assertEquals("", 0.003785411784, temp.numerator.doubleValue()/temp.denominator.doubleValue());        
+        assertEquals("", 0.003785411784, temp.numerator.doubleValue()/temp.denominator.doubleValue());
     }
 
 
@@ -656,7 +681,7 @@
                 errln("Null quantity " + coreUnit);
             } else if (!unitType.equals(quantity)) {
                 switch (unitType) {
-                case "concentr": 
+                case "concentr":
                     switch (quantity) {
                     case "portion": case "mass-density": case "concentration": case "substance-amount": continue;
                     }
@@ -666,7 +691,7 @@
                     case "consumption-inverse": continue;
                     }
                     break;
-                case "duration": 
+                case "duration":
                     switch (quantity) {
                     case "year-duration": continue;
                     }
@@ -683,7 +708,7 @@
                     break;
                 case "light":
                     switch (quantity) {
-                    case "luminous-flux": case "power": case "luminous-intensity": continue;
+                    case "lumen": case "luminous-flux": case "power": case "luminous-intensity": case "luminance": case "illuminance": continue;
                     }
                     break;
                 case "mass":
@@ -772,7 +797,7 @@
     }
 
     static final UnicodeSet ALLOWED_IN_COMPONENT = new UnicodeSet("[a-z0-9]").freeze();
-    static final Set<String> GRANDFATHERED_SIMPLES = ImmutableSet.of("em", "g-force", "therm-us");
+    static final Set<String> STILL_RECOGNIZED_SIMPLES = ImmutableSet.of("em", "g-force", "therm-us");
 
     public void TestOrder() {
         if (SHOW_DATA) System.out.println();
@@ -783,7 +808,7 @@
             }
         }
         for (String unit : CORE_TO_TYPE.keySet()) {
-            if (!GRANDFATHERED_SIMPLES.contains(unit)) {
+            if (!STILL_RECOGNIZED_SIMPLES.contains(unit)) {
                 for (String part : unit.split("-")) {
                     assertTrue(unit + " has no parts < 2 in length", part.length() > 2);
                     assertTrue(unit + " has only allowed characters", ALLOWED_IN_COMPONENT.containsAll(part));
@@ -798,7 +823,7 @@
 
     public void TestConversionLineOrder() {
         Map<String, TargetInfo> data = converter.getInternalConversionData();
-        Multimap<TargetInfo, String> sorted = TreeMultimap.create(converter.targetInfoComparator, 
+        Multimap<TargetInfo, String> sorted = TreeMultimap.create(converter.targetInfoComparator,
             Comparator.naturalOrder());
         Multimaps.invertFrom(Multimaps.forMap(data), sorted);
 
@@ -811,7 +836,9 @@
             final TargetInfo tInfo = entry.getKey();
             final String unit = entry.getValue();
             if (lastUnit != null) {
-                assertTrue(lastUnit + " < " + unit, conversionOrder.compare(lastUnit, unit) < 0);
+                if (!(conversionOrder.compare(lastUnit, unit) < 0)) {
+                    warnln("Expected " + lastUnit + " < " + unit);
+                }
             }
             lastUnit = unit;
             if (SHOW_DATA) {
@@ -876,7 +903,7 @@
     static final Pattern ukSystemPattern = Pattern.compile("\\b(lb_to_kg|ft_to_m|ft2_to_m2|ft3_to_m3|in3_to_m3|gal_imp_to_m3)\\b");
 
     static final Set<String> OK_BOTH = ImmutableSet.of(
-        "ounce-troy", "nautical-mile", "fahrenheit", "inch-ofhg", 
+        "ounce-troy", "nautical-mile", "fahrenheit", "inch-ofhg",
         "british-thermal-unit", "foodcalorie", "knot");
 
     static final Set<String> OK_US = ImmutableSet.of(
@@ -899,14 +926,14 @@
             if (inputFactor == null) {
                 inputFactor = "";
             }
-            boolean usSystem = !NOT_US.contains(unit) && 
+            boolean usSystem = !NOT_US.contains(unit) &&
                 (OK_BOTH.contains(unit)
-                    || OK_US.contains(unit) 
+                    || OK_US.contains(unit)
                     || usSystemPattern.matcher(inputFactor).find());
 
-            boolean ukSystem = !NOT_UK.contains(unit) && 
+            boolean ukSystem = !NOT_UK.contains(unit) &&
                 (OK_BOTH.contains(unit)
-                    || OK_UK.contains(unit) 
+                    || OK_UK.contains(unit)
                     || ukSystemPattern.matcher(inputFactor).find());
 
             Collection<String> systems = toSystems.get(unit);
@@ -928,7 +955,7 @@
         Output<String> metricUnit = new Output<>();
         Stream<String> lines;
         try {
-            lines = Files.lines(testFile.toPath()); 
+            lines = Files.lines(testFile.toPath());
         } catch (IOException e) {
             throw new ICUUncheckedIOException("Couldn't process " + testFile);
         }
@@ -983,7 +1010,7 @@
         int count = 0;
         for (String[] test : tests) {
             final Rational sourceValue = Rational.of(test[0]);
-            final String sourceUnit = test[1]; 
+            final String sourceUnit = test[1];
             final String targetUnit = test[2];
             final Rational expectedValue = Rational.of(test[3]);
             final Rational conversion = converter.convert(sourceValue, sourceUnit, targetUnit, SHOW_DATA);
@@ -1061,7 +1088,7 @@
             for (String targetUnit : comparableUnits) {
                 Rational rational = converter.convert(Rational.ONE, sourceUnit, targetUnit, false);
                 if (SHOW_DATA) System.out.print("\t" + rational.toBigDecimal(MathContext.DECIMAL64).doubleValue());
-            }               
+            }
             if (SHOW_DATA) System.out.println();
         }
     }
@@ -1085,9 +1112,10 @@
         for (Object[] test : tests0) {
             ContinuedFraction source = (ContinuedFraction) test[0];
             Rational expected = (Rational) test[1];
+            @SuppressWarnings("unchecked")
             List<Rational> expectedIntermediates = (List<Rational>) test[2];
             List<Rational> intermediates = new ArrayList<>();
-            final Rational actual = source.toRational(intermediates);            
+            final Rational actual = source.toRational(intermediates);
             assertEquals("continued", expected, actual);
             assertEquals("continued", expectedIntermediates, intermediates);
         }
@@ -1119,9 +1147,9 @@
                 final BigDecimal dec64 = item.toBigDecimal(MathContext.DECIMAL64);
                 final BigDecimal dec128 = item.toBigDecimal(MathContext.DECIMAL128);
                 final boolean goodEnough = bigPiD == item.toBigDecimal(MathContext.DECIMAL128).doubleValue();
-                System.out.println(item 
+                System.out.println(item
                     + "\t" + dec64
-                    + "x\t" + dec128 
+                    + "x\t" + dec128
                     + "x\t" + goodEnough
                     + "\t" + item.toBigDecimal(MathContext.DECIMAL128).subtract(bigPi));
                 if (goodEnough && goodCount++ > 6) {
@@ -1189,7 +1217,7 @@
                 Set<Set<String>> regionSets = regionsToUnitPreference.keySet();
 
                 // all quantity + usage pairs must contain 001 (one exception)
-                assertTrue("For " + quantityPlusUsage + ", the set of sets of regions must contain 001", regionSets.contains(WORLD_SET) 
+                assertTrue("For " + quantityPlusUsage + ", the set of sets of regions must contain 001", regionSets.contains(WORLD_SET)
                     || quantityPlusUsage.contentEquals("concentration/blood-glucose"));
 
                 // Check that regions don't overlap for same quantity/usage
@@ -1258,7 +1286,7 @@
                             String baseUnit = converter.getBaseUnitFromQuantity(unitQuantity);
                             Rational size = converter.convert(up.geq, topUnit, baseUnit, false);
                             if (lastSize != null) { // ensure descending order
-                                if (!assertTrue("Successive items must be ≥ previous:\n\t" + quantityPlusUsage 
+                                if (!assertTrue("Successive items must be ≥ previous:\n\t" + quantityPlusUsage
                                     + "; unit: " + up.unit
                                     + "; size: " + size
                                     + "; regions: " + regions
@@ -1368,9 +1396,9 @@
 
         if (GENERATE_TESTS) {
             System.out.println(
-                "\n# Test data for unit preferences\n" 
+                "\n# Test data for unit preferences\n"
                     + CldrUtility.getCopyrightString("#  ") + "\n"
-                    + "#\n" 
+                    + "#\n"
                     + "# Format:\n"
                     + "#\tQuantity;\tUsage;\tRegion;\tInput (r);\tInput (d);\tInput Unit;\tOutput (r);\tOutput (d);\tOutput Unit\n"
                     + "#\n"
@@ -1416,9 +1444,6 @@
                         // show samples
                         Set<String> regions = entry3.getKey();
                         String sampleRegion = regions.iterator().next();
-                        if (usage.equals("person-age")) {
-                            int debug = 0;
-                        }
                         Collection<UnitPreference> uprefs = entry3.getValue();
                         for (Rational sample : samples) {
                             showSample(quantity, usage, sampleRegion, sample, baseUnit, uprefs);
@@ -1469,7 +1494,7 @@
                 formattedUnit.append(sample + TEST_SEP + sample.doubleValue() + TEST_SEP + unit);
             }
         }
-        System.out.println(quantity + TEST_SEP + usage + TEST_SEP + sampleRegion 
+        System.out.println(quantity + TEST_SEP + usage + TEST_SEP + sampleRegion
             + TEST_SEP + originalSampleBaseValue + TEST_SEP + originalSampleBaseValue.doubleValue() + TEST_SEP + baseUnit
             + TEST_SEP + formattedUnit);
     }
@@ -1504,9 +1529,9 @@
                     remainingCldrUnits.remove(data.source);
                     remainingCldrUnits.remove(data.target);
                     if (SHOW_DATA) System.out.println("*Converted"
-                        + "\t" + cldrResult.doubleValue() 
-                        + "\t" + externalResult.doubleValue() 
-                        + "\t" + symmetricDiff.doubleValue() 
+                        + "\t" + cldrResult.doubleValue()
+                        + "\t" + externalResult.doubleValue()
+                        + "\t" + symmetricDiff.doubleValue()
                         + "\t" + data);
                 }
             }
@@ -1604,7 +1629,7 @@
                 System.out.println("*CANT CONVERT-" + e);
             }
         }
-        Output<String> baseUnit = new Output<String>();
+        Output<String> baseUnit = new Output<>();
         for (ExternalUnitConversionData s : couldAdd) {
             String target = s.target;
             Rational endFactor = s.info.factor;
@@ -1623,9 +1648,9 @@
                 }
             }
             System.out.println("Could add 10^X conversion from a"
-                + "\t" +  s.source 
+                + "\t" +  s.source
                 + "\tto" + mark
-                + "\t" + endFactor.toString(FormatStyle.simple)  
+                + "\t" + endFactor.toString(FormatStyle.simple)
                 + "\t" + target);
         }
     }
@@ -1703,4 +1728,463 @@
         Rational roundtrip = Rational.of(formatted);
         assertEquals("roundtrip " + formatted, source, roundtrip);
     }
+
+    /** Check that units to be translated are as expected. */
+    public void testDistinguishedSetsOfUnits() {
+        Set<String> comparatorUnitIds = new LinkedHashSet<>(DtdData.unitOrder.getOrder());
+        Set<String> validLongUnitIds = Validity.getInstance().getStatusToCodes(LstrType.unit).get(Validity.Status.regular);
+        final BiMap<String, String> shortToLong = Units.LONG_TO_SHORT.inverse();
+        Set<String> errors = new LinkedHashSet<>();
+        Set<String> unitsConvertibleLongIds = converter.canConvert().stream()
+            .map(x -> {
+                String result = shortToLong.get(x);
+                if (result == null) {
+                    errors.add("No short form of " + x);
+                }
+                return result;
+            })
+            .collect(Collectors.toSet());
+        assertEquals("", Collections.emptySet(), errors);
+
+        Set<String> simpleConvertibleLongIds = converter.canConvert().stream()
+            .filter(x -> converter.isSimple(x))
+            .map((String x) -> Units.LONG_TO_SHORT.inverse().get(x))
+            .collect(Collectors.toSet());
+        CLDRFile root = CLDR_CONFIG.getCldrFactory().make("root", true);
+        ImmutableSet<String> unitLongIdsRoot = ImmutableSet.copyOf(getUnits(root, new TreeSet<>()));
+        ImmutableSet<String> unitLongIdsEnglish = ImmutableSet.copyOf(getUnits(CLDR_CONFIG.getEnglish(), new TreeSet<>()));
+
+        assertSameCollections("root unit IDs", "English", unitLongIdsRoot, unitLongIdsEnglish);
+        final Set<String> validLongUnitIdsMinusOddballs = minus(validLongUnitIds, Arrays.asList("concentr-item", "concentr-portion", "length-100-kilometer", "pressure-ofhg"));
+        assertSameCollections("root unit IDs", "valid regular", unitLongIdsRoot, validLongUnitIdsMinusOddballs);
+        assertSameCollections("comparatorUnitIds (DtdData)", "valid regular", comparatorUnitIds, validLongUnitIds);
+
+        assertSuperset("valid regular", "specials", validLongUnitIds, GrammarInfo.SPECIAL_TRANSLATION_UNITS);
+
+        assertSuperset("root unit IDs", "specials", unitLongIdsRoot, GrammarInfo.SPECIAL_TRANSLATION_UNITS);
+
+        //assertSuperset("long convertible units", "valid regular", unitsConvertibleLongIds, validLongUnitIds);
+        Output<String> baseUnit = new Output<>();
+        for (String longUnit : validLongUnitIds) {
+            if (longUnit.equals("temperature-generic")) {
+                continue;
+            }
+            String shortUnit = Units.getShort(longUnit);
+            ConversionInfo conversionInfo = converter.parseUnitId(shortUnit, baseUnit, false);
+            if (!assertNotNull("Can convert " + longUnit, conversionInfo)) {
+                converter.getUnitInfo(shortUnit, baseUnit);
+                int debug = 0;
+            }
+        }
+
+        assertSuperset("valid regular", "simple convertible units", validLongUnitIds, simpleConvertibleLongIds);
+
+        SupplementalDataInfo.getInstance().getUnitConverter();
+    }
+
+    public void assertSameCollections(String title1, String title2, Collection<String> c1, Collection<String> c2) {
+        assertSuperset(title1, title2, c1, c2);
+        assertSuperset(title2, title1, c2, c1);
+    }
+
+    public void assertSuperset(String title1, String title2, Collection<String> c1, Collection<String> c2) {
+        if (!assertEquals(title1 + " ⊇ " + title2, Collections.emptySet(), minus(c2, c1))) {
+            int debug = 0;
+        }
+    }
+
+    public Set<String> minus(Collection<String> a, Collection<String> b) {
+        Set<String> result = new LinkedHashSet<>(a);
+        result.removeAll(b);
+        return result;
+    }
+
+    public Set<String> getUnits(CLDRFile root, Set<String> unitLongIds) {
+        for (String path : root) {
+            XPathParts parts = XPathParts.getFrozenInstance(path);
+            int item = parts.findElement("unit");
+            if (item == -1) {
+                continue;
+            }
+            String type = parts.getAttributeValue(item, "type");
+            unitLongIds.add(type);
+            // "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"" + unit + "\"]/gender"
+        }
+        return unitLongIds;
+    }
+
+    static final Pattern NORM_SPACES = Pattern.compile("[ \u00A0\u200E]");
+
+    public void TestGender() {
+        Output<String> source = new Output<>();
+        Multimap<UnitPathType, String> partsUsed = TreeMultimap.create();
+        Factory factory = CLDR_CONFIG.getFullCldrFactory();
+        Set<String> available = factory.getAvailable();
+
+        for (String locale : SDI.hasGrammarInfo()) {
+            // skip ones without gender info
+            GrammarInfo gi = SDI.getGrammarInfo("fr");
+            Collection<String> genderInfo = gi.get(GrammaticalTarget.nominal, GrammaticalFeature.grammaticalGender, GrammaticalScope.general);
+            if (genderInfo.isEmpty()) {
+                continue;
+            }
+            if (CLDRConfig.SKIP_SEED && !available.contains(locale)) {
+                continue;
+            }
+            // check others
+            CLDRFile resolvedFile = factory.make(locale, true);
+            for (Entry<String, String> entry : converter.SHORT_TO_LONG_ID.entrySet()) {
+                final String shortUnitId = entry.getKey();
+                final String longUnitId = entry.getValue();
+                final UnitId unitId = converter.createUnitId(shortUnitId);
+                partsUsed.clear();
+                String rawGender = UnitPathType.gender.getTrans(resolvedFile, "long", shortUnitId, null, null, null, partsUsed);
+
+                if (rawGender != null) {
+                    String gender = unitId.getGender(resolvedFile, source, partsUsed);
+                    if (gender != null && !shortUnitId.equals(source.value)) {
+                        assertEquals("See if computed gender = raw gender for " + locale + "/" + shortUnitId + "\n\t" + Joiner.on("\n\t\t").join(partsUsed.asMap().entrySet()), rawGender, gender);
+                    }
+                }
+            }
+        }
+    }
+
+    public void TestFallbackNames() {
+        String[][] sampleUnits = {
+            {"fr", "square-meter", "one", "nominative", "{0} mètre carré"},
+            {"fr", "square-meter", "other", "nominative", "{0} mètres carrés"},
+            {"fr", "square-decimeter", "other", "nominative", "{0} décimètres carrés"},
+            {"fr", "meter-per-square-second", "one", "nominative", "{0} mètre par seconde carrée"},
+            {"fr", "meter-per-square-second", "other", "nominative", "{0} mètres par seconde carrée"},
+
+            {"de", "square-meter", "other", "nominative", "{0} Quadratmeter"},
+            {"de", "square-decimeter", "other", "nominative", "{0} Quadratdezimeter"}, // real fail
+
+            {"de", "per-meter", "other", "nominative", "{0} pro Meter"},
+            {"de", "per-square-meter", "other", "nominative", "{0} pro Quadratmeter"},
+            {"de", "second-per-meter", "other", "nominative", "{0} Sekunden pro Meter"},
+            {"de", "meter-per-second", "other", "nominative", "{0} Meter pro Sekunde"},
+            {"de", "meter-per-square-second", "other", "nominative", "{0} Meter pro Quadratsekunde"},
+
+            {"de", "gigasecond-per-decimeter", "other", "nominative", "{0} Gigasekunden pro Dezimeter"},
+            {"de", "decimeter-per-gigasecond", "other", "nominative", "{0} Dezimeter pro Gigasekunde"}, // real fail
+
+            {"de", "gigasecond-milligram-per-centimeter-decisecond", "other", "nominative", "{0} Milligramm⋅Gigasekunden pro Zentimeter⋅Dezisekunde"},
+            {"de", "milligram-per-centimeter-decisecond", "other", "nominative", "{0} Milligramm pro Zentimeter⋅Dezisekunde"},
+            {"de", "per-centimeter-decisecond", "other", "nominative", "{0} pro Zentimeter⋅Dezisekunde"},
+            {"de", "gigasecond-milligram-per-centimeter", "other", "nominative", "{0} Milligramm⋅Gigasekunden pro Zentimeter"},
+            {"de", "gigasecond-milligram", "other", "nominative", "{0} Milligramm⋅Gigasekunden"},
+
+            {"de", "dessert-spoon-imperial-per-dessert-spoon-imperial", "one", "nominative", "{0} Imp. Dessertlöffel pro Imp. Dessertlöffel"},
+            {"de", "dessert-spoon-imperial-per-dessert-spoon-imperial", "one", "accusative", "{0} Imp. Dessertlöffel pro Imp. Dessertlöffel"},
+            {"de", "dessert-spoon-imperial-per-dessert-spoon-imperial", "other", "dative", "{0} Imp. Dessertlöffeln pro Imp. Dessertlöffel"},
+            {"de", "dessert-spoon-imperial-per-dessert-spoon-imperial", "one", "genitive", "{0} Imp. Dessertlöffels pro Imp. Dessertlöffel"},
+
+            // TODO: pick names (eg in Polish) that show differences in case.
+            // {"de", "foebar-foobar-per-fiebar-faebar", "other", "genitive", null},
+
+        };
+        ImmutableMap<String, String> frOverrides = ImmutableMap.<String, String>builder() // insufficient data in French as yet
+            .put("//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"]", "{0} carré") //
+            .put("//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"]", "{0} carrés") //
+            .put("//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"one\"][@gender=\"feminine\"]", "{0} carrée") //
+            .put("//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1[@count=\"other\"][@gender=\"feminine\"]", "{0} carrées") //
+            .build();
+
+        Multimap<UnitPathType, String> partsUsed = TreeMultimap.create();
+        int count = 0;
+        for (String[] row : sampleUnits) {
+            ++count;
+            final String locale = row[0];
+            CLDRFile resolvedFileRaw = CLDR_CONFIG.getCLDRFile(locale, true);
+            LocaleStringProvider resolvedFile;
+            switch(locale) {
+            case "fr":  resolvedFile = resolvedFileRaw.makeOverridingStringProvider(frOverrides); break;
+            default: resolvedFile = resolvedFileRaw;
+            }
+
+            String shortUnitId = row[1];
+            String pluralCategory = row[2];
+            String caseVariant = row[3];
+            String expectedName = row[4];
+            final UnitId unitId = converter.createUnitId(shortUnitId);
+            final String actual = unitId.toString(resolvedFile, "long", pluralCategory, caseVariant, partsUsed, false);
+            assertEquals(count + ") " + Arrays.asList(row).toString() + "\n\t" + Joiner.on("\n\t").join(partsUsed.asMap().entrySet()), fixSpaces(expectedName), fixSpaces(actual));
+        }
+
+    }
+    public void TestFileFallbackNames() {
+        Multimap<UnitPathType, String> partsUsed = TreeMultimap.create();
+
+        // first gather all the  examples
+        Set<String> skippedUnits = new LinkedHashSet<>();
+        Set<String> testSet = CLDR_CONFIG.getStandardCodes().getLocaleCoverageLocales(Organization.cldr);
+        Counter<String> localeToErrorCount = new Counter<>();
+        for (String localeId : testSet) {
+            if (localeId.contains("_")) {
+                continue; // skip to make test shorter
+            }
+            CLDRFile resolvedFile = CLDR_CONFIG.getCLDRFile(localeId, true);
+            PluralInfo pluralInfo = CLDR_CONFIG.getSupplementalDataInfo().getPlurals(localeId);
+            PluralRules pluralRules = pluralInfo.getPluralRules();
+            GrammarInfo grammarInfo =CLDR_CONFIG.getSupplementalDataInfo().getGrammarInfo(localeId);
+            Collection<String> caseVariants = grammarInfo == null ? null
+                : grammarInfo.get(GrammaticalTarget.nominal, GrammaticalFeature.grammaticalCase, GrammaticalScope.units);
+            if (caseVariants == null || caseVariants.isEmpty()) {
+                caseVariants = Collections.singleton("nominative");
+            }
+
+
+            for (Entry<String, String> entry : converter.SHORT_TO_LONG_ID.entrySet()) {
+                final String shortUnitId = entry.getKey();
+                if (converter.getComplexity(shortUnitId) == UnitComplexity.simple) {
+                    continue;
+                }
+                if (UnitConverter.HACK_SKIP_UNIT_NAMES.contains(shortUnitId)) {
+                    skippedUnits.add(shortUnitId);
+                    continue;
+                }
+                final String longUnitId = entry.getValue();
+                final UnitId unitId = converter.createUnitId(shortUnitId);
+                for (String width : Arrays.asList("long")) { // , "short", "narrow"
+                    for (String pluralCategory : pluralRules.getKeywords()) {
+                        for (String caseVariant : caseVariants) {
+                            String composedName;
+                            try {
+                                composedName = unitId.toString(resolvedFile, width, pluralCategory, caseVariant, partsUsed, false);
+                            } catch (Exception e) {
+                                composedName = "ERROR:" + e.getMessage();
+                            }
+                            if (composedName != null && (composedName.contains("′") || composedName.contains("″"))) { // skip special cases
+                                continue;
+                            }
+                            partsUsed.clear();
+                            String transName = UnitPathType.unit.getTrans(resolvedFile, width, shortUnitId, pluralCategory, caseVariant, null, isVerbose() ? partsUsed : null);
+
+                            // HACK to fix different spaces around placeholder
+                            if (!Objects.equals(fixSpaces(transName), fixSpaces(composedName))) {
+                                logln("\t" + localeId
+                                    + "\t" + shortUnitId
+                                    + "\t" + width
+                                    + "\t" + pluralCategory
+                                    + "\t" + caseVariant
+                                    + "\texpected ≠ fallback\t«" + transName + "»\t≠\t«" + composedName+ "»"
+                                    + partsUsed);
+                                localeToErrorCount.add(localeId, 1);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        if (!localeToErrorCount.isEmpty()) {
+            warnln("Use -v for details");
+            for (R2<Long, String> entry : localeToErrorCount.getEntrySetSortedByCount(false, null)) {
+                warnln("composed name ≠ translated name: " + entry.get0() + "\t" + entry.get1());
+            }
+        }
+
+        if (!skippedUnits.isEmpty()) {
+            warnln("Skipping unsupported unit: " + skippedUnits);
+        }
+    }
+
+    public String fixSpaces(String transName) {
+        return transName == null ? null : NORM_SPACES.matcher(transName).replaceAll(" ");
+    }
+
+    public void TestCheckUnits() {
+        CheckUnits checkUnits = new CheckUnits();
+        PathHeader.Factory phf = PathHeader.getFactory();
+        for (String locale : Arrays.asList("en", "fr", "de", "pl", "el")) {
+            CLDRFile cldrFile = CLDR_CONFIG.getCldrFactory().make(locale, true);
+
+            Options options = new Options();
+            List<CheckStatus> possibleErrors = new ArrayList<>();
+            checkUnits.setCldrFileToCheck(cldrFile, options, possibleErrors);
+
+            for (String path : StreamSupport.stream(cldrFile.spliterator(), false).sorted().collect(Collectors.toList())) {
+                UnitPathType pathType = UnitPathType.getPathType(XPathParts.getFrozenInstance(path));
+                if (pathType == null || pathType == UnitPathType.unit) {
+                    continue;
+                }
+                String value = cldrFile.getStringValue(path);
+                checkUnits.check(path, path, value, options, possibleErrors);
+                if (!possibleErrors.isEmpty()) {
+                    PathHeader ph = phf.fromPath(path);
+                    logln(locale + "\t" + ph.getCode() + "\t" + possibleErrors.toString());
+                }
+            }
+        }
+    }
+
+  public void TestDerivedCase() {
+        // needs further work
+        if (logKnownIssue("CLDR-13920", "finish this as part of unit derivation work")) {
+            return;
+        }
+        for (String locale : Arrays.asList("pl", "ru")) {
+            CLDRFile cldrFile = CLDR_CONFIG.getCldrFactory().make(locale, true);
+            GrammarInfo gi = SDI.getGrammarInfo(locale);
+            Collection<String> rawCases = gi.get(GrammaticalTarget.nominal, GrammaticalFeature.grammaticalCase, GrammaticalScope.units);
+
+            PluralInfo plurals = SupplementalDataInfo.getInstance().getPlurals(PluralType.cardinal, locale);
+            Collection<Count> adjustedPlurals = plurals.getCounts();
+
+            Output<String> sourceCase = new Output<>();
+            Output<String> sourcePlural = new Output<>();
+
+            M4<String, String, String, Boolean> myInfo = ChainedMap.of(new TreeMap<String,Object>(), new TreeMap<String,Object>(), new TreeMap<String,Object>(), Boolean.class);
+
+            int count = 0;
+            for (String longUnit : GrammarInfo.SPECIAL_TRANSLATION_UNITS) {
+                final String shortUnit = converter.getShortId(longUnit);
+                String gender = UnitPathType.gender.getTrans(cldrFile, "long", shortUnit, null, null, null, null);
+
+                for (String desiredCase : rawCases) {
+                    // gather some general information
+                    for (Count plural : adjustedPlurals) {
+                        String value = UnitPathType.unit.getTrans(cldrFile, "long", shortUnit, plural.toString(), desiredCase, gender, null);
+                        myInfo.put(gender, shortUnit + "\t" + value, plural.toString() + "+" + desiredCase, true);
+                    }
+
+                    // do actual test
+                    if (desiredCase.contentEquals("nominative")) {
+                        continue;
+                    }
+                    for (String desiredPlural : Arrays.asList("few", "other")) {
+
+                        String value = UnitPathType.unit.getTrans(cldrFile, "long", shortUnit, desiredPlural, desiredCase, gender, null);
+                        gi.getSourceCaseAndPlural(locale, gender, value, desiredCase, desiredPlural, sourceCase, sourcePlural);
+                        String sourceValue = UnitPathType.unit.getTrans(cldrFile, "long", shortUnit, sourcePlural.value, sourceCase.value, gender, null);
+                        assertEquals(count++ + ") " + locale
+                            + ",\tshort unit/gender: " + shortUnit
+                            + " / " + gender
+                            + ",\tdesired case/plural: " + desiredCase
+                            + " / " + desiredPlural
+                            + ",\tsource case/plural: " + sourceCase
+                            + " / " + sourcePlural
+                            , value, sourceValue);
+                    }
+                }
+            }
+            for (Entry<String, Map<String, Map<String, Boolean>>> m : myInfo) {
+                for (Entry<String, Map<String, Boolean>> t : m.getValue().entrySet()) {
+                    System.out.println(m.getKey() + "\t" + t.getKey() + "\t" + t.getValue().keySet());
+                }
+            }
+        }
+    }
+    public void TestGenderOfCompounds() {
+        Set<String> skipUnits = ImmutableSet.of("kilocalorie", "kilopascal", "terabyte", "gigabyte", "kilobyte", "gigabit", "kilobit", "megabit", "megabyte", "terabit");
+        final ImmutableSet<String> keyValues = ImmutableSet.of("length", "mass", "duration", "power");
+        for (String localeID : GrammarInfo.SEED_LOCALES) {
+            GrammarInfo grammarInfo = SDI.getGrammarInfo(localeID);
+            if (grammarInfo == null) {
+                logln("No grammar info for: " + localeID);
+                continue;
+            }
+            UnitConverter converter = SDI.getUnitConverter();
+            Collection<String> genderInfo = grammarInfo.get(GrammaticalTarget.nominal, GrammaticalFeature.grammaticalGender, GrammaticalScope.units);
+            if (genderInfo.isEmpty()) {
+                continue;
+            }
+            CLDRFile cldrFile = info.getCldrFactory().make(localeID, true);
+            Map<String,String> shortUnitToGender = new TreeMap<>();
+            Output<String> source = new Output<>();
+            Multimap<UnitPathType, String> partsUsed = LinkedHashMultimap.create();
+
+            Set<String> units = new HashSet<>();
+            M4<String, String, String, Boolean> quantityToGenderToUnits = ChainedMap.of(new TreeMap<String,Object>(), new TreeMap<String,Object>(), new TreeMap<String,Object>(), Boolean.class);
+            M4<String, String, String, Boolean> genderToQuantityToUnits = ChainedMap.of(new TreeMap<String,Object>(), new TreeMap<String,Object>(), new TreeMap<String,Object>(), Boolean.class);
+
+            for (String path : cldrFile) {
+                if (!path.startsWith("//ldml/units/unitLength[@type=\"long\"]/unit[@type=")) {
+                    continue;
+                }
+                XPathParts parts = XPathParts.getFrozenInstance(path);
+                final String shortId = converter.getShortId(parts.getAttributeValue(-2, "type"));
+                String quantity;
+                try {
+                    quantity = converter.getQuantityFromUnit(shortId, false);
+                } catch (Exception e) {
+                    continue;
+                }
+
+                //ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/gender
+                String gender = null;
+                if (parts.size() == 5 && parts.getElement(-1).equals("gender")) {
+                    gender = cldrFile.getStringValue(path);
+                    if (true) {
+                        quantityToGenderToUnits.put(quantity, gender, shortId, true);
+                        genderToQuantityToUnits.put(quantity, gender, shortId, true);
+                    }
+                } else {
+                    if (units.contains(shortId)) {
+                        continue;
+                    }
+                    units.add(shortId);
+                }
+                UnitId unitId = converter.createUnitId(shortId);
+                String constructedGender = unitId.getGender(cldrFile, source, partsUsed);
+                boolean multiUnit = unitId.denUnitsToPowers.size() + unitId.denUnitsToPowers.size() > 1;
+                if (gender == null && (constructedGender == null || !multiUnit)) {
+                    continue;
+                }
+
+                final boolean areEqual = Objects.equals(gender, constructedGender);
+                if (false) {
+                    final String printInfo = localeID + "\t" + unitId + "\t" + gender + "\t" + multiUnit + "\t" + quantity + "\t" + constructedGender + "\t" + areEqual;
+                    System.out.println(printInfo);
+                }
+                if (gender != null && !areEqual && !skipUnits.contains(shortId)) {
+                    unitId.getGender(cldrFile, source, partsUsed);
+                    shortUnitToGender.put(shortId, unitId + "\t" + gender + "\t" + constructedGender + "\t" + areEqual);
+                }
+            }
+            for (Entry<String,String> entry : shortUnitToGender.entrySet()) {
+                errln(localeID + "\t" + entry);
+            }
+
+            Set<String> missing = new LinkedHashSet<>(genderInfo);
+            for (String quantity : keyValues) {
+                M3<String, String, Boolean> genderToUnits = quantityToGenderToUnits.get(quantity);
+                showData(localeID, null, quantity, genderToUnits);
+                missing.removeAll(genderToUnits.keySet());
+            }
+            for (String quantity : quantityToGenderToUnits.keySet()) {
+                M3<String, String, Boolean> genderToUnits = quantityToGenderToUnits.get(quantity);
+                showData(localeID, missing, quantity, genderToUnits);
+            }
+            for (String gender : missing) {
+                System.out.println(localeID + "\t" + "?" + "\t" + gender + "\t?");
+            }
+        }
+    }
+
+    public void showData(String localeID, Set<String> genderFilter, String quantity, final M3<String, String, Boolean> genderToUnits) {
+        for (Entry<String, Map<String, Boolean>> entry2 : genderToUnits) {
+            String gender = entry2.getKey();
+            if (genderFilter != null) {
+                if(!genderFilter.contains(gender)) {
+                    continue;
+                }
+                genderFilter.remove(gender);
+            }
+            for (String unit : entry2.getValue().keySet()) {
+                System.out.println(localeID + "\t" + quantity + "\t" + gender + "\t" + unit);
+            }
+        }
+    }
+
+    public void testDerivation() {
+        int count = 0;
+        for (String locale : SDI.hasGrammarDerivation()) {
+            GrammarDerivation gd = SDI.getGrammarDerivation(locale);
+            System.out.println(locale + " => " + gd);
+            ++count;
+        }
+        assertNotEquals("hasGrammarDerivation", 0, count);
+    }
 }
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestUtilities.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestUtilities.java
index 0317dc6..6a2295d 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestUtilities.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestUtilities.java
@@ -108,6 +108,7 @@
             id = i;
         }
 
+        @Override
         public void run() {
             logln("Starting thread: " + this);
             for (int i = 0; i < STRING_ID_TEST_COUNT; ++i) {
@@ -121,6 +122,7 @@
             logln("Ending thread: " + this);
         }
 
+        @Override
         public String toString() {
             return "StringIdThread " + id;
         }
@@ -230,6 +232,7 @@
         Comparator<String> uca = new Comparator<String>() {
             Collator col = Collator.getInstance(ULocale.ENGLISH);
 
+            @Override
             public int compare(String o1, String o2) {
                 return col.compare(o1, o2);
             }
@@ -909,8 +912,10 @@
 
     public void TestSpecialLocales() {
         assertSpecialLocale("sr", null);
+        assertSpecialLocale("ha_NE", SpecialLocales.Type.readonly);
         assertSpecialLocale("sr_Latn", SpecialLocales.Type.readonly);
         assertSpecialLocale("sr_Latn_BA", SpecialLocales.Type.readonly);
+        assertSpecialLocale("yue_Hans", null); // not readonly, because it is not policy DISCARD
         assertSpecialLocale("en", SpecialLocales.Type.readonly);
         assertSpecialLocale("en_ZZ", SpecialLocales.Type.readonly);
         assertSpecialLocale("en_ZZ_PROGRAMMERESE", null); // not defined
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestValidity.java b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestValidity.java
index 33597df..1f78fc3 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestValidity.java
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/TestValidity.java
@@ -161,7 +161,7 @@
                             if (ALLOWED_MISSING.contains(code)) {
                                 continue;
                             }
-                            errln(messages, type + ":" + code + ":" + oldStatus + " => " + newStatus 
+                            errln(messages, type + ":" + code + ":" + oldStatus + " => " + newStatus
                                 + " — missing in new data");
                         }
 
@@ -184,7 +184,7 @@
 //                              logln(messages, "OK: " + type + ":" + code + " was " + oldStatus + " => " + newStatus);
                                 continue;
                             }
-                            errln(messages, type + ":" + code + ":" + oldStatus + " => " + newStatus 
+                            errln(messages, type + ":" + code + ":" + oldStatus + " => " + newStatus
                                 + " — regular item changed, and didn't become deprecated");
                         }
                         if (oldStatus == Status.deprecated) {
@@ -363,7 +363,7 @@
             String source = test[0];
             String expectedLanguageSubtagParserIcu = test[1];
             String expectedLanguageSubtagParserBCP = test[2];
-            
+
             // check that field 2 is the same as ICU
             ULocale icuFromICU = new ULocale(expectedLanguageSubtagParserIcu);
             ULocale icuFromBCP = ULocale.forLanguageTag(expectedLanguageSubtagParserBCP);
@@ -379,9 +379,9 @@
 
     public void TestLanguageTagCanonicalizer() {
         String[][] tests = {
-            { "de-fonipa", "de_FONIPA" },
-            { "el-1901-polytoni-aaland", "el_AX_1901_POLYTON" },
-            { "en-POLYTONI-WHATEVER-ANYTHING-AALAND", "en_AX_ANYTHING_POLYTON_WHATEVER" },
+            { "dE-foniPa", "de_fonipa" },
+//            { "el-1901-polytoni-aaland", "el_AX_1901_polyton" }, // doesn't yet handle polyton
+//            { "en-POLYTONI-WHATEVER-ANYTHING-AALAND", "en_AX_anything_polyton_whatever" }, // doesn't yet handle polyton
             { "eng-840", "en" },
             { "sh_ba", "sr_Latn_BA" },
             { "iw-arab-010", "he_Arab_AQ" },
@@ -411,7 +411,7 @@
         }
 
 
-        ImmutableSet<LstrType> LstrTypesToSkip = ImmutableSet.of(LstrType.extlang, LstrType.grandfathered, LstrType.redundant);
+        ImmutableSet<LstrType> LstrTypesToSkip = ImmutableSet.of(LstrType.extlang, LstrType.legacy, LstrType.redundant);
         Set<LstrType> lstrTypesToTest = EnumSet.allOf(LstrType.class);
         lstrTypesToTest.removeAll(LstrTypesToSkip);
         Set<String> missingAliases = new LinkedHashSet<>();
diff --git a/tools/cldr-unittest/src/org/unicode/cldr/unittest/data/localeMatcherTest.txt b/tools/cldr-unittest/src/org/unicode/cldr/unittest/data/localeMatcherTest.txt
index 28589e9..41ba341 100644
--- a/tools/cldr-unittest/src/org/unicode/cldr/unittest/data/localeMatcherTest.txt
+++ b/tools/cldr-unittest/src/org/unicode/cldr/unittest/data/localeMatcherTest.txt
@@ -147,7 +147,7 @@
 en-Hant-TW, und-TW ; 	zh ; 	und-TW	# zh should be closer to und-TW than to en-Hant-TW
 
 ##################################################
-# testMatchGrandfatheredCode
+# testMatchLegacyCode
 
 fr, i-klingon, en-Latn-US ; 	en-GB-oed ; 	en-Latn-US
 
diff --git a/tools/java/.settings/org.eclipse.jdt.ui.prefs b/tools/java/.settings/org.eclipse.jdt.ui.prefs
index f421aab..7d8a0d5 100644
--- a/tools/java/.settings/org.eclipse.jdt.ui.prefs
+++ b/tools/java/.settings/org.eclipse.jdt.ui.prefs
@@ -1,3 +1,63 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=false
+cleanup.format_source_code=false
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=false
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_modifiers=false
+cleanup.remove_redundant_semicolons=true
+cleanup.remove_redundant_type_arguments=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=false
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_blocks=false
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_CLDR
+cleanup_settings_version=2
 eclipse.preferences.version=1
 editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
 formatter_profile=_CLDR
@@ -32,21 +92,23 @@
 sp_cleanup.make_variable_declarations_final=false
 sp_cleanup.never_use_blocks=false
 sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=false
+sp_cleanup.on_save_use_additional_actions=true
 sp_cleanup.organize_imports=true
 sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
 sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=true
 sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
 sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_semicolons=true
 sp_cleanup.remove_redundant_type_arguments=true
-sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces=true
 sp_cleanup.remove_trailing_whitespaces_all=true
 sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
 sp_cleanup.remove_unnecessary_casts=true
 sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_imports=true
 sp_cleanup.remove_unused_local_variables=false
 sp_cleanup.remove_unused_private_fields=true
 sp_cleanup.remove_unused_private_members=false
diff --git a/tools/java/build.xml b/tools/java/build.xml
index bfe314a..f62fec3 100644
--- a/tools/java/build.xml
+++ b/tools/java/build.xml
@@ -151,7 +151,6 @@
         <target name="init-githash" depends="init" description="calculate build.githash">
           <exec executable="git" outputproperty="build.githash" failifexecutionfails="false">
             <arg value="rev-parse" />
-            <arg value="--short" />
             <arg value="HEAD" />
           </exec>
           <condition property="build.githash" value="(unknown)">
diff --git a/tools/java/com/ibm/icu/dev/test/AbstractTestLog.java b/tools/java/com/ibm/icu/dev/test/AbstractTestLog.java
index 5fdf3f1..1aad275 100644
--- a/tools/java/com/ibm/icu/dev/test/AbstractTestLog.java
+++ b/tools/java/com/ibm/icu/dev/test/AbstractTestLog.java
@@ -45,6 +45,7 @@
     /**
      * Add a message.
      */
+    @Override
     public final void log(String message) {
         msg(message, LOG, true, false);
     }
@@ -52,6 +53,7 @@
     /**
      * Add a message and newline.
      */
+    @Override
     public final void logln(String message) {
         msg(message, LOG, true, true);
     }
@@ -59,6 +61,7 @@
     /**
      * Report an error.
      */
+    @Override
     public final void err(String message) {
         msg(message, ERR, true, false);
     }
@@ -66,6 +69,7 @@
     /**
      * Report an error and newline.
      */
+    @Override
     public final void errln(String message) {
         msg(message, ERR, true, true);
     }
@@ -73,6 +77,7 @@
     /**
      * Report a warning (generally missing tests or data).
      */
+    @Override
     public final void warn(String message) {
         msg(message, WARN, true, false);
     }
@@ -80,6 +85,7 @@
     /**
      * Report a warning (generally missing tests or data) and newline.
      */
+    @Override
     public final void warnln(String message) {
         msg(message, WARN, true, true);
     }
@@ -93,6 +99,7 @@
      * @param incCount if true, increments the warning or error count
      * @param newln if true, forces a newline after the message
      */
+    @Override
     public abstract void msg(String message, int level, boolean incCount, boolean newln);
 
     /**
@@ -107,6 +114,7 @@
             this.delegate = delegate;
         }
 
+        @Override
         public void msg(String message, int level, boolean incCount, boolean newln) {
             if (delegate != null) {
                 delegate.msg(message, level, incCount, newln);
diff --git a/tools/java/com/ibm/icu/dev/test/TestFmwk.java b/tools/java/com/ibm/icu/dev/test/TestFmwk.java
index a3f7491..e491c85 100644
--- a/tools/java/com/ibm/icu/dev/test/TestFmwk.java
+++ b/tools/java/com/ibm/icu/dev/test/TestFmwk.java
@@ -184,10 +184,12 @@
             this(null, classnames, null);
         }
 
+        @Override
         protected String getDescription() {
             return description;
         }
 
+        @Override
         protected Target getTargets(String targetName) {
             Target target = null;
             if (targetName != null) {
@@ -236,6 +238,7 @@
 
             return target;
         }
+        @Override
         protected TestFmwk getSubtest(String testName) throws TestFmwkException {
             finishInit();
 
@@ -363,6 +366,7 @@
             super(name);
         }
 
+        @Override
         protected boolean validate() {
             return true;
         }
@@ -376,14 +380,17 @@
             testMethod = method;
         }
 
+        @Override
         protected boolean validate() {
             return testMethod != null && validateMethod(name);
         }
 
+        @Override
         protected String getDescription() {
             return getMethodDescription(name);
         }
 
+        @Override
         protected void execute() throws Exception{
             if (params.inDocMode()) {
                 // nothing to execute
@@ -436,14 +443,17 @@
             this.targetName = targetName;
         }
 
+        @Override
         protected boolean validate() {
             return TestFmwk.this.validate();
         }
 
+        @Override
         protected String getDescription() {
             return TestFmwk.this.getDescription();
         }
 
+        @Override
         protected void execute() throws Exception {
             params.indentLevel++;
             Target target = randomize(getTargets(targetName));
@@ -469,6 +479,7 @@
                     // so we sort them (always, and then randomize them, so that
                     // forcing a seed will also work across jvms).
                     Arrays.sort(arr, new Comparator() {
+                        @Override
                         public int compare(Object lhs, Object rhs) {
                             // sort in reverse order, later we link up in
                             // forward order
@@ -830,6 +841,7 @@
         return params.inclusion == 0;
     }
 
+    @Override
     public void msg(String message, int level, boolean incCount, boolean newln) {
         params.msg(message, level, incCount, newln);
     }
@@ -842,7 +854,7 @@
      * Log the known issue.
      * This method returns true unless -prop:logKnownIssue=no is specified
      * in the argument list.
-     * 
+     *
      * @param ticket A ticket number string. For an ICU ticket, use numeric characters only,
      * such as "10245". For a CLDR ticket, use prefix "cldrbug:" followed by ticket number,
      * such as "cldrbug:5013".
@@ -873,11 +885,11 @@
         }
 
         if (params.knownIssues == null) {
-            params.knownIssues = new TreeMap<String, List<String>>();
+            params.knownIssues = new TreeMap<>();
         }
         List<String> lines = params.knownIssues.get(ticketLink);
         if (lines == null) {
-            lines = new ArrayList<String>();
+            lines = new ArrayList<>();
             params.knownIssues.put(ticketLink, lines);
         }
         if (!lines.contains(description)) {
@@ -1085,12 +1097,16 @@
         public NullWriter() {
             super(System.out, false);
         }
+        @Override
         public void write(int c) {
         }
+        @Override
         public void write(char[] buf, int off, int len) {
         }
+        @Override
         public void write(String s, int off, int len) {
         }
+        @Override
         public void println() {
         }
     }
@@ -1110,6 +1126,7 @@
             super(os, autoFlush);
         }
 
+        @Override
         public void write(int c) {
             synchronized (lock) {
                 buffer.setLength(0);
@@ -1122,6 +1139,7 @@
             }
         }
 
+        @Override
         public void write(char[] buf, int off, int len) {
             synchronized (lock) {
                 buffer.setLength(0);
@@ -1140,6 +1158,7 @@
             }
         }
 
+        @Override
         public void write(String s, int off, int len) {
             write(s.substring(off, off + len).toCharArray(), 0, len);
         }
@@ -1922,7 +1941,7 @@
 
     protected void fail(String message) {
         if (message == null) {
-            message = "";            
+            message = "";
         }
         if (!message.equals("")) {
             message = ": " + message;
@@ -1977,7 +1996,7 @@
             String source = st.getFileName();
             if (source != null && !source.equals("TestFmwk.java") && !source.equals("AbstractTestLog.java")) {
                 String methodName = st.getMethodName();
-                if (methodName != null && 
+                if (methodName != null &&
                        (methodName.startsWith("Test") || methodName.startsWith("test") || methodName.equals("main"))) {
                     return "(" + source + ":" + st.getLineNumber() + ") ";
                 }
diff --git a/tools/java/com/ibm/icu/dev/test/TestLog.java b/tools/java/com/ibm/icu/dev/test/TestLog.java
index b845dcb..1211d82 100644
--- a/tools/java/com/ibm/icu/dev/test/TestLog.java
+++ b/tools/java/com/ibm/icu/dev/test/TestLog.java
@@ -27,7 +27,7 @@
      * Warn about missing tests or data.
      */
     void warn(String message);
-    
+
     void warnln(String message);
 
 
diff --git a/tools/java/com/ibm/icu/dev/test/TestLogWriter.java b/tools/java/com/ibm/icu/dev/test/TestLogWriter.java
index 3f2e01d..44b9171 100644
--- a/tools/java/com/ibm/icu/dev/test/TestLogWriter.java
+++ b/tools/java/com/ibm/icu/dev/test/TestLogWriter.java
@@ -20,10 +20,12 @@
     this.level = level;
     }
 
+    @Override
     public void write(char cbuf[], int off, int len) throws IOException {
         write(new String(cbuf, off, len));
     }
 
+    @Override
     public void write(String str) throws IOException {
         if (closed) {
             throw new IOException("stream closed");
@@ -35,9 +37,11 @@
         }
     }
 
+    @Override
     public void flush() throws IOException {
     }
 
+    @Override
     public void close() throws IOException {
         closed = true;
     }
diff --git a/tools/java/com/ibm/icu/dev/test/TestUtil.java b/tools/java/com/ibm/icu/dev/test/TestUtil.java
index 74f2104..2d5abed 100644
--- a/tools/java/com/ibm/icu/dev/test/TestUtil.java
+++ b/tools/java/com/ibm/icu/dev/test/TestUtil.java
@@ -170,6 +170,7 @@
             lock.inc();
         }
 
+        @Override
         public void run() {
             try {
                 synchronized (lock) {
diff --git a/tools/java/com/ibm/icu/dev/test/UTF16Util.java b/tools/java/com/ibm/icu/dev/test/UTF16Util.java
index 145e767..d2965d2 100644
--- a/tools/java/com/ibm/icu/dev/test/UTF16Util.java
+++ b/tools/java/com/ibm/icu/dev/test/UTF16Util.java
@@ -8,7 +8,7 @@
 package com.ibm.icu.dev.test;
 
 /**
- * Utility class for supplementary code point 
+ * Utility class for supplementary code point
  * support. This one is written purely for updating
  * Normalization sample from the unicode.org site.
  * If you want the real thing, use UTF16 class
@@ -20,7 +20,7 @@
 
     /**
      * Method nextCodePoint. Returns the next code point
-     * in a string. 
+     * in a string.
      * @param s String in question
      * @param i index from which we want a code point
      * @return int codepoint at index i
@@ -38,7 +38,7 @@
 
     /**
      * Method prevCodePoint. Gets the code point preceding
-     * index i (predecrement). 
+     * index i (predecrement).
      * @param s String in question
      * @param i index in string
      * @return int codepoint at index --i
@@ -56,7 +56,7 @@
 
     /**
      * Method nextCodePoint. Returns the next code point
-     * in a string. 
+     * in a string.
      * @param s StringBuffer in question
      * @param i index from which we want a code point
      * @return int codepoint at index i
@@ -74,7 +74,7 @@
 
     /**
      * Method prevCodePoint. Gets the code point preceding
-     * index i (predecrement). 
+     * index i (predecrement).
      * @param s StringBuffer in question
      * @param i index in string
      * @return int codepoint at index --i
@@ -91,7 +91,7 @@
     }
 
     /**
-     * Method codePointLength. Returns the length 
+     * Method codePointLength. Returns the length
      * in UTF-16 code units of a given code point
      * @param c code point in question
      * @return int length in UTF-16 code units. Can be 1 or 2
@@ -111,7 +111,7 @@
             buffer.append((char)ch);
         } else {
             buffer.append((char)(0xd7c0 + (ch >> 10)));
-            buffer.append((char)(0xdc00 + (ch & 0x3ff))); 
+            buffer.append((char)(0xdc00 + (ch & 0x3ff)));
         }
     }
 
@@ -126,10 +126,10 @@
         if (ch <= 0xffff) {
             buffer.insert(i, (char)ch);
         } else {
-            buffer.insert(i, (char)(0xd7c0 + (ch >> 10))).insert(i + 1, (char)(0xdc00 + (ch & 0x3ff))); 
+            buffer.insert(i, (char)(0xd7c0 + (ch >> 10))).insert(i + 1, (char)(0xdc00 + (ch & 0x3ff)));
         }
     }
-    
+
     /**
      * Method setCodePointAt. Changes a code point at a
      * given index. Can change the length of the string.
@@ -140,7 +140,7 @@
      */
     public static final int setCodePointAt(StringBuffer buffer, int i, int ch) {
         int cp = nextCodePoint(buffer, i);
-        
+
         if (ch <= 0xffff && cp <= 0xffff) { // Both BMP
             buffer.setCharAt(i, (char)ch);
             return 0;
@@ -154,8 +154,8 @@
             return -1;
         } else { //if (ch > 0xffff && cp <= 0xffff) { // putting supplementary instead of BMP, buffer grows
             buffer.setCharAt(i, (char)(0xd7c0 + (ch >> 10)));
-            buffer.insert(i+1, (char)(0xdc00 + (ch & 0x3ff))); 
-            return 1;           
+            buffer.insert(i+1, (char)(0xdc00 + (ch & 0x3ff)));
+            return 1;
         }
     }
 
@@ -165,13 +165,13 @@
      * @param source String in question.
      * @return int number of code points in this string
      */
-    public static final int countCodePoint(String source) 
-    {         
+    public static final int countCodePoint(String source)
+    {
         int result = 0;
         char ch;
         boolean hadLeadSurrogate = false;
-        
-        for (int i = 0; i < source.length(); ++ i) 
+
+        for (int i = 0; i < source.length(); ++ i)
         {
             ch = source.charAt(i);
             if (hadLeadSurrogate && 0xdc00 <= ch && ch <= 0xdfff) {
@@ -183,23 +183,23 @@
                 ++ result;                          // count others as 1
             }
         }
-        
+
         return result;
     }
-    
+
     /**
      * Method countCodePoint. Counts the UTF-32 code points
      * in a UTF-16 encoded string.
      * @param source StringBuffer in question.
      * @return int number of code points in this string
      */
-    public static final int countCodePoint(StringBuffer source) 
-    {         
+    public static final int countCodePoint(StringBuffer source)
+    {
         int result = 0;
         char ch;
         boolean hadLeadSurrogate = false;
-        
-        for (int i = 0; i < source.length(); ++ i) 
+
+        for (int i = 0; i < source.length(); ++ i)
         {
             ch = source.charAt(i);
             if (hadLeadSurrogate && 0xdc00 <= ch && ch <= 0xdfff) {
@@ -211,22 +211,22 @@
                 ++ result;                          // count others as 1
             }
         }
-        
+
         return result;
     }
     /**
      * The minimum value for Supplementary code points
      */
-    public static final int SUPPLEMENTARY_MIN_VALUE  = 0x10000;  
+    public static final int SUPPLEMENTARY_MIN_VALUE  = 0x10000;
     /**
      * Determines how many chars this char32 requires.
      * If a validity check is required, use <code>
-     * <a href="../UCharacter.html#isLegal(char)">isLegal()</a></code> on 
+     * <a href="../UCharacter.html#isLegal(char)">isLegal()</a></code> on
      * char32 before calling.
      * @param char32 the input codepoint.
-     * @return 2 if is in supplementary space, otherwise 1. 
+     * @return 2 if is in supplementary space, otherwise 1.
      */
-    public static int getCharCount(int char32) 
+    public static int getCharCount(int char32)
     {
         if (char32 < SUPPLEMENTARY_MIN_VALUE) {
             return 1;
@@ -243,12 +243,12 @@
      * @stable ICU 2.1
      */
     public static final int LEAD_SURROGATE_MIN_VALUE = 0xD800;
-    
+
     /**
      * Trail surrogate minimum value
      * @stable ICU 2.1
      */
-    public static final int TRAIL_SURROGATE_MIN_VALUE = 0xDC00; 
+    public static final int TRAIL_SURROGATE_MIN_VALUE = 0xDC00;
     /**
      * Trail surrogate maximum value
      * @stable ICU 2.1
@@ -260,44 +260,44 @@
      * @return true iff the input character is a surrogate.
      * @stable ICU 2.1
      */
-    public static boolean isSurrogate(char char16) 
+    public static boolean isSurrogate(char char16)
     {
-        return LEAD_SURROGATE_MIN_VALUE <= char16 && 
+        return LEAD_SURROGATE_MIN_VALUE <= char16 &&
             char16 <= TRAIL_SURROGATE_MAX_VALUE;
     }
-        
+
     /**
      * Determines whether the character is a trail surrogate.
      * @param char16 the input character.
      * @return true iff the input character is a trail surrogate.
      * @stable ICU 2.1
      */
-    public static boolean isTrailSurrogate(char char16) 
+    public static boolean isTrailSurrogate(char char16)
     {
-        return (TRAIL_SURROGATE_MIN_VALUE <= char16 && 
+        return (TRAIL_SURROGATE_MIN_VALUE <= char16 &&
                 char16 <= TRAIL_SURROGATE_MAX_VALUE);
     }
-        
+
     /**
      * Determines whether the character is a lead surrogate.
      * @param char16 the input character.
      * @return true iff the input character is a lead surrogate
      * @stable ICU 2.1
      */
-    public static boolean isLeadSurrogate(char char16) 
+    public static boolean isLeadSurrogate(char char16)
     {
-        return LEAD_SURROGATE_MIN_VALUE <= char16 && 
+        return LEAD_SURROGATE_MIN_VALUE <= char16 &&
             char16 <= LEAD_SURROGATE_MAX_VALUE;
     }
     /**
      * Extract a single UTF-32 value from a substring.
      * Used when iterating forwards or backwards (with
      * <code>UTF16.getCharCount()</code>, as well as random access. If a
-     * validity check is required, use 
+     * validity check is required, use
      * <code><a href="../UCharacter.html#isLegal(char)">UCharacter.isLegal()
      * </a></code> on the return value.
      * If the char retrieved is part of a surrogate pair, its supplementary
-     * character will be returned. If a complete supplementary character is 
+     * character will be returned. If a complete supplementary character is
      * not found the incomplete character will be returned
      * @param source array of UTF-16 chars
      * @param start offset to substring in the source array for analyzing
@@ -306,26 +306,26 @@
      * @return UTF-32 value for the UTF-32 value that contains the char at
      *         offset16. The boundaries of that codepoint are the same as in
      *         <code>bounds32()</code>.
-     * @exception IndexOutOfBoundsException thrown if offset16 is not within 
+     * @exception IndexOutOfBoundsException thrown if offset16 is not within
      *            the range of start and limit.
      * @stable ICU 2.1
      */
-    public static int charAt(char source[], int start, int limit, 
+    public static int charAt(char source[], int start, int limit,
                              int offset16)
     {
         offset16 += start;
         if (offset16 < start || offset16 >= limit) {
             throw new ArrayIndexOutOfBoundsException(offset16);
         }
-            
+
         char single = source[offset16];
         if (!isSurrogate(single)) {
             return single;
         }
 
         // Convert the UTF-16 surrogate pair if necessary.
-        // For simplicity in usage, and because the frequency of pairs is 
-        // low, look both directions.      
+        // For simplicity in usage, and because the frequency of pairs is
+        // low, look both directions.
         if (single <= LEAD_SURROGATE_MAX_VALUE) {
             offset16 ++;
             if (offset16 >= limit) {
@@ -335,7 +335,7 @@
             if (isTrailSurrogate(trail)) {
                 return getRawSupplementary(single, trail);
             }
-        } 
+        }
         else { // isTrailSurrogate(single), so
             if (offset16 == start) {
                 return single;
@@ -351,17 +351,17 @@
      * Shift value for lead surrogate to form a supplementary character.
      */
     private static final int LEAD_SURROGATE_SHIFT_ = 10;
-    
-    /** 
+
+    /**
      * Offset to add to combined surrogate pair to avoid msking.
      */
-    private static final int SURROGATE_OFFSET_ = 
-                           SUPPLEMENTARY_MIN_VALUE - 
-                           (LEAD_SURROGATE_MIN_VALUE << 
-                           LEAD_SURROGATE_SHIFT_) - 
-                           TRAIL_SURROGATE_MIN_VALUE;   
+    private static final int SURROGATE_OFFSET_ =
+                           SUPPLEMENTARY_MIN_VALUE -
+                           (LEAD_SURROGATE_MIN_VALUE <<
+                           LEAD_SURROGATE_SHIFT_) -
+                           TRAIL_SURROGATE_MIN_VALUE;
 
-    
+
    /**
     * Forms a supplementary code point from the argument character<br>
     * Note this is for internal use hence no checks for the validity of the
@@ -374,5 +374,5 @@
     {
         return (lead << LEAD_SURROGATE_SHIFT_) + trail + SURROGATE_OFFSET_;
     }
-    
+
 }
diff --git a/tools/java/com/ibm/icu/text/FixedDecimal.java b/tools/java/com/ibm/icu/text/FixedDecimal.java
new file mode 100644
index 0000000..9fc076c
--- /dev/null
+++ b/tools/java/com/ibm/icu/text/FixedDecimal.java
@@ -0,0 +1,684 @@
+package com.ibm.icu.text;
+
+import java.io.IOException;
+import java.io.NotSerializableException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Locale;
+
+import com.ibm.icu.text.PluralRules.IFixedDecimal;
+import com.ibm.icu.text.PluralRules.Operand;
+
+/**
+ * @internal CLDR
+ * @deprecated This API is ICU internal only.
+ */
+@Deprecated
+public class FixedDecimal extends Number implements Comparable<FixedDecimal>, IFixedDecimal {
+    private static final long serialVersionUID = -4756200506571685661L;
+
+    final double source;
+
+    final int visibleDecimalDigitCount;
+
+    final int visibleDecimalDigitCountWithoutTrailingZeros;
+
+    final long decimalDigits;
+
+    final long decimalDigitsWithoutTrailingZeros;
+
+    final long integerValue;
+
+    final boolean hasIntegerValue;
+
+    final boolean isNegative;
+
+    final int exponent;
+
+    private final int baseFactor;
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public double getSource() {
+        return source;
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public int getVisibleDecimalDigitCount() {
+        return visibleDecimalDigitCount;
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public int getVisibleDecimalDigitCountWithoutTrailingZeros() {
+        return visibleDecimalDigitCountWithoutTrailingZeros;
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public long getDecimalDigits() {
+        return decimalDigits;
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public long getDecimalDigitsWithoutTrailingZeros() {
+        return decimalDigitsWithoutTrailingZeros;
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public long getIntegerValue() {
+        return integerValue;
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public boolean isHasIntegerValue() {
+        return hasIntegerValue;
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public boolean isNegative() {
+        return isNegative;
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public int getBaseFactor() {
+        return baseFactor;
+    }
+
+    static final long MAX = (long)1E18;
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     * @param n is the original number
+     * @param v number of digits to the right of the decimal place. e.g 1.00 = 2 25. = 0
+     * @param f Corresponds to f in the plural rules grammar.
+     *   The digits to the right of the decimal place as an integer. e.g 1.10 = 10
+     * @param e Suppressed exponent for scientific and compact notation
+     */
+    @Deprecated
+    public FixedDecimal(double n, int v, long f, int e) {
+        isNegative = n < 0;
+        source = isNegative ? -n : n;
+        visibleDecimalDigitCount = v;
+        decimalDigits = f;
+        integerValue = n > MAX
+            ? MAX
+                : (long)n;
+        exponent = e;
+        hasIntegerValue = source == integerValue;
+        // check values. TODO make into unit test.
+        //
+        //            long visiblePower = (int) Math.pow(10, v);
+        //            if (fractionalDigits > visiblePower) {
+        //                throw new IllegalArgumentException();
+        //            }
+        //            double fraction = intValue + (fractionalDigits / (double) visiblePower);
+        //            if (fraction != source) {
+        //                double diff = Math.abs(fraction - source)/(Math.abs(fraction) + Math.abs(source));
+        //                if (diff > 0.00000001d) {
+        //                    throw new IllegalArgumentException();
+        //                }
+        //            }
+        if (f == 0) {
+            decimalDigitsWithoutTrailingZeros = 0;
+            visibleDecimalDigitCountWithoutTrailingZeros = 0;
+        } else {
+            long fdwtz = f;
+            int trimmedCount = v;
+            while ((fdwtz%10) == 0) {
+                fdwtz /= 10;
+                --trimmedCount;
+            }
+            decimalDigitsWithoutTrailingZeros = fdwtz;
+            visibleDecimalDigitCountWithoutTrailingZeros = trimmedCount;
+        }
+        baseFactor = (int) Math.pow(10, v);
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public FixedDecimal(double n, int v, long f) {
+        this(n, v, f, 0);
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public static FixedDecimal createWithExponent(double n, int v, int e) {
+        return new FixedDecimal(n,v,getFractionalDigits(n, v), e);
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public FixedDecimal(double n, int v) {
+        this(n,v,getFractionalDigits(n, v));
+    }
+
+    private static int getFractionalDigits(double n, int v) {
+        if (v == 0) {
+            return 0;
+        } else {
+            if (n < 0) {
+                n = -n;
+            }
+            int baseFactor = (int) Math.pow(10, v);
+            long scaled = Math.round(n * baseFactor);
+            return (int) (scaled % baseFactor);
+        }
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public FixedDecimal(double n) {
+        this(n, decimals(n));
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public FixedDecimal(long n) {
+        this(n,0);
+    }
+
+    private static final long MAX_INTEGER_PART = 1000000000;
+    /**
+     * Return a guess as to the number of decimals that would be displayed. This is only a guess; callers should
+     * always supply the decimals explicitly if possible. Currently, it is up to 6 decimals (without trailing zeros).
+     * Returns 0 for infinities and nans.
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     *
+     */
+    @Deprecated
+    public static int decimals(double n) {
+        // Ugly...
+        if (Double.isInfinite(n) || Double.isNaN(n)) {
+            return 0;
+        }
+        if (n < 0) {
+            n = -n;
+        }
+        if (n == Math.floor(n)) {
+            return 0;
+        }
+        if (n < MAX_INTEGER_PART) {
+            long temp = (long)(n * 1000000) % 1000000; // get 6 decimals
+            for (int mask = 10, digits = 6; digits > 0; mask *= 10, --digits) {
+                if ((temp % mask) != 0) {
+                    return digits;
+                }
+            }
+            return 0;
+        } else {
+            String buf = String.format(Locale.ENGLISH, "%1.15e", n);
+            int ePos = buf.lastIndexOf('e');
+            int expNumPos = ePos + 1;
+            if (buf.charAt(expNumPos) == '+') {
+                expNumPos++;
+            }
+            String exponentStr = buf.substring(expNumPos);
+            int exponent = Integer.parseInt(exponentStr);
+            int numFractionDigits = ePos - 2 - exponent;
+            if (numFractionDigits < 0) {
+                return 0;
+            }
+            for (int i=ePos-1; numFractionDigits > 0; --i) {
+                if (buf.charAt(i) != '0') {
+                    break;
+                }
+                --numFractionDigits;
+            }
+            return numFractionDigits;
+        }
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only
+     */
+    @Deprecated
+    private FixedDecimal (FixedDecimal other) {
+        // Ugly, but necessary, because constructors must only call other
+        // constructors in the first line of the body, and
+        // FixedDecimal(String) was refactored to support exponents.
+        this.source = other.source;
+        this.visibleDecimalDigitCount = other.visibleDecimalDigitCount;
+        this.visibleDecimalDigitCountWithoutTrailingZeros =
+            other.visibleDecimalDigitCountWithoutTrailingZeros;
+        this.decimalDigits = other.decimalDigits;
+        this.decimalDigitsWithoutTrailingZeros =
+            other.decimalDigitsWithoutTrailingZeros;
+        this.integerValue = other.integerValue;
+        this.hasIntegerValue = other.hasIntegerValue;
+        this.isNegative = other.isNegative;
+        this.exponent = other.exponent;
+        this.baseFactor = other.baseFactor;
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public FixedDecimal (String n) {
+        // Ugly, but for samples we don't care.
+        this(parseDecimalSampleRangeNumString(n));
+    }
+
+//    /**
+//     * @internal CLDR
+//     * @deprecated This API is ICU internal only
+//     */
+//    @Deprecated
+//    private static FixedDecimal parseDecimalSampleRangeNumString(String num) {
+//        if (num.contains("e")) {
+//            int ePos = num.lastIndexOf('e');
+//            int expNumPos = ePos + 1;
+//            String exponentStr = num.substring(expNumPos);
+//            int exponent = Integer.parseInt(exponentStr);
+//            String fractionStr = num.substring(0, ePos);
+//            return FixedDecimal.createWithExponent(
+//                    Double.parseDouble(fractionStr),
+//                    getVisibleFractionCount(fractionStr),
+//                    exponent);
+//        } else {
+//            return new FixedDecimal(Double.parseDouble(num), getVisibleFractionCount(num));
+//        }
+//    }
+
+    // The value of n needs to take the exponent into account
+    public static FixedDecimal parseDecimalSampleRangeNumString(String num) {
+        double n;
+        int v;
+        int exponent = 0;
+        String fractionStr = num; // default
+        if (num.contains("e")) {
+            int ePos = num.lastIndexOf('e');
+            int expNumPos = ePos + 1;
+            String exponentStr = num.substring(expNumPos);
+            exponent = Integer.parseInt(exponentStr);
+            fractionStr = num.substring(0, ePos);
+
+            // now adjust the fraction string according to the exponent
+            // not the most efficient, but more reliable code for testing
+            if (exponent != 0) {
+                int decimalPos = fractionStr.indexOf('.');
+                int decimalCount = 0;
+                String integerPart = fractionStr;
+                String fractionPart = "";
+                if (decimalPos >= 0) {
+                    decimalCount = fractionStr.length() - decimalPos - 1;
+                    integerPart = fractionStr.substring(0,decimalPos);
+                    fractionPart = fractionStr.substring(decimalPos+1);
+                }
+
+                if (decimalCount == exponent) { // 2.123e3 => 2123
+                    fractionStr = integerPart + fractionPart;
+                } else if (decimalCount > exponent) {   // 2.1234e3 => 2123.4
+                    fractionStr = integerPart + fractionPart.substring(0,exponent) + "." + fractionPart.substring(exponent);
+                } else { // decimalCount < exponent //   // 2.1e3 => 2100
+                    fractionStr = integerPart + padEnd(fractionPart, exponent, '0');
+                }
+            }
+        }
+        n = Double.parseDouble(fractionStr);
+        v = getVisibleFractionCount(fractionStr);
+        return new FixedDecimal(n, v, getFractionalDigits(n, v), exponent);
+    }
+
+
+    private static String padEnd(String string, int minLength, char c) {
+        StringBuilder sb = new StringBuilder(minLength);
+        sb.append(string);
+        for (int i = string.length(); i < minLength; i++) {
+            sb.append(c);
+        }
+        return sb.toString();
+    }
+
+    public static int getVisibleFractionCount(String value) {
+        value = value.trim();
+        int decimalPos = value.indexOf('.') + 1;
+        if (decimalPos == 0) {
+            return 0;
+        } else {
+            return value.length() - decimalPos;
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Override
+    @Deprecated
+    public double getPluralOperand(Operand operand) {
+        switch(operand) {
+        case n: return source;
+        case i: return integerValue;
+        case f: return decimalDigits;
+        case t: return decimalDigitsWithoutTrailingZeros;
+        case v: return visibleDecimalDigitCount;
+        case w: return visibleDecimalDigitCountWithoutTrailingZeros;
+        case e: return exponent;
+        default: return source;
+        }
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public static Operand getOperand(String t) {
+        return Operand.valueOf(t);
+    }
+
+    /**
+     * We're not going to care about NaN.
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Override
+    @Deprecated
+    public int compareTo(FixedDecimal other) {
+        if (exponent != other.exponent) {
+            return exponent < other.exponent ? -1 : 1;
+        }
+        if (integerValue != other.integerValue) {
+            return integerValue < other.integerValue ? -1 : 1;
+        }
+        if (source != other.source) {
+            return source < other.source ? -1 : 1;
+        }
+        if (visibleDecimalDigitCount != other.visibleDecimalDigitCount) {
+            return visibleDecimalDigitCount < other.visibleDecimalDigitCount ? -1 : 1;
+        }
+        long diff = decimalDigits - other.decimalDigits;
+        if (diff != 0) {
+            return diff < 0 ? -1 : 1;
+        }
+        return 0;
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    @Override
+    public boolean equals(Object arg0) {
+        if (arg0 == null) {
+            return false;
+        }
+        if (arg0 == this) {
+            return true;
+        }
+        if (!(arg0 instanceof FixedDecimal)) {
+            return false;
+        }
+        FixedDecimal other = (FixedDecimal)arg0;
+        return source == other.source && visibleDecimalDigitCount == other.visibleDecimalDigitCount && decimalDigits == other.decimalDigits
+            && exponent == other.exponent;
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    @Override
+    public int hashCode() {
+        // TODO Auto-generated method stub
+        return (int)(decimalDigits + 37 * (visibleDecimalDigitCount + (int)(37 * source)));
+    }
+
+    public static String toSampleString(IFixedDecimal source) {
+        final double n = source.getPluralOperand(Operand.n);
+        final int exponent = (int) source.getPluralOperand(Operand.e);
+        final int visibleDecimalDigitCount = (int) source.getPluralOperand(Operand.v);
+        if (exponent == 0) {
+            return String.format(Locale.ROOT, "%." + visibleDecimalDigitCount + "f", n);
+        } else {
+            // we need to slide the exponent back
+
+            int fixedV = visibleDecimalDigitCount + exponent;
+            String baseString = String.format(Locale.ROOT, "%." + fixedV + "f",n/Math.pow(10,exponent));
+
+            // HACK
+            // However, we don't have enough information to round-trip if v == 0
+            // So in that case we choose the shortest form,
+            // so we have to have a hack to strip trailing fraction spaces.
+            if (visibleDecimalDigitCount == 0) {
+                for (int i = visibleDecimalDigitCount; i < fixedV; ++i) {
+                    // TODO this code could and should be optimized, but for now...
+                    if (baseString.endsWith("0")) {
+                        baseString = baseString.substring(0,baseString.length()-1);
+                        continue;
+                    }
+                    break;
+                }
+                if (baseString.endsWith(".")) {
+                    baseString = baseString.substring(0,baseString.length()-1);
+                }
+            }
+            return baseString + "e" + exponent;
+        }
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    @Override
+    public String toString() {
+        return toSampleString(this);
+//        if (exponent == 0) {
+//            return String.format(Locale.ROOT, "%." + visibleDecimalDigitCount + "f", source);
+//        } else {
+//            // we need to slide the exponent back
+//
+//            int fixedV = visibleDecimalDigitCount + exponent;
+//            String baseString = String.format(Locale.ROOT, "%." + fixedV + "f", getSource()/Math.pow(10,exponent));
+//
+//            // However, we don't have enough information to round-trip if v == 0
+//            // So in that case we choose the shortest form,
+//            // so we have to have a hack to strip trailing fraction spaces.
+//            if (visibleDecimalDigitCount == 0) {
+//                for (int i = visibleDecimalDigitCount; i < fixedV; ++i) {
+//                    // TODO this code could and should be optimized, but for now...
+//                    if (baseString.endsWith("0")) {
+//                        baseString = baseString.substring(0,baseString.length()-1);
+//                        continue;
+//                    }
+//                    break;
+//                }
+//                if (baseString.endsWith(".")) {
+//                    baseString = baseString.substring(0,baseString.length()-1);
+//                }
+//            }
+//
+//            return baseString + "e" + exponent;
+//        }
+    }
+
+//    // FixedDecimal.toString isn't working right.
+//    public String xtoString() {
+//        // we need to slide v up
+//        final int v = getVisibleDecimalDigitCount();
+//        final int exponent = getExponent();
+//        if (exponent == 0) {
+//            return String.format(Locale.ROOT, "%." + v + "f", getSource());
+//        }
+//        int fixedV = v + exponent;
+//        String baseString = String.format(Locale.ROOT, "%." + fixedV + "f", getSource()/Math.pow(10,exponent));
+//        // however, the format does not round trip.
+//        // so we have to have a hack to strip trailing fraction spaces.
+//        for (int i = v; i < fixedV; ++i) {
+//            // TODO this code could and should be optimized, but for now...
+//            if (baseString.endsWith("0")) {
+//                baseString = baseString.substring(0,baseString.length()-1);
+//                continue;
+//            }
+//            break;
+//        }
+//        if (baseString.endsWith(".")) {
+//            baseString = baseString.substring(0,baseString.length()-1);
+//        }
+//        return baseString + "e" + exponent;
+//    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public boolean hasIntegerValue() {
+        return hasIntegerValue;
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    @Override
+    public int intValue() {
+        // TODO Auto-generated method stub
+        return (int) longValue();
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    @Override
+    public long longValue() {
+        if (exponent == 0) {
+            return integerValue;
+        } else {
+            return (long) (Math.pow(10, exponent) * integerValue);
+        }
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    @Override
+    public float floatValue() {
+        return (float) (source * Math.pow(10, exponent));
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    @Override
+    public double doubleValue() {
+        return (isNegative ? -source : source);
+    }
+
+    /**
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    public long getShiftedValue() {
+        return integerValue * baseFactor + decimalDigits;
+    }
+
+    private void writeObject(
+        ObjectOutputStream out)
+            throws IOException {
+        throw new NotSerializableException();
+    }
+
+    private void readObject(ObjectInputStream in
+        ) throws IOException, ClassNotFoundException {
+        throw new NotSerializableException();
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    @Override
+    public boolean isNaN() {
+        return Double.isNaN(source);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @internal CLDR
+     * @deprecated This API is ICU internal only.
+     */
+    @Deprecated
+    @Override
+    public boolean isInfinite() {
+        return Double.isInfinite(source);
+    }
+
+    // would be convenient to have getExponent, like the other methods
+    public int getExponent() {
+        return exponent;
+    }
+
+}
diff --git a/tools/java/com/ibm/icu/text/GenderInfo.java b/tools/java/com/ibm/icu/text/GenderInfo.java
index ad6ee7e..b611e2e 100644
--- a/tools/java/com/ibm/icu/text/GenderInfo.java
+++ b/tools/java/com/ibm/icu/text/GenderInfo.java
@@ -139,7 +139,7 @@
     // TODO Get this data from a resource bundle generated from CLDR.
     // For now, hard coded.
 
-    private static Map<ULocale, ListGenderStyle> localeToListGender = new HashMap<ULocale, ListGenderStyle>();
+    private static Map<ULocale, ListGenderStyle> localeToListGender = new HashMap<>();
     static {
         for (String locale : Arrays.asList("ar", "ca", "cs", "hr", "es", "fr", "he", "hi", "it", "lt", "lv", "mr",
             "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sr", "uk", "ur", "zh")) {
diff --git a/tools/java/com/ibm/icu/text/ListFormat.java b/tools/java/com/ibm/icu/text/ListFormat.java
index fd2ff92..9d645fe 100644
--- a/tools/java/com/ibm/icu/text/ListFormat.java
+++ b/tools/java/com/ibm/icu/text/ListFormat.java
@@ -135,7 +135,7 @@
     // TODO Replace by use of RB
     // Verify in building that all of the patterns contain {0}, {1}.
 
-    static Map<ULocale, ListFormat> localeToData = new HashMap<ULocale, ListFormat>();
+    static Map<ULocale, ListFormat> localeToData = new HashMap<>();
 
     static void add(String locale, String... data) {
         localeToData.put(new ULocale(locale), new ListFormat(data[0], data[1], data[2], data[3]));
diff --git a/tools/java/com/ibm/icu/util/LocaleMatcher.java b/tools/java/com/ibm/icu/util/LocaleMatcher.java
index e0c301b..0423399 100644
--- a/tools/java/com/ibm/icu/util/LocaleMatcher.java
+++ b/tools/java/com/ibm/icu/util/LocaleMatcher.java
@@ -320,7 +320,7 @@
     private void addFiltered(String desired, R3<ULocale, ULocale, Double> localeToMaxAndWeight) {
         Set<R3<ULocale, ULocale, Double>> map = desiredLanguageToPossibleLocalesToMaxLocaleToData.get(desired);
         if (map == null) {
-            desiredLanguageToPossibleLocalesToMaxLocaleToData.put(desired, map = new LinkedHashSet<R3<ULocale, ULocale, Double>>());
+            desiredLanguageToPossibleLocalesToMaxLocaleToData.put(desired, map = new LinkedHashSet<>());
         }
         map.add(localeToMaxAndWeight);
         if (DEBUG) {
@@ -328,8 +328,8 @@
         }
     }
 
-    Set<Row.R3<ULocale, ULocale, Double>> localeToMaxLocaleAndWeight = new LinkedHashSet<Row.R3<ULocale, ULocale, Double>>();
-    Map<String, Set<Row.R3<ULocale, ULocale, Double>>> desiredLanguageToPossibleLocalesToMaxLocaleToData = new LinkedHashMap<String, Set<Row.R3<ULocale, ULocale, Double>>>();
+    Set<Row.R3<ULocale, ULocale, Double>> localeToMaxLocaleAndWeight = new LinkedHashSet<>();
+    Map<String, Set<Row.R3<ULocale, ULocale, Double>>> desiredLanguageToPossibleLocalesToMaxLocaleToData = new LinkedHashMap<>();
 
     // =============== Special Mapping Information ==============
 
@@ -377,7 +377,7 @@
         static Pattern pattern = Pattern.compile(
             "([a-z]{1,8}|\\*)"
                 + "(?:[_-]([A-Z][a-z]{3}|\\*))?"
-                + "(?:[_-]([A-Z]{2}|[0-9]{3}|\\*))?");
+                + "(?:[_-]([$]!?[a-zA-Z]+|[A-Z]{2}|[0-9]{3}|\\*))?");
 
         public LocalePatternMatcher(String toMatch) {
             Matcher matcher = pattern.matcher(toMatch);
@@ -429,6 +429,7 @@
             return (region == null ? "*" : region);
         }
 
+        @Override
         public String toString() {
             String result = getLanguage();
             if (level != Level.language) {
@@ -483,7 +484,7 @@
         @SuppressWarnings("unused")
         private static final double maxUnequal_changeEqual = 0.75;
 
-        LinkedHashSet<Row.R3<LocalePatternMatcher, LocalePatternMatcher, Double>> scores = new LinkedHashSet<R3<LocalePatternMatcher, LocalePatternMatcher, Double>>();
+        LinkedHashSet<Row.R3<LocalePatternMatcher, LocalePatternMatcher, Double>> scores = new LinkedHashSet<>();
         final Level level;
 
         public ScoreData(Level level) {
@@ -536,6 +537,7 @@
             return level.worst;
         }
 
+        @Override
         public String toString() {
             StringBuilder result = new StringBuilder().append(level);
             for (R3<LocalePatternMatcher, LocalePatternMatcher, Double> score : scores) {
@@ -544,6 +546,7 @@
             return result.toString();
         }
 
+        @Override
         @SuppressWarnings("unchecked")
         public ScoreData cloneAsThawed() {
             try {
@@ -559,10 +562,12 @@
 
         private volatile boolean frozen = false;
 
+        @Override
         public ScoreData freeze() {
             return this;
         }
 
+        @Override
         public boolean isFrozen() {
             return frozen;
         }
@@ -615,6 +620,7 @@
          * @internal
          * @deprecated This API is ICU internal only.
          */
+        @Override
         @Deprecated
         public String toString() {
             return languageScores + "\n\t" + scriptScores + "\n\t" + regionScores;
@@ -744,6 +750,7 @@
          * @internal
          * @deprecated This API is ICU internal only.
          */
+        @Override
         @Deprecated
         public LanguageMatcherData cloneAsThawed() {
             LanguageMatcherData result;
@@ -764,6 +771,7 @@
          * @internal
          * @deprecated This API is ICU internal only.
          */
+        @Override
         @Deprecated
         public LanguageMatcherData freeze() {
             languageScores.freeze();
@@ -779,6 +787,7 @@
          * @internal
          * @deprecated This API is ICU internal only.
          */
+        @Override
         @Deprecated
         public boolean isFrozen() {
             return frozen;
@@ -789,7 +798,7 @@
 
     private static final LanguageMatcherData defaultWritten;
 
-    private static HashMap<String, String> canonicalMap = new HashMap<String, String>();
+    private static HashMap<String, String> canonicalMap = new HashMap<>();
 
     static {
         canonicalMap.put("iw", "he");
diff --git a/tools/java/libs/gson-sources.jar b/tools/java/libs/gson-sources.jar
index a64f4e7..1e07df4 100644
--- a/tools/java/libs/gson-sources.jar
+++ b/tools/java/libs/gson-sources.jar
Binary files differ
diff --git a/tools/java/libs/gson-version.txt b/tools/java/libs/gson-version.txt
index 0eaa996..24fb605 100644
--- a/tools/java/libs/gson-version.txt
+++ b/tools/java/libs/gson-version.txt
@@ -1 +1 @@
-gson 2.8.5 2018-05-22
+gson 2.8.6 2019-10-04
diff --git a/tools/java/libs/gson.jar b/tools/java/libs/gson.jar
index 0d5baf3..4765c4a 100644
--- a/tools/java/libs/gson.jar
+++ b/tools/java/libs/gson.jar
Binary files differ
diff --git a/tools/java/libs/guava-sources.jar b/tools/java/libs/guava-sources.jar
index cbaee13..66dd8bd 100644
--- a/tools/java/libs/guava-sources.jar
+++ b/tools/java/libs/guava-sources.jar
Binary files differ
diff --git a/tools/java/libs/guava-version.txt b/tools/java/libs/guava-version.txt
index cc749ed..2db85c2 100644
--- a/tools/java/libs/guava-version.txt
+++ b/tools/java/libs/guava-version.txt
@@ -1 +1 @@
-guava 28.1 2019-08-28
+guava 29.0-jre 2020-04-13
diff --git a/tools/java/libs/guava.jar b/tools/java/libs/guava.jar
index 081cd11..e1fc179 100644
--- a/tools/java/libs/guava.jar
+++ b/tools/java/libs/guava.jar
Binary files differ
diff --git a/tools/java/libs/icu4j-src.jar b/tools/java/libs/icu4j-src.jar
index ff6059d..0852f85 100644
--- a/tools/java/libs/icu4j-src.jar
+++ b/tools/java/libs/icu4j-src.jar
Binary files differ
diff --git a/tools/java/libs/icu4j-version.txt b/tools/java/libs/icu4j-version.txt
index e754f91..3769e80 100644
--- a/tools/java/libs/icu4j-version.txt
+++ b/tools/java/libs/icu4j-version.txt
@@ -1 +1 @@
-icu4j b9d1ba87f545744f2b81f1f413484f55a0da3d2f 2020-04-14 (from maint/maint-67, ICU 67 post rc)
+icu4j 766088ddb360a3494acbd140cf6c2625008f6bbf 2020-10-21 (from maint/maint-68 branch)
diff --git a/tools/java/libs/icu4j.jar b/tools/java/libs/icu4j.jar
index 942b634..5ff19ab 100644
--- a/tools/java/libs/icu4j.jar
+++ b/tools/java/libs/icu4j.jar
Binary files differ
diff --git a/tools/java/libs/utilities-src.jar b/tools/java/libs/utilities-src.jar
index ebd553f..ab03668 100644
--- a/tools/java/libs/utilities-src.jar
+++ b/tools/java/libs/utilities-src.jar
Binary files differ
diff --git a/tools/java/libs/utilities.jar b/tools/java/libs/utilities.jar
index 35b0f5c..3285691 100644
--- a/tools/java/libs/utilities.jar
+++ b/tools/java/libs/utilities.jar
Binary files differ
diff --git a/tools/java/org/unicode/cldr/ant/CLDRBuild.java b/tools/java/org/unicode/cldr/ant/CLDRBuild.java
deleted file mode 100644
index 47bc489..0000000
--- a/tools/java/org/unicode/cldr/ant/CLDRBuild.java
+++ /dev/null
@@ -1,677 +0,0 @@
-package org.unicode.cldr.ant;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.regex.Pattern;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import org.unicode.cldr.ant.CLDRConverterTool.AliasDeprecates;
-import org.unicode.cldr.icu.ResourceSplitter.SplitInfo;
-import org.unicode.cldr.util.PatternCache;
-
-import com.ibm.icu.dev.tool.UOption;
-
-public class CLDRBuild extends Task {
-    private String toolName;
-    private String srcFile;
-    private String destFile;
-    private boolean noArgs;
-    private List<Run> runs = new ArrayList<Run>();
-
-    private UOption srcDir = UOption.SOURCEDIR();
-    private UOption destDir = UOption.DESTDIR();
-
-    private static class PatternFilter implements FileFilter {
-        private final Pattern filePattern;
-
-        public PatternFilter(String filePattern) {
-            this.filePattern = filePattern == null ? null : PatternCache.get(filePattern);
-        }
-
-        public boolean accept(File pathname) {
-            return filePattern != null && filePattern.matcher(pathname.getName()).matches();
-        }
-    }
-
-    public static boolean matchesLocale(List<String> locales, String locale) {
-        for (String localePattern : locales) {
-            if (localePattern.equals(locale) || locale.matches(localePattern)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public Map<String, String> getLocalesList(Config config, String src, String dest) {
-        File srcdir = new File(src);
-        File[] srcFiles = srcdir.listFiles(new PatternFilter(srcFile));
-        File destdir = new File(dest);
-        File[] destFiles = destdir.listFiles(new PatternFilter(destFile));
-
-        Map<String, String> ret = new TreeMap<String, String>();
-
-        if (config != null) {
-            List<InExclude> localesList = config.locales.localesList;
-            for (InExclude inex : localesList) {
-                for (File file : srcFiles) {
-                    String fileName = file.getName();
-                    if (inex.matchesFileName(fileName)) {
-                        if (inex.include) {
-                            ret.put(fileName, inex.draft);
-                        } else {
-                            ret.remove(fileName);
-                        }
-                    }
-                }
-            }
-        } else {
-            for (File file : srcFiles) {
-                ret.put(file.getName(), ".*");
-            }
-        }
-
-        // Only build the files that need to be built
-        if (srcFile == null) {
-            // Don't rebuild dstFiles that already exist
-            for (File file : destFiles) {
-                if (file.exists()) {
-                    ret.remove(file.getName());
-                }
-            }
-        } else if (srcFiles.length > 0) {
-            // Don't rebuild files that are newer than the corresponding source file
-
-            // In the grand scheme of things, the number of files is relatively
-            // small and n * m operations isn't noticeable, so don't optimize.
-            // The previous code tried to optimize but the optimization was broken
-            // so this performs about the same as before.
-            for (File dstFile : destFiles) {
-                String destName = stripExtension(dstFile.getName());
-                for (File srcFile : srcFiles) {
-                    String srcName = stripExtension(srcFile.getName());
-                    if (srcName.equals(destName) && dstFile.lastModified() > srcFile.lastModified()) {
-                        ret.remove(srcFile.getName());
-                    }
-                }
-            }
-        }
-
-        if (ret.size() == 0 && destFiles.length == 1) {
-            return null;
-        }
-
-        return ret;
-    }
-
-    public Set<String> getIncludedLocales(Config config) {
-
-        Set<String> ret = new HashSet<String>();
-        if (config != null) {
-            List<InExclude> localesList = config.locales.localesList;
-            for (InExclude inex : localesList) {
-                if (inex.include) {
-                    for (String str : inex.locales) {
-                        ret.add(str);
-                    }
-                }
-            }
-        }
-        return ret;
-    }
-
-    private static String stripExtension(String fileName) {
-        int index = fileName.lastIndexOf('.');
-        return index == -1 ? fileName : fileName.substring(0, index);
-    }
-
-    static void exitWithException(Throwable t) {
-        errln(t.getMessage());
-        t.printStackTrace(System.err);
-        System.exit(-1);
-    }
-
-    static void exitWithError(String msg) {
-        errln(msg);
-        System.exit(-1);
-    }
-
-    static void errln(String msg) {
-        System.err.println("ERROR: " + msg);
-    }
-
-    static void warnln(String msg) {
-        System.out.println("WARNING: " + msg);
-    }
-
-    static void infoln(String msg) {
-        System.out.println("INFO: " + msg);
-    }
-
-    private String getDirString(Args runArgs, UOption key) {
-        String value = runArgs.map.get("--" + key.longName);
-        if (value == null) {
-            value = runArgs.map.get("-" + key.shortName);
-        }
-        return value;
-    }
-
-    // The method executing the task
-    @Override
-    public void execute() throws BuildException {
-        if (toolName == null) {
-            throw new BuildException("Tool name not set");
-        }
-
-        try {
-            for (Run run : runs) {
-
-                Args runArgs = run.args;
-
-                Set<String> includedLocales = getIncludedLocales(run.config);
-                Map<String, String> localesMap = getLocalesList(
-                    run.config, getDirString(runArgs, srcDir), getDirString(runArgs, destDir));
-                if (localesMap == null || (localesMap.size() == 0 && !noArgs)) {
-                    continue;
-                }
-
-                List<String> argList = new ArrayList<String>();
-                StringBuilder printArgs = new StringBuilder();
-                for (Map.Entry<String, String> e : runArgs.map.entrySet()) {
-                    String key = e.getKey();
-                    String value = e.getValue();
-                    printArgs.append(key).append(' ');
-                    argList.add(key);
-                    if (value != null && value.length() > 0) {
-                        printArgs.append(value).append(' ');
-                        argList.add(value);
-                    }
-                }
-
-                Object obj = createObject(toolName);
-                if (!(obj instanceof CLDRConverterTool)) {
-                    exitWithError(toolName + " not a subclass of CLDRConverterTool!");
-                }
-
-                CLDRConverterTool tool = (CLDRConverterTool) obj;
-                tool.setLocalesMap(localesMap);
-                tool.setIncludedLocales(includedLocales);
-
-                if (run.deprecates != null) {
-                    AliasDeprecates aliasDeprecates = new AliasDeprecates(
-                        run.deprecates.aliasList,
-                        run.deprecates.aliasLocaleList,
-                        run.deprecates.emptyLocaleList);
-                    tool.setAliasDeprecates(aliasDeprecates);
-                }
-
-                if (run.config != null) {
-                    if (run.config.paths != null) {
-                        tool.setPathList(run.config.paths.pathList);
-                    }
-
-                    if (run.config.ofb != null) {
-                        tool.setOverrideFallbackList(run.config.ofb.pathsList);
-                    }
-                }
-
-                if (run.remapper != null) {
-                    List<SplitInfo> infos = new ArrayList<SplitInfo>();
-                    for (Remap remap : run.remapper.remaps) {
-                        infos.add(new SplitInfo(remap.sourcePath, remap.targetDir, remap.targetPath));
-                    }
-                    tool.setSplitInfos(infos);
-                }
-
-                tool.processArgs(argList.toArray(new String[argList.size()]));
-            }
-        } catch (Throwable t) {
-            t.printStackTrace();
-        }
-    }
-
-    private static Object createObject(String className) {
-        Object object = null;
-        try {
-            Class<?> classDefinition = Class.forName(className);
-            object = classDefinition.newInstance();
-        } catch (InstantiationException e) {
-            exitWithException(e);
-        } catch (IllegalAccessException e) {
-            exitWithException(e);
-        } catch (ClassNotFoundException e) {
-            exitWithException(e);
-        } catch (Throwable t) {
-            exitWithException(t);
-        }
-        return object;
-    }
-
-    public void addConfiguredRun(Run run) {
-        runs.add(run);
-    }
-
-    public void setToolName(String name) {
-        toolName = name;
-    }
-
-    public void setSrcFile(String sf) {
-        srcFile = sf;
-    }
-
-    public void setDestFile(String df) {
-        destFile = df;
-    }
-
-    public void setNoArgs(String bool) {
-        noArgs = bool.equals("true");
-    }
-
-    public static class Run extends Task {
-        String type;
-        Args args;
-        Config config;
-        Deprecates deprecates;
-        Remapper remapper;
-
-        public void setType(String type) {
-            this.type = type;
-        }
-
-        public void addConfiguredArgs(Args args) {
-            this.args = args;
-        }
-
-        public void addConfiguredConfig(Config config) {
-            this.config = config;
-        }
-
-        public void addConfiguredDeprecates(Deprecates deprecates) {
-            this.deprecates = deprecates;
-        }
-
-        public void addConfiguredRemapper(Remapper remapper) {
-            if (remapper.remaps.isEmpty()) {
-                exitWithError("remaps must not be empty");
-            }
-            this.remapper = remapper;
-        }
-    }
-
-    public static class Args extends Task {
-        Map<String, String> map = new HashMap<String, String>();
-
-        public void addConfiguredArg(Arg arg) {
-            if (arg.name == null) {
-                throw new IllegalArgumentException("argument missing name");
-            }
-            map.put(arg.name, arg.value);
-        }
-    }
-
-    public static class Arg extends Task {
-        String name;
-        String value;
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public void setValue(String value) {
-            this.value = value;
-        }
-    }
-
-    public static class Config extends Task {
-        Locales locales;
-        Paths paths;
-        OverrideFallback ofb;
-        String type;
-
-        public void addConfiguredLocales(Locales loc) {
-            if (locales != null) {
-                exitWithError("Multiple <locales> elements not supported");
-            }
-            locales = loc;
-        }
-
-        public void addConfiguredPaths(Paths ps) {
-            if (paths != null) {
-                exitWithError("Multiple <paths> elements not supported");
-            }
-            paths = ps;
-        }
-
-        public void addConfiguredOverrideFallback(OverrideFallback ofb) {
-            if (this.ofb != null) {
-                exitWithError("Multiple <overrideFallback> elements not allowed!");
-            }
-            this.ofb = ofb;
-        }
-
-        public void setType(String type) {
-            this.type = type;
-        }
-    }
-
-    public static class Locales extends Task {
-        List<InExclude> localesList = new ArrayList<InExclude>();
-
-        public void addConfiguredInclude(Include include) {
-            addInEx(include);
-        }
-
-        public void addConfiguredExclude(Exclude exclude) {
-            addInEx(exclude);
-        }
-
-        private void addInEx(InExclude inex) {
-            inex.validate();
-            localesList.add(inex);
-        }
-    }
-
-    public static class InExclude extends Task {
-        static final List<String> ANY = Collections.emptyList();
-
-        final boolean include;
-        List<String> locales;
-        String draft;
-        String xpath;
-        String alt;
-
-        protected InExclude(boolean include) {
-            this.include = include;
-        }
-
-        public void setDraft(String draft) {
-            this.draft = draft;
-        }
-
-        public void setLocales(String locales) {
-            if (".*".equals(locales)) {
-                this.locales = ANY;
-            } else {
-                this.locales = Arrays.asList(locales.split("\\s+"));
-            }
-        }
-
-        public void setXpath(String xpath) {
-            this.xpath = xpath;
-        }
-
-        public void setAlt(String alt) {
-            this.alt = alt;
-        }
-
-        void validate() {
-            if (locales == null) {
-                exitWithError("locales attribute not set for include/exclude element!");
-            }
-        }
-
-        boolean matchesFileName(String fileName) {
-            if (locales == ANY) {
-                return true;
-            }
-            String localePattern = fileName.substring(0, fileName.indexOf(".xml"));
-            return matchesLocale(locales, localePattern);
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (!(o instanceof InExclude)) {
-                return false;
-            }
-
-            if (o == this) {
-                return true;
-            }
-
-            InExclude rhs = (InExclude) o;
-            return include == rhs.include &&
-                equalLists(locales, rhs.locales) &&
-                equalStrings(draft, rhs.draft) &&
-                equalStrings(xpath, rhs.xpath) &&
-                equalStrings(alt, rhs.alt);
-        }
-
-        @Override
-        public int hashCode() {
-            return hash(locales, hash(draft, hash(xpath, hash(alt, 0))));
-        }
-
-        private boolean equalStrings(String lhs, String rhs) {
-            return lhs == rhs || (lhs != null && lhs.equals(rhs));
-        }
-
-        private <T> boolean equalLists(List<? extends T> lhs, List<? extends T> rhs) {
-            return lhs == rhs || (lhs != null && lhs.equals(rhs));
-        }
-
-        private int hash(Object rhs, int hash) {
-            return rhs == null ? hash : (hash * 31) ^ rhs.hashCode();
-        }
-    }
-
-    public static class Include extends InExclude {
-        public Include() {
-            super(true);
-        }
-    }
-
-    public static class Exclude extends InExclude {
-        public Exclude() {
-            super(false);
-        }
-    }
-
-    public static class Deprecates extends Task {
-        List<String> aliasLocaleList;
-        List<String> emptyLocaleList;
-        List<CLDRConverterTool.Alias> aliasList;
-
-        public void addConfiguredAlias(Alias alias) {
-            if (aliasList == null) {
-                aliasList = new ArrayList<CLDRConverterTool.Alias>();
-            }
-            aliasList.add(new CLDRConverterTool.Alias(alias.from, alias.to, alias.xpath, alias.rbPath, alias.value));
-        }
-
-        public void addConfiguredEmptyLocale(EmptyLocale alias) {
-            if (emptyLocaleList == null) {
-                emptyLocaleList = new ArrayList<String>();
-            }
-            emptyLocaleList.add(alias.locale);
-        }
-
-        public void addConfiguredAliasLocale(AliasLocale alias) {
-            if (aliasLocaleList == null) {
-                aliasLocaleList = new ArrayList<String>();
-            }
-            aliasLocaleList.add(alias.locale);
-        }
-    }
-
-    public static class Alias extends Task {
-        String from;
-        String to;
-        // TODO(jchye): remove xpath field after old converter is deleted.
-        String xpath;
-        String rbPath;
-        String value;
-
-        public void setFrom(String from) {
-            this.from = from;
-        }
-
-        public void setTo(String to) {
-            this.to = to;
-        }
-
-        public void setXpath(String xpath) {
-            this.xpath = xpath;
-        }
-
-        public void setRbPath(String rbPath) {
-            this.rbPath = rbPath;
-        }
-
-        public void setValue(String value) {
-            this.value = value;
-        }
-    }
-
-    public static class AliasLocale extends Task {
-        String locale;
-
-        public void setLocale(String locale) {
-            this.locale = locale;
-        }
-    }
-
-    public static class EmptyLocale extends Task {
-        String locale;
-        String list;
-
-        public void setLocale(String locale) {
-            this.locale = locale;
-        }
-
-        public void setList(String list) {
-            this.list = list;
-        }
-    }
-
-    public static class Paths extends Task {
-        public String fallback;
-        public String locales;
-        public String draft;
-
-        private List<Task> pathList = new ArrayList<Task>();
-
-        public void addConfiguredInclude(Include include) {
-            pathList.add(include);
-        }
-
-        public void addConfiguredExclude(Exclude exclude) {
-            pathList.add(exclude);
-        }
-
-        public void setFallback(String fallback) {
-            this.fallback = fallback;
-        }
-
-        public void setLocales(String locales) {
-            this.locales = locales;
-        }
-
-        public void setDraft(String draft) {
-            this.draft = draft;
-        }
-
-        public void addConfiguredCoverageLevel(CoverageLevel level) {
-            level.validate();
-            pathList.add(level);
-        }
-    }
-
-    public static class CoverageLevel extends Task {
-        public String group;
-        public String level;
-        public String locales;
-        public String draft;
-        public String org;
-
-        public void setDraft(String draft) {
-            this.draft = draft;
-        }
-
-        public void setLevel(String level) {
-            this.level = level;
-        }
-
-        public void setLocales(String locales) {
-            this.locales = locales;
-        }
-
-        public void setOrg(String org) {
-            this.org = org;
-        }
-
-        public void setGroup(String group) {
-            this.group = group;
-        }
-
-        void validate() {
-            if ((group == null) != (org == null)) {
-                exitWithError("Invalid specification of coverageLevel element; org && group not set!");
-            }
-
-            if (level == null) {
-                exitWithError("Invalid specification of coverageLevel element; level not set!");
-            }
-        }
-    }
-
-    public static class OverrideFallback extends Task {
-        List<Paths> pathsList = new ArrayList<Paths>();
-
-        public void addConfiguredPaths(Paths paths) {
-            pathsList.add(paths);
-        }
-    }
-
-    public static class Remap extends Task {
-        public String sourcePath;
-        public String targetPath;
-        public String targetDir;
-
-        public void setSourcePath(String sourcePath) {
-            this.sourcePath = sourcePath;
-        }
-
-        public void setTargetPath(String targetPath) {
-            this.targetPath = targetPath;
-        }
-
-        public void setTargetDir(String targetDir) {
-            this.targetDir = targetDir;
-        }
-    }
-
-    public static class Remapper extends Task {
-        public String baseDir;
-        List<Remap> remaps = new ArrayList<Remap>();
-
-        public void setBaseDir(String baseDir) {
-            this.baseDir = baseDir;
-        }
-
-        public void addConfiguredRemap(Remap remap) {
-            if (remap.sourcePath == null || remap.sourcePath.trim().isEmpty()) {
-                exitWithError("remap source path must not be empty");
-            }
-            remap.sourcePath = remap.sourcePath.trim();
-
-            if (remap.targetPath != null && remap.targetPath.trim().isEmpty()) {
-                remap.targetPath = null;
-            }
-
-            if (remap.targetDir != null && remap.targetDir.trim().isEmpty()) {
-                remap.targetDir = null;
-            }
-
-            remaps.add(remap);
-        }
-    }
-}
diff --git a/tools/java/org/unicode/cldr/ant/CLDRConverterTool.java b/tools/java/org/unicode/cldr/ant/CLDRConverterTool.java
deleted file mode 100644
index 687d958..0000000
--- a/tools/java/org/unicode/cldr/ant/CLDRConverterTool.java
+++ /dev/null
@@ -1,457 +0,0 @@
-package org.unicode.cldr.ant;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.tools.ant.Task;
-import org.unicode.cldr.ant.CLDRBuild.Paths;
-import org.unicode.cldr.icu.LDMLConstants;
-import org.unicode.cldr.icu.ResourceSplitter.SplitInfo;
-import org.unicode.cldr.util.CLDRConfig;
-import org.unicode.cldr.util.CoverageInfo;
-import org.unicode.cldr.util.Level;
-import org.unicode.cldr.util.StandardCodes;
-import org.unicode.cldr.util.XPathParts;
-import org.w3c.dom.Node;
-
-/**
- * All tools that would like to make use of CLDR Build process
- * through the ant plug-in should extend this class. For implementing
- * the processArgs method basically move the implementation of main into
- * this method and add code to deal with situation where localesMap field
- * is set, see {@link org.unicode.cldr.icu.LDML2ICUConverter#processArgs(String[])}.
- * The subclasses are also expected to invoke computeConvertibleXPaths method
- * for all the xpaths in the file that they are currently processing and at
- * every leaf node should verify if an XPath is convertible or not. Please see
- * {@link org.unicode.cldr.icu.LDML2ICUConverter#isNodeNotConvertible(Node, StringBuilder)}.
- *
- * @author ram
- *
- */
-public abstract class CLDRConverterTool {
-    /**
-     * Information from the deprecates build rules.
-     */
-    protected AliasDeprecates aliasDeprecates;
-
-    /**
-     * Map of locales that need to processed.
-     * Key : locale name
-     * Value: draft attribute
-     */
-    private Map<String, String> localesMap;
-
-    private Set<String> includedLocales;
-
-    /**
-     * List of xpaths to include or exclude
-     */
-    protected List<Task> pathList;
-
-    /**
-     * Override fallbacks list
-     */
-    protected List<CLDRBuild.Paths> overrideFallbackList;
-
-    /**
-     * Information used by ResourceSplitter, if not null.
-     */
-    protected List<SplitInfo> splitInfos;
-
-    /**
-     * Object that holds information about aliases on the
-     * <alias from="in" to="id" /> elements.
-     *
-     * @author ram
-     *
-     */
-    public static class Alias {
-        public final String from;
-        public final String to;
-        public final String xpath;
-        public final String rbPath;
-        public final String value;
-
-        public Alias(String from, String to, String xpath, String rbPath, String value) {
-            this.from = from;
-            this.to = to;
-            this.xpath = xpath;
-            this.rbPath = rbPath;
-            this.value = value;
-        }
-    }
-
-    public static class AliasDeprecates {
-        public final List<Alias> aliasList;
-        public final List<String> aliasLocaleList;
-        public final List<String> emptyLocaleList;
-
-        public AliasDeprecates(List<Alias> aliasList, List<String> aliasLocaleList,
-            List<String> emptyLocaleList) {
-            this.aliasList = aliasList;
-            this.aliasLocaleList = aliasLocaleList;
-            this.emptyLocaleList = emptyLocaleList;
-        }
-    }
-
-    /**
-     * Process the arguments
-     *
-     * @param args
-     */
-    public abstract void processArgs(String[] args);
-
-    /**
-     * For support and interpretation of
-     * <deprecates>
-     * <alias from="no_NO_NY" to="nn_NO" />
-     * <alias from="en_RH" to="en_ZW" />
-     * <aliasLocale locale="zh_SG" />
-     * <aliasLocale locale="zh_TW" />
-     * <emptyLocale locale="hi_" />
-     * <emptyLocale locale="zh_" />
-     * </deprecates>
-     */
-    public void setAliasDeprecates(AliasDeprecates aliasDeprecates) {
-        this.aliasDeprecates = aliasDeprecates;
-    }
-
-    /**
-     *
-     * @param map
-     */
-    public void setLocalesMap(Map<String, String> map) {
-        localesMap = map;
-    }
-
-    public void setIncludedLocales(Set<String> set) {
-        includedLocales = set;
-    }
-
-    /**
-     * Sets the list of objects that contain information in
-     * include and exclude elements
-     *
-     * <include xpath="//ldml/.* /dateTimeElements/.*" draft=".*"/>
-     * <exclude xpath="//ldml/.* /language.*" preferAlt="proposed" draft=".*"/>
-     *
-     * @param list
-     */
-    public void setPathList(List<Task> list) {
-        pathList = list;
-    }
-
-    /**
-     * Set the fallback override list
-     */
-    public void setOverrideFallbackList(List<Paths> list) {
-        // overrideFallbackList = list;
-    }
-
-    public void setSplitInfos(List<SplitInfo> infos) {
-        this.splitInfos = Collections.unmodifiableList(infos);
-    }
-
-    protected Node mergeOverrideFallbackNodes(Node main, String locale) {
-        // for (int i = 0; i < overrideFallbackList.size(); i++) {
-        // CLDRBuild.Paths path = overrideFallbackList.get(i);
-        // if (CLDRBuild.matchesLocale(path.locales, locale)){
-        // //TODO write the merging algorithm
-        // }
-        // }
-        return main;
-    }
-
-    /**
-     * Computes the convertible xpaths by walking through the xpathList given and applying the rules
-     * in children of <path> elements.
-     *
-     * @param xpathList
-     *            A sorted list of all xpaths for the current run
-     * @param localeName
-     *            The name of locale being processed
-     * @return an ArrayList of the computed convertible xpaths
-     */
-    protected List<String> computeConvertibleXPaths(
-        List<String> xpathList, boolean exemplarsContainA_Z, String localeName,
-        String supplementalDir) {
-        /*
-         * Assumptions:
-         * 1. Vetted nodes do not have draft attribute
-         * 2. Nodes with draft attribute set and alt atrribute not set do not have a vetted
-         * counterpart
-         * 3. Nodes with alt attribute may or may not have a draft attribute
-         * 4. If no draft field is set in the preferences object assume vetted node is requested
-         */
-
-        // fast path
-        String draft = getLocalesMap() == null ? null : getLocalesMap().get(localeName + ".xml");
-        if (draft != null) {
-            for (int i = 0; i < xpathList.size(); i++) {
-                XPathParts parts = XPathParts.getFrozenInstance(xpathList.get(i));
-                Map<String, String> attr = parts.getAttributes(parts.size() - 1);
-                String draftVal = attr.get(LDMLConstants.DRAFT);
-                String altVal = attr.get(LDMLConstants.ALT);
-                if (draftVal != null && !draftVal.matches(draft)) {
-                    xpathList.remove(i);
-                }
-                // remove xpaths with alt attribute set
-                if (altVal != null) {
-                    xpathList.remove(i);
-                }
-            }
-            return xpathList;
-        }
-
-        if (pathList == null) {
-            // include everything!
-            return xpathList;
-        }
-
-        ArrayList<String> myXPathList = new ArrayList<String>(xpathList.size());
-        StandardCodes sc = StandardCodes.make();
-        // Instantiate CoverageInfo outside the loop
-        CoverageInfo covInfo = CLDRConfig.getInstance().getCoverageInfo();
-        // iterator of xpaths of the current CLDR file being processed
-        // this map only contains xpaths of the leaf nodes
-        for (int i = 0; i < xpathList.size(); i++) {
-            String xpath = xpathList.get(i);
-            XPathParts parts = XPathParts.getFrozenInstance(xpath);
-            Map<String, String> attr = parts.getAttributes(parts.size() - 1);
-
-            boolean include = false;
-
-            for (Task obj : pathList) {
-                if (obj instanceof CLDRBuild.CoverageLevel) {
-                    CLDRBuild.CoverageLevel level = (CLDRBuild.CoverageLevel) obj;
-                    if (level.locales != null) {
-                        List<String> localeList = Arrays.asList(level.locales.split("\\s+"));
-                        if (CLDRBuild.matchesLocale(localeList, localeName) == false) {
-                            continue;
-                        }
-                    }
-
-                    // process further only if the current locale is part of the given group and org
-                    if (level.group != null
-                        && !sc.isLocaleInGroup(localeName, level.group, level.org)) {
-                        continue;
-                    }
-
-                    Level cv = Level.get(level.level);
-                    // only include the xpaths that have the coverage level at least the coverage
-                    // level specified by the locale
-                    if (covInfo.getCoverageLevel(xpath, localeName).compareTo(cv) <= 0) {
-                        String draftVal = attr.get(LDMLConstants.DRAFT);
-                        if (level.draft != null) {
-                            if (draftVal == null
-                                && (level.draft.equals("false") || level.draft.equals(".*"))) {
-                                include = true;
-                            } else if (draftVal != null && draftVal.matches(level.draft)) {
-                                include = true;
-                            } else {
-                                include = false;
-                            }
-                        } else {
-                            if (draftVal == null) {
-                                include = true;
-                            }
-                        }
-                    }
-                } else if (obj instanceof CLDRBuild.Exclude) {
-                    CLDRBuild.Exclude exc = (CLDRBuild.Exclude) obj;
-                    // fast path if locale attribute is set
-                    if (exc.locales != null
-                        && CLDRBuild.matchesLocale(exc.locales, localeName) == false) {
-                        continue;
-                    }
-                    if (exc.xpath != null && xpath.matches(exc.xpath)) {
-                        /*
-                         * Now starts struggle for figuring out which xpaths should be excluded
-                         * The following cases need to be handled:
-                         * 1. <exclude xpath="//ldml/localeDisplayNames/languages/.*" draft="false">
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='true'] then
-                         * include = true
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en'] then
-                         * include = false
-                         * 2. <exclude xpath="//ldml/localeDisplayNames/languages/.*" draft="true">
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='true'] then
-                         * include = false
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='test'] then
-                         * include = true
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en'] then
-                         * include = true
-                         * 3. <exclude xpath="//ldml/localeDisplayNames/languages/.*" draft=".*">
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='true']
-                         * or xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='test']
-                         * or xp is //ldml/localeDisplayNames/languages/language[@type='en'] then
-                         * include = false
-                         * 4. <exclude xpath="//ldml/localeDisplayNames/languages/.*" draft="false" preferAlt='true'>
-                         * if xp of //ldml/localeDisplayNames/languages/language[@type='en' alt='.*'] exists then
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='true']
-                         * or xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='test']
-                         * or xp is //ldml/localeDisplayNames/languages/language[@type='en'] then
-                         * include = true
-                         * else
-                         * apply rules for processing draft and alt attribute together.
-                         * else
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en'] then
-                         * include = false
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='test'] then
-                         * include = true
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='true'] then
-                         * include = true
-                         */
-                        String draftVal = attr.get(LDMLConstants.DRAFT);
-                        String altVal = attr.get(LDMLConstants.ALT);
-                        boolean altExc = false, draftExc = false;
-                        if (exc.alt == null && altVal == null) {
-                            altExc = true;
-                        } else if (exc.alt == null && altVal != null) {
-                            altExc = true;
-                        } else if (exc.alt != null && altVal == null) {
-                            altExc = false;
-                        } else {
-                            if (altVal.matches(exc.alt)) {
-                                altExc = true;
-                            }
-                        }
-                        if (exc.draft == null && draftVal == null) {
-                            draftExc = true;
-                        } else if (exc.draft != null && draftVal == null) {
-                            if ((exc.draft.equals("false") || exc.draft.equals(".*"))) {
-                                draftExc = true;
-                            }
-                        } else if (exc.draft == null && draftVal != null) {
-                            draftExc = false;
-                        } else {
-                            if (draftVal.matches(exc.draft)) {
-                                draftExc = true;
-                            }
-                        }
-                        if (altExc == true && draftExc == true) {
-                            include = false;
-                        }
-                    }
-                } else if (obj instanceof CLDRBuild.Include) {
-                    CLDRBuild.Include inc = (CLDRBuild.Include) obj;
-                    // fast path if locale attribute is set
-                    if (inc.locales != null
-                        && CLDRBuild.matchesLocale(inc.locales, localeName) == false) {
-                        continue;
-                    }
-                    if (inc.xpath != null && xpath.matches(inc.xpath)) {
-                        /*
-                         * The following cases need to be handled:
-                         * 1. <include xpath="//ldml/localeDisplayNames/languages/.*" draft="false">
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='true'] then
-                         * include = false
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en'] then
-                         * include = true
-                         * 2. <include xpath="//ldml/localeDisplayNames/languages/.*" draft="true">
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='true'] then
-                         * include = true
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='test'] then
-                         * include = false
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en'] then
-                         * include = false
-                         * 3. <include xpath="//ldml/localeDisplayNames/languages/.*" draft=".*">
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='true']
-                         * or xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='test']
-                         * or xp is //ldml/localeDisplayNames/languages/language[@type='en'] then
-                         * include = true
-                         * 4. <include xpath="//ldml/localeDisplayNames/languages/.*" draft="false" preferAlt='true'>
-                         * if xp of //ldml/localeDisplayNames/languages/language[@type='en' alt='.*'] exists then
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='true']
-                         * or xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='test']
-                         * or xp is //ldml/localeDisplayNames/languages/language[@type='en'] then
-                         * include = false
-                         * else
-                         * apply rules for processing draft and alt attribute together.
-                         * else
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en'] then
-                         * include = true
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='test'] then
-                         * include = false
-                         * if xp is //ldml/localeDisplayNames/languages/language[@type='en' and draft='true'] then
-                         * include = false
-                         */
-                        String draftVal = attr.get(LDMLConstants.DRAFT);
-                        String altVal = attr.get(LDMLConstants.ALT);
-                        boolean altInc = false;
-                        if (inc.alt == null && altVal == null) {
-                            altInc = true;
-                        } else if (inc.alt == null && altVal != null) {
-                            altInc = false;
-                        } else if (inc.alt != null && altVal == null) {
-                            // the current xpath does not have the alt attribute set
-                            // since the list is sorted we can be sure that if the
-                            // next xpath matches the current one and there is an alt
-                            // attibute available for this path, that next entry is
-                            // where we should expect to find it.
-                            // now check if next xpath contains alt attribute
-                            if (i + 1 < xpathList.size()) {
-                                String nxp = xpathList.get(i + 1);
-                                XPathParts nparts = XPathParts.getFrozenInstance(nxp);
-                                // make sure the type attribute is the same
-                                if (parts.isLike(nparts)) {
-                                    Map<String, String> nattr = nparts.getAttributes(nparts.size() - 1);
-                                    if (nattr != null) {
-                                        altVal = nattr.get(LDMLConstants.ALT);
-                                        if (altVal != null && altVal.matches(inc.alt)) {
-                                            draftVal = nattr.get(LDMLConstants.DRAFT);
-                                            xpath = nxp;
-                                            i++;
-                                            altInc = true;
-                                        }
-                                    }
-                                }
-                            }
-                        } else {
-                            if (altVal.matches(inc.alt)) {
-                                altInc = true;
-                            }
-                        }
-                        boolean draftInc = false;
-                        if (inc.draft == null && draftVal == null) {
-                            draftInc = true;
-                        } else if (inc.draft != null && draftVal == null) {
-                            if ((inc.draft.equals("false") || inc.draft.equals(".*"))) {
-                                draftInc = true;
-                            }
-                        } else if (inc.draft == null && draftVal != null) {
-                            draftInc = false;
-                        } else {
-                            if (draftVal.matches(inc.draft)) {
-                                draftInc = true;
-                            }
-                        }
-                        if (altInc == true && draftInc == true) {
-                            include = true;
-                        }
-                    }
-                } else {
-                    System.err.println(
-                        "ERROR: computeConvertibleXPath method cannot handle object of type: "
-                            + obj.getClass().toString());
-                }
-            }
-            if (include == true) {
-                myXPathList.add(xpath);
-            }
-        }
-
-        return myXPathList;
-    }
-
-    protected Map<String, String> getLocalesMap() {
-        return localesMap;
-    }
-
-    protected Set<String> getIncludedLocales() {
-        return includedLocales;
-    }
-}
diff --git a/tools/java/org/unicode/cldr/ant/package.html b/tools/java/org/unicode/cldr/ant/package.html
deleted file mode 100644
index 4f44f0d..0000000
--- a/tools/java/org/unicode/cldr/ant/package.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<!--
-Copyright (C) 2004-2007, Unicode, Inc., International Business Machines Corporation, and others.
-For terms of use, see http://www.unicode.org/terms_of_use.html
--->
-</head>
-<body bgcolor="white">
-	<h3>Terms of Use</h3>
-	<pre>* All files Copyright (c) 2004-2007, Unicode Inc, and others.  All Rights Reserved.
-* For terms of use, see <a
-			href="http://unicode.org/copyright.html#Exhibit1">http://unicode.org/copyright.html#Exhibit1</a>
-	</pre>
-	<p>&nbsp;</p>
-</body>
-</html>
diff --git a/tools/java/org/unicode/cldr/draft/Array2D.java b/tools/java/org/unicode/cldr/draft/Array2D.java
index dbd7025..9b4b6a9 100644
--- a/tools/java/org/unicode/cldr/draft/Array2D.java
+++ b/tools/java/org/unicode/cldr/draft/Array2D.java
@@ -4,14 +4,14 @@
 import java.util.ArrayList;
 
 class Array2D<T> {
-    private ArrayList<ArrayList<T>> data = new ArrayList<ArrayList<T>>();
+    private ArrayList<ArrayList<T>> data = new ArrayList<>();
     private int columnSize;
 
     void set(int row, int column, T value) {
         ensureSize(data, row + 1);
         ArrayList<T> rowList = data.get(row);
         if (rowList == null) {
-            data.set(row, rowList = new ArrayList<T>());
+            data.set(row, rowList = new ArrayList<>());
         }
         ensureSize(rowList, column + 1);
         if (columnSize < rowList.size()) {
diff --git a/tools/java/org/unicode/cldr/draft/CharEncoder.java b/tools/java/org/unicode/cldr/draft/CharEncoder.java
index 3f89267..3125375 100644
--- a/tools/java/org/unicode/cldr/draft/CharEncoder.java
+++ b/tools/java/org/unicode/cldr/draft/CharEncoder.java
@@ -1,5 +1,5 @@
 /**
- * 
+ *
  */
 package org.unicode.cldr.draft;
 
@@ -47,7 +47,7 @@
      * the bytes
      * converted, and fill in the destination. In either case, if isVerifyRoundtrip() then check that the roundtrip
      * works.
-     * 
+     *
      * @param codepoint
      * @param destination
      * @param offset
diff --git a/tools/java/org/unicode/cldr/draft/CharacterListCompressor.java b/tools/java/org/unicode/cldr/draft/CharacterListCompressor.java
index 10c7533..59a1cfb 100644
--- a/tools/java/org/unicode/cldr/draft/CharacterListCompressor.java
+++ b/tools/java/org/unicode/cldr/draft/CharacterListCompressor.java
@@ -14,13 +14,13 @@
 /**
  * Compresses list of Unicode character ranges given as starting and ending char
  * into a Base88 string.
- * 
+ *
  * Compression usage:
  * String encodedStr = base88EncodeList(List<Interval>);
- * 
+ *
  * Decompression usage:
  * List<Interval> decodedStrList = base88DecodeList(encodedStr);
- * 
+ *
  * Interval has two integers - first, last - to represent the range.
  */
 
@@ -35,6 +35,7 @@
             this.last = last;
         }
 
+        @Override
         public String toString() {
             return "«" + first + "-" + last + "»";
         }
@@ -54,7 +55,7 @@
 
     public static List<Integer> unicode2Base88(int code) {
 
-        List<Integer> list = new ArrayList<Integer>();
+        List<Integer> list = new ArrayList<>();
         int rem = code % 88;
         list.add(rem);
         code = code / 88;
@@ -103,7 +104,7 @@
         List<Integer> list = str2list(str);
 
         int metawindowsize = 8;
-        List<List<Integer>> result = new ArrayList<List<Integer>>();
+        List<List<Integer>> result = new ArrayList<>();
         int i = 0;
 
         while (i < list.size()) {
@@ -133,14 +134,14 @@
     }
 
     public static void addPair(List<List<Integer>> pairs, int value, int type) {
-        List<Integer> pair = new ArrayList<Integer>();
+        List<Integer> pair = new ArrayList<>();
         pair.add(value);
         pair.add(type);
         pairs.add(pair);
     }
 
     public static String encodeValueTypePairs2Base88(List<List<Integer>> pairs) {
-        List<Integer> result = new ArrayList<Integer>();
+        List<Integer> result = new ArrayList<>();
         for (int i = 0; i < pairs.size(); i++) {
             List<Integer> pair = pairs.get(i);
             result.addAll(compressPair2Base88(pair));
@@ -161,7 +162,7 @@
     }
 
     public static List<Integer> str2list(String str) {
-        List<Integer> list = new ArrayList<Integer>();
+        List<Integer> list = new ArrayList<>();
         for (int i = 0; i < str.length(); i++) {
             char ch = str.charAt(i);
             int code = ascii.indexOf(ch);
@@ -189,7 +190,7 @@
 
     // Value Type pairs -- Str Range List
     public static List<List<Integer>> getValueTypePairsFromStrRangeList(List<Interval> ilist) {
-        List<List<Integer>> result = new ArrayList<List<Integer>>();
+        List<List<Integer>> result = new ArrayList<>();
         int lastCode = 0;
 
         for (int i = 0; i < ilist.size(); i++) {
@@ -225,7 +226,7 @@
     }
 
     public static List<Interval> getStrRangeListFromValueTypePairs(List<List<Integer>> pairs) {
-        ArrayList<Interval> result = new ArrayList<Interval>();
+        ArrayList<Interval> result = new ArrayList<>();
 
         int lastCode = 0;
         for (int i = 0; i < pairs.size(); i++) {
@@ -258,7 +259,7 @@
     // Str Range List -- Range Str
 
     public static List<Interval> getStrRangeListFromRangeStr(String str) {
-        ArrayList<Interval> result = new ArrayList<Interval>();
+        ArrayList<Interval> result = new ArrayList<>();
         final UCharacterIterator it = UCharacterIterator.getInstance(str);
 
         int first;
diff --git a/tools/java/org/unicode/cldr/draft/CodePoints.java b/tools/java/org/unicode/cldr/draft/CodePoints.java
index 05cf6a3..1f324b6 100644
--- a/tools/java/org/unicode/cldr/draft/CodePoints.java
+++ b/tools/java/org/unicode/cldr/draft/CodePoints.java
@@ -2,7 +2,7 @@
 
 /**
  * Alternate way to iterate through code points
- * 
+ *
  * @author markdavis
  */
 public final class CodePoints {
@@ -16,7 +16,7 @@
 
     /**
      * Set up the iterator.
-     * 
+     *
      * @param s
      */
     public CodePoints(CharSequence s) {
@@ -39,7 +39,7 @@
 
     /**
      * Get the next code point. False if at end of string. After successful next(), the codePoint field has the value.
-     * 
+     *
      * @return
      */
     public boolean next() {
@@ -61,20 +61,21 @@
 
     /**
      * After calling next(), if it comes back true, this contains the code point; if not, it has U+FFFF.
-     * 
+     *
      * @return
      */
     public int getCodePoint() {
         return codePoint;
     }
 
+    @Override
     public String toString() {
         return buffer.subSequence(0, position) + "|||" + buffer.subSequence(position, buffer.length());
     }
 
     /**
      * When iterating over full strings, this method is the fastest (as long as the string is not huge).
-     * 
+     *
      * @param s
      * @return
      */
diff --git a/tools/java/org/unicode/cldr/draft/Compacter.java b/tools/java/org/unicode/cldr/draft/Compacter.java
index baf79f2..2f1fb6d 100644
--- a/tools/java/org/unicode/cldr/draft/Compacter.java
+++ b/tools/java/org/unicode/cldr/draft/Compacter.java
@@ -58,7 +58,7 @@
      */
     public static List<String> decodeString(String encodedString) {
         List<Interval> intermediate = CharacterListCompressor.base88DecodeList(encodedString);
-        List<String> result = new ArrayList<String>();
+        List<String> result = new ArrayList<>();
         for (Interval interval : intermediate) {
             for (int i = interval.first; i <= interval.last; ++i) {
                 result.add(UTF16.valueOf(i));
@@ -68,7 +68,7 @@
     }
 
     private static List<Interval> codePointsToIntervals(Collection<String> set2) {
-        List<Interval> result = new ArrayList<Interval>();
+        List<Interval> result = new ArrayList<>();
         int first = -1;
         int last = -1;
         for (String item : set2) {
@@ -149,7 +149,7 @@
         if (Compacter.useCibus) {
             return decodeString(in);
         }
-        List<String> result = new ArrayList<String>();
+        List<String> result = new ArrayList<>();
         int cp;
         int first = 0;
         for (int i = 0; i < in.length(); i += Character.charCount(cp)) {
diff --git a/tools/java/org/unicode/cldr/draft/CompoundTransform.java b/tools/java/org/unicode/cldr/draft/CompoundTransform.java
index 19b736d..d30c10a 100644
--- a/tools/java/org/unicode/cldr/draft/CompoundTransform.java
+++ b/tools/java/org/unicode/cldr/draft/CompoundTransform.java
@@ -7,7 +7,7 @@
 
 /**
  * Immutable class that does a compound transform
- * 
+ *
  * @author markdavis
  */
 
@@ -15,9 +15,10 @@
     private final List<StringTransform> transforms;
 
     public CompoundTransform(List<StringTransform> transforms) {
-        this.transforms = new ArrayList<StringTransform>(transforms);
+        this.transforms = new ArrayList<>(transforms);
     }
 
+    @Override
     public String transform(String source) {
         for (int i = 0; i < transforms.size(); ++i) {
             source = transforms.get(i).transform(source);
@@ -25,6 +26,7 @@
         return source;
     }
 
+    @Override
     public String toString() {
         StringBuilder result = new StringBuilder();
         for (int i = 0; i < transforms.size(); ++i) {
diff --git a/tools/java/org/unicode/cldr/draft/DraftUtils.java b/tools/java/org/unicode/cldr/draft/DraftUtils.java
deleted file mode 100644
index 60cdae4..0000000
--- a/tools/java/org/unicode/cldr/draft/DraftUtils.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.unicode.cldr.draft;
-
-import org.unicode.cldr.util.CLDRPaths;
-import org.unicode.cldr.util.CldrUtility;
-
-/**
- * Stuff used by the 'draft' class that doesn't belong in CLDR core.
- * @author srl
- *
- */
-public class DraftUtils {
-
-    /**
-     * This actually refers into the unicodetools project.
-     */
-    public static final String UCD_DIRECTORY = CldrUtility.getPath(CLDRPaths.SVN_DIRECTORY, "unicodetools/data/ucd/9.0.0-Update");
-
-}
diff --git a/tools/java/org/unicode/cldr/draft/EnumLookup.java b/tools/java/org/unicode/cldr/draft/EnumLookup.java
index 64aa912..ccf5d61 100644
--- a/tools/java/org/unicode/cldr/draft/EnumLookup.java
+++ b/tools/java/org/unicode/cldr/draft/EnumLookup.java
@@ -10,7 +10,7 @@
 
 public class EnumLookup<T extends Enum<?>> {
     private final String name;
-    private final Map<String, T> map = new HashMap<String, T>();
+    private final Map<String, T> map = new HashMap<>();
     private Transform<String, String> transform;
 
     public static <T extends Enum<?>> EnumLookup<T> of(Class<T> className) {
@@ -20,7 +20,7 @@
     @SuppressWarnings("unchecked")
     public static <T extends Enum<?>> EnumLookup<T> of(Class<T> className, Transform<String, String> t, String from,
         T to, Object... extras) {
-        Map<String, T> newExtras = new HashMap<String, T>();
+        Map<String, T> newExtras = new HashMap<>();
         newExtras.put(from, to);
         for (int i = 0; i < extras.length; i += 2) {
             newExtras.put(extras[i].toString(), (T) extras[i + 1]);
@@ -32,7 +32,7 @@
         Map<String, T> extras) {
         String name_ = className.getName();
         int lastDot = name_.lastIndexOf('.');
-        EnumLookup<T> result = new EnumLookup<T>(name_.substring(lastDot + 1));
+        EnumLookup<T> result = new EnumLookup<>(name_.substring(lastDot + 1));
 
         try {
             result.transform = t = t == null ? CLEAN : t;
diff --git a/tools/java/org/unicode/cldr/draft/ExemplarInfo.java b/tools/java/org/unicode/cldr/draft/ExemplarInfo.java
index 0e5fe79..c93506a 100644
--- a/tools/java/org/unicode/cldr/draft/ExemplarInfo.java
+++ b/tools/java/org/unicode/cldr/draft/ExemplarInfo.java
@@ -26,7 +26,7 @@
 import com.ibm.icu.util.ULocale;
 
 /**
- * 
+ *
  */
 
 public class ExemplarInfo {
@@ -46,7 +46,7 @@
 
     private static UnicodeSetPrettyPrinter pp = new UnicodeSetPrettyPrinter();
 
-    private static Map<String, ExemplarInfo> languageToExemplars = new TreeMap<String, ExemplarInfo>();
+    private static Map<String, ExemplarInfo> languageToExemplars = new TreeMap<>();
     private static UnicodeSet az = new UnicodeSet("[a-z]").freeze();
     static {
 
@@ -124,7 +124,7 @@
     UnicodeSet auxiliariesX;
     UnicodeSet exemplarScripts;
     UnicodeSet auxiliaryScripts;
-    UnicodeMap<String> educationLevels = new UnicodeMap<String>();
+    UnicodeMap<String> educationLevels = new UnicodeMap<>();
 
     static Factory cldrFactory = Factory.make(CLDRPaths.MAIN_DIRECTORY, ".*");
 
@@ -327,7 +327,7 @@
     }
 
     public static void main(String[] args) {
-        Set<String> missingExemplars = new TreeSet<String>();
+        Set<String> missingExemplars = new TreeSet<>();
         System.out.println(Charset.availableCharsets());
 
         System.out.println(ExemplarInfo.make("ja", missingExemplars).getEducationLevel("\u4e00"));
diff --git a/tools/java/org/unicode/cldr/draft/ExtractCountItems.java b/tools/java/org/unicode/cldr/draft/ExtractCountItems.java
index 9377b5e..ffa58d1 100644
--- a/tools/java/org/unicode/cldr/draft/ExtractCountItems.java
+++ b/tools/java/org/unicode/cldr/draft/ExtractCountItems.java
@@ -32,7 +32,7 @@
     Factory factory = testInfo.getCldrFactory();
 
     static class SampleData {
-        EnumMap<Count, String> countToString = new EnumMap<Count, String>(Count.class);
+        EnumMap<Count, String> countToString = new EnumMap<>(Count.class);
         Relation<String, Count> stringToCount = Relation.of(new HashMap<String, Set<Count>>(), HashSet.class);
         String basePath;
 
@@ -46,6 +46,7 @@
             return stringToCount.size();
         }
 
+        @Override
         public String toString() {
             return countToString.toString();
         }
@@ -55,7 +56,7 @@
         }
     }
 
-    Map<String, SampleData> samples = new LinkedHashMap<String, SampleData>();
+    Map<String, SampleData> samples = new LinkedHashMap<>();
 
     public static void main(String[] args) {
 
@@ -63,8 +64,8 @@
     }
 
     void gatherData() {
-        Set<String> singletonLanguages = new LinkedHashSet<String>();
-        Map<String, Map<String, SampleData>> defectiveLocales = new LinkedHashMap<String, Map<String, SampleData>>();
+        Set<String> singletonLanguages = new LinkedHashSet<>();
+        Map<String, Map<String, SampleData>> defectiveLocales = new LinkedHashMap<>();
 
         for (String locale : factory.getAvailableLanguages()) {
             Map<String, Level> locale_status = StandardCodes.make().getLocaleToLevel(Organization.google);
@@ -87,7 +88,7 @@
             }
 
             CLDRFile cldr = factory.make(locale, true);
-            Map<String, SampleData> data = new LinkedHashMap<String, SampleData>();
+            Map<String, SampleData> data = new LinkedHashMap<>();
             SampleData sampleData = getSamples(cldr, keywordCount, "//ldml/units/unit", data);
             if (sampleData == null) {
                 // try currencies
@@ -115,13 +116,13 @@
             for (String s : keywords) {
                 realKeywords.add(Count.valueOf(s));
             }
-            Set<Pair<Count, Count>> missingPairs = new HashSet<Pair<Count, Count>>();
+            Set<Pair<Count, Count>> missingPairs = new HashSet<>();
             for (Count i : realKeywords) {
                 for (Count j : realKeywords) {
                     if (i.compareTo(j) >= 0) {
                         continue;
                     }
-                    missingPairs.add(new Pair<Count, Count>(i, j));
+                    missingPairs.add(new Pair<>(i, j));
                 }
             }
             showMinimalPairs(missingPairs, entry.getValue());
@@ -158,7 +159,7 @@
             }
             String value = cldr.getStringValue(path).toLowerCase(Locale.ENGLISH);
             // get the path without the count = basepath
-            XPathParts parts = XPathParts.getInstance(path); // not frozen, setAttribute
+            XPathParts parts = XPathParts.getFrozenInstance(path).cloneAsThawed(); // not frozen, setAttribute
             Count count = PluralInfo.Count.valueOf(parts.getAttributeValue(-1, "count"));
             parts.setAttribute(-1, "count", null);
             String basePath = parts.toString();
diff --git a/tools/java/org/unicode/cldr/draft/FileUtilities.java b/tools/java/org/unicode/cldr/draft/FileUtilities.java
index 7345857..2da3047 100644
--- a/tools/java/org/unicode/cldr/draft/FileUtilities.java
+++ b/tools/java/org/unicode/cldr/draft/FileUtilities.java
@@ -1,5 +1,7 @@
 package org.unicode.cldr.draft;
 
+import static org.unicode.cldr.util.PathUtilities.getNormalizedPathString;
+
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.File;
@@ -19,6 +21,7 @@
 import java.util.regex.Pattern;
 
 import org.unicode.cldr.util.CldrUtility;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.PatternCache;
 import org.unicode.cldr.util.With;
 import org.unicode.cldr.util.With.SimpleIterator;
@@ -48,7 +51,7 @@
         File file = dir.length() == 0 ? new File(filename) : new File(dir, filename);
         if (SHOW_FILES && log != null) {
             log.println("Opening File: "
-                + file.getCanonicalPath());
+                + getNormalizedPathString(file));
         }
         return new BufferedReader(
             new InputStreamReader(
@@ -64,8 +67,7 @@
     public static PrintWriter openWriter(String dir, String filename, String encoding) throws IOException {
         File file = new File(dir, filename);
         if (SHOW_FILES && log != null) {
-            log.println("Creating File: "
-                + file.getCanonicalPath());
+            log.println("Creating File: " + getNormalizedPathString(file));
         }
         String parentName = file.getParent();
         if (parentName != null) {
@@ -85,6 +87,7 @@
 
         protected abstract boolean handleLine(int lineCount, int start, int end, String[] items);
 
+        @Override
         protected void handleEnd() {
         }
 
@@ -124,7 +127,7 @@
 
         /**
          * Return false to abort
-         * 
+         *
          * @param lineCount
          * @param line
          * @return
@@ -204,7 +207,7 @@
                 in.close();
                 handleEnd();
             } catch (Exception e) {
-                throw (RuntimeException) new ICUUncheckedIOException(lineCount + ":\t" + line, e);
+                throw new ICUUncheckedIOException(lineCount + ":\t" + line, e);
             }
             return this;
         }
@@ -241,15 +244,15 @@
             return bufferedReader;
         } catch (Exception e) {
             String className = class1 == null ? null : class1.getCanonicalName();
-            String canonicalName = null;
+            String normalizedPath = null;
             try {
                 String relativeFileName = getRelativeFileName(class1, "../util/");
-                canonicalName = new File(relativeFileName).getCanonicalPath();
+                normalizedPath = getNormalizedPathString(relativeFileName);
             } catch (Exception e1) {
                 throw new ICUUncheckedIOException("Couldn't open file: " + file + "; relative to class: "
                     + className, e);
             }
-            throw new ICUUncheckedIOException("Couldn't open file " + file + "; in path " + canonicalName + "; relative to class: "
+            throw new ICUUncheckedIOException("Couldn't open file " + file + "; in path " + normalizedPath + "; relative to class: "
                 + className, e);
         }
     }
@@ -285,7 +288,7 @@
         // each item is of the form abc...
         // or "..." (required if a comma or quote is contained)
         // " in a field is represented by ""
-        List<String> result = new ArrayList<String>();
+        List<String> result = new ArrayList<>();
         StringBuilder item = new StringBuilder();
         boolean inQuote = false;
         for (int i = 0; i < line.length(); ++i) {
@@ -442,9 +445,9 @@
      * for (String s : FileUtilities.in(directory,name)) {
      * ...
      * }
-     * 
+     *
      * @author markdavis
-     * 
+     *
      */
     public static Iterable<String> in(Class<?> class1, String file) {
         return With.in(new FileLines(openFile(class1, file, UTF8)));
@@ -455,9 +458,9 @@
      * for (String s : FileUtilities.in(directory,name)) {
      * ...
      * }
-     * 
+     *
      * @author markdavis
-     * 
+     *
      */
     public static Iterable<String> in(Class<?> class1, String file, Charset charset) {
         return With.in(new FileLines(openFile(class1, file, charset)));
@@ -468,9 +471,9 @@
      * for (String s : FileUtilities.in(directory,name)) {
      * ...
      * }
-     * 
+     *
      * @author markdavis
-     * 
+     *
      */
     public static Iterable<String> in(String directory, String file) {
         return With.in(new FileLines(openFile(directory, file, UTF8)));
@@ -481,9 +484,9 @@
      * for (String s : FileUtilities.in(directory,name)) {
      * ...
      * }
-     * 
+     *
      * @author markdavis
-     * 
+     *
      */
     public static Iterable<String> in(BufferedReader reader) {
         return With.in(new FileLines(reader));
@@ -494,9 +497,9 @@
      * for (String s : FileUtilities.in(directory,name)) {
      * ...
      * }
-     * 
+     *
      * @author markdavis
-     * 
+     *
      */
     public static Iterable<String> in(String directory, String file, Charset charset) {
         return With.in(new FileLines(openFile(directory, file, charset)));
@@ -546,7 +549,7 @@
     public interface LineHandler {
         /**
          * Return false if line was skipped
-         * 
+         *
          * @param line
          * @return
          */
diff --git a/tools/java/org/unicode/cldr/draft/FilteredTransform.java b/tools/java/org/unicode/cldr/draft/FilteredTransform.java
index 45ab8fe..9e88425 100644
--- a/tools/java/org/unicode/cldr/draft/FilteredTransform.java
+++ b/tools/java/org/unicode/cldr/draft/FilteredTransform.java
@@ -4,9 +4,9 @@
 
 /**
  * Immutable filtered transform
- * 
+ *
  * @author markdavis
- * 
+ *
  */
 public abstract class FilteredTransform implements StringTransform {
     private final StringTransform transform;
@@ -15,6 +15,7 @@
         transform = result;
     }
 
+    @Override
     public String transform(String source) {
         int last = 0;
         // TODO optimize later
@@ -38,6 +39,7 @@
     /**
      * Subclasses will modify
      */
+    @Override
     public String toString() {
         return transform.toString();
     }
diff --git a/tools/java/org/unicode/cldr/draft/GapString.java b/tools/java/org/unicode/cldr/draft/GapString.java
index 2277faa..fd818a2 100644
--- a/tools/java/org/unicode/cldr/draft/GapString.java
+++ b/tools/java/org/unicode/cldr/draft/GapString.java
@@ -6,7 +6,7 @@
  * that such changes are generally not random; instead they tend to happen more often in either nearby or successive
  * locations.
  * The structure of the class keeps 2 buffers; one for the front and one for the end.
- * 
+ *
  * @author markdavis
  */
 // TODO investigate whether keeping the future in reverse order is the right approach in terms of performance.
@@ -24,6 +24,7 @@
         insert(0, s);
     }
 
+    @Override
     public char charAt(int index) {
         try {
             return buffer[index < pastLength ? index : index + gapLength];
@@ -32,15 +33,18 @@
         }
     }
 
+    @Override
     public int length() {
         return buffer.length - gapLength;
     }
 
+    @Override
     public CharSequence subSequence(int start, int end) {
         // TODO optimize this
         return toString().subSequence(start, end);
     }
 
+    @Override
     public String toString() {
         StringBuilder b = new StringBuilder();
         // check to see whether second argument is length or count
@@ -210,6 +214,7 @@
         return this;
     }
 
+    @Override
     public boolean equals(Object other) {
         try {
             return equals((CharSequence) other);
@@ -239,6 +244,7 @@
         return true;
     }
 
+    @Override
     public int hashCode() {
         int result = 0;
         int i = 0;
diff --git a/tools/java/org/unicode/cldr/draft/GenerateLanguageData.java b/tools/java/org/unicode/cldr/draft/GenerateLanguageData.java
index a333795..c039292 100644
--- a/tools/java/org/unicode/cldr/draft/GenerateLanguageData.java
+++ b/tools/java/org/unicode/cldr/draft/GenerateLanguageData.java
@@ -19,7 +19,7 @@
 import org.unicode.cldr.util.SupplementalDataInfo.OfficialStatus;
 import org.unicode.cldr.util.SupplementalDataInfo.PopulationData;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.text.NumberFormat;
 
 public class GenerateLanguageData {
@@ -39,10 +39,10 @@
 
     private void run() throws IOException {
         try (PrintWriter out = FileUtilities.openUTF8Writer(CLDRPaths.GEN_DIRECTORY + "langData/", "generatedLanguageData.txt")) {
-            Counter2<String> langToPopulation = new Counter2<String>();
+            Counter2<String> langToPopulation = new Counter2<>();
             // Counter2<String> langToGDP = new Counter2<String>();
             LanguageTagParser ltp = new LanguageTagParser();
-            Map<String, String> languageNameToCode = new TreeMap<String, String>();
+            Map<String, String> languageNameToCode = new TreeMap<>();
             for (String languageCode : info.getLanguages()) {
                 languageNameToCode.put(english.getName(languageCode), languageCode);
             }
@@ -131,8 +131,8 @@
 
                 String lang = entry.getKey();
                 out.println(fixLang(lang)
-                    + "\t" + (top.size() < 6 ? CollectionUtilities.join(top, ", ")
-                        : CollectionUtilities.join(top.subList(0, 5), ", ") + ", …"));
+                    + "\t" + (top.size() < 6 ? Joiner.on(", ").join(top)
+                        : Joiner.on(", ").join(top.subList(0, 5)) + ", …"));
                 missing.remove(lang);
             }
             for (String lang : missing) {
diff --git a/tools/java/org/unicode/cldr/draft/IdentifierInfo.java b/tools/java/org/unicode/cldr/draft/IdentifierInfo.java
index 627163d..587b645 100644
--- a/tools/java/org/unicode/cldr/draft/IdentifierInfo.java
+++ b/tools/java/org/unicode/cldr/draft/IdentifierInfo.java
@@ -26,7 +26,7 @@
  * <li>call getRestrictionLevel to see what the UTS36 restriction level is. (This has some proposed changes from the
  * current one, however.)
  * </ol>
- * 
+ *
  * @author markdavis
  * @internal
  */
@@ -63,7 +63,7 @@
 
     private String identifier;
     private final BitSet requiredScripts = new BitSet();
-    private final Set<BitSet> scriptSetSet = new HashSet<BitSet>();
+    private final Set<BitSet> scriptSetSet = new HashSet<>();
     private final BitSet commonAmongAlternates = new BitSet();
     private final UnicodeSet numerics = new UnicodeSet();
     private final UnicodeSet identifierProfile = new UnicodeSet(0, 0x10FFFF);
@@ -149,7 +149,7 @@
 
     public static boolean isMultiScript(String identifier) {
         // Non-optimized code, for simplicity
-        Set<BitSet> setOfScriptSets = new HashSet<BitSet>();
+        Set<BitSet> setOfScriptSets = new HashSet<>();
         BitSet temp = new BitSet();
         int cp;
         for (int i = 0; i < identifier.length(); i += Character.charCount(i)) {
@@ -213,7 +213,7 @@
     }
 
     public Set<BitSet> getAlternates() {
-        Set<BitSet> result = new HashSet<BitSet>();
+        Set<BitSet> result = new HashSet<>();
         for (BitSet item : scriptSetSet) {
             result.add((BitSet) item.clone());
         }
@@ -323,7 +323,7 @@
     }
 
     public static Set<BitSet> parseAlternates(String scriptsSetString) {
-        Set<BitSet> result = new HashSet<BitSet>();
+        Set<BitSet> result = new HashSet<>();
         for (String item : scriptsSetString.trim().split("\\s*;\\s*")) {
             if (!item.isEmpty()) {
                 result.add(parseScripts(item));
@@ -334,7 +334,7 @@
 
     /**
      * Test containment. Should be a method on BitSet...
-     * 
+     *
      * @param container
      * @param containee
      * @return
@@ -350,7 +350,7 @@
 
     /**
      * Sets a number of values at once. Should be on BitSet.
-     * 
+     *
      * @param container
      * @param containee
      * @return
diff --git a/tools/java/org/unicode/cldr/draft/IntDistanceNode.java b/tools/java/org/unicode/cldr/draft/IntDistanceNode.java
index 3cbae27..4aee3ef 100644
--- a/tools/java/org/unicode/cldr/draft/IntDistanceNode.java
+++ b/tools/java/org/unicode/cldr/draft/IntDistanceNode.java
@@ -24,6 +24,7 @@
         this.distanceTable = distanceTable;
     }
 
+    @Override
     public IntDistanceNode.IntDistanceTable getDistanceTable() {
         return distanceTable;
     }
@@ -49,8 +50,8 @@
     }
 
     static class IntDistanceTable extends DistanceTable {
-        private static final IdMakerFull[] ids = { new IdMakerFull<String>("lang", XLocaleDistance.ANY), new IdMakerFull<String>("script", XLocaleDistance.ANY),
-            new IdMakerFull<String>("region", XLocaleDistance.ANY) };
+        private static final IdMakerFull[] ids = { new IdMakerFull<>("lang", XLocaleDistance.ANY), new IdMakerFull<>("script", XLocaleDistance.ANY),
+            new IdMakerFull<>("region", XLocaleDistance.ANY) };
         private static final IdMakerFull<IntDistanceNode.IntDistanceTable> cache = new IdMakerFull<>("table");
 
         private final IdMakerFull<String> id;
@@ -93,7 +94,7 @@
                     distanceNodes[desired][supported] = node;
                 }
             }
-            // now, to make star work, 
+            // now, to make star work,
             // copy all the zero columns/rows down to any null value
             for (int row = 0; row < size; ++row) {
                 for (int column = 0; column < size; ++column) {
@@ -131,7 +132,6 @@
             if (!id.equals(other.id)) {
                 return false;
             }
-            ;
             return Arrays.deepEquals(distanceNodes, other.distanceNodes);
         }
 
diff --git a/tools/java/org/unicode/cldr/draft/Iterables.java b/tools/java/org/unicode/cldr/draft/Iterables.java
index d5f244b..18466e9 100644
--- a/tools/java/org/unicode/cldr/draft/Iterables.java
+++ b/tools/java/org/unicode/cldr/draft/Iterables.java
@@ -9,7 +9,7 @@
 
 public final class Iterables<T> implements Iterable<T>, Iterator<T> {
 
-    private List<Iterator<T>> iterators = new ArrayList<Iterator<T>>();
+    private List<Iterator<T>> iterators = new ArrayList<>();
     private Iterator<T> current = null;
     private int position = 0;
 
@@ -30,11 +30,11 @@
     }
 
     public <S> Iterables<T> and(Transform<S, T> transform, Iterator<S> iteratorsIn) {
-        return and(new TransformIterator<S, T>(transform, iteratorsIn));
+        return and(new TransformIterator<>(transform, iteratorsIn));
     }
 
     public <S> Iterables<T> and(Transform<S, T> transform, Iterable<S> iteratorsIn) {
-        return and(new TransformIterator<S, T>(transform, iteratorsIn.iterator()));
+        return and(new TransformIterator<>(transform, iteratorsIn.iterator()));
     }
 
     public <S> Iterables<T> and(Transform<S, T> transform, S... iteratorsIn) {
@@ -67,10 +67,12 @@
     // return new Iterables<T>().and(iteratorsIn);
     // }
 
+    @Override
     public Iterator<T> iterator() {
         return this;
     }
 
+    @Override
     public boolean hasNext() {
         while (current != null) {
             if (current.hasNext()) {
@@ -86,10 +88,12 @@
         return false;
     }
 
+    @Override
     public T next() {
         return current.next();
     }
 
+    @Override
     public void remove() {
         current.remove();
     }
@@ -104,14 +108,17 @@
             this.transform = transform;
         }
 
+        @Override
         public boolean hasNext() {
             return iterator.hasNext();
         }
 
+        @Override
         public T next() {
             return transform.transform(iterator.next());
         }
 
+        @Override
         public void remove() {
             iterator.remove();
         }
diff --git a/tools/java/org/unicode/cldr/draft/JsonConverter.java b/tools/java/org/unicode/cldr/draft/JsonConverter.java
index 373628e..2ea13b9 100644
--- a/tools/java/org/unicode/cldr/draft/JsonConverter.java
+++ b/tools/java/org/unicode/cldr/draft/JsonConverter.java
@@ -37,9 +37,9 @@
                                                                           // //CldrUtility.MAIN_DIRECTORY;
     private static final String OUT_DIRECTORY = CLDRPaths.GEN_DIRECTORY + "/jason/"; // CldrUtility.MAIN_DIRECTORY;
     private static boolean COMPACT = false;
-    static final Set<String> REPLACING_BASE = !COMPACT ? Collections.EMPTY_SET : new HashSet<String>(
+    static final Set<String> REPLACING_BASE = !COMPACT ? Collections.EMPTY_SET : new HashSet<>(
         Arrays.asList("type id key count".split("\\s")));
-    static final Set<String> EXTRA_DISTINGUISHING = new HashSet<String>(
+    static final Set<String> EXTRA_DISTINGUISHING = new HashSet<>(
         Arrays.asList("locales territory desired supported".split("\\s")));
     static final Relation<String, String> mainInfo = ElementAttributeInfo.getInstance(DtdType.ldml)
         .getElement2Attributes();
@@ -49,7 +49,7 @@
     public static void main(String[] args) throws IOException {
         final String subdirectory = new File(MAIN_DIRECTORY).getName();
         final Factory cldrFactory = Factory.make(MAIN_DIRECTORY, FILES);
-        final Set<String> locales = new TreeSet<String>(cldrFactory.getAvailable());
+        final Set<String> locales = new TreeSet<>(cldrFactory.getAvailable());
         /*
          * TODO: "parts" is always empty, so all the code using it is wasted!
          */
@@ -64,7 +64,7 @@
                 final String xpath = it.next();
                 final String fullXpath = file.getFullXPath(xpath);
                 String value = file.getStringValue(xpath);
-                XPathParts oldParts = XPathParts.getInstance(fullXpath); // not frozen, rewrite can modify
+                XPathParts oldParts = XPathParts.getFrozenInstance(fullXpath).cloneAsThawed(); // not frozen, rewrite can modify
                 if (dtdType == null) {
                     dtdType = DtdType.valueOf(parts.getElement(0));
                 }
@@ -230,6 +230,7 @@
             suffix.append('$').append(attribute).append('=').append(attributeValue);
         }
 
+        @Override
         public String toString() {
             if (suffix == null) {
                 return base;
@@ -309,6 +310,7 @@
             return result.append('"');
         }
 
+        @Override
         public String toString() {
             return print(new StringBuilder(), 0).toString();
         }
@@ -342,12 +344,13 @@
             super(parent);
         }
 
-        private Map<String, Item> map = new LinkedHashMap<String, Item>();
+        private Map<String, Item> map = new LinkedHashMap<>();
 
         public Item get(String element) {
             return map.get(element);
         }
 
+        @Override
         public void put(String element, String value) {
             Item old = map.get(element);
             if (old != null) {
@@ -362,6 +365,7 @@
             map.put(element, new StringItem(value));
         }
 
+        @Override
         public Item makeSubItem(String element, Type ordered) {
             Item result = map.get(element);
             if (result != null) {
@@ -374,6 +378,7 @@
             return result;
         }
 
+        @Override
         public Appendable print(Appendable result, int i) {
             try {
                 if (map.size() == 0) {
@@ -412,7 +417,7 @@
             super(parent);
         }
 
-        private List<Row.R2<String, Item>> list = new ArrayList<Row.R2<String, Item>>();
+        private List<Row.R2<String, Item>> list = new ArrayList<>();
 
         @Override
         public Appendable print(Appendable result, int i) {
@@ -443,12 +448,14 @@
             }
         }
 
+        @Override
         public Item makeSubItem(String element, Type ordered) {
             Item result = create(ordered);
             list.add(Row.of(element, result));
             return result;
         }
 
+        @Override
         public void put(String element, String value) {
             list.add(Row.of(element, (Item) new StringItem(value)));
         }
diff --git a/tools/java/org/unicode/cldr/draft/Keyboard.java b/tools/java/org/unicode/cldr/draft/Keyboard.java
index 5030433..3fde460 100644
--- a/tools/java/org/unicode/cldr/draft/Keyboard.java
+++ b/tools/java/org/unicode/cldr/draft/Keyboard.java
@@ -22,13 +22,13 @@
 import org.unicode.cldr.util.XMLFileReader.SimpleHandler;
 import org.unicode.cldr.util.XPathParts;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.text.UnicodeSet;
 
 /**
  * A first, very rough cut at reading the keyboard data.
  * Every public structure is immutable, eg all returned maps, sets.
- * 
+ *
  * @author markdavis
  */
 public class Keyboard {
@@ -113,7 +113,7 @@
     // }
 
     public static Set<String> getPlatformIDs() {
-        Set<String> results = new LinkedHashSet<String>();
+        Set<String> results = new LinkedHashSet<>();
         File file = new File(BASE);
         for (String f : file.list())
             if (!f.equals("dtd") && !f.startsWith(".") && !f.startsWith("_")) {
@@ -123,7 +123,7 @@
     }
 
     public static Set<String> getKeyboardIDs(String platformId) {
-        Set<String> results = new LinkedHashSet<String>();
+        Set<String> results = new LinkedHashSet<>();
         File base = new File(BASE + platformId + "/");
         for (String f : base.list())
             if (f.endsWith(".xml") && !f.startsWith(".") && !f.startsWith("_")) {
@@ -183,7 +183,7 @@
                 .read(fileName, -1, true);
             return keyboardHandler.getKeyboard();
         } catch (Exception e) {
-            throw new KeyboardException(fileName + "\n" + CollectionUtilities.join(errors, ", "), e);
+            throw new KeyboardException(fileName + "\n" + Joiner.on(", ").join(errors), e);
         }
     }
 
@@ -265,6 +265,7 @@
             return gestures;
         }
 
+        @Override
         public String toString() {
             return "{" + output + "," + transformStatus + ", " + gestures + "}";
         }
@@ -287,6 +288,7 @@
             return iso2output;
         }
 
+        @Override
         public String toString() {
             return "{" + modifiers + "," + iso2output + "}";
         }
@@ -300,7 +302,7 @@
         }
 
         public Map<String, String> getMatch(String prefix) {
-            Map<String, String> results = new LinkedHashMap<String, String>();
+            Map<String, String> results = new LinkedHashMap<>();
             for (Entry<String, String> entry : string2string.entrySet()) {
                 String key = entry.getKey();
                 if (key.startsWith(prefix)) {
@@ -380,8 +382,9 @@
 
     private static class PlatformHandler extends SimpleHandler {
         String id;
-        Map<String, Iso> hardwareMap = new HashMap<String, Iso>();
+        Map<String, Iso> hardwareMap = new HashMap<>();
 
+        @Override
         public void handlePathValue(String path, @SuppressWarnings("unused") String value) {
             XPathParts parts = XPathParts.getFrozenInstance(path);
             // <platform id='android'/>
@@ -394,7 +397,7 @@
                         Iso.valueOf(parts.getAttributeValue(2, "iso")));
                 }
             }
-        };
+        }
 
         public Platform getPlatform() {
             return new Platform(id, hardwareMap);
@@ -410,22 +413,22 @@
 
     private static class KeyboardHandler extends SimpleHandler {
         Set<Exception> errors; //  = new LinkedHashSet<Exception>();
-        Set<String> errors2 = new LinkedHashSet<String>();
+        Set<String> errors2 = new LinkedHashSet<>();
         // doesn't do any error checking for collisions, etc. yet.
         String locale; // TODO
         String version; // TODO
         String platformVersion; // TODO
 
-        Set<String> names = new LinkedHashSet<String>();
+        Set<String> names = new LinkedHashSet<>();
         Fallback fallback = Fallback.BASE;
 
         KeyboardModifierSet keyMapModifiers = null;
-        Map<Iso, Output> iso2output = new EnumMap<Iso, Output>(Iso.class);
-        Set<KeyMap> keyMaps = new LinkedHashSet<KeyMap>();
+        Map<Iso, Output> iso2output = new EnumMap<>(Iso.class);
+        Set<KeyMap> keyMaps = new LinkedHashSet<>();
 
         TransformType currentType = null;
         Map<String, String> currentTransforms = null;
-        Map<TransformType, Transforms> transformMap = new EnumMap<TransformType, Transforms>(TransformType.class);
+        Map<TransformType, Transforms> transformMap = new EnumMap<>(TransformType.class);
 
         LanguageTagParser ltp = new LanguageTagParser();
 
@@ -443,6 +446,7 @@
             return new Keyboard(locale, version, platformVersion, names, fallback, keyMaps, transformMap);
         }
 
+        @Override
         public void handlePathValue(String path, @SuppressWarnings("unused") String value) {
             try {
                 XPathParts parts = XPathParts.getFrozenInstance(path);
@@ -477,7 +481,7 @@
                         if (keyMapModifiers != null) {
                             addToKeyMaps();
                         }
-                        iso2output = new LinkedHashMap<Iso, Output>();
+                        iso2output = new LinkedHashMap<>();
                         keyMapModifiers = newMods;
                     }
                     String isoString = parts.getAttributeValue(2, "iso");
@@ -496,7 +500,7 @@
                             transformMap.put(currentType, new Transforms(currentTransforms));
                         }
                         currentType = type;
-                        currentTransforms = new LinkedHashMap<String, String>();
+                        currentTransforms = new LinkedHashMap<>();
                     }
                     final String from = fixValue(parts.getAttributeValue(2, "from"));
                     final String to = fixValue(parts.getAttributeValue(2, "to"));
@@ -563,7 +567,7 @@
         public Output getOutput(XPathParts parts) {
             String chars = null;
             TransformStatus transformStatus = TransformStatus.DEFAULT;
-            Map<Gesture, List<String>> gestures = new EnumMap<Gesture, List<String>>(Gesture.class);
+            Map<Gesture, List<String>> gestures = new EnumMap<>(Gesture.class);
 
             for (Entry<String, String> attributeAndValue : parts.getAttributes(-1).entrySet()) {
                 String attribute = attributeAndValue.getKey();
@@ -581,7 +585,7 @@
                 } else if (attribute.equals("iso") || attribute.equals("base")) {
                     // ignore, handled above
                 } else {
-                    LinkedHashSet<String> list = new LinkedHashSet<String>();
+                    LinkedHashSet<String> list = new LinkedHashSet<>();
                     for (String item : attributeValue.trim().split(" ")) {
                         final String fixedValue = fixValue(item);
                         if (fixedValue.isEmpty()) {
@@ -591,14 +595,14 @@
                         list.add(fixedValue);
                     }
                     gestures.put(Gesture.fromString(attribute),
-                        Collections.unmodifiableList(new ArrayList<String>(list)));
+                        Collections.unmodifiableList(new ArrayList<>(list)));
                     if (DEBUG) {
                         System.out.println("\tgesture=" + attribute + ";\tto=" + list + ";");
                     }
                 }
             }
             return new Output(chars, gestures, transformStatus);
-        };
+        }
     }
 
     public static class KeyboardException extends RuntimeException {
diff --git a/tools/java/org/unicode/cldr/draft/KeyboardModifierSet.java b/tools/java/org/unicode/cldr/draft/KeyboardModifierSet.java
index 6ca2aee..43f1979 100644
--- a/tools/java/org/unicode/cldr/draft/KeyboardModifierSet.java
+++ b/tools/java/org/unicode/cldr/draft/KeyboardModifierSet.java
@@ -20,21 +20,21 @@
  * This definition can be expanded across multiple combinations. For example {@code optR+caps? cmd+shift} gets
  * transformed into {@code optR+caps, optR,
  * cmd+shiftL, cmd+shiftR, cmd+shiftL+shiftR} .
- * 
+ *
  * <h1>Usage</h1>
  * <p>
  * There is a 1 to 1 relationship between a {@link KeyboardModifierSet} and a particular key map (a mapping from
  * physical keys to their output).
- * 
+ *
  * <pre>
- * {@code 
+ * {@code
  * // Create the set from the XML modifier=".." attribute
- * ModifierSet modifierSet = ModifierSet.parseSet(<modifier=".." value from XML>); 
+ * ModifierSet modifierSet = ModifierSet.parseSet(<modifier=".." value from XML>);
  * // Test if this set is active for a particular input combination provided by the keyboard
  * modifierSet.contains(<some combination to test>);
  * }
  * </pre>
- * 
+ *
  * @author rwainman@google.com (Raymond Wainman)
  */
 public class KeyboardModifierSet {
@@ -45,7 +45,7 @@
         cmd, ctrlL, ctrlR, caps, altL, altR, optL, optR, shiftL, shiftR;
     }
 
-    static final SetComparator<Modifier> SINGLETON_COMPARATOR = new SetComparator<Modifier>();
+    static final SetComparator<Modifier> SINGLETON_COMPARATOR = new SetComparator<>();
 
     /** Initial input string */
     private final String input;
@@ -54,14 +54,14 @@
 
     /**
      * Private constructor. See factory {@link #parseSet} method.
-     * 
+     *
      * @param variants
      *            A set containing all possible variants of the combination
      *            provided in the input string.
      */
     private KeyboardModifierSet(String input, Set<EnumSet<Modifier>> variants) {
         this.input = input;
-        Set<Set<Modifier>> safe = new TreeSet<Set<Modifier>>(SINGLETON_COMPARATOR);
+        Set<Set<Modifier>> safe = new TreeSet<>(SINGLETON_COMPARATOR);
         for (EnumSet<Modifier> item : variants) {
             safe.add(Collections.unmodifiableSet(item));
         }
@@ -70,7 +70,7 @@
 
     /**
      * Return all possible variants for this combination.
-     * 
+     *
      * @return Set containing all possible variants.
      */
     public Set<Set<Modifier>> getVariants() {
@@ -79,7 +79,7 @@
 
     /**
      * Determines if the given combination is valid within this set.
-     * 
+     *
      * @param combination
      *            A combination of Modifier elements.
      * @return True if the combination is valid, false otherwise.
@@ -118,7 +118,7 @@
      * </ul>
      * <p>
      * The '?' symbol appended to some modifiers indicates that this modifier is optional (it can be ON or OFF).
-     * 
+     *
      * @param input
      *            String representing the sets of modifier sets. This string
      *            must match the format defined in the LDML Keyboard Standard.
@@ -133,7 +133,7 @@
         }
 
         String modifierSetInputs[] = input.trim().split(" ");
-        Set<EnumSet<Modifier>> variants = new HashSet<EnumSet<Modifier>>();
+        Set<EnumSet<Modifier>> variants = new HashSet<>();
         for (String modifierSetInput : modifierSetInputs) {
             variants.addAll(parseSingleSet(modifierSetInput));
         }
@@ -146,7 +146,7 @@
      * containing all possible variants for that particular modifier set.
      * <p>
      * For example {@code alt+caps+cmd?} gets expanded into {@code alt+caps+cmd?, alt+caps} .
-     * 
+     *
      * @param input
      *            The input string representing the modifiers. This String must
      *            match the format defined in the LDML Keyboard Standard.
@@ -164,13 +164,13 @@
 
         String modifiers[] = input.trim().split("\\+");
 
-        List<EnumSet<Modifier>> variants = new ArrayList<EnumSet<Modifier>>();
+        List<EnumSet<Modifier>> variants = new ArrayList<>();
         variants.add(EnumSet.noneOf(Modifier.class)); // Add an initial set
                                                       // which is empty
 
         // Trivial case
         if (input.isEmpty()) {
-            return new HashSet<EnumSet<Modifier>>(variants);
+            return new HashSet<>(variants);
         }
 
         for (String modifier : modifiers) {
@@ -183,7 +183,7 @@
                 // Keep a collection of the new variants that need to be added
                 // while iterating over the
                 // existing ones
-                Set<EnumSet<Modifier>> newVariants = new HashSet<EnumSet<Modifier>>();
+                Set<EnumSet<Modifier>> newVariants = new HashSet<>();
                 for (EnumSet<Modifier> variant : variants) {
                     // A parent key gets exploded into {Left, Right, Left+Right}
                     // or {Left, Right, Left+Right,
@@ -228,7 +228,7 @@
                 // Don't care case, make a copy of the existing variants and add
                 // the new key to it.
                 else {
-                    List<EnumSet<Modifier>> newVariants = new ArrayList<EnumSet<Modifier>>();
+                    List<EnumSet<Modifier>> newVariants = new ArrayList<>();
                     for (EnumSet<Modifier> variant : variants) {
                         EnumSet<Modifier> newVariant = EnumSet.copyOf(variant);
                         newVariant.add(modifierElement);
@@ -239,7 +239,7 @@
             }
         }
 
-        return new HashSet<EnumSet<Modifier>>(variants);
+        return new HashSet<>(variants);
     }
 
     /**
@@ -260,7 +260,7 @@
 
         /**
          * Determines if the String passed in is a valid parent key.
-         * 
+         *
          * @param modifier
          *            The modifier string to verify.
          * @return True if it is a parent key, false otherwise.
diff --git a/tools/java/org/unicode/cldr/draft/MainCache.java b/tools/java/org/unicode/cldr/draft/MainCache.java
index 9dd2284..6518bc6 100644
--- a/tools/java/org/unicode/cldr/draft/MainCache.java
+++ b/tools/java/org/unicode/cldr/draft/MainCache.java
@@ -4,13 +4,13 @@
 import java.util.Map;
 
 public abstract class MainCache {
-    private static Map<Class<?>, Map<Object, Object>> cache = new HashMap<Class<?>, Map<Object, Object>>();
+    private static Map<Class<?>, Map<Object, Object>> cache = new HashMap<>();
 
     protected synchronized Object get(Object key) {
         Class<?> classKey = this.getClass();
         Map<Object, Object> submap = cache.get(classKey);
         if (submap == null) {
-            cache.put(classKey, submap = new HashMap<Object, Object>());
+            cache.put(classKey, submap = new HashMap<>());
         }
         Object result = submap.get(key);
         if (result == null) {
diff --git a/tools/java/org/unicode/cldr/draft/Misc.java b/tools/java/org/unicode/cldr/draft/Misc.java
index aa8337e..25c3a41 100644
--- a/tools/java/org/unicode/cldr/draft/Misc.java
+++ b/tools/java/org/unicode/cldr/draft/Misc.java
@@ -26,7 +26,7 @@
 import org.unicode.cldr.util.SupplementalDataInfo.BasicLanguageData;
 import org.unicode.cldr.util.Timer;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
 import com.ibm.icu.lang.UCharacter;
@@ -62,7 +62,7 @@
         String[] locales = "zh en es hi fr ar pt ru id bn ur ja de fil sw pa jv ko tr vi it te mr th fa ta pl lah gu my ms uk zh_Hant kn su ml nl az or ro uz bho ps ha ku mad yo ig si mg sd hu am om kk el ne be mai sr cs km as sv mag mwr sn ny ca bg hne tg bgc ii he dcc ug fuv qu rw min af zu mn bjn so ki hr ak tk fi sq da bya sk gn bal nb lua xh bs ht syl ka bjj ban sat hy za luy rn bug bem luo wtm st lo gl ti shn ceb ks mfa ace lt ky bm lg shi tn bcl glk war kok bew kln kam umb bo suk ee kmb ay pam bhk sas bbc swv nso tpi rjb gbm lmn ff kab sl ts ba cv kri gon ndc guz wo tzm mak kfy ln ljp mk efi ibb doi awa mos nyn vmw mer kru lv sid pag gno sck tcy wbq nd lrc ss cgg brh xog nn sg xnr dyu rmt teo kxm mdh hno lu eu khn wbr tsg rej rif brx ilo kbd et ce kg fy hil kj cy ast av ve udm ga tt sah myv tet gaa ady mt dv fj nr is mdf kum kha sm kpv lez pap krc inh oc se tyv zdj dz bi gag to koi lbe mi ab os ty kl gil iu ch fo rm mh chk haw pon lb pau tvl sa kos na ho yap gd uli niu la tkl eo kl"
             .split(" ");
         SupplementalDataInfo sdi = SupplementalDataInfo.getInstance();
-        Set<String> scripts = new LinkedHashSet<String>();
+        Set<String> scripts = new LinkedHashSet<>();
         for (String locale : locales) {
             Set<BasicLanguageData> items = sdi.getBasicLanguageData(locale);
             if (items == null) {
@@ -88,7 +88,7 @@
             } else if (locale.equals("zh_Hant")) {
                 scripts.add("Hant");
             }
-            System.out.println(locale + "\t" + CollectionUtilities.join(scripts, " "));
+            System.out.println(locale + "\t" + Joiner.on(" ").join(scripts));
         }
 
         StringTransform unicode = Transliterator.getInstance("hex/unicode");
@@ -237,7 +237,7 @@
         LanguageTagParser ltp = new LanguageTagParser();
         String[] locales = "en ru nl en-GB fr de it pl pt-BR es tr th ja zh-CN zh-TW ko ar bg sr uk ca hr cs da fil fi hu id lv lt no pt-PT ro sk sl es-419 sv vi el iw fa hi am af et is ms sw zu bn mr ta eu fr-CA gl zh-HK ur gu kn ml te"
             .split(" ");
-        Set<String> nameAndInfo = new TreeSet<String>(info.getCollator());
+        Set<String> nameAndInfo = new TreeSet<>(info.getCollator());
         for (String localeCode : locales) {
             String baseLanguage = ltp.set(localeCode).getLanguage();
             R2<List<String>, String> temp = lang2replacement.get(baseLanguage);
diff --git a/tools/java/org/unicode/cldr/draft/NormalizedIdentifierParser.java b/tools/java/org/unicode/cldr/draft/NormalizedIdentifierParser.java
index 6a2d206..ac8e0b2 100644
--- a/tools/java/org/unicode/cldr/draft/NormalizedIdentifierParser.java
+++ b/tools/java/org/unicode/cldr/draft/NormalizedIdentifierParser.java
@@ -17,18 +17,18 @@
         Illegal, NameContinueNFC, NameContinueOther, NameStartNFC, NameStartOther, Whitespace, Other
     }
 
-    static final UnicodeSet XmlNameStartChar = (UnicodeSet) new UnicodeSet("[\\: A-Z _ a-z " +
+    static final UnicodeSet XmlNameStartChar = new UnicodeSet("[\\: A-Z _ a-z " +
         "\\u00C0-\\u00D6 \\u00D8-\\u00F6 \\u00F8-\\u02FF \\u0370-\\u037D \\u037F-\\u1FFF \\u200C-\\u200D" +
         "\\u2070-\\u218F \\u2C00-\\u2FEF \\u3001-\\uD7FF \\uF900-\\uFDCF \\uFDF0-\\uFFFD \\U00010000-\\U000EFFFF]")
             .freeze();
-    static final UnicodeSet XmlNameContinueChar = (UnicodeSet) new UnicodeSet(
+    static final UnicodeSet XmlNameContinueChar = new UnicodeSet(
         "[- . 0-9 \\u00B7 \\u0300-\\u036F \\u203F-\\u2040]").freeze();
-    static final UnicodeSet XmlNameChar = (UnicodeSet) new UnicodeSet(XmlNameStartChar).addAll(XmlNameContinueChar)
+    static final UnicodeSet XmlNameChar = new UnicodeSet(XmlNameStartChar).addAll(XmlNameContinueChar)
         .freeze();
-    static final UnicodeSet XmlWhiteSpace = (UnicodeSet) new UnicodeSet("[\\u0009\\u000D\\u000A\\u0020]").freeze();
-    static final UnicodeSet XmlIllegal = (UnicodeSet) new UnicodeSet(
+    static final UnicodeSet XmlWhiteSpace = new UnicodeSet("[\\u0009\\u000D\\u000A\\u0020]").freeze();
+    static final UnicodeSet XmlIllegal = new UnicodeSet(
         "[^\\u0009\\u000D\\u000A\\u0020-\uD7FF\\uE000-\\uFFFD\\U00010000-\\U000EFFFF]").freeze();
-    static final UnicodeSet NfcSafe = (UnicodeSet) new UnicodeSet("[:nfkcqc=yes:]").freeze();
+    static final UnicodeSet NfcSafe = new UnicodeSet("[:nfkcqc=yes:]").freeze();
 
     private String input;
     private int endPosition;
@@ -141,7 +141,7 @@
     }
 
     static void showDiffs() {
-        Map<Status, Map<Status, UnicodeSet>> map = new TreeMap<Status, Map<Status, UnicodeSet>>();
+        Map<Status, Map<Status, UnicodeSet>> map = new TreeMap<>();
         NormalizedIdentifierParser parser = new NormalizedIdentifierParser();
         for (int codePoint = 0; codePoint <= 0x10FFFF; ++codePoint) {
             String source = new StringBuilder().appendCodePoint(codePoint).toString();
@@ -153,7 +153,7 @@
             }
             Map<Status, UnicodeSet> map2 = map.get(sourceStatus);
             if (map2 == null) {
-                map.put(sourceStatus, map2 = new TreeMap<Status, UnicodeSet>());
+                map.put(sourceStatus, map2 = new TreeMap<>());
             }
             UnicodeSet set = map2.get(targetStatus);
             if (set == null) {
diff --git a/tools/java/org/unicode/cldr/draft/Parser.java b/tools/java/org/unicode/cldr/draft/Parser.java
index 4292a86..6a92c89 100644
--- a/tools/java/org/unicode/cldr/draft/Parser.java
+++ b/tools/java/org/unicode/cldr/draft/Parser.java
@@ -5,13 +5,13 @@
 
 /**
  * @author markdavis
- * 
+ *
  */
 public interface Parser<T, S extends CharSequence> {
     /**
      * Parses text from the beginning of the given string to produce an object.
      * The method may not use the entire text of the given string.
-     * 
+     *
      * @param source
      *            A <code>String</code> whose beginning should be parsed.
      * @return An <code>Object</code> parsed from the string.
@@ -30,7 +30,7 @@
      * be used to indicate the starting point for the next call to this method. If an error occurs, then the index of
      * <code>pos</code> is not changed, the error index of <code>pos</code> is set to the index of the character where
      * the error occurred, and null is returned.
-     * 
+     *
      * @param source
      *            A <code>String</code>, part of which should be parsed.
      * @param pos
diff --git a/tools/java/org/unicode/cldr/draft/PatternFixer.java b/tools/java/org/unicode/cldr/draft/PatternFixer.java
index 1b6c7bc..42c7ed4 100644
--- a/tools/java/org/unicode/cldr/draft/PatternFixer.java
+++ b/tools/java/org/unicode/cldr/draft/PatternFixer.java
@@ -21,7 +21,7 @@
  * TODO be sensitive to COMMENTS
  * <p>
  * TODO add support for (?#)
- * 
+ *
  * @author markdavis
  */
 public class PatternFixer {
@@ -37,7 +37,7 @@
 
     /**
      * Create for particular regex target.
-     * 
+     *
      * @param target
      */
     public PatternFixer(Target target) {
@@ -50,11 +50,11 @@
 
     private enum State {
         BASE, HAVE_SLASH, HAVE_Q, HAVE_Q_SLASH
-    };
+    }
 
     /**
      * Produce a modified pattern that fixes character classes. (See class description.)
-     * 
+     *
      * @param regexPattern
      * @param patternOptions
      * @return
diff --git a/tools/java/org/unicode/cldr/draft/RegexTransform.java b/tools/java/org/unicode/cldr/draft/RegexTransform.java
index 8d23163..60dafce 100644
--- a/tools/java/org/unicode/cldr/draft/RegexTransform.java
+++ b/tools/java/org/unicode/cldr/draft/RegexTransform.java
@@ -7,7 +7,7 @@
 
 /**
  * Immutable class that performs transformations
- * 
+ *
  * @author markdavis
  */
 public class RegexTransform implements com.ibm.icu.text.StringTransform {
@@ -16,13 +16,13 @@
     private final List<Rule>[] buckets = new List[BUCKETSIZE];
 
     public RegexTransform(List<Rule> rules2) {
-        rules = new ArrayList<Rule>(rules2);
+        rules = new ArrayList<>(rules2);
 
         // we now fill the buckets with rules, in order, that might match that bucket.
         for (int i = 0; i < BUCKETSIZE; ++i) {
-            buckets[i] = new ArrayList<Rule>();
+            buckets[i] = new ArrayList<>();
         }
-        List<Matcher> matchers = new ArrayList<Matcher>();
+        List<Matcher> matchers = new ArrayList<>();
         for (Rule rule : rules) {
             matchers.add(rule.getPostmatcher(""));
         }
@@ -40,7 +40,7 @@
 
     /**
      * right now, this doesn't do anything; later we can optimize by picking just those rules that could match
-     * 
+     *
      * @param toProcess
      * @return
      */
@@ -54,10 +54,12 @@
         return rules.iterator();
     }
 
+    @Override
     public String transform(String text) {
         return new RegexTransformState(this, text).toString();
     }
 
+    @Override
     public String toString() {
         StringBuilder result = new StringBuilder();
         for (int i = 0; i < rules.size(); ++i) {
diff --git a/tools/java/org/unicode/cldr/draft/RegexTransformBuilder.java b/tools/java/org/unicode/cldr/draft/RegexTransformBuilder.java
index 5f9d103..1187706 100644
--- a/tools/java/org/unicode/cldr/draft/RegexTransformBuilder.java
+++ b/tools/java/org/unicode/cldr/draft/RegexTransformBuilder.java
@@ -19,12 +19,12 @@
 
     // initially just very rough rule parser, for proof-of-concept
     public static StringTransform createFromRules(String string) {
-        List<StringTransform> compound = new ArrayList<StringTransform>();
+        List<StringTransform> compound = new ArrayList<>();
 
-        List<Rule> rules = new ArrayList<Rule>();
+        List<Rule> rules = new ArrayList<>();
         String[] ruleSet = string.split(";");
         Matcher m = RULE_PATTERN.matcher("");
-        List<String> results = new ArrayList<String>();
+        List<String> results = new ArrayList<>();
         Matcher variable = VARIABLE.matcher("");
         UnicodeSet filter = null;
 
diff --git a/tools/java/org/unicode/cldr/draft/RegexTransformState.java b/tools/java/org/unicode/cldr/draft/RegexTransformState.java
index 9b5d7de..5118c66 100644
--- a/tools/java/org/unicode/cldr/draft/RegexTransformState.java
+++ b/tools/java/org/unicode/cldr/draft/RegexTransformState.java
@@ -58,7 +58,7 @@
 
     /**
      * return true if the rule matches at offset in text, without touching text before start or after finish
-     * 
+     *
      * @param text
      * @param offset
      * @param start
@@ -112,6 +112,7 @@
         return Status.MATCH;
     }
 
+    @Override
     public String toString() {
         return processedAlready.toString();
     }
diff --git a/tools/java/org/unicode/cldr/draft/Rule.java b/tools/java/org/unicode/cldr/draft/Rule.java
index 308582d..a60160d 100644
--- a/tools/java/org/unicode/cldr/draft/Rule.java
+++ b/tools/java/org/unicode/cldr/draft/Rule.java
@@ -9,7 +9,7 @@
     private final Pattern prematch;
     private final boolean prematchFindAtEnd;
     private final Pattern postmatch;
-    private final List<Item> results = new ArrayList<Item>();
+    private final List<Item> results = new ArrayList<>();
     /**
      * if negative, is position before start position; otherwise is position relative to end of replacement.
      * To put *at* the start position, put a CURSOR at the start of the results.
@@ -19,7 +19,7 @@
 
     /**
      * contains a replacement text with a set of replacements (up to 10) plus a new cursor point
-     * 
+     *
      * @author markdavis
      */
     // TODO add function calls &foo(....)
@@ -35,10 +35,12 @@
             replacement = s;
         }
 
+        @Override
         public String compose(Matcher prematcher, Matcher postmatcher) {
             return replacement;
         }
 
+        @Override
         public String toString() {
             return replacement;
         }
@@ -53,10 +55,12 @@
             post = b;
         }
 
+        @Override
         public String compose(Matcher prematcher, Matcher postmatcher) {
             return post ? postmatcher.group(number) : prematcher.group(number);
         }
 
+        @Override
         public String toString() {
             return "$" + number;
         }
@@ -65,10 +69,12 @@
     public static class CursorItem implements Item {
         static Item CURSOR = new CursorItem();
 
+        @Override
         public String compose(Matcher prematcher, Matcher postmatcher) {
             throw new UnsupportedOperationException();
         }
 
+        @Override
         public String toString() {
             return "|";
         }
@@ -101,7 +107,7 @@
 
     /**
      * Modifies result, returns new cursor
-     * 
+     *
      * @param result
      * @param offset
      * @param matcher
@@ -123,6 +129,7 @@
                 : result.length() + outOfBoundsCursor;
     }
 
+    @Override
     public String toString() {
         String main = postmatch.toString();
         return (prematch == null ? "" : prematch.toString())
diff --git a/tools/java/org/unicode/cldr/draft/ScriptMetadata.java b/tools/java/org/unicode/cldr/draft/ScriptMetadata.java
index 1355a94..0beb56f 100644
--- a/tools/java/org/unicode/cldr/draft/ScriptMetadata.java
+++ b/tools/java/org/unicode/cldr/draft/ScriptMetadata.java
@@ -19,7 +19,7 @@
 import org.unicode.cldr.util.StandardCodes;
 import org.unicode.cldr.util.With;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.lang.UScript;
 import com.ibm.icu.text.Transform;
@@ -46,7 +46,7 @@
             "Origin Country"), DENSITY("~Density"), LANG_CODE, HAS_CASE("Has Case?");
 
         int columnNumber = -1;
-        final Set<String> names = new HashSet<String>();
+        final Set<String> names = new HashSet<>();
 
         Column(String... alternateNames) {
             names.add(this.name());
@@ -172,7 +172,7 @@
             density = Column.DENSITY.getInt(items, -1);
 
             final String countryRaw = Column.ORIGIN_COUNTRY.getItem(items);
-            String country = CountryCodeConverter.getCodeFromName(countryRaw);
+            String country = CountryCodeConverter.getCodeFromName(countryRaw, false);
             // NAME_TO_REGION_CODE.get(countryRaw.toUpperCase(Locale.ENGLISH));
             if (country == null) {
                 errors.add("Can't map " + countryRaw + " to country/region");
@@ -209,6 +209,7 @@
                 .replace("RTL", "YES");
         }
 
+        @Override
         public String toString() {
             return rank
                 + "\tSample: " + sampleChar
@@ -238,11 +239,11 @@
         }
     }
 
-    public static Set<String> errors = new LinkedHashSet<String>();
-    static HashMap<String, Integer> titleToColumn = new HashMap<String, Integer>();
+    public static Set<String> errors = new LinkedHashSet<>();
+    static HashMap<String, Integer> titleToColumn = new HashMap<>();
 
     private static class MyFileReader extends SemiFileReader {
-        private Map<String, Info> data = new HashMap<String, Info>();
+        private Map<String, Info> data = new HashMap<>();
 
         @Override
         protected boolean isCodePoint() {
@@ -252,7 +253,7 @@
         @Override
         protected String[] splitLine(String line) {
             return CldrUtility.splitCommaSeparated(line);
-        };
+        }
 
         @Override
         protected boolean handleLine(int lineCount, int start, int end, String[] items) {
@@ -299,7 +300,7 @@
 
         private Map<String, Info> getData() {
             if (!errors.isEmpty()) {
-                throw new RuntimeException(CollectionUtilities.join(errors, "\n\t"));
+                throw new RuntimeException(Joiner.on("\n\t").join(errors));
             }
             return Collections.unmodifiableMap(data);
         }
@@ -385,7 +386,7 @@
         return data.entrySet();
     }
 
-    /** 
+    /**
      * Specialized scripts
      * @return
      */
diff --git a/tools/java/org/unicode/cldr/draft/ShortestCanonicalForm.java b/tools/java/org/unicode/cldr/draft/ShortestCanonicalForm.java
index a3c4eb5..bd77a4c 100644
--- a/tools/java/org/unicode/cldr/draft/ShortestCanonicalForm.java
+++ b/tools/java/org/unicode/cldr/draft/ShortestCanonicalForm.java
@@ -21,10 +21,10 @@
     static final UnicodeSet leading = new UnicodeSet();
     static final UnicodeSet leading3 = new UnicodeSet();
     static StringComparator cpCompare = new UTF16.StringComparator(true, false, 0);
-    static final Map<Integer, Set<String>> leadToTrail = new TreeMap<Integer, Set<String>>();
+    static final Map<Integer, Set<String>> leadToTrail = new TreeMap<>();
     static UnicodeSet skip = new UnicodeSet(
         "[[:hangulsyllabletype=l:][:hangulsyllabletype=v:][:hangulsyllabletype=t:]]");
-    static Map<String, String> restoreExclusions = new TreeMap<String, String>();
+    static Map<String, String> restoreExclusions = new TreeMap<>();
     static UnicodeSet breakingTrail = new UnicodeSet();
 
     static {
@@ -49,7 +49,7 @@
                 trailing.addAll(trailingString);
                 Set<String> trails = leadToTrail.get(first);
                 if (trails == null) {
-                    leadToTrail.put(first, trails = new TreeSet<String>(cpCompare));
+                    leadToTrail.put(first, trails = new TreeSet<>(cpCompare));
                 }
                 trails.add(trailingString);
                 if (UScript.getScript(i) != UScript.HANGUL
@@ -127,10 +127,12 @@
             end = UCharacter.charCount(string.codePointAt(start));
         }
 
+        @Override
         public boolean hasNext() {
             return start < string.length();
         }
 
+        @Override
         public String next() {
             String result = string.substring(start, end);
             if (end < string.length()) {
@@ -144,6 +146,7 @@
             return result;
         }
 
+        @Override
         public void remove() {
             throw new UnsupportedOperationException();
         }
diff --git a/tools/java/org/unicode/cldr/draft/StateMachine.java b/tools/java/org/unicode/cldr/draft/StateMachine.java
index ceb6cd2..061c232 100644
--- a/tools/java/org/unicode/cldr/draft/StateMachine.java
+++ b/tools/java/org/unicode/cldr/draft/StateMachine.java
@@ -39,6 +39,7 @@
         short pushState = StateMachine.UNDEFINED;
         short action = -1;
 
+        @Override
         public boolean equals(Object other) {
             StateAction that = (StateAction) other;
             return advanceToNextCodePoint == that.advanceToNextCodePoint
@@ -83,6 +84,7 @@
 
         }
 
+        @Override
         public String toString() {
             StringBuilder result = new StringBuilder("[");
             for (int i = stackSize - 1; i >= 0; --i) {
@@ -125,6 +127,7 @@
         return Arrays.asList(actionNames);
     }
 
+    @Override
     public String toString() {
         StringBuffer output = new StringBuffer();
         int i = 0;
diff --git a/tools/java/org/unicode/cldr/draft/StateMachineBuilder.java b/tools/java/org/unicode/cldr/draft/StateMachineBuilder.java
index f5f8484..b8d1e68 100644
--- a/tools/java/org/unicode/cldr/draft/StateMachineBuilder.java
+++ b/tools/java/org/unicode/cldr/draft/StateMachineBuilder.java
@@ -16,22 +16,22 @@
 import com.ibm.icu.text.UnicodeSet;
 
 public class StateMachineBuilder<T> {
-    private static final UnicodeSet WHITESPACE = (UnicodeSet) new UnicodeSet("[:Pattern_Whitespace:]").freeze();
-    private static final UnicodeSet XID_START = (UnicodeSet) new UnicodeSet("[:XID_Start:]").freeze();
-    private static final UnicodeSet XID_PART = (UnicodeSet) new UnicodeSet("[-[:XID_Continue:]]").freeze();
+    private static final UnicodeSet WHITESPACE = new UnicodeSet("[:Pattern_Whitespace:]").freeze();
+    private static final UnicodeSet XID_START = new UnicodeSet("[:XID_Start:]").freeze();
+    private static final UnicodeSet XID_PART = new UnicodeSet("[-[:XID_Continue:]]").freeze();
 
     // TODO intern the actions
 
     private short currentState = StateMachine.UNDEFINED;
     private UnicodeMap<StateAction> currentMap = null;
-    private List<UnicodeMap> stateToData = new ArrayList<UnicodeMap>();
+    private List<UnicodeMap> stateToData = new ArrayList<>();
     private ParsePosition parsePosition = new ParsePosition(0);
-    private Map<String, UnicodeSet> variables = new LinkedHashMap<String, UnicodeSet>();
+    private Map<String, UnicodeSet> variables = new LinkedHashMap<>();
 
-    private Map<String, Short> stateToNumber = new LinkedHashMap<String, Short>();
-    private List<String> numberToState = new ArrayList<String>();
-    private Map<String, Short> actionToNumber = new LinkedHashMap<String, Short>();
-    private List<String> numberToAction = new ArrayList<String>();
+    private Map<String, Short> stateToNumber = new LinkedHashMap<>();
+    private List<String> numberToState = new ArrayList<>();
+    private Map<String, Short> actionToNumber = new LinkedHashMap<>();
+    private List<String> numberToAction = new ArrayList<>();
 
     private StateAction defaultAction;
 
@@ -40,7 +40,7 @@
     }
 
     public StateMachine<T> build(StateObjectBuilderFactory<T> factory) {
-        Set<String> missingStates = new HashSet<String>();
+        Set<String> missingStates = new HashSet<>();
         for (int i = 0; i < stateToData.size(); ++i) {
             UnicodeMap action = stateToData.get(i);
             if (action == null) {
@@ -51,7 +51,7 @@
             throw new IllegalArgumentException("Missing states: " + missingStates);
         }
         fixDefaultAction();
-        return new StateMachine<T>(stateToData, factory, numberToState, numberToAction);
+        return new StateMachine<>(stateToData, factory, numberToState, numberToAction);
     }
 
     // build state machines with rules on icu4c-trunk/source/common/rbbirpt.txt
@@ -62,8 +62,8 @@
 #
 #
 #StateName:
-#   input-char           n next-state           ^push-state     action    
-#   input-char           n next-state           ^push-state     action    
+#   input-char           n next-state           ^push-state     action
+#   input-char           n next-state           ^push-state     action
 #       |                |   |                      |             |
 #       |                |   |                      |             |--- action to be performed by state machine
 #       |                |   |                      |                  See function RBBIRuleScanner::doParseActions()
@@ -83,18 +83,18 @@
 #            matches, peform the actions and go to the state specified on this line.
 #            The input character is tested sequentally, in the order written.  The characters and
 #            character classes tested for do not need to be mutually exclusive.  The first match wins.
-#            
+#
 Example:
 #
 #  start state, scan position is at the beginning of the rules file, or in between two rules.
 #
 start:
-    escaped                term                  ^break-rule-end    doExprStart                       
-    white_space          n start                     
+    escaped                term                  ^break-rule-end    doExprStart
+    white_space          n start
     '$'                    scan-var-name         ^assign-or-rule    doExprStart
-    '!'                  n rev-option                             
+    '!'                  n rev-option
     ';'                  n start                                                  # ignore empty rules.
-    eof                    exit              
+    eof                    exit
     default                term                  ^break-rule-end    doExprStart
 */
 //@formatter:on
@@ -124,7 +124,7 @@
                 if (stateToData.size() > currentState && stateToData.get(currentState) != null) {
                     throw new IllegalArgumentException("Cannot define state twice: " + rule);
                 }
-                currentMap = new UnicodeMap<StateAction>();
+                currentMap = new UnicodeMap<>();
                 while (stateToData.size() <= currentState) {
                     stateToData.add(null); // TODO make this more efficient
                 }
diff --git a/tools/java/org/unicode/cldr/draft/StateMachineTest.java b/tools/java/org/unicode/cldr/draft/StateMachineTest.java
index 1055b99..185a258 100644
--- a/tools/java/org/unicode/cldr/draft/StateMachineTest.java
+++ b/tools/java/org/unicode/cldr/draft/StateMachineTest.java
@@ -9,6 +9,7 @@
 import java.util.TreeSet;
 
 import org.unicode.cldr.draft.UnicodeSetBuilder.MyActions;
+import org.unicode.cldr.util.PathUtilities;
 
 import com.ibm.icu.text.UnicodeSet;
 
@@ -19,13 +20,13 @@
     private static boolean SHOW_IF_ERROR = true;
 
     public static void main(String[] args) throws Exception {
-        System.out.println(new File(".").getCanonicalPath());
+        System.out.println(PathUtilities.getNormalizedPathString("."));
 
         BufferedReader in = FileUtilities.openUTF8Reader("../", "cldr-code/java/org/unicode/cldr/draft/UnicodeSetBuilderTests.txt");
         // icu4c-trunk/source/common/rbbirpt.txt
         // "icu4c-trunk/source/i18n/regexcst.txt"
 
-        List<String[]> testLines = new ArrayList<String[]>();
+        List<String[]> testLines = new ArrayList<>();
         while (true) {
             String line = in.readLine();
             if (line == null)
@@ -47,9 +48,9 @@
             System.out.println(machine);
         }
         MyActions[] valuesUsed = UnicodeSetBuilder.MyActions.values();
-        Set<String> possibleActions = new TreeSet<String>();
-        Set<String> actionsUsed = new TreeSet<String>();
-        Set<String> errors = new TreeSet<String>();
+        Set<String> possibleActions = new TreeSet<>();
+        Set<String> actionsUsed = new TreeSet<>();
+        Set<String> errors = new TreeSet<>();
         for (MyActions valueUsed : valuesUsed) {
             final String string = valueUsed.toString();
             actionsUsed.add(string);
@@ -63,7 +64,7 @@
         }
 
         System.out.println("Errors: " + errors);
-        Set<String> temp = new TreeSet<String>();
+        Set<String> temp = new TreeSet<>();
         temp.addAll(possibleActions);
         temp.removeAll(actionsUsed);
         System.out.println("Unused Actions: " + temp);
diff --git a/tools/java/org/unicode/cldr/draft/TestMixedScript.java b/tools/java/org/unicode/cldr/draft/TestMixedScript.java
index 25d01b0..1626a3d 100644
--- a/tools/java/org/unicode/cldr/draft/TestMixedScript.java
+++ b/tools/java/org/unicode/cldr/draft/TestMixedScript.java
@@ -56,7 +56,7 @@
 
     // Note: if UScript were an enum, we could avoid use of bitsets, but...
     private final BitSet singleScripts = new BitSet();
-    private final HashSet<BitSet> combinations = new HashSet<BitSet>();
+    private final HashSet<BitSet> combinations = new HashSet<>();
     private BitSet tempBitSet = new BitSet();
 
     /**
@@ -65,7 +65,7 @@
      * described under {@link #MixedScriptLevel}.
      * <p>
      * <b>Note:</b> thread-safe call
-     * 
+     *
      * @param source
      *            Input text.
      * @return this, for chaining
@@ -285,7 +285,7 @@
     /**
      * Test numbers to see whether or not they are decimal, and if so, whether from different systems. Returns the first
      * error found, or 'ok'.
-     * 
+     *
      * @param text
      * @return
      */
diff --git a/tools/java/org/unicode/cldr/draft/Typology.java b/tools/java/org/unicode/cldr/draft/Typology.java
index 98fb60d..be7cf10 100644
--- a/tools/java/org/unicode/cldr/draft/Typology.java
+++ b/tools/java/org/unicode/cldr/draft/Typology.java
@@ -23,12 +23,12 @@
 import com.ibm.icu.text.UnicodeSet;
 
 public class Typology {
-    private static final Set<String> NOLABELS = Collections.unmodifiableSet(new HashSet<String>(Arrays
+    private static final Set<String> NOLABELS = Collections.unmodifiableSet(new HashSet<>(Arrays
         .asList("NOLABEL")));
     public static final UnicodeSet SKIP = new UnicodeSet("[[:C:]-[:Cf:]-[:Cc:]]").freeze();
     // static UnicodeMap<String> reasons = new UnicodeMap<String>();
-    public static Map<String, UnicodeSet> label_to_uset = new TreeMap<String, UnicodeSet>();
-    public static UnicodeMap<Set<String>> char2labels = new UnicodeMap<Set<String>>();
+    public static Map<String, UnicodeSet> label_to_uset = new TreeMap<>();
+    public static UnicodeMap<Set<String>> char2labels = new UnicodeMap<>();
     // static {
     // label_to_uset.put("S", new UnicodeSet("[:S:]").freeze());
     // label_to_uset.put("L", new UnicodeSet("[:L:]").freeze());
@@ -38,14 +38,14 @@
     // label_to_uset.put("Z", new UnicodeSet("[:Z:]").freeze());
     // label_to_uset.put("P", new UnicodeSet("[:P:]").freeze());
     // }
-    static Set<String> skiplabels = new HashSet<String>(Arrays.asList("", "Symbol", "Punctuation", "Letter", "S", "L", "M",
+    static Set<String> skiplabels = new HashSet<>(Arrays.asList("", "Symbol", "Punctuation", "Letter", "S", "L", "M",
         "N", "C", "Z", "P"));
 
-    public static Map<String, UnicodeSet> full_path_to_uset = new TreeMap<String, UnicodeSet>();
-    public static Map<String, UnicodeSet> path_to_uset = new TreeMap<String, UnicodeSet>();
+    public static Map<String, UnicodeSet> full_path_to_uset = new TreeMap<>();
+    public static Map<String, UnicodeSet> path_to_uset = new TreeMap<>();
     // static Map<List<String>,UnicodeSet> path_to_uset = new TreeMap<List<String>,UnicodeSet>();
     public static Relation<String, String> labelToPaths = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
-    public static Map<String, Map<String, UnicodeSet>> label_parent_uset = new TreeMap<String, Map<String, UnicodeSet>>();
+    public static Map<String, Map<String, UnicodeSet>> label_parent_uset = new TreeMap<>();
 
     // public static Relation<String, String> pathToList = new Relation(new TreeMap(), TreeSet.class);
 
@@ -54,6 +54,7 @@
         public final static Pattern SPLIT = PatternCache.get("\\s*\t\\s*");
         public final static Pattern NON_ALPHANUM = PatternCache.get("[^0-9A-Za-z]+");
 
+        @Override
         protected String[] splitLine(String line) {
             return SPLIT.split(line);
         }
@@ -90,7 +91,7 @@
 
             String[] labels = fullPath.split("/");
             String path = "";
-            Set<String> labelSet = new TreeSet<String>();
+            Set<String> labelSet = new TreeSet<>();
             for (String item : labels) {
                 if (skiplabels.contains(item)) {
                     continue;
@@ -116,8 +117,8 @@
             return true;
         }
 
-        Map<List<String>, List<String>> listCache = new HashMap<List<String>, List<String>>();
-        Map<Set<String>, Set<String>> setCache = new HashMap<Set<String>, Set<String>>();
+        Map<List<String>, List<String>> listCache = new HashMap<>();
+        Map<Set<String>, Set<String>> setCache = new HashMap<>();
 
         private <T> T intern(Map<T, T> cache, T list) {
             T old = cache.get(list);
@@ -132,7 +133,7 @@
         new MyReader().process(Typology.class, "Categories.txt"); // "09421-u52m09xxxx.txt"
 
         // fix the paths
-        Map<String, UnicodeSet> temp = new TreeMap<String, UnicodeSet>();
+        Map<String, UnicodeSet> temp = new TreeMap<>();
         for (int i = 0; i < UCharacter.CHAR_CATEGORY_COUNT; ++i) {
             UnicodeSet same = new UnicodeSet()
                 .applyIntPropertyValue(UProperty.GENERAL_CATEGORY, i);
@@ -156,7 +157,7 @@
                     }
                     Map<String, UnicodeSet> map = label_parent_uset.get(labels[j]);
                     if (map == null) {
-                        label_parent_uset.put(labels[j], map = new TreeMap<String, UnicodeSet>());
+                        label_parent_uset.put(labels[j], map = new TreeMap<>());
                     }
                     UnicodeSet uset2 = map.get(parent);
                     if (uset2 == null) {
diff --git a/tools/java/org/unicode/cldr/draft/UnicodeMapBuilder.java b/tools/java/org/unicode/cldr/draft/UnicodeMapBuilder.java
index 923982c..e461e0a 100644
--- a/tools/java/org/unicode/cldr/draft/UnicodeMapBuilder.java
+++ b/tools/java/org/unicode/cldr/draft/UnicodeMapBuilder.java
@@ -55,7 +55,7 @@
 
     public UnicodeMapBuilder<T> putFromLines(BufferedReader br) {
         if (result == null) {
-            result = new UnicodeMap<T>();
+            result = new UnicodeMap<>();
         }
         UnicodeSet sources = new UnicodeSet();
         String line = null;
diff --git a/tools/java/org/unicode/cldr/draft/UnicodeSetBuilder.java b/tools/java/org/unicode/cldr/draft/UnicodeSetBuilder.java
index 041354e..a1b800f 100644
--- a/tools/java/org/unicode/cldr/draft/UnicodeSetBuilder.java
+++ b/tools/java/org/unicode/cldr/draft/UnicodeSetBuilder.java
@@ -15,7 +15,7 @@
 
 /**
  * Provides for parsing and formatting UnicodeSet according to different Targets and other settings.
- * 
+ *
  * @author markdavis
  */
 public class UnicodeSetBuilder {
@@ -28,7 +28,7 @@
             BufferedReader in = FileUtilities.openUTF8Reader("../", "cldr-code/java/org/unicode/cldr/draft/UnicodeSetStates.txt");
             // icu4c-trunk/source/common/rbbirpt.txt
             // "icu4c-trunk/source/i18n/regexcst.txt"
-            StateMachineBuilder<UnicodeSet> builder = new StateMachineBuilder<UnicodeSet>();
+            StateMachineBuilder<UnicodeSet> builder = new StateMachineBuilder<>();
             // builder.add("quoted:=[@]");
             // builder.add("rule_char:=[^\\*\\?\\+\\[\\(/)\\{\\}\\^\\$\\|\\\\\\.]");
             // builder.add("digit_char:=[0-9]");
@@ -49,6 +49,7 @@
 
     private static final class MyObjectBuilderFactory implements
         StateObjectBuilderFactory<UnicodeSet> {
+        @Override
         public StateObjectBuilder<UnicodeSet> getInstance() {
             return new MyObjectBuilder();
         }
@@ -56,13 +57,13 @@
 
     public enum MyActions {
         unhandled, doSetLiteral, doSetLiteralEscaped, doHex, doSetRange, doSetNegate, doName, doPropName, doPropRelation, doPropValue, doStartSetProp, doSetBeginUnion, doSetEnd, doSetBeginDifference1, doSetBeginIntersection1, doSetDifference2, doSetIntersection2, doSetBackslash_s, doSetBackslash_S, doSetBackslash_w, doSetBackslash_W, doSetBackslash_d, doSetBackslash_D, doSetAddAmp, doSetAddDash,
-    };
+    }
 
     private static final class MyObjectBuilder extends StateObjectBuilder<UnicodeSet> {
 
         private enum Operation {
             union, difference, intersection, symmetric
-        };
+        }
 
         private static class Info {
             UnicodeSet set;
@@ -77,17 +78,17 @@
             }
         }
 
-        private static final UnicodeSet WHITESPACE = (UnicodeSet) new UnicodeSet("[:whitespace:]").freeze();
+        private static final UnicodeSet WHITESPACE = new UnicodeSet("[:whitespace:]").freeze();
 
-        private static final UnicodeSet NOT_WHITESPACE = (UnicodeSet) new UnicodeSet("[:^whitespace:]").freeze();
+        private static final UnicodeSet NOT_WHITESPACE = new UnicodeSet("[:^whitespace:]").freeze();
 
-        private static final UnicodeSet WORD = (UnicodeSet) new UnicodeSet("[[:alphabetic:][:digit:]]").freeze();
+        private static final UnicodeSet WORD = new UnicodeSet("[[:alphabetic:][:digit:]]").freeze();
 
-        private static final UnicodeSet NOT_WORD = (UnicodeSet) new UnicodeSet("[^[:alphabetic:][:digit:]]").freeze();
+        private static final UnicodeSet NOT_WORD = new UnicodeSet("[^[:alphabetic:][:digit:]]").freeze();
 
-        private static final UnicodeSet DIGIT = (UnicodeSet) new UnicodeSet("[:Nd:]").freeze();
+        private static final UnicodeSet DIGIT = new UnicodeSet("[:Nd:]").freeze();
 
-        private static final UnicodeSet NOT_DIGIT = (UnicodeSet) new UnicodeSet("[:^Nd:]").freeze();
+        private static final UnicodeSet NOT_DIGIT = new UnicodeSet("[:^Nd:]").freeze();
 
         UnicodeSet current = new UnicodeSet();
         private Operation operation;
@@ -97,7 +98,7 @@
         private String valueName;
         private boolean negateProp;
 
-        private List<Info> setStack = new ArrayList<Info>();
+        private List<Info> setStack = new ArrayList<>();
 
         private int lastLiteral = 0;
         private int lastPosition;
diff --git a/tools/java/org/unicode/cldr/draft/UnicodeSetFilteredTransform.java b/tools/java/org/unicode/cldr/draft/UnicodeSetFilteredTransform.java
index 3c7b0a8..7ab3568 100644
--- a/tools/java/org/unicode/cldr/draft/UnicodeSetFilteredTransform.java
+++ b/tools/java/org/unicode/cldr/draft/UnicodeSetFilteredTransform.java
@@ -5,7 +5,7 @@
 
 /**
  * Immutable StringTransform using a UnicodeSet.
- * 
+ *
  * @author markdavis
  */
 public class UnicodeSetFilteredTransform extends FilteredTransform {
@@ -13,7 +13,7 @@
 
     public UnicodeSetFilteredTransform(UnicodeSet filter, StringTransform result) {
         super(result);
-        unicodeSet = (UnicodeSet) filter.freeze();
+        unicodeSet = filter.freeze();
     }
 
     // TODO optimize scanning, add strings
@@ -51,6 +51,7 @@
         return true;
     }
 
+    @Override
     public String toString() {
         return ":: " + unicodeSet.toPattern(false) + ";\n" + super.toString();
     }
diff --git a/tools/java/org/unicode/cldr/draft/UnicodeSetFormat.java b/tools/java/org/unicode/cldr/draft/UnicodeSetFormat.java
index fca9dfa..bd30db1 100644
--- a/tools/java/org/unicode/cldr/draft/UnicodeSetFormat.java
+++ b/tools/java/org/unicode/cldr/draft/UnicodeSetFormat.java
@@ -39,7 +39,7 @@
         for (UnicodeSetIterator it = new UnicodeSetIterator((UnicodeSet) obj); it.nextRange();) {
             if (it.codepoint == UnicodeSetIterator.IS_STRING) {
                 if (strings == null) {
-                    strings = new TreeSet<String>();
+                    strings = new TreeSet<>();
                 }
                 strings.add(it.string);
                 continue;
@@ -141,7 +141,7 @@
         /**
          * Is called every time an unquoted $ is found. Should parse out variables as appropriate
          * and return how far we got, and the replacement string. Returns null if doesn't match a variable.
-         * 
+         *
          * @pos on input should be set to the position just before the dollar sign.
          *      On output should be set to the end of the text to replace.
          */
@@ -158,7 +158,7 @@
          * getProperty("bidi_class", "neutral", false, result) <br>
          * (for an example of the latter, see {@linkplain http
          * ://unicode.org/cldr/utility/list-unicodeset.jsp?a=\p name=/WITH%20DOT%20ABOVE/}
-         * 
+         *
          * @param regex
          *            Set to true if the property value is a regex "find" expression. In that case,
          *            the return value should be the set of Unicode characters that match the regex.
@@ -170,7 +170,7 @@
     public String formatWithProperties(UnicodeSet original, boolean addOthers, UnicodeSet expandBlockIgnorables,
         int... properties) {
         UnicodeSet remainder = new UnicodeSet().addAll(original);
-        Set<String> propSet = new TreeSet<String>();
+        Set<String> propSet = new TreeSet<>();
         BitSet props = new BitSet();
 
         for (int i = 0; i < properties.length; ++i) {
@@ -233,7 +233,7 @@
     private Target target;
     private int options;
     private Extension[] extensions;
-    private static final UnicodeSet toQuote = (UnicodeSet) new UnicodeSet(
+    private static final UnicodeSet toQuote = new UnicodeSet(
         "[[:Cn:][:Default_Ignorable_Code_Point:][:patternwhitespace:]]").freeze();
 
 }
diff --git a/tools/java/org/unicode/cldr/draft/UnmodifiableBitSet.java b/tools/java/org/unicode/cldr/draft/UnmodifiableBitSet.java
index 5c86c00..cf1049b 100644
--- a/tools/java/org/unicode/cldr/draft/UnmodifiableBitSet.java
+++ b/tools/java/org/unicode/cldr/draft/UnmodifiableBitSet.java
@@ -47,7 +47,7 @@
     @Override
     public void flip(int bitIndex) {
         throw new UnsupportedOperationException("Cannot modify.");
-    };
+    }
 
     @Override
     public void flip(int fromIndex, int toIndex) {
diff --git a/tools/java/org/unicode/cldr/draft/XLikelySubtags.java b/tools/java/org/unicode/cldr/draft/XLikelySubtags.java
index b869a50..6e020e0 100644
--- a/tools/java/org/unicode/cldr/draft/XLikelySubtags.java
+++ b/tools/java/org/unicode/cldr/draft/XLikelySubtags.java
@@ -50,6 +50,7 @@
         }
 
         static final Maker HASHMAP = new Maker() {
+            @Override
             @SuppressWarnings("unchecked")
             public Map<Object, Object> make() {
                 return new HashMap<>();
@@ -57,6 +58,7 @@
         };
 
         static final Maker TREEMAP = new Maker() {
+            @Override
             @SuppressWarnings("unchecked")
             public Map<Object, Object> make() {
                 return new TreeMap<>();
@@ -202,7 +204,7 @@
             final LSR value = regionEntry.getValue();
             set(result, "und", value.script, value.region, value);
         }
-        // 
+        //
         // check that every level has "" (or "und")
         if (!result.containsKey("und")) {
             throw new IllegalArgumentException("failure: base");
@@ -296,7 +298,7 @@
     }
 
 //    public static ULocale addLikelySubtags(ULocale loc) {
-//        
+//
 //    }
 
     /**
@@ -376,7 +378,7 @@
         if (result.script.equals(value00.script)) { //script is default
             if (result.region.equals(value00.region)) {
                 return result.replace(null, "", "");
-            } else if (fieldToFavor == fieldToFavor.FAVOR_REGION) {
+            } else if (fieldToFavor == Minimize.FAVOR_REGION) {
                 return result.replace(null, "", null);
             } else {
                 favorRegionOk = true;
@@ -456,9 +458,9 @@
 //        }
 
         // get all the languages, scripts, and regions
-        Set<String> languages = new TreeSet<String>();
-        Set<String> scripts = new TreeSet<String>();
-        Set<String> regions = new TreeSet<String>();
+        Set<String> languages = new TreeSet<>();
+        Set<String> scripts = new TreeSet<>();
+        Set<String> regions = new TreeSet<>();
         Counter<String> languageCounter = new Counter<>();
         Counter<String> scriptCounter = new Counter<>();
         Counter<String> regionCounter = new Counter<>();
diff --git a/tools/java/org/unicode/cldr/draft/XLocaleDistance.java b/tools/java/org/unicode/cldr/draft/XLocaleDistance.java
index 8acd8e4..675965f 100644
--- a/tools/java/org/unicode/cldr/draft/XLocaleDistance.java
+++ b/tools/java/org/unicode/cldr/draft/XLocaleDistance.java
@@ -20,6 +20,7 @@
 import org.unicode.cldr.util.CLDRFile;
 import org.unicode.cldr.util.SupplementalDataInfo;
 
+import com.google.common.base.Joiner;
 import com.google.common.base.Objects;
 import com.google.common.base.Predicate;
 import com.google.common.base.Splitter;
@@ -30,7 +31,6 @@
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Multimaps;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R4;
 import com.ibm.icu.util.Output;
@@ -56,7 +56,7 @@
     static final SupplementalDataInfo SDI = CONFIG.getSupplementalDataInfo();
 
     private static List<R4<String, String, Integer, Boolean>> xGetLanguageMatcherData() {
-        return SDI.getLanguageMatcherData("written");
+        return SDI.getLanguageMatcherData("written_new");
     }
 
     static final Multimap<String, String> CONTAINER_TO_CONTAINED;
@@ -69,7 +69,8 @@
 
         for (String container : SDI.getContainers()) {
             Set<String> contained = SDI.getContained(container);
-            System.out.println(".putAll(\"" + container + "\", \"" + CollectionUtilities.join(contained, "\", \"") + "\")");
+            System.out.println(".putAll(\"" + container + "\", \"" + Joiner.on("\", \"")
+                .join(contained) + "\")");
         }
 
         ImmutableMultimap.Builder<String, String> containerToFinalContainedBuilder = new ImmutableMultimap.Builder<>();
@@ -207,9 +208,10 @@
         /**
          * Return an id, or null if there is none.
          */
+        @Override
         public Integer toId(T source) {
             return objectToInt.get(source);
-//            return value == null ? 0 : value; 
+//            return value == null ? 0 : value;
         }
 
         /**
@@ -304,6 +306,7 @@
             }
         }
 
+        @Override
         public DistanceTable getDistanceTable() {
             return distanceTable;
         }
@@ -340,6 +343,7 @@
             this(newMap());
         }
 
+        @Override
         public boolean isEmpty() {
             return subtables.isEmpty();
         }
@@ -358,6 +362,7 @@
             return subtables.hashCode();
         }
 
+        @Override
         public int getDistance(String desired, String supported, Output<DistanceTable> distanceTable, boolean starEquals) {
             boolean star = false;
             Map<String, DistanceNode> sub2 = subtables.get(desired);
@@ -502,8 +507,9 @@
             return toString(false);
         }
 
+        @Override
         public String toString(boolean abbreviate) {
-            return toString(abbreviate, "", new IdMakerFull<Object>("interner"), new StringBuilder()).toString();
+            return toString(abbreviate, "", new IdMakerFull<>("interner"), new StringBuilder()).toString();
         }
 
         public StringBuilder toString(boolean abbreviate, String indent, IdMakerFull<Object> intern, StringBuilder buffer) {
@@ -547,6 +553,7 @@
             return buffer;
         }
 
+        @Override
         public StringDistanceTable compact() {
             return new CompactAndImmutablizer().compact(this);
         }
@@ -575,6 +582,7 @@
             return dnode == null ? null : dnode.distance;
         }
 
+        @Override
         public DistanceNode getInternalNode(String a, String b) {
             Map<String, DistanceNode> subsub = subtables.get(a);
             if (subsub == null) {
@@ -583,6 +591,7 @@
             return subsub.get(b);
         }
 
+        @Override
         public Map<String, Set<String>> getInternalMatches() {
             Map<String, Set<String>> result = new LinkedHashMap<>();
             for (Entry<String, Map<String, DistanceNode>> entry : subtables.entrySet()) {
@@ -642,7 +651,7 @@
      * ULocales must be in canonical, addLikelySubtags format. Returns distance
      * @param desired
      * @param supported
-     * @param distanceOption 
+     * @param distanceOption
      * @return
      */
     public int distanceRaw(LSR desired, LSR supported, int threshold, DistanceOption distanceOption) {
@@ -778,7 +787,8 @@
         }
         if (PRINT_OVERRIDES) {
             System.out.println("\t\t<languageMatches type=\"written\" alt=\"enhanced\">");
-            System.out.println("\t\t\t<paradigmLocales locales=\"" + CollectionUtilities.join(paradigmRegions, " ")
+            System.out.println("\t\t\t<paradigmLocales locales=\"" + String
+                .join(" ", paradigmRegions)
                 + "\"/>");
             for (String[] variableRule : variableOverrides) {
                 System.out.println("\t\t\t<matchVariable id=\"" + variableRule[0]
@@ -879,8 +889,8 @@
 
     private static void printMatchXml(List<String> desired, List<String> supported, Integer distance, Boolean oneway) {
         if (PRINT_OVERRIDES) {
-            String desiredStr = CollectionUtilities.join(desired, "_");
-            String supportedStr = CollectionUtilities.join(supported, "_");
+            String desiredStr = Joiner.on("_").join(desired);
+            String supportedStr = Joiner.on("_").join(supported);
             String desiredName = fixedName(desired);
             String supportedName = fixedName(supported);
             System.out.println("\t\t\t<languageMatch"
@@ -893,7 +903,7 @@
     }
 
     private static String fixedName(List<String> match) {
-        List<String> alt = new ArrayList<String>(match);
+        List<String> alt = new ArrayList<>(match);
         StringBuilder result = new StringBuilder();
         switch (alt.size()) {
         case 3:
@@ -918,7 +928,7 @@
                 result.insert(0, english.getName(CLDRFile.TERRITORY_NAME, language));
             }
         }
-        return CollectionUtilities.join(alt, "; ");
+        return Joiner.on("; ").join(alt);
     }
 
     static public void add(StringDistanceTable languageDesired2Supported, List<String> desired, List<String> supported, int percentage) {
@@ -999,6 +1009,7 @@
             paradigms = ImmutableSet.copyOf(paradigmsIn);
         }
 
+        @Override
         public String toId(String region) {
             String result = regionToPartition.get(region);
             return result == null ? "" : result;
@@ -1114,7 +1125,7 @@
     }
 
     /**
-     * Parses a string of regions like "US+005-BR" and produces a set of resolved regions. 
+     * Parses a string of regions like "US+005-BR" and produces a set of resolved regions.
      * All macroregions are fully resolved to sets of non-macro regions.
      * <br>Syntax is simple for now:
      * <pre>regionSet := region ([-+] region)*</pre>
diff --git a/tools/java/org/unicode/cldr/draft/XLocaleMatcher.java b/tools/java/org/unicode/cldr/draft/XLocaleMatcher.java
index 989aa5e..fd74775 100644
--- a/tools/java/org/unicode/cldr/draft/XLocaleMatcher.java
+++ b/tools/java/org/unicode/cldr/draft/XLocaleMatcher.java
@@ -42,14 +42,14 @@
     public static class Builder {
         private Set<ULocale> supportedLanguagesList;
         private int thresholdDistance = -1;
-        private int demotionPerAdditionalDesiredLocale = -1;;
+        private int demotionPerAdditionalDesiredLocale = -1;
         private ULocale defaultLanguage;
         private XLocaleDistance localeDistance;
         private DistanceOption distanceOption;
 
         /**
          * @param languagePriorityList the languagePriorityList to set
-         * @return 
+         * @return
          */
         public Builder setSupportedLocales(String languagePriorityList) {
             this.supportedLanguagesList = asSet(LocalePriorityList.add(languagePriorityList).build());
@@ -68,7 +68,7 @@
 
         /**
          * @param thresholdDistance the thresholdDistance to set, with -1 = default
-         * @return 
+         * @return
          */
         public Builder setThresholdDistance(int thresholdDistance) {
             this.thresholdDistance = thresholdDistance;
@@ -77,7 +77,7 @@
 
         /**
          * @param demotionPerAdditionalDesiredLocale the demotionPerAdditionalDesiredLocale to set, with -1 = default
-         * @return 
+         * @return
          */
         public Builder setDemotionPerAdditionalDesiredLocale(int demotionPerAdditionalDesiredLocale) {
             this.demotionPerAdditionalDesiredLocale = demotionPerAdditionalDesiredLocale;
@@ -86,7 +86,7 @@
 
         /**
          * @param localeDistance the localeDistance to set, with default = XLocaleDistance.getDefault().
-         * @return 
+         * @return
          */
         public Builder setLocaleDistance(XLocaleDistance localeDistance) {
             this.localeDistance = localeDistance;
@@ -96,7 +96,7 @@
         /**
          * Set the default language, with null = default = first supported language
          * @param defaultLanguage
-         * @return 
+         * @return
          */
         public Builder setDefaultLanguage(ULocale defaultLanguage) {
             this.defaultLanguage = defaultLanguage;
@@ -104,10 +104,10 @@
         }
 
         /**
-         * If true, then the language differences are smaller than than script differences. 
+         * If true, then the language differences are smaller than than script differences.
          * This is used in situations (such as maps) where it is better to fall back to the same script than a similar language.
          * @param distanceOption
-         * @return 
+         * @return
          */
         public Builder setDistanceOption(DistanceOption distanceOption) {
             this.distanceOption = distanceOption;
@@ -243,11 +243,10 @@
         for (ULocale locale : languageList) {
             temp.add(locale);
         }
-        ;
         return temp;
     }
 
-    /** 
+    /**
      * Get the best match between the desired languages and supported languages
      * @param desiredLanguages Typically the supplied user's languages, in order of preference, with best first.
      * @param outputBestDesired The one of the desired languages that matched best.
@@ -317,7 +316,7 @@
         return bestSupportedLocales.iterator().next();
     }
 
-    /** 
+    /**
      * Get the best match between the desired languages and supported languages
      * @param desiredLanguages Typically the supplied user's languages, in order of preference, with best first.
      * @param outputBestDesired The one of the desired languages that matched best.
@@ -454,6 +453,7 @@
      * @return value between 0 and 1, inclusive.
      * @deprecated Use the form with 2 parameters instead.
      */
+    @Deprecated
     public double match(ULocale desired, ULocale desiredMax, ULocale supported, ULocale supportedMax) {
         return match(desired, supported);
     }
diff --git a/tools/java/org/unicode/cldr/draft/keyboard/KeyboardId.java b/tools/java/org/unicode/cldr/draft/keyboard/KeyboardId.java
index 22750e0..14d8caf 100644
--- a/tools/java/org/unicode/cldr/draft/keyboard/KeyboardId.java
+++ b/tools/java/org/unicode/cldr/draft/keyboard/KeyboardId.java
@@ -18,10 +18,10 @@
  * An object that is used to uniquely identify a particular keyboard. This object can be serialized
  * as a string. The string has the following format:
  * {@code <locale>-t-k0-<platform>-<attribute0>-<attribute1>-<attributeN>}
- * 
+ *
  * <p>
  * The locale and platform tags are mandatory, the attributes are not.
- * 
+ *
  * <p>
  * The following are all valid keyboard locale strings:
  * <ul>
diff --git a/tools/java/org/unicode/cldr/draft/keyboard/KeyboardTool.java b/tools/java/org/unicode/cldr/draft/keyboard/KeyboardTool.java
index ba5adc2..e0275ac 100644
--- a/tools/java/org/unicode/cldr/draft/keyboard/KeyboardTool.java
+++ b/tools/java/org/unicode/cldr/draft/keyboard/KeyboardTool.java
@@ -52,7 +52,7 @@
     }
     System.out.println(KeylayoutParser.KEYBOARD_ID_MAP.unmatchedIds());
     }
-    
+
     private enum KeylayoutFilenameFilter implements FilenameFilter {
     INSTANCE;
     @Override public boolean accept(File dir, String name) {
diff --git a/tools/java/org/unicode/cldr/draft/keyboard/out/KeyboardToXml.java b/tools/java/org/unicode/cldr/draft/keyboard/out/KeyboardToXml.java
index 4c526cd..05199f0 100644
--- a/tools/java/org/unicode/cldr/draft/keyboard/out/KeyboardToXml.java
+++ b/tools/java/org/unicode/cldr/draft/keyboard/out/KeyboardToXml.java
@@ -162,7 +162,7 @@
           longPressBuilder.append(" ");
         }
           }
-        
+
           if (longPressBuilder.length() > 0) {
         comment.append("  long=");
         comment.append(longPressBuilder.toString());
diff --git a/tools/java/org/unicode/cldr/draft/keyboard/out/XmlWriter.java b/tools/java/org/unicode/cldr/draft/keyboard/out/XmlWriter.java
index 5d966ed..bb26da8 100644
--- a/tools/java/org/unicode/cldr/draft/keyboard/out/XmlWriter.java
+++ b/tools/java/org/unicode/cldr/draft/keyboard/out/XmlWriter.java
@@ -13,7 +13,7 @@
 
 import com.google.common.collect.ImmutableMap;
 
-/** 
+/**
  * Object which wraps around an XML stream writer. Automatically adds proper formatting
  * (indentation and line breaks) to the written XML elements.
  */
diff --git a/tools/java/org/unicode/cldr/icu/Bcp47Mapper.java b/tools/java/org/unicode/cldr/icu/Bcp47Mapper.java
deleted file mode 100644
index 6cb5cf2..0000000
--- a/tools/java/org/unicode/cldr/icu/Bcp47Mapper.java
+++ /dev/null
@@ -1,185 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-import com.google.common.collect.ImmutableSet;
-
-/**
- * A mapper that converts BCP 47 data from CLDR to the ICU data structure.
- *
- * @author jchye
- */
-public class Bcp47Mapper {
-//    private static final String[] KEYTYPE_FILES = {
-//        "calendar", "collation", "currency", "number", "variant"
-//    };
-    private String sourceDir;
-
-    public Bcp47Mapper(String bcp47Dir) {
-        sourceDir = bcp47Dir;
-    }
-
-    /**
-     * Fills an IcuData object with data of the given type.
-     */
-    public IcuData[] fillFromCldr() {
-        IcuData timezoneData = new IcuData("common/bcp47/timezone.xml", "timezoneTypes", false);
-        Map<String, String> keyMap = new HashMap<String, String>();
-        // Timezone data is put in a different file.
-        fillFromFile("timezone", timezoneData, keyMap);
-
-        // Process the rest of the data.
-        IcuData keyTypeData = new IcuData("common/bcp47/*.xml", "keyTypeData", false);
-        for (File file : new File(sourceDir).listFiles()) {
-            final String filenameXml = file.getName();
-            if (filenameXml.endsWith(".xml") && !filenameXml.equals("timezone.xml")) {
-                fillFromFile(filenameXml.substring(0, filenameXml.length() - 4),
-                    keyTypeData, keyMap);
-            }
-        }
-        // Add all the keyMap values into the IcuData file.
-        for (Entry<String, String> kmData : keyMap.entrySet()) {
-            String bcpKey = kmData.getKey();
-            String key = kmData.getValue();
-            if (bcpKey.startsWith("@")) {
-                keyTypeData.add("/" + bcpKey.substring(1), key);
-                continue;
-            }
-            if (bcpKey.equals(key)) {
-                // empty value to indicate the BCP47 key is same with the legacy key
-                bcpKey = "";
-            }
-            keyTypeData.add("/keyMap/" + key, bcpKey);
-        }
-        // Add aliases for timezone data.
-        keyTypeData.add("/typeAlias/timezone:alias", "/ICUDATA/timezoneTypes/typeAlias/timezone");
-        keyTypeData.add("/typeMap/timezone:alias", "/ICUDATA/timezoneTypes/typeMap/timezone");
-        keyTypeData.add("/bcpTypeAlias/tz:alias", "/ICUDATA/timezoneTypes/bcpTypeAlias/tz");
-        return new IcuData[] { timezoneData, keyTypeData };
-    }
-
-    private void fillFromFile(String filename, IcuData icuData, Map<String, String> keyMap) {
-        KeywordHandler handler = new KeywordHandler(icuData, keyMap);
-        MapperUtils.parseFile(new File(sourceDir, filename + ".xml"), handler);
-    }
-
-    static final Set<String> SKIP_KEY_ATTRIBUTES = ImmutableSet.of(
-        "name", "alias", "description", "since", "extension");
-    static final Set<String> SKIP_TYPE_ATTRIBUTES = ImmutableSet.of(
-        "name", "alias", "description", "since", "preferred");
-
-    /**
-     * XML parser for BCP47 data.
-     */
-    private class KeywordHandler extends MapperUtils.EmptyHandler {
-        private String typeAliasPrefix;
-        private String typeMapPrefix;
-        private String bcpTypeAliasPrefix;
-        private String lastKeyName;
-        private IcuData icuData;
-        private Map<String, String> keyMap;
-
-        /**
-         * KeywordHandler constructor.
-         *
-         * @param icuData
-         *            the IcuData object to store the parsed data
-         * @param keyMap
-         *            a mapping of keys to their aliases. These values will
-         *            not be added to icuData by the handler
-         */
-        public KeywordHandler(IcuData icuData, Map<String, String> keyMap) {
-            this.icuData = icuData;
-            this.keyMap = keyMap;
-        }
-
-        @Override
-        public void startElement(String uri, String localName, String qName, Attributes attr) throws SAXException {
-            // Format of BCP47 file:
-            // <key name="tz" alias="timezone" description="Time zone key">
-            // <type name="adalv" alias="Europe/Andorra" description="Andorra"/>
-            // ...
-            if (attr == null) {
-                return;
-            }
-
-            if (qName.equals("key")) {
-                String keyName = attr.getValue("name");
-                if (keyName == null) {
-                    return;
-                }
-
-                String keyAlias = attr.getValue("alias");
-                if (keyAlias == null) {
-                    keyAlias = keyName;
-//                    System.err.println(Bcp47Mapper.class.getSimpleName() + " Info: BCP47 key " + keyName
-//                        + " didn't have the optional alias= value, mapping " + keyName + "->" + keyName);
-                }
-
-                keyName = keyName.toLowerCase();
-                keyAlias = keyAlias.toLowerCase();
-
-                typeAliasPrefix = "/typeAlias/" + keyAlias + '/';
-                typeMapPrefix = "/typeMap/" + keyAlias + '/';
-                keyMap.put(keyName, keyAlias);
-                bcpTypeAliasPrefix = "/bcpTypeAlias/" + keyName + '/';
-                lastKeyName = keyName;
-                addOtherInfo(qName, attr, keyName, SKIP_KEY_ATTRIBUTES);
-            } else if (qName.equals("type")) {
-                String typeName = attr.getValue("name");
-                if (typeName == null) {
-                    return;
-                }
-
-                // BCP47 type alias (maps deprecated type to preferred type)
-                String preferredTypeName = attr.getValue("preferred");
-                if (preferredTypeName != null) {
-                    icuData.add(bcpTypeAliasPrefix + typeName, preferredTypeName);
-                    return;
-                }
-
-                String alias = attr.getValue("alias");
-                if (alias == null) {
-                    // Generate type map entry using empty value
-                    // (an empty value indicates same type name
-                    // is used for both BCP47 and legacy type.
-                    icuData.add(typeMapPrefix + typeName, "");
-                } else {
-                    String[] aliases = alias.split("\\s+");
-                    String mainAlias = aliases[0];
-                    icuData.add(typeMapPrefix + formatName(mainAlias), typeName);
-                    for (int i = 1; i < aliases.length; i++) {
-                        icuData.add(typeAliasPrefix + formatName(aliases[i]), mainAlias);
-                    }
-                }
-                addOtherInfo(qName, attr, lastKeyName + "/" + typeName, SKIP_KEY_ATTRIBUTES);
-            }
-        }
-
-        private void addOtherInfo(String qName, Attributes attr, String typeName, Set<String> excludedAttributes) {
-            for (int i = 0; i < attr.getLength(); ++i) {
-                String name = attr.getQName(i);
-                String value = attr.getValue(i);
-                if (excludedAttributes.contains(name)
-                    || name.equals("deprecated") && value.equals("false")) {
-                    continue;
-                }
-                keyMap.put("@" + qName + "Info/" + name + "/" + typeName, value);
-            }
-        }
-
-        private String formatName(String str) {
-            if (str.indexOf('/') > -1) {
-                str = '"' + str.replace('/', ':') + '"';
-            }
-            return str;
-        }
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/BreakIteratorMapper.java b/tools/java/org/unicode/cldr/icu/BreakIteratorMapper.java
deleted file mode 100644
index 9cf65f5..0000000
--- a/tools/java/org/unicode/cldr/icu/BreakIteratorMapper.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.File;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.unicode.cldr.util.CLDRFile;
-import org.unicode.cldr.util.Factory;
-import org.unicode.cldr.util.XPathParts;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-import com.ibm.icu.impl.Utility;
-import com.ibm.icu.text.MessageFormat;
-
-/**
- * Converts special ICU break iterator files for ICU.
- * @author jchye
- */
-class BreakIteratorMapper extends Mapper {
-    private String sourceDir;
-    private Factory specialFactory;
-    private Set<String> brkSource = new HashSet<String>();
-    private Set<String> dictSource = new HashSet<String>();
-
-    /**
-     * @param specialFactory the factory containing the ICU xml files for break iterators.
-     */
-    public BreakIteratorMapper(String sourceDir, Factory specialFactory) {
-        this.sourceDir = sourceDir;
-        this.specialFactory = specialFactory;
-    }
-
-    /**
-     * @return CLDR data converted to an ICU-friendly format. (this processes the special data from the ICU side)
-     */
-    @Override
-    public IcuData[] fillFromCldr(String locale) {
-        IcuData icuData = new IcuData("common/segments/" + locale + ".xml ../../xml/brkitr/" + locale + ".xml", locale, true);
-        CLDRFile specialsFile = specialFactory.make(locale, false);
-        BreakIteratorHandler handler = new BreakIteratorHandler(icuData);
-        File file = new File(sourceDir, locale + ".xml");
-        MapperUtils.parseFile(file, handler);
-
-        for (String path : specialsFile) {
-            /*
-             * example paths:
-                //ldml/special/icu:breakIteratorData/icu:boundaries/icu:title[@icu:dependency="title.brk"]
-                //ldml/special/icu:breakIteratorData/icu:dictionaries/icu:dictionary[@icu:dependency="laodict.dict"][@type="Laoo"]
-             */
-            if (!path.startsWith("//ldml/special/icu:breakIteratorData")) continue;
-            String fullPath = specialsFile.getFullXPath(path);
-            final XPathParts xpp = XPathParts.getFrozenInstance(fullPath);
-            final String element = xpp.getElement(-1);
-            final String element2 = xpp.getElement(-2);
-            Set<String> source = null;
-            if (!element.startsWith("icu:") || !element.startsWith("icu:")) {
-                System.err.println("WARNING: brkiter: in " + locale + ".xml (ICU specials): Ignoring path: " + fullPath);
-            } else {
-                final String type;
-
-                if (!element.startsWith("icu:") || !element.startsWith("icu:")) {
-                    System.err.println("WARNING: brkiter: in " + locale + ".xml (ICU specials): Ignoring path (unknown special): " + fullPath);
-                    continue;
-                }
-
-                if (element2.equals("icu:boundaries")) {
-                    type = element.split(":")[1]; // icu:word -> "word"
-                    source = brkSource;
-                } else if (element2.equals("icu:dictionaries")) {
-                    type = xpp.getAttributeValue(-1, "type"); // [@type="Laoo"] -> "Laoo"
-                    source = dictSource;
-                } else {
-                    System.err
-                        .println("WARNING: brkiter: in " + locale + ".xml (ICU specials): Ignoring path (unknown element: " + element2 + "): " + fullPath);
-                    continue;
-                }
-                final String filename = xpp.getAttributeValue(-1, "icu:dependency");
-                if (filename == null || type == null) {
-                    System.err.println("WARNING: brkiter: in " + locale + ".xml (ICU specials): Malformed path: " + fullPath);
-                } else {
-                    final String altValue = xpp.getAttributeValue(-1, "alt");
-                    final String extType = (altValue == null) ? type : type.concat("_").concat(altValue);
-                    source.add(filename.substring(0, filename.lastIndexOf('.'))); // "title.brk" -> "title"
-                    icuData.add(
-                        MessageFormat.format("/{0}/{1}:process(dependency)", element2.split(":")[1], extType), filename); // "Laoo", "laodict.dict"
-                }
-            }
-        }
-
-        return new IcuData[] { icuData };
-    }
-
-    /**
-     * The XML handler for break iterator data.  (from the CLDR side)
-     */
-    private class BreakIteratorHandler extends MapperUtils.EmptyHandler {
-        private IcuData icuData;
-        private String segPath;
-        private StringBuilder currentText = new StringBuilder();
-        private StringBuilder value = new StringBuilder();
-
-        public BreakIteratorHandler(IcuData icuData) {
-            this.icuData = icuData;
-        }
-
-        @Override
-        public void startElement(String uri, String localName, String qName, Attributes attr) throws SAXException {
-            if (qName.equals("segmentation")) {
-                segPath = "/exceptions/" + attr.getValue("type") + ":array";
-            } else if (qName.equals("version")) {
-                icuData.add("/Version", CLDRFile.GEN_VERSION);
-            }
-        }
-
-        @Override
-        public void endElement(String uri, String localName, String qName) throws SAXException {
-            if (qName.equals("exception") || // deprecated name
-                qName.equals("suppression")) { // new name
-                value.append(Utility.escape(currentText.toString()));
-                icuData.add(segPath, value.toString());
-                currentText.setLength(0);
-                value.setLength(0);
-            }
-        }
-
-        @Override
-        public void characters(char[] ch, int start, int length) throws SAXException {
-            currentText.append(ch, start, length);
-        }
-    }
-
-    @Override
-    public Collection<String> getAvailable() {
-        return specialFactory.getAvailable();
-    }
-
-    @Override
-    public Makefile generateMakefile(Collection<String> aliases) {
-        Makefile makefile = new Makefile("BRK_RES");
-        makefile.addSyntheticAlias(aliases);
-        makefile.addAliasSource();
-        // Add variables for non-XML source files.
-        makefile.addEntry("BRK_DICT_SOURCE", "List of dictionary files (dict).", dictSource);
-        makefile.addEntry("BRK_SOURCE", "List of break iterator files (brk).", brkSource);
-        makefile.addSource(sources);
-        return makefile;
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/CheckIBMCoverage.java b/tools/java/org/unicode/cldr/icu/CheckIBMCoverage.java
deleted file mode 100644
index 8aa6c68..0000000
--- a/tools/java/org/unicode/cldr/icu/CheckIBMCoverage.java
+++ /dev/null
@@ -1,348 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-import org.unicode.cldr.ant.CLDRConverterTool;
-import org.unicode.cldr.test.CheckCLDR;
-import org.unicode.cldr.test.CheckCLDR.CheckStatus;
-import org.unicode.cldr.test.CheckCoverage;
-import org.unicode.cldr.util.CLDRFile;
-import org.unicode.cldr.util.Factory;
-import org.unicode.cldr.util.LDMLUtilities;
-import org.unicode.cldr.util.Level;
-import org.unicode.cldr.util.StandardCodes;
-import org.w3c.dom.Node;
-
-import com.ibm.icu.dev.tool.UOption;
-import com.ibm.icu.text.Transliterator;
-
-public class CheckIBMCoverage extends CLDRConverterTool {
-    /**
-     * These must be kept in sync with getOptions().
-     */
-    private static final int HELP1 = 0;
-    private static final int HELP2 = 1;
-    private static final int SOURCEDIR = 2;
-    private static final int DESTDIR = 3;
-    private static final int VERBOSE = 4;
-
-    private static final UOption[] options = new UOption[] {
-        UOption.HELP_H(),
-        UOption.HELP_QUESTION_MARK(),
-        UOption.SOURCEDIR(),
-        UOption.DESTDIR(),
-        UOption.VERBOSE(),
-    };
-
-    private String sourceDir = null;
-    private String destDir = null;
-    private boolean verbose = false;
-
-    private void usage() {
-        System.out.println("\nUsage: CheckIBMCoverage [OPTIONS] [FILES]\nCheckIBMCoverage [OPTIONS] -w [DIRECTORY] \n" +
-            "This program is used to convert LDML files to ICU ResourceBundle TXT files.\n" +
-            "Please refer to the following options. Options are not case sensitive.\n" +
-            "Options:\n" +
-            "-s or --sourcedir          source directory for files followed by path, default is current directory.\n" +
-            "-d or --destdir            destination directory, followed by the path, default is current directory.\n" +
-            "-h or -? or --help         this usage text.\n" +
-            "-v or --verbose            print out verbose output.\n" +
-            "example: org.unicode.cldr.icu.CheckIBMCoverage -s xxx -d yyy en.xml");
-        System.exit(-1);
-    }
-
-    private void printInfo(String message) {
-        if (verbose) {
-            System.out.println("INFO : " + message);
-        }
-    }
-
-    private void printWarning(String fileName, String message) {
-        System.err.println(fileName + ": WARNING : " + message);
-    }
-
-    private void printError(String fileName, String message) {
-        System.err.println(fileName + ": ERROR : " + message);
-    }
-
-    public static void main(String[] args) {
-        CheckIBMCoverage cov = new CheckIBMCoverage();
-        cov.processArgs(args);
-    }
-
-    public void processArgs(String[] args) {
-        int remainingArgc = 0;
-        // for some reason when
-        // Class classDefinition = Class.forName(className);
-        // object = classDefinition.newInstance();
-        // is done then the options are not reset!!
-        for (int i = 0; i < options.length; i++) {
-            options[i].doesOccur = false;
-        }
-        try {
-            remainingArgc = UOption.parseArgs(args, options);
-        } catch (Exception e) {
-            printError("", "(parsing args): " + e.toString());
-            e.printStackTrace();
-            usage();
-        }
-        if (args.length == 0 || options[HELP1].doesOccur || options[HELP2].doesOccur) {
-            usage();
-        }
-
-        if (options[SOURCEDIR].doesOccur) {
-            sourceDir = options[SOURCEDIR].value;
-        }
-        if (options[DESTDIR].doesOccur) {
-            destDir = options[DESTDIR].value;
-        }
-        if (options[VERBOSE].doesOccur) {
-            verbose = true;
-        }
-        if (destDir == null) {
-            destDir = ".";
-        }
-
-        try {
-            if (getLocalesMap() != null && getLocalesMap().size() > 0) {
-                processMap();
-            } else if (remainingArgc > 0) {
-                for (int i = 0; i < remainingArgc; i++) {
-                    processFile(args[i], verbose);
-                }
-            } else if (sourceDir != null) {
-                FilenameFilter filter = new FilenameFilter() {
-                    public boolean accept(File dir, String name) {
-                        if (name.matches(".*_.*\\.xml")) {
-                            return true;
-                        }
-                        return false;
-                    }
-                };
-                File myDir = new File(sourceDir);
-                String[] files = myDir.list(filter);
-                if (getLocalesMap() == null) {
-                    setLocalesMap(new TreeMap<String, String>());
-                }
-                for (int i = 0; i < files.length; i++) {
-                    getLocalesMap().put(files[i], "");
-                }
-                processMap();
-            } else {
-                printError("", "No files specified for processing. Please check the arguments and try again");
-                usage();
-            }
-        } catch (IOException ex) {
-            printError("", ex.getMessage());
-            ex.printStackTrace();
-        }
-    }
-
-    private void processMap() throws IOException {
-        FileWriter fw = new FileWriter(destDir + File.separator + "IBMCoverage.html");
-        fw.write("<html>\n");
-        fw.write("\t<body>\n");
-        // fw.write("\t\t<br><b><font color=\"FF0000\">Note: Please ignore the POSIX column. The data is not accurate</font></b>\n");
-        fw.write("\t\t<table border=\"1\">\n");
-        fw.write("\t\t\t<tr>\n");
-        fw.write("\t\t\t\t<th>Locale</td>\n");
-        fw.write("\t\t\t\t<th>Group</td>\n");
-        fw.write("\t\t\t\t<th>Minimum Coverage(POSIX)</td>\n");
-        fw.write("\t\t\t\t<th>Minimum Coverage(BASIC)</td>\n");
-        fw.write("\t\t\t\t<th>Minimum Coverage(ICU)</td>\n");
-        fw.write("\t\t\t</tr>\n");
-        int bp = 0, bf = 0, mp = 0, mf = 0;
-
-        for (Iterator<String> iter = getLocalesMap().keySet().iterator(); iter.hasNext();) {
-            String fileName = iter.next();
-            int index = fileName.indexOf(".");
-            String locale = fileName.substring(0, index);
-            String glf = locale.concat("_group.log");
-            String blf = locale.concat("_basic.log");
-            String plf = locale.concat("_posix.log");
-            StandardCodes sc = StandardCodes.make();
-            String group = sc.getGroup(locale, "IBM");
-            if (group == null) {
-                printWarning(locale, " not required by IBM whitepaper");
-                continue;
-            }
-            Level level = Level.get(group);
-
-            fw.write("\t\t\t<tr>\n");
-            fw.write("\t\t\t\t<td>" + locale + "</td>\n");
-            fw.write("\t\t\t\t<td>" + group + "</td>\n");
-
-            // check posix coverage
-            int posix = processFile(locale, destDir + File.separator + plf, Level.POSIX, group, true);
-            if (posix == 0) {
-                fw.write("\t\t\t\t<td><img src=\"blue_check.gif\" border=\"0\" ALT=\"Pass\"></td>\n");
-                mp++;
-            } else {
-                fw.write("\t\t\t\t<td><a href=\"" + plf
-                    + "\"><img src=\"red_x.gif\" border=\"0\" ALT=\"Fail\"></a></td>\n");
-                mf++;
-            }
-
-            int basic = processFile(locale, destDir + File.separator + blf, Level.BASIC, group, true);
-            if (basic == 0) {
-                fw.write("\t\t\t\t<td><img src=\"blue_check.gif\" border=\"0\" ALT=\"Pass\"></td>\n");
-                bp++;
-            } else {
-                fw.write("\t\t\t\t<td><a href=\"" + blf
-                    + "\"><img src=\"red_x.gif\" border=\"0\" ALT=\"Fail\"></a></td>\n");
-                bf++;
-            }
-
-            if (level.equals(Level.POSIX)) {
-                if (posix == 0) {
-                    fw.write("\t\t\t\t<td><img src=\"blue_check.gif\" border=\"0\" ALT=\"Pass\"></td>\n");
-                } else {
-                    fw.write("\t\t\t\t<td><a href=\"" + glf
-                        + "\"><img src=\"red_x.gif\" border=\"0\" ALT=\"Fail\"></a></td>\n");
-                }
-            } else if (level.equals(Level.BASIC)) {
-                if (basic == 0) {
-                    fw.write("\t\t\t\t<td><img src=\"blue_check.gif\" border=\"0\" ALT=\"Pass\"></td>\n");
-                } else {
-                    fw.write("\t\t\t\t<td><a href=\"" + glf
-                        + "\"><img src=\"red_x.gif\" border=\"0\" ALT=\"Fail\"></a></td>\n");
-                }
-            } else {
-                int out = processFile(locale, destDir + File.separator + glf, level, group, true);
-
-                if (out == 0) {
-                    fw.write("\t\t\t\t<td><img src=\"blue_check.gif\" border=\"0\" ALT=\"Pass\"></td>\n");
-                } else {
-                    fw.write("\t\t\t\t<td><a href=\"" + glf
-                        + "\"><img src=\"red_x.gif\" border=\"0\" ALT=\"Fail\"></a></td>\n");
-                }
-            }
-            fw.write("\t\t\t</tr>\n");
-            fw.flush();
-        }
-        fw.write("\t\t</table>\n");
-
-        fw.write("\t\t<br><b><i>Note: </i></b>\n");
-        fw.write("\t\t<ol>\n");
-        fw.write("\t\t\t<il>POSIX==G4</il>\n");
-        fw.write("\t\t\t<il>Basic==G3</il>\n");
-        fw.write("\t\t\t<il>Moderate==G2</il>\n");
-        fw.write("\t\t\t<il>Modern==G1</il>\n");
-        fw.write("\t\t\t<il>Comprehensive==G0</il>\n");
-        fw.write("\t\t</ol>\n");
-        fw.write("\t\t<br><b>Basic Requirement Passed: " + bp + "</b>\n");
-        fw.write("\t\t<br><b>Basic Requirement Failed: " + bf + "</b>\n");
-        fw.write("\t\t<br><b>Total: " + (bp + bf) + "</b>\n");
-        fw.write("\t\t<br><b>Posix Requirement Passed: " + mp + "</b>\n");
-        fw.write("\t\t<br><b>Posix Requirement Failed: " + mf + "</b>\n");
-        fw.write("\t\t<br><b>Total: " + (mp + mf) + "</b>\n");
-        fw.write("\t</body>\n");
-        fw.write("</html>\n");
-        fw.flush();
-        fw.close();
-    }
-
-    static Transliterator prettyPath = CheckCLDR.getTransliteratorFromFile("ID", "prettyPath.txt");
-
-    private int processFile(String fileName, boolean pretty) throws IOException {
-        int index = fileName.indexOf(".");
-        String locale = fileName.substring(0, index);
-        StandardCodes sc = StandardCodes.make();
-        String group = sc.getGroup(locale, "IBM");
-        if (group == null) {
-            printWarning(locale, " not required by IBM whitepaper");
-            return -1;
-        }
-        Level level = Level.get(group);
-        int out = processFile(locale, destDir + File.separator + locale + "_posix.log", Level.POSIX, group, pretty);
-        out = processFile(locale, destDir + File.separator + locale + "_basic.log", Level.BASIC, group, pretty);
-        out = processFile(locale, destDir + File.separator + locale + "_group.log", level, group, pretty);
-        return out;
-    }
-
-    private static final String RULES = "//ldml/collations/collation[@type=\"standard\"]/rules";
-    private static final String COLLATIONS = "//ldml/collations";
-
-    private int processFile(String locale, String logFile, Level level, String group, boolean pretty)
-        throws IOException {
-
-        // Map m = new TreeMap();
-        FileWriter fw = new FileWriter(logFile);
-        int ret = check(locale, group, level, fw);
-        if (level.compareTo(Level.POSIX) == 0) {
-            Node node = LDMLUtilities.getFullyResolvedLDML(sourceDir + "/../collation", locale, false, true, false,
-                false);
-            Node collation = LDMLUtilities.getNode(node, COLLATIONS);
-            String validSubLocales = LDMLUtilities.getAttributeValue(collation, LDMLConstants.VALID_SUBLOCALE);
-            if (validSubLocales == null || !validSubLocales.matches(".*\\b" + locale + ".*\\b")) {
-                fw.write(COLLATIONS + " : Found but not valid according to validSublocales attribute");
-                fw.write("\n");
-            }
-
-            Node rules = LDMLUtilities.getNode(node, RULES);
-            if (rules == null) {
-                fw.write(RULES + " : Not found. Required for POSIX level coverage");
-                fw.write("\n");
-            }
-        }
-        fw.flush();
-        fw.close();
-        return ret;
-    }
-
-    private int check(String locale, String group, Level level, FileWriter fw) throws IOException {
-
-        Factory cldrFactory = Factory.make(sourceDir, "xml");
-        CheckCoverage coverage = new CheckCoverage(cldrFactory);
-        CLDRFile file = cldrFactory.make(locale, true);
-        List<CheckStatus> result = new ArrayList<CheckStatus>();
-        Map<String, String> options = new HashMap<String, String>();
-        options.put("CoverageLevel.localeType", group);
-        options.put("CheckCoverage.requiredLevel", group);
-        options.put("submission", "true");
-        printInfo("Processing file " + locale);
-        coverage.setCldrFileToCheck(file, options, result);
-        CLDRFile resolved = coverage.getResolvedCldrFileToCheck();
-        Set<String> paths = new TreeSet<String>(resolved.getComparator());
-        com.ibm.icu.dev.util.CollectionUtilities.addAll(resolved.iterator(), paths);
-        int ret = 0;
-        if (level != null) {
-            coverage.setRequiredLevel(level);
-        }
-        for (Iterator<String> it2 = paths.iterator(); it2.hasNext();) {
-
-            String path = (String) it2.next();
-            String value = file.getStringValue(path);
-            String fullPath = file.getFullXPath(path);
-            if (verbose) {
-                System.out.println(fullPath);
-            }
-            result.clear();
-            coverage.check(path, fullPath, value, options, result);
-            for (Iterator<CheckStatus> it3 = result.iterator(); it3.hasNext();) {
-                CheckStatus status = (CheckStatus) it3.next();
-                // String statusString = status.toString(); // com.ibm.icu.impl.Utility.escape(
-                CheckStatus.Type statusType = status.getType();
-
-                if (statusType.equals(CheckStatus.errorType)) {
-                    fw.write(fullPath + " : Untranslated. " + status.getMessage());
-                    fw.write("\n");
-                    ret = -1;
-                    continue;
-                }
-            }
-        }
-        return ret;
-    }
-}
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/icu/CollationMapper.java b/tools/java/org/unicode/cldr/icu/CollationMapper.java
deleted file mode 100644
index cd8b552..0000000
--- a/tools/java/org/unicode/cldr/icu/CollationMapper.java
+++ /dev/null
@@ -1,263 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.unicode.cldr.util.Builder;
-import org.unicode.cldr.util.CLDRFile;
-import org.unicode.cldr.util.CLDRFile.DraftStatus;
-import org.unicode.cldr.util.Factory;
-import org.unicode.cldr.util.PatternCache;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-import com.ibm.icu.impl.Utility;
-import com.ibm.icu.text.MessageFormat;
-
-/**
- * Converts CLDR collation files to the ICU format.
- * @author jchye
- */
-public class CollationMapper extends Mapper {
-    private static Pattern SPECIALS_PATH = PatternCache.get("//ldml/special/icu:([\\w_]++)\\[@icu:([\\w_]++)=\"([^\"]++)\"]");
-    private String sourceDir;
-    private Factory specialFactory;
-    private Set<String> validSubLocales = new HashSet<String>();
-
-    // TODO: CLDR 28 ticket #8289 "Move collator CLDR settings into ICU format"
-    // deprecated the collation sub-elements
-    // import, settings, suppress_contractions, and optimize
-    // and changed the data from XML syntax to ICU syntax.
-    // Remove conversion of these elements when we do not need to handle old data any more.
-
-    // Some settings have to be converted to numbers.
-    private Map<String, String> settingsMap = Builder.with(new HashMap<String, String>())
-        .put("primary", "1")
-        .put("secondary", "2")
-        .put("tertiary", "3")
-        .put("quarternary", "4")
-        .put("identical", "5")
-        .put("on", "2")
-        .get();
-
-    /**
-     * @param sourceDir the source dir of the collation files
-     * @param specialFactory the factory for any ICU-specific collation info
-     */
-    public CollationMapper(String sourceDir, Factory specialFactory) {
-        this.sourceDir = sourceDir;
-        this.specialFactory = specialFactory;
-    }
-
-    /**
-     * @return CLDR data converted to an ICU-friendly format
-     */
-    @Override
-    public IcuData[] fillFromCldr(String locale) {
-        List<IcuData> dataList = new ArrayList<IcuData>();
-        IcuData mainLocale = new IcuData("common/collation/" + locale + ".xml", locale, true);
-        CollationHandler handler = new CollationHandler(mainLocale);
-        File file = new File(sourceDir, locale + ".xml");
-        MapperUtils.parseFile(file, handler);
-        dataList.add(mainLocale);
-
-        String[] subLocales = handler.getSubLocales();
-        if (subLocales != null) {
-            for (String subLocale : subLocales) {
-                dataList.add(fillSubLocale(locale, subLocale));
-                validSubLocales.add(subLocale);
-            }
-        }
-
-        if (hasSpecialFile(locale)) {
-            CLDRFile specialFile = specialFactory.make(locale, false);
-            mainLocale.setFileComment("ICU <specials> source: <path>/xml/collation/" + locale + ".xml");
-            for (String path : specialFile) {
-                String fullPath = specialFile.getFullXPath(path);
-                Matcher matcher = SPECIALS_PATH.matcher(fullPath);
-                if (matcher.matches()) {
-                    mainLocale.add(
-                        MessageFormat.format("/{0}:process({1})", matcher.group(1), matcher.group(2)),
-                        matcher.group(3));
-                }
-            }
-        }
-
-        return MapperUtils.toArray(dataList);
-    }
-
-    /**
-     * Creates an IcuData object for the specified sublocale
-     * @param locale the parent of the sublocale
-     * @param subLocale the sublocale
-     * @return
-     */
-    private IcuData fillSubLocale(String locale, String subLocale) {
-        IcuData icuData = new IcuData("icu-config.xml & build.xml", subLocale, true);
-        icuData.setFileComment("validSubLocale of \"" + locale + "\"");
-        icuData.add("/___", "");
-        return icuData;
-    }
-
-    /**
-     * @param filename
-     * @return true if a special XML file with the specified filename is available.
-     */
-    private boolean hasSpecialFile(String filename) {
-        return specialFactory != null && specialFactory.getAvailable().contains(filename);
-    }
-
-    /**
-     * The XML handler for collation data.
-     */
-    private class CollationHandler extends MapperUtils.EmptyHandler {
-        private IcuData icuData;
-        private StringBuilder currentText = new StringBuilder();
-        private String collationType;
-        private boolean isShort;
-        private List<String> properties = new ArrayList<String>();
-        private List<String> rules = new ArrayList<String>();
-        private String[] subLocales;
-
-        public CollationHandler(IcuData icuData) {
-            this.icuData = icuData;
-        }
-
-        @Override
-        public void startElement(String uri, String localName, String qName, Attributes attr) throws SAXException {
-            if (qName.equals("collation")) {
-                DraftStatus status = DraftStatus.forString(attr.getValue("draft"));
-                collationType = status.compareTo(DraftStatus.contributed) < 0 ? null : attr.getValue("type");
-                isShort = attr.getValue("alt") != null;
-                properties.clear();
-                rules.clear();
-            } else if (qName.equals("collations")) {
-                String validSubLocales = attr.getValue("validSubLocales");
-                if (validSubLocales != null) {
-                    subLocales = validSubLocales.split("\\s++");
-                }
-            } else if (qName.equals("version")) {
-                icuData.add("/Version", CLDRFile.GEN_VERSION);
-            }
-            if (collationType == null) return;
-
-            // Collation-specific elements.
-            if (qName.equals("settings")) {
-                for (int i = 0; i < attr.getLength(); i++) {
-                    String name = attr.getLocalName(i);
-                    String value = attr.getValue(i);
-                    if (name.equals("strength") || name.equals("backwards")) {
-                        value = settingsMap.get(value);
-                    } else if (name.equals("hiraganaQuaternary")) {
-                        name = "hiraganaQ";
-                    }
-                    properties.add(name + " " + value);
-                }
-            } else if (qName.equals("import")) {
-                String value = attr.getValue("source");
-                String type = attr.getValue("type");
-                if (type != null) {
-                    value += "-u-co-" + type;
-                }
-                properties.add("import " + value);
-            }
-        }
-
-        @Override
-        public void endElement(String uri, String localName, String qName) throws SAXException {
-            // collationType will only be null if the draft status is insufficient.
-            if (qName.equals("defaultCollation")) {
-                icuData.add("/collations/default", currentText.toString());
-            } else if (collationType == null) {
-                currentText.setLength(0);
-                return;
-            }
-
-            if (qName.equals("suppress_contractions")) {
-                properties.add("suppressContractions " + currentText.toString());
-            } else if (qName.equals("cr")) {
-                String[] lines = currentText.toString().split("\n");
-                for (String line : lines) {
-                    int commentPos = Utility.quotedIndexOf(line, 0, line.length(), "#");
-                    if (commentPos > -1) {
-                        line = line.substring(0, commentPos);
-                    }
-                    line = line.trim();
-                    if (line.length() > 0) {
-                        rules.add(line);
-                    }
-                }
-            } else if (qName.equals("collation")) {
-                // Add attributes before the main rules.
-                StringBuilder attrBuffer = new StringBuilder();
-                if (properties.size() > 0) {
-                    for (String property : properties) {
-                        attrBuffer.append('[').append(property).append(']');
-                    }
-                    rules.add(0, attrBuffer.toString());
-                }
-
-                String[] rulesArray;
-                if (rules.size() == 0) {
-                    rulesArray = new String[] { "" };
-                } else {
-                    rulesArray = new String[rules.size()];
-                    rules.toArray(rulesArray);
-                }
-
-                String rbPath = "/collations/" + collationType + "/Sequence";
-                // Always prefer the short version.
-                if (isShort || !icuData.containsKey(rbPath)) {
-                    icuData.replace(rbPath, rulesArray);
-                    icuData.replace("/collations/" + collationType + "/Version", new String[] { CLDRFile.GEN_VERSION });
-                }
-            }
-            currentText.setLength(0);
-        }
-
-        @Override
-        public void characters(char[] ch, int start, int length) throws SAXException {
-            currentText.append(ch, start, length);
-        }
-
-        public String[] getSubLocales() {
-            return subLocales;
-        }
-    }
-
-    @Override
-    public Collection<String> getAvailable() {
-        return MapperUtils.getNames(sourceDir);
-    }
-
-    @Override
-    public Makefile generateMakefile(Collection<String> aliases) {
-        Makefile makefile = new Makefile("COLLATION");
-        makefile.addSyntheticAlias(aliases);
-        makefile.addAliasSource();
-        // Split sources into locales and sublocales.
-        List<String> subLocales = new ArrayList<String>();
-        List<String> locales = new ArrayList<String>();
-        locales.add("$(COLLATION_EMPTY_SOURCE)");
-        for (String source : sources) {
-            if (validSubLocales.contains(source)) {
-                subLocales.add(source);
-            } else {
-                locales.add(source);
-            }
-        }
-        makefile.addEntry("COLLATION_EMPTY_SOURCE",
-            "Empty locales, used for validSubLocale fallback.",
-            subLocales);
-        makefile.addSource(locales);
-        return makefile;
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/CompareIcuOutput.java b/tools/java/org/unicode/cldr/icu/CompareIcuOutput.java
deleted file mode 100644
index b66dc78..0000000
--- a/tools/java/org/unicode/cldr/icu/CompareIcuOutput.java
+++ /dev/null
@@ -1,514 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.Reader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-
-import org.unicode.cldr.draft.FileUtilities;
-import org.unicode.cldr.tool.Option.Options;
-
-import com.ibm.icu.impl.Row;
-import com.ibm.icu.impl.Row.R2;
-import com.ibm.icu.impl.Utility;
-import com.ibm.icu.lang.UCharacter;
-import com.ibm.icu.text.UForwardCharacterIterator;
-import com.ibm.icu.text.UTF16;
-import com.ibm.icu.text.UnicodeSet;
-
-/**
- * Compares the contents of ICU data output while ignoring comments.
- *
- * @author markdavis, jchye
- *
- */
-public class CompareIcuOutput {
-    private static final boolean DEBUG = false;
-
-    private static final Options options = new Options(
-        "Usage: RBChecker [OPTIONS] DIR1 DIR2 FILE_REGEX\n" +
-            "This program is used to compare the RB text files in two different directories.\n" +
-            "  Example: org.unicode.cldr.icu.RBChecker olddatadir newdatadir .*")
-                .add("sort", 's', null, null, "Sort values for comparison");
-
-    private static final Comparator<String[]> comparator = new Comparator<String[]>() {
-        @Override
-        public int compare(String[] arg0, String[] arg1) {
-            return arg0[0].compareTo(arg1[0]);
-        }
-    };
-
-    private static boolean shouldSort = false;
-
-    public static void main(String[] args) throws IOException {
-        String dir1 = args[0];
-        String dir2 = args[1];
-        String regex = args[2];
-        System.out.println("dir1 " + dir1);
-        System.out.println("dir2 " + dir2);
-        System.out.println("regex " + regex);
-        shouldSort = options.get("sort").doesOccur();
-        long totaltime = System.currentTimeMillis();
-        System.out.println("Comparing the contents of text files...");
-        compareTextFiles(dir1, dir2, regex);
-        System.out.println("Total time taken: " + (System.currentTimeMillis() - totaltime));
-    }
-
-    /**
-     * Parses and compares two ICU textfiles.
-     *
-     * @param dir1
-     * @param dir2
-     * @param regex
-     * @throws IOException
-     */
-    private static void compareTextFiles(String dir1, String dir2, String regex) throws IOException {
-        File localeDir = new File(dir1);
-        if (!localeDir.exists()) localeDir = new File(dir1);
-        String[] filenames = localeDir.list();
-        int same = 0, different = 0;
-        for (String filename : filenames) {
-            if (!filename.matches(regex + "\\.txt")) continue;
-            String locale = filename.substring(0, filename.length() - 4);
-            try {
-                IcuData oldData = loadDataFromTextfiles(dir1, locale);
-                IcuData newData = loadDataFromTextfiles(dir2, locale);
-                StringBuffer messages = new StringBuffer();
-                if (analyseMatches(oldData, newData, messages)) {
-                    System.out.println("=== Differences found for " + locale + " ===");
-                    System.out.print(messages);
-                    different++;
-                } else {
-                    same++;
-                }
-            } catch (FileNotFoundException e) {
-                System.err.println(locale + " file not found, skipping");
-            }
-        }
-        System.out.println("Check finished with " + different + " different and " + same + " same locales.");
-    }
-
-    private static IcuData loadDataFromTextfiles(String icuPath, String locale) throws IOException {
-        List<Row.R2<MyTokenizer.Type, String>> comments = new ArrayList<Row.R2<MyTokenizer.Type, String>>();
-        IcuData icuData = new IcuData(locale + ".xml", locale, true);
-        String filename = icuPath + '/' + locale + ".txt";
-        if (new File(filename).exists()) {
-            parseRB(filename, icuData, comments);
-        } else {
-            throw new FileNotFoundException(filename + " does not exist.");
-        }
-        return icuData;
-    }
-
-    /**
-     * Computes lists of all differences between two sets of IcuData.
-     *
-     * @param oldData
-     * @param newData
-     */
-    private static boolean analyseMatches(IcuData oldData, IcuData newData, StringBuffer buffer) {
-        boolean hasDifferences = false;
-        Set<String> missing = new TreeSet<String>(oldData.keySet());
-        missing.removeAll(newData.keySet());
-        if (missing.size() > 0) {
-            buffer.append("Missing paths:\n");
-            printAllInSet(oldData, missing, buffer);
-            hasDifferences = true;
-        }
-        Set<String> extra = new TreeSet<String>(newData.keySet());
-        extra.removeAll(oldData.keySet());
-        if (extra.size() > 0) {
-            buffer.append("Extra paths:\n");
-            printAllInSet(newData, extra, buffer);
-            hasDifferences = true;
-        }
-        Set<String> common = new TreeSet<String>(oldData.keySet());
-        common.retainAll(newData.keySet());
-        for (String rbPath : common) {
-            if (rbPath.startsWith("/Version")) continue; // skip version
-            List<String[]> oldValues = oldData.get(rbPath);
-            List<String[]> newValues = newData.get(rbPath);
-            if (shouldSort) {
-                Collections.sort(oldValues, comparator);
-                Collections.sort(newValues, comparator);
-            }
-            // Print out any value differences.
-            if (valuesDiffer(oldValues, newValues)) {
-                buffer.append(rbPath + " contains differences:\n");
-                buffer.append("\tOld: ");
-                printValues(oldValues, buffer);
-                buffer.append("\tNew: ");
-                printValues(newValues, buffer);
-                hasDifferences = true;
-            }
-        }
-        return hasDifferences;
-    }
-
-    private static void printAllInSet(IcuData icuData, Set<String> paths, StringBuffer buffer) {
-        for (String path : paths) {
-            buffer.append("\t" + path + " = ");
-            printValues(icuData.get(path), buffer);
-        }
-    }
-
-    private static void printValues(List<String[]> values, StringBuffer buffer) {
-        // Enclose both numbers and strings in quotes for simplicity.
-        for (String[] array : values) {
-            if (array.length == 1) {
-                buffer.append('"' + array[0] + '"');
-            } else {
-                buffer.append("[");
-                for (String value : array) {
-                    buffer.append('"' + value + "\", ");
-                }
-                buffer.append("]");
-            }
-            buffer.append(", ");
-        }
-        buffer.append('\n');
-    }
-
-    /**
-     * @param oldValues
-     * @param newValues
-     * @return true if the contents of the lists are identical
-     */
-    private static boolean valuesDiffer(List<String[]> oldValues, List<String[]> newValues) {
-        if (oldValues.size() != newValues.size()) return true;
-        boolean differ = false;
-        for (int i = 0; i < oldValues.size(); i++) {
-            String[] oldArray = oldValues.get(i);
-            String[] newArray = newValues.get(i);
-            if (oldArray.length != newArray.length) {
-                differ = true;
-                break;
-            }
-            for (int j = 0; j < oldArray.length; j++) {
-                // Ignore whitespace.
-                if (!oldArray[j].replace(" ", "").equals(newArray[j].replace(" ", ""))) {
-                    differ = true;
-                    break;
-                }
-            }
-        }
-        return differ;
-    }
-
-    /**
-     * Parse an ICU resource bundle into key,value items
-     *
-     * @param filename
-     * @param output
-     * @param comments
-     */
-    static void parseRB(String filename, IcuData icuData, List<R2<MyTokenizer.Type, String>> comments)
-        throws IOException {
-        BufferedReader in = null;
-        File file = new File(filename);
-        String coreFile = file.getName();
-        if (!coreFile.endsWith(".txt")) {
-            throw new IllegalArgumentException("missing .txt in: " + filename);
-        }
-        coreFile = coreFile.substring(0, coreFile.length() - 4);
-        // redo this later on to use fixed PatternTokenizer
-        in = FileUtilities.openUTF8Reader("", filename);
-        MyTokenizer tokenIterator = new MyTokenizer(in);
-        StringBuffer tokenText = new StringBuffer();
-        List<String> oldPaths = new ArrayList<String>();
-        List<Integer> indices = new ArrayList<Integer>();
-        String lastLabel = null;
-        String path = "";
-        /*
-         * AuxExemplarCharacters{
-         * "[á à ă â å ä ã ā æ ç é è ĕ ê ë ē í ì ĭ î ï ī ñ ó ò ŏ ô ö ø ō œ ú ù ŭ û ü ū ÿ"
-         * "]" } ExemplarCharacters{
-         * "[a b c d e f g h i j k l m n o p q r s t u v w x y z]"}
-         * ExemplarCharactersCurrency
-         * {"[a b c č d e f g h i j k l ł m n o º p q r s t u v w x y z]"}
-         * ExemplarCharactersIndex
-         * {"[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]"}
-         * ExemplarCharactersPunctuation{"[\- ‐ – — , ; \: ! ? . … ' ‘ ’ \"
-         * “ ” ( ) \[ \] @ * / \& # † ‡ ′ ″ §]"}
-         */
-        MyTokenizer.Type lastToken = null;
-        List<String> arrayValues = null;
-        while (true) {
-            MyTokenizer.Type nextToken = tokenIterator.next(tokenText);
-            if (DEBUG)
-                System.out.println(nextToken + "\t" + tokenText);
-            switch (nextToken) {
-            case BLOCK_COMMENT:
-            case LINE_COMMENT:
-                if (comments != null) {
-                    comments.add(Row.of(nextToken, tokenText.toString()));
-                }
-                continue;
-            case DONE:
-                if (oldPaths.size() != 0) {
-                    throw new IllegalArgumentException("missing }");
-                }
-                in.close();
-                return;
-            case ID:
-                lastLabel = lastLabel == null ? tokenText.toString() : lastLabel + " " + tokenText;
-                break;
-            case QUOTED:
-                if (lastLabel == null) {
-                    lastLabel = tokenText.toString();
-                } else {
-                    // Remove consecutive quotes.
-                    lastLabel += tokenText;
-                }
-                break;
-            case OPEN_BRACE:
-                // Check for array-type values.
-                if (lastToken == MyTokenizer.Type.COMMA) {
-                    arrayValues = new ArrayList<String>();
-                } else {
-                    oldPaths.add(path);
-                    indices.add(0);
-                    if (lastToken == MyTokenizer.Type.OPEN_BRACE || lastToken == MyTokenizer.Type.CLOSE_BRACE) {
-                        int currentIndexPos = indices.size() - 2;
-                        int currentIndex = indices.get(currentIndexPos);
-                        lastLabel = "<" + currentIndex + ">";
-                        indices.set(currentIndexPos, currentIndex + 1);
-                    } else if (lastLabel.contains(":") && !lastLabel.contains(":int") && !lastLabel.contains(":alias")
-                        || path.endsWith("/relative")) {
-                        lastLabel = '"' + lastLabel + '"';
-                    }
-                    path += "/" + lastLabel;
-                }
-                lastLabel = null;
-                break;
-            case CLOSE_BRACE:
-                if (lastLabel != null) {
-                    addPath(path, lastLabel, icuData);
-                    lastLabel = null;
-                }
-
-                if (arrayValues == null) {
-                    path = oldPaths.remove(oldPaths.size() - 1);
-                    indices.remove(indices.size() - 1);
-                } else {
-                    // Value array closed, add it to the path.
-                    String[] array = new String[0];
-                    addPath(path, arrayValues.toArray(array), icuData);
-                    arrayValues = null;
-                }
-                if (DEBUG)
-                    System.out.println("POP:\t" + path);
-                break;
-            case COMMA:
-                if (lastToken != MyTokenizer.Type.QUOTED && lastToken != MyTokenizer.Type.ID) {
-                    throw new IllegalArgumentException(filename + ", " + path + ": Commas can only occur after values ");
-                } else if (lastLabel == null) {
-                    throw new IllegalArgumentException(filename + ": Label missing!");
-                }
-                if (arrayValues != null) {
-                    arrayValues.add(lastLabel);
-                } else {
-                    addPath(path, lastLabel, icuData);
-                }
-                lastLabel = null;
-                break;
-            default:
-                throw new IllegalArgumentException("Illegal type in " + filename + ": " + nextToken + "\t" + tokenText
-                    + "\t" + Utility.hex(tokenText));
-            }
-            lastToken = nextToken;
-        }
-    }
-
-    private static void addPath(String path, String value, IcuData icuData) {
-        addPath(path, new String[] { value }, icuData);
-    }
-
-    private static void addPath(String path, String[] values, IcuData icuData) {
-        path = path.substring(path.indexOf('/', 1));
-        icuData.add(path, values);
-    }
-
-    /**
-     * Reads in tokens from an ICU data file reader.
-     * Replace by updated PatternTokenizer someday
-     *
-     * @author markdavis
-     *
-     */
-    static class MyTokenizer {
-        enum Type {
-            DONE, ID, QUOTED, OPEN_BRACE, CLOSE_BRACE, COMMA, LINE_COMMENT, BLOCK_COMMENT, BROKEN_QUOTE, BROKEN_BLOCK_COMMENT, UNKNOWN
-        }
-
-        private final UForwardCharacterIterator source;
-        private final UnicodeSet spaceCharacters = new UnicodeSet("[\\u0000\\uFEFF[:pattern_whitespace:]]");
-        private final UnicodeSet idCharacters = new UnicodeSet("[-+.():%\"'[:xid_continue:]]");
-        private final UnicodeSet quoteCharacters = new UnicodeSet("[\"']");
-
-        private int bufferedChar;
-
-        /**
-         * @param reader
-         */
-        public MyTokenizer(Reader reader) {
-            this.source = new UReaderForwardCharacterIterator(reader);
-        }
-
-        public Type next(StringBuffer tokenText) {
-            int cp = getCodePoint();
-            // Skip all spaces not in quotes.
-            while (cp >= 0 && spaceCharacters.contains(cp)) {
-                cp = getCodePoint();
-            }
-
-            if (cp == -1) {
-                return Type.DONE;
-            }
-            tokenText.setLength(0);
-            if (cp == '/') {
-                cp = getCodePoint();
-                if (cp == '/') { // line comment
-                    while (true) {
-                        cp = getCodePoint();
-                        if (cp == '\n' || cp < 0) {
-                            return Type.LINE_COMMENT;
-                        }
-                        tokenText.appendCodePoint(cp);
-                    }
-                } else if (cp == '*') { // block comment
-                    while (true) {
-                        cp = getCodePoint();
-                        if (cp < 0) {
-                            return Type.BROKEN_BLOCK_COMMENT;
-                        }
-                        while (cp == '*') {
-                            int cp2 = getCodePoint();
-                            if (cp2 < 0) {
-                                return Type.BROKEN_BLOCK_COMMENT;
-                            } else if (cp2 == '/') {
-                                return Type.BLOCK_COMMENT;
-                            }
-                            tokenText.appendCodePoint(cp);
-                            cp = cp2;
-                        }
-                        tokenText.appendCodePoint(cp);
-                    }
-                } else {
-                    throw new IllegalArgumentException("/ can only be in quotes or comments");
-                }
-            }
-            if (quoteCharacters.contains(cp)) {
-                // Return the text inside and *excluding* the quotes.
-                int oldQuote = cp;
-                cp = getCodePoint();
-                while (cp != oldQuote) {
-                    if (cp < 0) {
-                        return Type.BROKEN_QUOTE;
-                    } else if (cp == '\\') {
-                        tokenText.appendCodePoint(cp);
-                        cp = getCodePoint();
-                        if (cp < 0) {
-                            return Type.BROKEN_QUOTE;
-                        }
-                    }
-                    tokenText.appendCodePoint(cp);
-                    cp = getCodePoint();
-                }
-                ;
-                return Type.QUOTED;
-            }
-            if (cp == '{') {
-                return Type.OPEN_BRACE;
-            }
-            if (cp == '}') {
-                return Type.CLOSE_BRACE;
-            }
-            if (cp == ',') {
-                return Type.COMMA;
-            }
-            if (idCharacters.contains(cp)) {
-                while (true) {
-                    tokenText.appendCodePoint(cp);
-                    cp = getCodePoint();
-                    if (cp < 0 || !idCharacters.contains(cp)) {
-                        pushCodePoint(cp);
-                        return Type.ID;
-                    }
-                }
-            }
-            tokenText.appendCodePoint(cp);
-            return Type.UNKNOWN;
-        }
-
-        int getCodePoint() {
-            if (bufferedChar >= 0) {
-                int result = bufferedChar;
-                bufferedChar = -1;
-                return result;
-            }
-            return source.nextCodePoint();
-        }
-
-        void pushCodePoint(int codepoint) {
-            if (bufferedChar >= 0) {
-                throw new IllegalArgumentException("Cannot push twice");
-            }
-            bufferedChar = codepoint;
-        }
-    }
-
-    public static class UReaderForwardCharacterIterator implements UForwardCharacterIterator {
-        private Reader reader;
-        private int bufferedChar = -1;
-
-        /**
-         * @param reader
-         */
-        public UReaderForwardCharacterIterator(Reader reader) {
-            this.reader = reader;
-        }
-
-        /*
-         * (non-Javadoc)
-         *
-         * @see com.ibm.icu.text.UForwardCharacterIterator#next()
-         */
-        public int next() {
-            if (bufferedChar >= 0) {
-                int temp = bufferedChar;
-                bufferedChar = -1;
-                return temp;
-            }
-            try {
-                return reader.read();
-            } catch (IOException e) {
-                throw new IllegalArgumentException(e);
-            }
-        }
-
-        /*
-         * (non-Javadoc)
-         *
-         * @see com.ibm.icu.text.UForwardCharacterIterator#nextCodePoint()
-         */
-        public int nextCodePoint() {
-            int ch1 = next();
-            if (UTF16.isLeadSurrogate((char) ch1)) {
-                int bufferedChar = next();
-                if (UTF16.isTrailSurrogate((char) bufferedChar)) {
-                    return UCharacter.getCodePoint((char) ch1,
-                        (char) bufferedChar);
-                }
-            }
-            return ch1;
-        }
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/ConvertTransforms.java b/tools/java/org/unicode/cldr/icu/ConvertTransforms.java
deleted file mode 100644
index 9a41a18..0000000
--- a/tools/java/org/unicode/cldr/icu/ConvertTransforms.java
+++ /dev/null
@@ -1,391 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.BufferedWriter;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import org.unicode.cldr.ant.CLDRConverterTool;
-import org.unicode.cldr.draft.FileUtilities;
-import org.unicode.cldr.util.CLDRFile;
-import org.unicode.cldr.util.CLDRFile.DraftStatus;
-import org.unicode.cldr.util.CLDRPaths;
-import org.unicode.cldr.util.CldrUtility;
-import org.unicode.cldr.util.Factory;
-import org.unicode.cldr.util.XPathParts;
-
-import com.ibm.icu.dev.tool.UOption;
-import com.ibm.icu.dev.util.ElapsedTimer;
-import com.ibm.icu.text.Transliterator;
-
-/**
- * Utility to generate the Tansliteration resource bundle files.
- */
-public class ConvertTransforms extends CLDRConverterTool {
-
-    private static final int HELP1 = 0,
-        HELP2 = 1,
-        SOURCEDIR = 2,
-        DESTDIR = 3,
-        MATCH = 4,
-        SKIP_COMMENTS = 5,
-        WRITE_INDEX = 6,
-        VERBOSE = 7,
-        APPROVED_ONLY = 8;
-
-    private static final UOption[] options = {
-        UOption.HELP_H(),
-        UOption.HELP_QUESTION_MARK(),
-        UOption.SOURCEDIR().setDefault(CLDRPaths.COMMON_DIRECTORY + "transforms/"),
-        UOption.DESTDIR().setDefault(CLDRPaths.GEN_DIRECTORY + "icu-transforms/"),
-        UOption.create("match", 'm', UOption.REQUIRES_ARG).setDefault(".*"),
-        UOption.create("commentSkip", 'c', UOption.NO_ARG),
-        UOption.create("writeIndex", 'x', UOption.NO_ARG),
-        UOption.VERBOSE(),
-        UOption.create("approvedOnly", 'a', UOption.NO_ARG),
-    };
-
-    static final String HELP_TEXT1 = "Use the following options" + XPathParts.NEWLINE
-        + "-h or -?\t for this message" + XPathParts.NEWLINE
-        + "-" + options[SOURCEDIR].shortName + "\t source directory. Default = -s"
-        + CldrUtility.getCanonicalName(CLDRPaths.MAIN_DIRECTORY) + XPathParts.NEWLINE
-        + "\tExample:-sC:\\Unicode-CVS2\\cldr\\common\\gen\\source\\" + XPathParts.NEWLINE
-        + "-" + options[DESTDIR].shortName + "\t destination directory. Default = -d"
-        + CldrUtility.getCanonicalName(CLDRPaths.GEN_DIRECTORY + "main/") + XPathParts.NEWLINE
-        + "-m<regex>\t to restrict the files to what matches <regex>" + XPathParts.NEWLINE
-        + "-a\t to only include transforms with approved/contributed status" + XPathParts.NEWLINE
-    // "--writeIndex / -x   to write the index (trnsfiles.mk)"+ XPathParts.NEWLINE
-    ;
-
-    // TODO add options to set input and output directories, matching pattern
-    public static void main(String[] args) throws Exception {
-        ConvertTransforms ct = new ConvertTransforms();
-        ct.processArgs(args);
-    }
-
-    private boolean skipComments;
-    private boolean writeIndex = false;
-    private boolean verbose = false;
-    private boolean approvedOnly = false;
-
-    int fileCount = 0;
-
-    public void writeTransforms(String inputDirectory, String matchingPattern, String outputDirectory)
-        throws IOException {
-        System.out.println(new File(inputDirectory).getCanonicalPath());
-        Factory cldrFactory = (approvedOnly) ? Factory.make(inputDirectory, matchingPattern, DraftStatus.contributed)
-            : Factory.make(inputDirectory, matchingPattern);
-        Set<String> ids = cldrFactory.getAvailable();
-        PrintWriter index = FileUtilities.openUTF8Writer(outputDirectory, "root.txt");
-        doHeader(index, "//", "root.txt");
-        try {
-            index.println("root {");
-            index.println("    RuleBasedTransliteratorIDs {");
-            // addAlias(index, "Latin", "el", "", "Latin", "Greek", "UNGEGN");
-            // addAlias(index, "el", "Latin", "", "Greek", "Latin", "UNGEGN");
-            // addAlias(index, "Latin", "Jamo", "", "Latin", "ConjoiningJamo", "");
-            addAlias(index, "Tone", "Digit", "", "Pinyin", "NumericPinyin", "");
-            addAlias(index, "Digit", "Tone", "", "NumericPinyin", "Pinyin", "");
-            // addAlias(index, "Simplified", "Traditional", "", "Hans", "Hant", "");
-            // addAlias(index, "Traditional", "Simplified", "", "Hant", "Hans", "");
-            for (String id : ids) {
-                if (id.equals("All")) continue;
-                try {
-                    convertFile(cldrFactory, id, outputDirectory, index);
-                } catch (IOException e) {
-                    System.err.println("Failure in: " + id);
-                    throw e;
-                }
-            }
-            index.println("    }");
-            index.println("    TransliteratorNamePattern {");
-            index.println("        // Format for the display name of a Transliterator.");
-            index.println("        // This is the language-neutral form of this resource.");
-            index.println("        \"{0,choice,0#|1#{1}|2#{1}-{2}}\" // Display name");
-            index.println("    }");
-            index.println("    // Transliterator display names");
-            index.println("    // This is the English form of this resource.");
-            index.println("    \"%Translit%Hex\"         { \"%Translit%Hex\" }");
-            index.println("    \"%Translit%UnicodeName\" { \"%Translit%UnicodeName\" }");
-            index.println("    \"%Translit%UnicodeChar\" { \"%Translit%UnicodeChar\" }");
-            index.println("    TransliterateLATIN{        ");
-            index.println("    \"\",");
-            index.println("    \"\"");
-            index.println("    }");
-            index.println("}");
-        } finally {
-            index.close();
-        }
-    }
-
-    public static PrintWriter makePrintWriter(ByteArrayOutputStream bytes) {
-        try {
-            OutputStreamWriter outStream = new OutputStreamWriter(bytes, "UTF-8");
-            BufferedWriter buff = new BufferedWriter(outStream, 4 * 1024);
-            PrintWriter p = new PrintWriter(buff);
-
-            return p;
-        } catch (Exception e) {
-            System.err.println("Error: Could not create OutputStreamWriter.");
-        }
-        return null;
-    }
-
-    private void showComments(PrintWriter toilet, String value) {
-        String[] lines = value.trim().split("\\r\\n?|\\n");
-        for (String line : lines) {
-            if (!line.startsWith("#")) {
-                line = "# " + line;
-            }
-            toilet.println(line);
-        }
-    }
-
-    private void convertFile(Factory cldrFactory, String id, String outputDirectory, PrintWriter index)
-        throws IOException {
-        PrintWriter output = null;
-        String filename = null;
-        CLDRFile cldrFile = cldrFactory.make(id, false);
-        boolean first = true;
-        for (Iterator<String> it = cldrFile.iterator("", cldrFile.getComparator()); it.hasNext();) {
-            String path = it.next();
-            if (path.indexOf("/version") >= 0 || path.indexOf("/generation") >= 0) {
-                continue;
-            }
-            String value = cldrFile.getStringValue(path);
-            if (first) {
-                String fullPath = cldrFile.getFullXPath(path);
-                filename = addIndexInfo(index, fullPath);
-                if (filename == null) {
-                    return; // not a transform file!
-                }
-                output = FileUtilities.openUTF8Writer(outputDirectory, filename);
-                doHeader(output, "#", filename);
-                first = false;
-            }
-            if (path.indexOf("/comment") >= 0) {
-                if (!skipComments) {
-                    showComments(output, value);
-                }
-            } else if (path.indexOf("/tRule") >= 0) {
-                value = fixup.transliterate(value);
-                value = value.replaceAll(CldrUtility.LINE_SEPARATOR, System.lineSeparator());
-                output.println(value);
-            } else {
-                throw new IllegalArgumentException("Unknown element: " + path + "\t " + value);
-            }
-        }
-        if (output != null) { // null for transforms whose draft status is too low
-            output.close();
-        }
-    }
-
-    public static final Transliterator fixup = Transliterator.getInstance("[:Mn:]any-hex/java");
-
-    public static String replaceUnquoted(String value, String toReplace, String replacement) {
-        // quick exit in most cases
-        if (value.indexOf(toReplace) < 0)
-            return value;
-
-        String updatedValue = "";
-        int segmentStart = 0;
-        boolean inQuotes = false;
-        boolean ignoreCharValue = false;
-        int length = value.length();
-
-        for (int pos = 0; pos < length; ++pos) {
-            char curChar = (char) 0;
-
-            if (ignoreCharValue) {
-                ignoreCharValue = false;
-            } else {
-                curChar = value.charAt(pos);
-            }
-
-            if (curChar == '\\') {
-                // escape, ignore the value of the next char (actually the next UTF16 code unit, but that works here)
-                ignoreCharValue = true;
-            }
-            boolean isLastChar = (pos + 1 >= length);
-            if (curChar == '\'' || isLastChar) {
-                // quote, begin or end of a quoted literal (in which no replacement takes place)
-                if (inQuotes) {
-                    // End of a quoted segment; guaranteed to include at least opening quote.
-                    // Just add the segment (including current char) to updatedValue.
-                    updatedValue = updatedValue + value.substring(segmentStart, pos + 1);
-                    segmentStart = pos + 1;
-                } else {
-                    if (isLastChar)
-                        ++pos;
-                    if (pos > segmentStart) {
-                        // End of a nonempty unquoted segment; perform requested replacements and
-                        // then add segment to updatedValue.
-                        String currentSegment = value.substring(segmentStart, pos);
-                        updatedValue = updatedValue + currentSegment.replace(toReplace, replacement);
-                        segmentStart = pos;
-                    }
-                }
-                inQuotes = !inQuotes;
-            }
-            // else the char just becomes part of the current segment
-        }
-        return updatedValue;
-    }
-
-    private String addIndexInfo(PrintWriter index, String path) {
-        XPathParts parts = XPathParts.getFrozenInstance(path);
-        Map<String, String> attributes = parts.findAttributes("transform");
-        if (attributes == null) return null; // error, not a transform file
-        String source = attributes.get("source");
-        String target = attributes.get("target");
-        String variant = attributes.get("variant");
-        String direction = attributes.get("direction");
-        String alias = attributes.get("alias");
-        String backwardAlias = attributes.get("backwardAlias");
-        String visibility = attributes.get("visibility");
-
-        String status = "internal".equals(visibility) ? "internal" : "file";
-
-        fileCount++;
-
-        String id = source + "-" + target;
-        String rid = target + "-" + source;
-        String filename = source + "_" + target;
-        if (variant != null) {
-            id += "/" + variant;
-            rid += "/" + variant;
-            filename += "_" + variant;
-        }
-        filename += ".txt";
-
-        if (direction.equals("both") || direction.equals("forward")) {
-            if (verbose) {
-                System.out.println("    " + id + "    " + filename + "    " + "FORWARD");
-            }
-            if (alias != null) {
-                for (String ali : alias.trim().split("\\s+")) {
-                    addAlias(index, ali, id);
-                }
-            }
-            index.println("        " + id + " {");
-            index.println("            " + status + " {");
-            index.println("                resource:process(transliterator) {\"" + filename + "\"}");
-            index.println("                direction {\"FORWARD\"}");
-            index.println("            }");
-            index.println("        }");
-        }
-        if (direction.equals("both") || direction.equals("backward")) {
-            if (verbose) {
-                System.out.println("    " + rid + "    " + filename + "    " + "REVERSE");
-            }
-            if (backwardAlias != null) {
-                for (String bali : backwardAlias.trim().split("\\s+")) {
-                    addAlias(index, bali, rid);
-                }
-            }
-            index.println("        " + rid + " {");
-            index.println("            " + status + " {");
-            index.println("                resource:process(transliterator) {\"" + filename + "\"}");
-            index.println("                direction {\"REVERSE\"}");
-            index.println("            }");
-            index.println("        }");
-        }
-        index.println();
-        return filename;
-    }
-
-    void addAlias(PrintWriter index, String aliasSource, String aliasTarget, String aliasVariant,
-        String originalSource, String originalTarget, String originalVariant) {
-        // Spacedhan-Han {
-        // alias {"null"}
-        // }
-        addAlias(index, getName(aliasSource, aliasTarget, aliasVariant),
-            getName(originalSource, originalTarget, originalVariant));
-    }
-
-    private void addAlias(PrintWriter index, String alias, String original) {
-        index.println("        " + alias + " {");
-        index.println("            alias" + " {\"" + original + "\"}");
-        index.println("        }");
-    }
-
-    String getName(String source, String target, String variant) {
-        String id = source + "-" + target;
-        if (variant != null && variant.length() != 0) {
-            id += "/" + variant;
-        }
-        return id;
-    }
-
-    private void doHeader(PrintWriter output, String quoteSymbol, String filename) {
-        output.print('\uFEFF');
-        output.println(quoteSymbol + " © 2016 and later: Unicode, Inc. and others.");
-        output.println(quoteSymbol + " License & terms of use: http://www.unicode.org/copyright.html#License");
-        output.println(quoteSymbol);
-        output.println(quoteSymbol + " File: " + filename);
-        output.println(quoteSymbol + " Generated from CLDR");
-        output.println(quoteSymbol);
-    }
-
-    public void processArgs(String[] args) {
-        UOption.parseArgs(args, options);
-        if (options[HELP1].doesOccur || options[HELP2].doesOccur) {
-            System.out.println(HELP_TEXT1);
-            return;
-        }
-
-        String sourceDir = options[SOURCEDIR].value; // Utility.COMMON_DIRECTORY + "transforms/";
-        String targetDir = options[DESTDIR].value; // Utility.GEN_DIRECTORY + "main/";
-        String match = options[MATCH].value;
-        skipComments = options[SKIP_COMMENTS].doesOccur;
-        writeIndex = options[WRITE_INDEX].doesOccur;
-        verbose = options[VERBOSE].doesOccur;
-        approvedOnly = options[APPROVED_ONLY].doesOccur;
-
-        try {
-            if (writeIndex) {
-                throw new InternalError("writeIndex not implemented.");
-            } else {
-                ElapsedTimer et = new ElapsedTimer();
-                writeTransforms(sourceDir, match, targetDir + File.separator);
-                System.out.println("ConvertTransforms: wrote " + fileCount +
-                    " files in " + et);
-            }
-        } catch (IOException ex) {
-            RuntimeException e = new RuntimeException();
-            e.initCause(ex.getCause());
-            throw e;
-        } finally {
-            System.out.println("DONE");
-        }
-    }
-
-    // fixData ONLY NEEDED TO FIX FILE PROBLEM
-    /*
-     * private void fixData(String inputDirectory, String matchingPattern, String outputDirectory) throws IOException {
-     * File dir = new File(inputDirectory);
-     * File[] files = dir.listFiles();
-     * for (int i = 0; i < files.length; ++i) {
-     * if (files[i].isDirectory()) continue;
-     * BufferedReader input = FileUtilities.openUTF8Reader("", files[i].getCanonicalPath());
-     * PrintWriter output = FileUtilities.openUTF8Writer("", outputDirectory + files[i].getName());
-     * while (true) {
-     * String line = input.readLine();
-     * if (line == null) break;
-     * if (line.indexOf("DOCTYPE") >= 0) {
-     * line = line.replaceAll(" ldml ", " supplementalData ");
-     * }
-     * output.println(line);
-     * }
-     * input.close();
-     * output.close();
-     * }
-     * }
-     */
-
-}
diff --git a/tools/java/org/unicode/cldr/icu/DayPeriodsMapper.java b/tools/java/org/unicode/cldr/icu/DayPeriodsMapper.java
deleted file mode 100644
index a30482e..0000000
--- a/tools/java/org/unicode/cldr/icu/DayPeriodsMapper.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.File;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-/**
- * Class for converting CLDR dayPeriods data into a format suitable for writing
- * to ICU data. The regex-mapping method can't be used here because the special
- * handling of sets.
- *
- * @author jchye
- */
-public class DayPeriodsMapper {
-    private String supplementalDir;
-
-    public DayPeriodsMapper(String supplementalDir) {
-        this.supplementalDir = supplementalDir;
-    }
-
-    /**
-     * @return CLDR data converted to an ICU-friendly format
-     */
-    public IcuData fillFromCldr() {
-        IcuData icuData = new IcuData("dayPeriods.xml", "dayPeriods", false);
-        DayPeriodsHandler handler = new DayPeriodsHandler(icuData);
-        File inputFile = new File(supplementalDir, "dayPeriods.xml");
-        MapperUtils.parseFile(inputFile, handler);
-        return icuData;
-    }
-
-    private class DayPeriodsHandler extends MapperUtils.EmptyHandler {
-        private IcuData icuData;
-        private int setNum;
-        private String selection;
-
-        public DayPeriodsHandler(IcuData icuData) {
-            this.icuData = icuData;
-            setNum = 0;
-        }
-
-        @Override
-        public void startElement(String uri, String localName, String qName, Attributes attr) throws SAXException {
-            //  <dayPeriodRuleSet type="selection">
-            if (qName.equals("dayPeriodRuleSet")) {
-                selection = attr.getValue("type");
-                if (selection == null) {
-                    selection = "";
-                } else {
-                    selection = "_" + selection;
-                }
-            } else if (qName.equals("dayPeriodRules")) {
-                setNum++;
-                String[] locales = attr.getValue("locales").split("\\s+");
-                for (String locale : locales) {
-                    icuData.add("/locales" + selection + "/" + locale, "set" + setNum);
-                }
-            } else if (qName.equals("dayPeriodRule")) {
-                String type = attr.getValue("type");
-                String prefix = "/rules/set" + setNum + "/" + type + "/";
-                // Possible attribute names: type, before, after, at.
-                for (int i = 0; i < attr.getLength(); i++) {
-                    String attrName = attr.getLocalName(i);
-                    if (!attrName.equals("type")) {
-                        icuData.add(prefix + attrName, attr.getValue(i));
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/DependencyGraphData.java b/tools/java/org/unicode/cldr/icu/DependencyGraphData.java
deleted file mode 100644
index 9ba684a..0000000
--- a/tools/java/org/unicode/cldr/icu/DependencyGraphData.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// © 2019 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-
-package org.unicode.cldr.icu;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Collection;
-
-import org.unicode.cldr.ant.CLDRConverterTool.Alias;
-import org.unicode.cldr.ant.CLDRConverterTool.AliasDeprecates;
-import org.unicode.cldr.draft.FileUtilities;
-import org.unicode.cldr.util.CLDRFile;
-import org.unicode.cldr.util.SupplementalDataInfo;
-
-class DependencyGraphData {
-    SupplementalDataInfo supplementalDataInfo;
-    AliasDeprecates aliasDeprecates;
-
-    DependencyGraphData(SupplementalDataInfo supplementalDataInfo, AliasDeprecates aliasDeprecates) {
-        this.supplementalDataInfo = supplementalDataInfo;
-        this.aliasDeprecates = aliasDeprecates;
-    }
-
-    public void print(String outputDir, String filename) throws IOException {
-        PrintWriter out = FileUtilities.openUTF8Writer(outputDir, filename);
-        out.append("# -*- coding: utf-8 -*-\n");
-        out.append("# © 2019 and later: Unicode, Inc. and others.\n");
-        out.append("# License & terms of use: http://www.unicode.org/copyright.html#License\n");
-        out.println();
-
-        out.append("data = {");
-        out.append("\n    \"cldrVersion\": \"");
-        out.append(CLDRFile.GEN_VERSION);
-        out.append('"');
-        if (aliasDeprecates.aliasList != null) {
-            out.append(",\n    \"aliases\": {");
-            boolean firstInner = true;
-            for (Alias alias : aliasDeprecates.aliasList) {
-                if (alias.rbPath != null) {
-                    continue;
-                }
-                if (!firstInner) {
-                    out.append(',');
-                }
-                firstInner = false;
-                out.append("\n        \"");
-                out.append(alias.from);
-                out.append("\": \"");
-                out.append(alias.to);
-                out.append('"');
-            }
-            out.append("\n    }");
-        }
-        Collection<String> explicitChildren = supplementalDataInfo.getExplicitChildren();
-        if (!explicitChildren.isEmpty()) {
-            out.append(",\n    \"parents\": {");
-            boolean firstInner = true;
-            for (String child : explicitChildren) {
-                if (!firstInner) {
-                    out.append(',');
-                }
-                firstInner = false;
-                String parent = supplementalDataInfo.getExplicitParentLocale(child);
-                out.append("\n        \"");
-                out.append(child);
-                out.append("\": \"");
-                out.append(parent);
-                out.append('"');
-            }
-            out.append("\n    }");
-        }
-        out.append("\n}\n");
-        out.close();
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/ExtractICUData.java b/tools/java/org/unicode/cldr/icu/ExtractICUData.java
index cfca726..900b6f9 100644
--- a/tools/java/org/unicode/cldr/icu/ExtractICUData.java
+++ b/tools/java/org/unicode/cldr/icu/ExtractICUData.java
@@ -28,6 +28,7 @@
 import org.unicode.cldr.util.CLDRFile;
 import org.unicode.cldr.util.CLDRPaths;
 import org.unicode.cldr.util.CldrUtility;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.PatternCache;
 import org.unicode.cldr.util.SimpleFactory;
 
@@ -65,14 +66,14 @@
         System.out.println("Done");
     }
 
-    static Set<String> skipLines = new HashSet<String>(Arrays.asList(new String[] {
+    static Set<String> skipLines = new HashSet<>(Arrays.asList(new String[] {
         "#--------------------------------------------------------------------",
         "# Copyright (c) 1999-2005, International Business Machines",
         "# Copyright (c) 1999-2004, International Business Machines",
         "# Corporation and others. All Rights Reserved.",
         "#--------------------------------------------------------------------"
     }));
-    static Set<String> skipFiles = new HashSet<String>(Arrays.asList(new String[] {
+    static Set<String> skipFiles = new HashSet<>(Arrays.asList(new String[] {
         // "Any_Accents",
         "el",
         "en",
@@ -86,9 +87,9 @@
         getTranslitIndex(accumulatedItems);
 
         File translitSource = new File("C:\\cvsdata\\icu\\icu\\source\\data\\translit\\");
-        System.out.println("Source: " + translitSource.getCanonicalPath());
+        System.out.println("Source: " + PathUtilities.getNormalizedPathString(translitSource));
         File[] fileArray = translitSource.listFiles();
-        List<Object> list = new ArrayList<Object>(Arrays.asList(fileArray));
+        List<Object> list = new ArrayList<>(Arrays.asList(fileArray));
 
 //        List<String> extras = Arrays.asList(new String[] {
 //            "Arabic_Latin.txt",
@@ -363,7 +364,7 @@
     static Matcher privateFiles = PatternCache.get(".*(Spacedhan|InterIndic|ThaiLogical|ThaiSemi).*").matcher("");
     static Matcher allowNames = PatternCache.get("(Fullwidth|Halfwidth|NumericPinyin|Publishing)").matcher("");
 
-    static Set<String> collectedNames = new TreeSet<String>();
+    static Set<String> collectedNames = new TreeSet<>();
 
     private static String fixTransIDPart(String name) {
         if (name == null) return name;
@@ -389,14 +390,14 @@
         };
         Collator col = Collator.getInstance(ULocale.ROOT);
         ((RuleBasedCollator) col).setNumericCollation(true);
-        Map<String, Set<String>> alpha = new TreeMap<String, Set<String>>(col);
+        Map<String, Set<String>> alpha = new TreeMap<>(col);
 
         for (int range = 0; range < ranges.length; ++range) {
             for (int propIndex = ranges[range][0]; propIndex < ranges[range][1]; ++propIndex) {
                 String propName = UCharacter.getPropertyName(propIndex, UProperty.NameChoice.LONG);
                 String shortPropName = UCharacter.getPropertyName(propIndex, UProperty.NameChoice.SHORT);
                 propName = getName(propIndex, propName, shortPropName);
-                Set<String> valueOrder = new TreeSet<String>(col);
+                Set<String> valueOrder = new TreeSet<>(col);
                 alpha.put(propName, valueOrder);
                 switch (range) {
                 case 0:
@@ -455,4 +456,4 @@
         if (valueName.equals(shortValueName)) return valueName;
         return valueName + "\u00A0(" + shortValueName + ")";
     }
-}
\ No newline at end of file
+}
diff --git a/tools/java/org/unicode/cldr/icu/Filter.java b/tools/java/org/unicode/cldr/icu/Filter.java
deleted file mode 100644
index 995c278..0000000
--- a/tools/java/org/unicode/cldr/icu/Filter.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.unicode.cldr.icu;
-
-/**
- * Interface for implementing a filter on a collection of values.
- * @author jchye
- */
-public interface Filter {
-    /**
-     * @return true if the specified value is allowed through the filter.
-     */
-    public boolean includes(String value);
-}
diff --git a/tools/java/org/unicode/cldr/icu/ICU2LDMLWriter.java b/tools/java/org/unicode/cldr/icu/ICU2LDMLWriter.java
deleted file mode 100644
index 3ceac1c..0000000
--- a/tools/java/org/unicode/cldr/icu/ICU2LDMLWriter.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- ******************************************************************************
- * Copyright (C) 2004-2008 International Business Machines Corporation and    *
- * others. All Rights Reserved.                                               *
- ******************************************************************************
- */
-package org.unicode.cldr.icu;
-
-//CLDR imports
-import org.unicode.cldr.ant.CLDRConverterTool;
-
-import com.ibm.icu.dev.tool.UOption;
-
-/**
- * This class is a user runnable class intended to create LDML documents by
- * calling the appropriate ICU API functions and retrieving the data.
- *
- * @author Brian Rower - IBM - August 2009
- *
- */
-@SuppressWarnings("deprecation")
-public class ICU2LDMLWriter extends CLDRConverterTool {
-    private static final UOption[] options = new UOption[] {
-        UOption.HELP_H(),
-        UOption.HELP_QUESTION_MARK(),
-        UOption.DESTDIR(),
-        UOption.VERBOSE(),
-        UOption.create("main", 'm', UOption.NO_ARG),
-        UOption.create("trans", 't', UOption.NO_ARG),
-        UOption.create("coll", 'c', UOption.NO_ARG)
-    };
-
-    // ******************** ENUMS *************************
-
-    // For command line options
-    private static final int OP_HELP1 = 0;
-    private static final int OP_HELP2 = 1;
-    private static final int OP_DESTDIR = 2;
-    private static final int OP_VERBOSE = 3;
-    private static final int OP_MAIN = 4;
-    private static final int OP_TRANS = 5;
-    private static final int OP_COLL = 6;
-
-    private String currentLocaleName = null;
-
-    public static void main(String[] args) {
-        ICU2LDMLWriter w = new ICU2LDMLWriter();
-        w.processArgs(args);
-    }
-
-    public void processArgs(String[] args) {
-        int remainingArgc = 0;
-        // for some reason when
-        // Class classDefinition = Class.forName(className);
-        // object = classDefinition.newInstance();
-        // is done then the options are not reset!!
-        for (int i = 0; i < options.length; i++) {
-            options[i].doesOccur = false;
-        }
-        try {
-            remainingArgc = UOption.parseArgs(args, options);
-        } catch (Exception e) {
-            printError("(parsing args): " + e.toString());
-            e.printStackTrace();
-            usage();
-        }
-
-        if (options[OP_HELP1].doesOccur || options[OP_HELP2].doesOccur || args.length == 0) {
-            usage();
-        }
-
-        printError("** Note: ICU2LDMLWriter is no longer supported or functional. **");
-
-    }
-
-    private void usage() {
-        System.out
-            .println("\nUsage: ICU2LDMLWriter [OPTIONS] -d OUTPUTFOLDER [FILES]\n"
-                +
-                "This program generates LDML documents which represent the data currently inside of your ICU installation\n"
-                +
-                "If no files are given, a file for each supported locale will be produced.\n"
-                +
-                "If no destination folder is given, the file structure will be created in the current working directory.\n"
-                +
-                "Options:\n" +
-                "-m or --main			Generate the main locale files.\n" +
-                "-t or --trans			Generate the transliteration locale files.\n" +
-                "-c or --coll			Generate the collation files.\n" +
-                "If none of the above options are given, all three types of files will be generated.\n" +
-                "\n" +
-                "** Note: ICU2LDMLWriter is no longer supported or functional. **\n");
-        System.exit(-1);
-    }
-
-    // **********************Printing Methods *********************************
-
-    private void printError(String message) {
-        System.err.println("ERROR : " + currentLocaleName + ": " + message);
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/ICULog.java b/tools/java/org/unicode/cldr/icu/ICULog.java
deleted file mode 100644
index 71a0672..0000000
--- a/tools/java/org/unicode/cldr/icu/ICULog.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.unicode.cldr.icu;
-
-public interface ICULog {
-    public enum Level {
-        DEBUG, INFO, LOG, WARNING, ERROR;
-    }
-
-    boolean willOutput(Level level);
-
-    void setStatus(String status);
-
-    void debug(String msg);
-
-    void info(String msg);
-
-    void log(String msg);
-
-    void warning(String msg);
-
-    void error(String msg);
-
-    void error(String msg, Throwable t);
-
-    /**
-     * Outputs and flushes text with no status or level message.
-     * Used for 'ticks' during long-running processes and
-     * compact output.
-     */
-    public interface Emitter {
-        /** Outputs and flushes text, no newline */
-        void emit(String text);
-
-        /** Emits a newline */
-        void nl();
-    }
-
-    /**
-     * Returns an emitter. If the log will output at this level,
-     * the emitter will forward the text, otherwise it will silently
-     * ignore it. Use willOutput to see if the emitter will actually
-     * emit the text.
-     */
-    Emitter emitter(Level level);
-}
diff --git a/tools/java/org/unicode/cldr/icu/ICULogImpl.java b/tools/java/org/unicode/cldr/icu/ICULogImpl.java
deleted file mode 100644
index 5a4278b..0000000
--- a/tools/java/org/unicode/cldr/icu/ICULogImpl.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.PrintWriter;
-
-public class ICULogImpl implements ICULog {
-    private final Level level;
-    private final PrintWriter out;
-    private String status;
-
-    public ICULogImpl(Level level) {
-        this.level = level;
-        this.out = new PrintWriter(System.out);
-    }
-
-    public void debug(String msg) {
-        out(Level.DEBUG, msg);
-    }
-
-    public void error(String msg) {
-        out(Level.ERROR, msg);
-    }
-
-    public void error(String msg, Throwable t) {
-        if (t == null) {
-            error(msg);
-        } else {
-            out(Level.ERROR, msg + " '" + t.toString() + "'");
-            t.printStackTrace(out);
-        }
-        out.flush();
-    }
-
-    public void info(String msg) {
-        out(Level.INFO, msg);
-    }
-
-    public void log(String msg) {
-        out(Level.LOG, msg);
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public void warning(String msg) {
-        out(Level.WARNING, msg);
-    }
-
-    protected void out(Level level, String msg) {
-        if (willOutput(level)) {
-            if (status != null) {
-                out.format("%s (%s): %s%n", level, status, msg);
-            } else {
-                out.format("%s: %s%n", level, msg);
-            }
-            out.flush();
-        }
-    }
-
-    public boolean willOutput(Level level) {
-        return level.ordinal() >= this.level.ordinal();
-    }
-
-    public Emitter emitter(Level level) {
-        return willOutput(level) ? logEmitter : nullEmitter;
-    }
-
-    // This buffers because ant replaces System.out with an implementation
-    // that prepends the name of the running task and appends a newline
-    // whenever we flush.
-    private final Emitter logEmitter = new Emitter() {
-        private final StringBuilder buf = new StringBuilder();
-
-        public void emit(String text) {
-            buf.append(text);
-        }
-
-        public void nl() {
-            out.println(buf.toString());
-            out.flush();
-            buf.setLength(0);
-        }
-    };
-
-    private static final Emitter nullEmitter = new Emitter() {
-        public void emit(String text) {
-        }
-
-        public void nl() {
-        }
-    };
-}
diff --git a/tools/java/org/unicode/cldr/icu/ICUResourceWriter.java b/tools/java/org/unicode/cldr/icu/ICUResourceWriter.java
index ff14fad..8ee418a 100644
--- a/tools/java/org/unicode/cldr/icu/ICUResourceWriter.java
+++ b/tools/java/org/unicode/cldr/icu/ICUResourceWriter.java
@@ -354,6 +354,7 @@
     public static class ResourceAlias extends Resource {
         String val;
 
+        @Override
         public void write(OutputStream writer, int numIndent, boolean bare) {
             writeComments(writer, numIndent);
             writeIndent(writer, numIndent);
@@ -376,6 +377,7 @@
          * @param out
          *            A File output stream which has already been set up to write to.
          */
+        @Override
         public int writeBinary(FileOutputStream out, int usedOffset) {
             byte[] valLenBytes;
             byte[] valBytes;
@@ -405,6 +407,7 @@
             return usedOffset;
         }
 
+        @Override
         public void setSize() {
             // a pointer + the string
             size = SIZE_OF_INT + ((val.length() + 1) * SIZE_OF_CHAR);
@@ -412,6 +415,7 @@
     }
 
     public static class ResourceArray extends Resource {
+        @Override
         public void write(OutputStream writer, int numIndent, boolean bare) {
             writeComments(writer, numIndent);
             writeIndent(writer, numIndent);
@@ -437,6 +441,7 @@
             write(writer, CLOSEBRACE + LINESEP);
         }
 
+        @Override
         public void sort() {
             if (noSort == true) {
                 return;
@@ -448,6 +453,7 @@
             }
         }
 
+        @Override
         public int writeBinary(FileOutputStream out, int usedOffset) {
             int count = 0;
             int[] resources = new int[numChildren];
@@ -529,6 +535,7 @@
         /**
          * This method will set the size of the resource.
          */
+        @Override
         public void setSize() {
             // Arrays have children.
             int x = 0;
@@ -557,6 +564,7 @@
     public static class ResourceInt extends Resource {
         String val;
 
+        @Override
         public void write(OutputStream writer, int numIndent, boolean bare) {
             writeComments(writer, numIndent);
             writeIndent(writer, numIndent);
@@ -571,6 +579,7 @@
             }
         }
 
+        @Override
         public int writeBinary(FileOutputStream out, int usedOffset) {
             return usedOffset;
         }
@@ -578,6 +587,7 @@
         /**
          * This method will set the size of the resource. Overwritten for each child object
          */
+        @Override
         public void setSize() {
             size = 0;
 
@@ -587,6 +597,7 @@
     public static class ResourceIntVector extends Resource {
         public String smallComment = null;
 
+        @Override
         public void write(OutputStream writer, int numIndent, boolean bare) {
             writeComments(writer, numIndent);
             writeIndent(writer, numIndent);
@@ -609,6 +620,7 @@
             write(writer, CLOSEBRACE + LINESEP);
         }
 
+        @Override
         public int writeBinary(FileOutputStream out, int usedOffset) {
             int count = 0;
             int[] numbers = new int[numChildren];
@@ -638,6 +650,7 @@
         /**
          * This method will set the size of the resource. Overwritten for each child object
          */
+        @Override
         public void setSize() {
             // has children
             int x = 0;
@@ -668,6 +681,7 @@
          */
         public String smallComment = null;
 
+        @Override
         public void write(OutputStream writer, int numIndent, boolean bare) {
             writeComments(writer, numIndent);
             writeIndent(writer, numIndent);
@@ -753,6 +767,7 @@
             }
         }
 
+        @Override
         public int writeBinary(FileOutputStream out, int usedOffset) {
 
             // clean up quotes if any
@@ -793,6 +808,7 @@
         /**
          * This method will set the size of the resource. Overwritten for each child object
          */
+        @Override
         public void setSize() {
             // a pointer to the key + a string
             size = SIZE_OF_INT + (SIZE_OF_CHAR * (val.length() + 1));
@@ -803,6 +819,7 @@
         public String annotation;
         public static final String NO_FALLBACK = "nofallback";
 
+        @Override
         public void write(OutputStream writer, int numIndent, boolean bare) {
             writeComments(writer, numIndent);
             writeIndent(writer, numIndent);
@@ -824,6 +841,7 @@
 
         // insertion sort of the linked list
         // from Algorithms in C++ Sedgewick
+        @Override
         public void sort() {
             if (noSort == true) {
                 return;
@@ -880,6 +898,7 @@
             return mustBe32;
         }
 
+        @Override
         public int writeBinary(FileOutputStream out, int usedOffset) {
             int count = 0;
             int pad;
@@ -1013,6 +1032,7 @@
         /**
          * This method will set the size of the resource. Overwritten for each child object
          */
+        @Override
         public void setSize() {
             // Tables have children.
             int x = 0;
@@ -1049,6 +1069,7 @@
         String external;
         byte[] data;
 
+        @Override
         public void write(OutputStream writer, int numIndent, boolean bare) {
             writeComments(writer, numIndent);
             writeIndent(writer, numIndent);
@@ -1063,11 +1084,13 @@
             }
         }
 
+        @Override
         public void setSize() {
             // sizeof(int32_t) + sizeof(uint8_t) * length + BIN_ALIGNMENT;
             size = SIZE_OF_INT + data.length + BIN_ALIGNMENT;
         }
 
+        @Override
         public int writeBinary(FileOutputStream out, int usedOffset) {
             int pad = 0;
             int extrapad = pad32(this.size);
@@ -1103,6 +1126,7 @@
         String val;
         String ext;
 
+        @Override
         public void write(OutputStream writer, int numIndent, boolean bare) {
             writeComments(writer, numIndent);
             writeIndent(writer, numIndent);
@@ -1118,6 +1142,7 @@
             }
         }
 
+        @Override
         public int writeBinary(FileOutputStream out, int usedOffset) {
             if (this.name.equals("depends")) {
 
@@ -1135,6 +1160,7 @@
     public static class ResourceImport extends Resource {
         String val;
 
+        @Override
         public void write(OutputStream writer, int numIndent, boolean bare) {
             writeComments(writer, numIndent);
             writeIndent(writer, numIndent);
@@ -1155,6 +1181,7 @@
     public static class ResourceInclude extends Resource {
         String val;
 
+        @Override
         public void write(OutputStream writer, int numIndent, boolean bare) {
             writeComments(writer, numIndent);
             writeIndent(writer, numIndent);
diff --git a/tools/java/org/unicode/cldr/icu/ICUWriter.java b/tools/java/org/unicode/cldr/icu/ICUWriter.java
deleted file mode 100644
index 266b734..0000000
--- a/tools/java/org/unicode/cldr/icu/ICUWriter.java
+++ /dev/null
@@ -1,171 +0,0 @@
-// Copyright 2009 Google Inc. All Rights Reserved.
-
-package org.unicode.cldr.icu;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.util.Calendar;
-import java.util.List;
-
-import org.unicode.cldr.icu.ICUResourceWriter.Resource;
-import org.unicode.cldr.icu.ICUResourceWriter.ResourceTable;
-import org.unicode.cldr.icu.ResourceSplitter.ResultInfo;
-
-class ICUWriter {
-    private static final String LINESEP = System.getProperty("line.separator");
-    private static final String BOM = "\uFEFF";
-    private static final String CHARSET = "UTF-8";
-
-    private final String dstDirName;
-    private final ICULog log;
-    private final ResourceSplitter splitter;
-
-    ICUWriter(String dstDirName, ICULog log, ResourceSplitter splitter) {
-        this.dstDirName = dstDirName;
-        this.log = log;
-        this.splitter = splitter;
-    }
-
-    // private static final ResourceSplitter debugSplitter;
-    // static {
-    // List<SplitInfo> splitInfos = new ArrayList<SplitInfo>();
-    // splitInfos.add(new SplitInfo("/Languages", "lang"));
-    // splitInfos.add(new SplitInfo("/LanguagesShort", "lang"));
-    // splitInfos.add(new SplitInfo("/Scripts", "lang"));
-    // splitInfos.add(new SplitInfo("/Types", "lang"));
-    // splitInfos.add(new SplitInfo("/Variants", "lang"));
-    // splitInfos.add(new SplitInfo("/codePatterns", "lang"));
-    // splitInfos.add(new SplitInfo("/Countries", "terr", "/Territories"));
-    // splitInfos.add(new SplitInfo("/Currencies", "curr"));
-    // splitInfos.add(new SplitInfo("/CurrencyPlurals", "curr"));
-    // splitInfos.add(new SplitInfo("/CurrencyUnitPatterns", "curr"));
-    // splitInfos.add(new SplitInfo("/zoneStrings", "zone"));
-    //
-    // debugSplitter = new ResourceSplitter("/tmp/ldml", splitInfos);
-    // }
-
-    public void writeResource(Resource res, String sourceInfo) {
-        if (splitter == null) {
-            String outputFileName = dstDirName + "/" + res.name + ".txt";
-            writeResource(res, sourceInfo, outputFileName);
-        } else {
-            File rootDir = new File(dstDirName);
-            List<ResultInfo> result = splitter.split(rootDir, (ResourceTable) res);
-
-            for (ResultInfo info : result) {
-                res = info.root;
-                String outputFileName = info.directory.getAbsolutePath() + "/" + res.name + ".txt";
-                writeResource(res, sourceInfo, outputFileName);
-            }
-        }
-    }
-
-    private void writeResource(Resource set, String sourceInfo, String outputFileName) {
-        try {
-            log.log("Writing " + outputFileName);
-            FileOutputStream file = new FileOutputStream(outputFileName);
-            BufferedOutputStream writer = new BufferedOutputStream(file);
-            writeHeader(writer, sourceInfo);
-
-            for (Resource res = set; res != null; res = res.next) {
-                res.sort();
-            }
-
-            for (Resource res = set; res != null; res = res.next) {
-                res.write(writer, 0, false);
-            }
-
-            writer.flush();
-            writer.close();
-        } catch (Resource.MalformedResourceError mre) {
-            String where = set.findResourcePath(mre.offendingResource);
-            log.error("Could not write resource " + where + ". " + mre.toString(), mre);
-            if (!new File(outputFileName).delete()) {
-                log.error("Failed to delete file");
-            }
-            System.exit(1);
-        } catch (Exception ie) {
-            log.error("Could not write resource." + ie.toString(), ie);
-            if (!new File(outputFileName).delete()) {
-                log.error("Failed to delete file");
-            }
-            System.exit(1);
-        }
-    }
-
-    private void writeLine(OutputStream writer, String line) {
-        try {
-            byte[] bytes = line.getBytes(CHARSET);
-            writer.write(bytes, 0, bytes.length);
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-            System.exit(1);
-        }
-    }
-
-    private void writeHeader(OutputStream writer, String fileName) {
-        writeBOM(writer);
-        Calendar c = Calendar.getInstance();
-        StringBuilder buffer = new StringBuilder();
-        buffer.append("// ***************************************************************************")
-            .append(LINESEP)
-            .append("// *")
-            .append(LINESEP)
-            .append("// * Copyright (C) ")
-            .append(c.get(Calendar.YEAR))
-            .append(" International Business Machines")
-            .append(LINESEP)
-            .append("// * Corporation and others.  All Rights Reserved.")
-            .append(LINESEP)
-            .append("// * Tool: com.ibm.icu.dev.tool.cldr.LDML2ICUConverter.java")
-            .append(LINESEP);
-        // buffer.append("// * Date & Time: ")
-        // .append(c.get(Calendar.YEAR))
-        // .append("/")
-        // .append(c.get(Calendar.MONTH) + 1)
-        // .append("/")
-        // .append(c.get(Calendar.DAY_OF_MONTH))
-        // .append(" ")
-        // .append(c.get(Calendar.HOUR_OF_DAY))
-        // .append(COLON)
-        // .append(c.get(Calendar.MINUTE))
-        // .append(LINESEP);
-        // String ver = LDMLUtilities.getCVSVersion(fileName);
-        // if (ver == null) {
-        // ver = "";
-        // } else {
-        // ver = " v" + ver;
-        // }
-
-        String tempdir = fileName.replace('\\', '/');
-        int index = tempdir.indexOf("/common");
-        if (index > -1) {
-            tempdir = "<path>" + tempdir.substring(index, tempdir.length());
-        } else {
-            index = tempdir.indexOf("/xml");
-            if (index > -1) {
-                tempdir = "<path>" + tempdir.substring(index, tempdir.length());
-            } else {
-                tempdir = "<path>/" + tempdir;
-            }
-        }
-        buffer.append("// * Source File:" + tempdir)
-            .append(LINESEP)
-            .append("// *")
-            .append(LINESEP)
-            .append("// ***************************************************************************")
-            .append(LINESEP);
-        writeLine(writer, buffer.toString());
-    }
-
-    private void writeBOM(OutputStream buffer) {
-        try {
-            byte[] bytes = BOM.getBytes(CHARSET);
-            buffer.write(bytes, 0, bytes.length);
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-        }
-    }
-}
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/icu/IcuData.java b/tools/java/org/unicode/cldr/icu/IcuData.java
deleted file mode 100644
index dfc4baf..0000000
--- a/tools/java/org/unicode/cldr/icu/IcuData.java
+++ /dev/null
@@ -1,197 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-/**
- * Wrapper class for converted ICU data which RB paths to values.
- */
-public class IcuData implements Iterable<String> {
-    private boolean hasFallback;
-    private String sourceFile;
-    private String name;
-    private Map<String, List<String[]>> rbPathToValues;
-    private String comment;
-    private Map<String, String> enumMap;
-
-    /**
-     * IcuData constructor.
-     *
-     * @param sourceFile
-     *            the source file of the IcuData object, displayed in
-     *            comments in the file
-     * @param name
-     *            The name of the IcuData object, also used as the name of the
-     *            root node in the output file
-     * @param hasFallback
-     *            true if the output file has another ICU file as a
-     *            fallback
-     */
-    public IcuData(String sourceFile, String name, boolean hasFallback) {
-        this(sourceFile, name, hasFallback, new HashMap<String, String>());
-    }
-
-    /**
-     * IcuData constructor.
-     *
-     * @param sourceFile
-     *            the source file of the IcuData object, displayed in
-     *            comments in the file
-     * @param name
-     *            The name of the IcuData object, also used as the name of the
-     *            root node in the output file
-     * @param hasFallback
-     *            true if the output file has another ICU file as a
-     *            fallback
-     * @param enumMap
-     *            a mapping of CLDR string values to their integer values in
-     *            ICU
-     */
-    public IcuData(String sourceFile, String name, boolean hasFallback, Map<String, String> enumMap) {
-        this.hasFallback = hasFallback;
-        this.sourceFile = sourceFile;
-        this.name = name;
-        rbPathToValues = new HashMap<String, List<String[]>>();
-        this.enumMap = enumMap;
-    }
-
-    /**
-     * @return true if data should fallback on data in other files, true by default
-     */
-    public boolean hasFallback() {
-        return hasFallback;
-    }
-
-    /**
-     * Returns the the relative path of the source file used to generate the
-     * ICU data. Used when writing the data to file.
-     *
-     * @return
-     */
-    public String getSourceFile() {
-        return sourceFile;
-    }
-
-    /**
-     * @return the name to be used for the data.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Sets a comment to be placed above the data structure.
-     * @param comment
-     */
-    public void setFileComment(String comment) {
-        this.comment = comment;
-    }
-
-    public String getFileComment() {
-        return comment;
-    }
-
-    /**
-     * The RB path,value pair actually has an array as the value. So when we
-     * add to it, add to a list.
-     *
-     * @param path
-     * @param value
-     * @return
-     */
-    public void add(String path, String... values) {
-        List<String[]> list = rbPathToValues.get(path);
-        if (list == null) {
-            rbPathToValues.put(path, list = new ArrayList<String[]>(1));
-        }
-        list.add(normalizeValues(path, values));
-    }
-
-    /**
-     * The RB path,value pair actually has an array as the value. So when we
-     * add to it, add to a list.
-     *
-     * @param path
-     * @param value
-     * @return
-     */
-    void add(String path, String value) {
-        add(path, new String[] { value });
-    }
-
-    void addAll(String path, Collection<String[]> valueList) {
-        for (String[] values : valueList) {
-            add(path, values);
-        }
-    }
-
-    public void replace(String path, String... values) {
-        List<String[]> list = new ArrayList<String[]>(1);
-        rbPathToValues.put(path, list);
-        list.add(normalizeValues(path, values));
-    }
-
-    private String[] normalizeValues(String rbPath, String[] values) {
-        if (isIntRbPath(rbPath)) {
-            List<String> normalizedValues = new ArrayList<String>();
-            for (int i = 0; i < values.length; i++) {
-                String curValue = values[i];
-                String enumValue = enumMap.get(curValue);
-                if (enumValue != null) curValue = enumValue;
-                normalizedValues.add(curValue);
-            }
-            return normalizedValues.toArray(values);
-        } else {
-            return values;
-        }
-    }
-
-    /**
-     * Get items
-     *
-     * @return
-     */
-    public Set<Entry<String, List<String[]>>> entrySet() {
-        return rbPathToValues.entrySet();
-    }
-
-    /**
-     * Get items
-     *
-     * @return
-     */
-    public Set<String> keySet() {
-        return rbPathToValues.keySet();
-    }
-
-    @Override
-    public Iterator<String> iterator() {
-        return rbPathToValues.keySet().iterator();
-    }
-
-    public int size() {
-        return rbPathToValues.size();
-    }
-
-    public boolean containsKey(String key) {
-        return rbPathToValues.containsKey(key);
-    }
-
-    public List<String[]> get(String path) {
-        return rbPathToValues.get(path);
-    }
-
-    /**
-     * @param rbPath
-     * @return true if the rbPath is for integer values.
-     */
-    public static boolean isIntRbPath(String rbPath) {
-        return rbPath.endsWith(":int") || rbPath.endsWith(":intvector");
-    }
-}
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/icu/IcuDataSplitter.java b/tools/java/org/unicode/cldr/icu/IcuDataSplitter.java
deleted file mode 100644
index c38f6c6..0000000
--- a/tools/java/org/unicode/cldr/icu/IcuDataSplitter.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import org.unicode.cldr.icu.ResourceSplitter.SplitInfo;
-
-public class IcuDataSplitter {
-    private static final String VERSION_PATH = "/Version";
-    private static final String PARENT_PATH = "/%%Parent";
-
-    private final List<SplitInfo> splitInfos;
-    private final Map<String, File> targetDirs;
-    private final Map<String, Set<String>> splitSources = new HashMap<String, Set<String>>();
-
-    /**
-     * Splits the
-     *
-     * @param splitInfos
-     */
-    private IcuDataSplitter(List<SplitInfo> splitInfos) {
-        this.splitInfos = splitInfos;
-        targetDirs = new HashMap<String, File>();
-    }
-
-    /**
-     * Creates a new IcuDataSplitter and creates directories for the split files
-     * if they do not already exist.
-     *
-     * @param mainDirPath
-     *            the main directory that other directories will be relative to.
-     * @param splitInfos
-     * @return
-     */
-    public static IcuDataSplitter make(String mainDirPath, List<SplitInfo> splitInfos) {
-        IcuDataSplitter splitter = new IcuDataSplitter(splitInfos);
-        // Make sure that all the required directories are present.
-        Map<String, File> targetDirs = splitter.targetDirs;
-        for (SplitInfo si : splitInfos) {
-            String dirPath = si.targetDirPath;
-            if (!targetDirs.containsKey(dirPath)) {
-                File dir = new File(dirPath);
-                if (!dir.isAbsolute()) {
-                    dir = new File(mainDirPath, "/../" + dirPath);
-                }
-                if (dir.exists()) {
-                    if (!dir.isDirectory()) {
-                        throw new IllegalArgumentException(
-                            "File \"" + dirPath + "\" exists and is not a directory");
-                    }
-                    if (!dir.canWrite()) {
-                        throw new IllegalArgumentException(
-                            "Cannot write to directory \"" + dirPath + "\"");
-                    }
-                } else {
-                    if (!dir.mkdirs()) {
-                        String canonicalPath;
-                        try {
-                            canonicalPath = dir.getCanonicalPath();
-                        } catch (IOException e) {
-                            canonicalPath = dirPath;
-                        }
-                        throw new IllegalArgumentException(
-                            "Unable to create directory path \"" + canonicalPath + "\"");
-                    }
-                }
-                targetDirs.put(dirPath, dir);
-            }
-        }
-        return splitter;
-    }
-
-    /**
-     * Splits an IcuData object for writing to different directories.
-     *
-     * @param data
-     * @return
-     */
-    public Map<String, IcuData> split(IcuData icuData, String fallbackDir) {
-        Map<String, IcuData> splitData = new HashMap<String, IcuData>();
-        String sourceFile = icuData.getSourceFile();
-        String name = icuData.getName();
-        boolean hasFallback = icuData.hasFallback();
-        Set<String> dirs = targetDirs.keySet();
-        for (String dir : dirs) {
-            splitData.put(dir, new IcuData(sourceFile, name, hasFallback));
-        }
-        splitData.put(fallbackDir, new IcuData(sourceFile, name, hasFallback));
-
-        for (Entry<String, List<String[]>> entry : icuData.entrySet()) {
-            String rbPath = entry.getKey();
-            List<String[]> values = entry.getValue();
-            boolean wasSplit = false;
-            // Paths that should be copied to all directories.
-            if (rbPath.equals(VERSION_PATH) || rbPath.equals(PARENT_PATH)) {
-                for (String dir : dirs) {
-                    splitData.get(dir).addAll(rbPath, values);
-                }
-            } else {
-                // Split up regular paths.
-                for (SplitInfo splitInfo : splitInfos) {
-                    String checkPath = rbPath.replaceFirst(":alias", "/"); // Handle splitting of a top level alias ( as in root/units )
-                    if (checkPath.startsWith(splitInfo.srcNodePath)) {
-                        splitData.get(splitInfo.targetDirPath).addAll(rbPath, values);
-                        wasSplit = true;
-                        break;
-                    }
-                }
-            }
-            // Add any remaining values to the file in fallback dir.
-            if (!wasSplit) {
-                splitData.get(fallbackDir).addAll(rbPath, values);
-            }
-        }
-        // Remove all files that only contain version info.
-        Iterator<Entry<String, IcuData>> iterator = splitData.entrySet().iterator();
-        String comment = icuData.getFileComment();
-        while (iterator.hasNext()) {
-            Entry<String, IcuData> entry = iterator.next();
-            IcuData data = entry.getValue();
-            data.setFileComment(comment);
-            if (entry.getKey().equals(fallbackDir)) continue;
-            if (data.size() == 1 && data.containsKey(VERSION_PATH)) {
-                // Comment copied from ResourceSplitter:
-                // Some locales that use root data rely on the presence of
-                // a resource file matching the prefix of the locale to prevent fallback
-                // lookup through the default locale. To prevent this error, all resources
-                // need at least a language-only stub resource to be present.
-                //
-                // Arrgh. The icu package tool wants all internal nodes in the tree to be
-                // present. Currently, the missing nodes are all lang_Script locales.
-                // Maybe change the package tool to fix this.
-                String locale = data.getName();
-                int underscorePos = locale.indexOf('_');
-                if (underscorePos > -1 && locale.length() - underscorePos - 1 != 4) {
-                    iterator.remove();
-                    continue;
-                }
-            }
-            add(splitSources, entry.getKey(), data.getName());
-        }
-        return splitData;
-    }
-
-    /**
-     * Adds a value to the list with the specified key.
-     */
-    private static void add(Map<String, Set<String>> map, String key, String value) {
-        Set<String> set = map.get(key);
-        if (set == null) {
-            map.put(key, set = new HashSet<String>());
-        }
-        set.add(value);
-    }
-
-    /**
-     * Returns the set of directories that the splitter splits data into (excluding the main directory).
-     */
-    public Set<String> getTargetDirs() {
-        return targetDirs.keySet();
-    }
-
-    public Set<String> getDirSources(String dir) {
-        return Collections.unmodifiableSet(splitSources.get(dir));
-    }
-
-    public Makefile generateMakefile(Collection<String> aliases, String dir) {
-        String prefix = dir.toUpperCase();
-        Makefile makefile = new Makefile(prefix);
-        makefile.addSyntheticAlias(aliases);
-        makefile.addAliasSource();
-        makefile.addSource(splitSources.get(dir));
-        return makefile;
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/IcuTextWriter.java b/tools/java/org/unicode/cldr/icu/IcuTextWriter.java
deleted file mode 100644
index a147f92..0000000
--- a/tools/java/org/unicode/cldr/icu/IcuTextWriter.java
+++ /dev/null
@@ -1,348 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.unicode.cldr.draft.FileUtilities;
-import org.unicode.cldr.util.FileCopier;
-import org.unicode.cldr.util.PatternCache;
-
-import com.ibm.icu.impl.Utility;
-import com.ibm.icu.util.Calendar;
-
-/**
- * Writes an IcuData object to a text file.
- *
- * @author jchye
- */
-public class IcuTextWriter {
-    /**
-     * The default tab indent (actually spaces)
-     */
-    private static final String TAB = "    ";
-    // List of characters to escape in UnicodeSets.
-    private static final Pattern UNICODESET_ESCAPE = PatternCache.get("\\\\[\\\\\\[\\]\\{\\}\\-&:^=]");
-    // Only escape \ and " from other strings.
-    private static final Pattern STRING_ESCAPE = PatternCache.get("(?!')\\\\\\\\(?!')");
-    private static final Pattern QUOTE_ESCAPE = PatternCache.get("\\\\?\"");
-
-    private static String headerText;
-
-    /**
-     * ICU paths have a simple comparison, alphabetical within a level. We do
-     * have to catch the / so that it is lower than everything.
-     */
-    public static final Comparator<String> PATH_COMPARATOR = new Comparator<String>() {
-        @Override
-        public int compare(String arg0, String arg1) {
-            int min = Math.min(arg0.length(), arg1.length());
-            for (int i = 0; i < min; ++i) {
-                int ch0 = arg0.charAt(i);
-                int ch1 = arg1.charAt(i);
-                int diff = ch0 - ch1;
-                if (diff == 0) {
-                    continue;
-                }
-                if (ch0 == '/') {
-                    return -1;
-                } else if (ch1 == '/') {
-                    return 1;
-                }
-                // make * greater than everything, because of languageMatch
-                // while it is a pain to have it be unordered, this fix is sufficient to put all the *'s after anything else
-                if (ch0 == '*') {
-                    return 1;
-                } else if (ch1 == '*') {
-                    return -1;
-                }
-                return diff;
-            }
-            return arg0.length() - arg1.length();
-        }
-    };
-
-    private static String getHeader() {
-        if (headerText != null) {
-            return headerText;
-        }
-        try (StringWriter stringWriter = new StringWriter();) {
-            FileCopier.copy(NewLdml2IcuConverter.class, "ldml2icu_header.txt", stringWriter);
-            headerText = stringWriter.toString();
-            headerText = headerText.replace("%year%", String.valueOf(Calendar.getInstance().get(Calendar.YEAR)));
-            return headerText;
-        } catch (IOException ioe) {
-            throw new IllegalArgumentException(ioe);
-        }
-    }
-
-    /**
-     * Write a file in ICU format. LDML2ICUConverter currently has some
-     * funny formatting in a few cases; don't try to match everything.
-     *
-     * @param icuData
-     *            the icu data structure to be written
-     * @param dirPath
-     *            the directory to write the file to
-     * @param hasSpecial
-     *            true if a special file was used to create the ICU data
-     */
-    public static void writeToFile(IcuData icuData, String dirPath) throws IOException {
-        String name = icuData.getName();
-        PrintWriter out = FileUtilities.openUTF8Writer(dirPath, name + ".txt");
-        out.write('\uFEFF');
-        // Append the header.
-        String header = getHeader().replace("%source%", icuData.getSourceFile());
-        out.print(header);
-        if (icuData.getFileComment() != null) {
-            out.println("/**");
-            out.append(" * ").append(icuData.getFileComment()).println();
-            out.println(" */");
-        }
-
-        // Write the ICU data to file.
-        out.append(name);
-        if (!icuData.hasFallback()) out.append(":table(nofallback)");
-        List<String> sortedPaths = new ArrayList<String>(icuData.keySet());
-        Collections.sort(sortedPaths, PATH_COMPARATOR);
-        String[] lastLabels = new String[] {};
-        boolean wasSingular = false;
-        for (String path : sortedPaths) {
-            // Write values to file.
-            String[] labels = path.split("/", -1); // Don't discard trailing slashes.
-            int common = getCommon(lastLabels, labels);
-            for (int i = lastLabels.length - 1; i > common; --i) {
-                if (wasSingular) {
-                    wasSingular = false;
-                } else {
-                    out.append(Utility.repeat(TAB, i));
-                }
-                out.println("}");
-            }
-            for (int i = common + 1; i < labels.length; ++i) {
-                final String pad = Utility.repeat(TAB, i);
-                out.append(pad);
-                String label = labels[i];
-                if (!label.startsWith("<") && !label.endsWith(">")) {
-                    out.append(label);
-                }
-                out.append('{');
-                if (i != labels.length - 1) {
-                    out.println();
-                }
-            }
-            List<String[]> values = icuData.get(path);
-            try {
-                wasSingular = appendValues(name, path, values, labels.length, out);
-            } catch (NullPointerException npe) {
-                System.err.println("Null value encountered in " + path);
-            }
-            out.flush();
-            lastLabels = labels;
-        }
-        // Add last closing braces.
-        for (int i = lastLabels.length - 1; i > 0; --i) {
-            if (wasSingular) {
-                wasSingular = false;
-            } else {
-                out.append(Utility.repeat(TAB, i));
-            }
-            out.println("}");
-        }
-        out.println("}");
-        out.close();
-    }
-
-    /**
-     * Inserts padding and values between braces.
-     * @param name
-     * @param rbPath
-     * @param values
-     * @param numTabs
-     * @param out
-     * @return
-     */
-    private static boolean appendValues(String name, String rbPath, List<String[]> values, int numTabs,
-        PrintWriter out) {
-        String[] firstArray;
-        boolean wasSingular = false;
-        boolean quote = !IcuData.isIntRbPath(rbPath);
-        boolean isSequence = rbPath.endsWith("/Sequence");
-        if (values.size() == 1 && !mustBeArray(true, name, rbPath)) {
-            if ((firstArray = values.get(0)).length == 1 && !mustBeArray(false, name, rbPath)) {
-                String value = firstArray[0];
-                if (quote) {
-                    value = quoteInside(value);
-                }
-                int maxWidth = 84 - Math.min(4, numTabs) * TAB.length();
-                if (value.length() <= maxWidth) {
-                    // Single value for path: don't add newlines.
-                    appendValue(value, quote, out);
-                    wasSingular = true;
-                } else {
-                    // Value too long to fit in one line, so wrap.
-                    final String pad = Utility.repeat(TAB, numTabs);
-                    out.println();
-                    int end;
-                    for (int i = 0; i < value.length(); i = end) {
-                        end = goodBreak(value, i + maxWidth);
-                        String part = value.substring(i, end);
-                        out.append(pad);
-                        appendValue(part, quote, out).println();
-                    }
-                }
-            } else {
-                // Only one array for the rbPath, so don't add an extra set of braces.
-                final String pad = Utility.repeat(TAB, numTabs);
-                out.println();
-                appendArray(pad, firstArray, quote, isSequence, out);
-            }
-        } else {
-            final String pad = Utility.repeat(TAB, numTabs);
-            out.println();
-            for (String[] valueArray : values) {
-                if (valueArray.length == 1) {
-                    // Single-value array: print normally.
-                    appendArray(pad, valueArray, quote, isSequence, out);
-                } else {
-                    // Enclose this array in braces to separate it from other
-                    // values.
-                    out.append(pad).println("{");
-                    appendArray(pad + TAB, valueArray, quote, isSequence, out);
-                    out.append(pad).println("}");
-                }
-            }
-        }
-        return wasSingular;
-    }
-
-    /**
-     * Wrapper for a hack to determine if the given rb path should always
-     * present its values as an array. This hack is required for an ICU data test to pass.
-     *
-     * @param topValues
-     * @param name
-     * @param rbPath
-     * @return
-     */
-    private static boolean mustBeArray(boolean topValues, String name, String rbPath) {
-        // TODO(jchye): Add this as an option to the locale file instead of hardcoding.
-        // System.out.println(name + "\t" + rbPath);
-        if (topValues) {
-            return (rbPath.startsWith("/rules/set")
-                && name.equals("pluralRanges"));
-        }
-        return rbPath.equals("/LocaleScript")
-            || (rbPath.contains("/eras/") && !rbPath.endsWith(":alias") && !rbPath.endsWith("/named"))
-            || rbPath.startsWith("/calendarPreferenceData")
-            || rbPath.startsWith("/metazoneInfo");
-    }
-
-    private static PrintWriter appendArray(String padding, String[] valueArray,
-        boolean quote, boolean isSequence, PrintWriter out) {
-        for (String value : valueArray) {
-            out.append(padding);
-            appendValue(quoteInside(value), quote, out);
-            if (!isSequence) {
-                out.print(",");
-            }
-            out.println();
-        }
-        return out;
-    }
-
-    private static PrintWriter appendValue(String value, boolean quote, PrintWriter out) {
-        if (quote) {
-            return out.append('"').append(value).append('"');
-        } else {
-            return out.append(value);
-        }
-    }
-
-    /**
-     * Can a string be broken here? If not, backup until we can.
-     *
-     * @param quoted
-     * @param end
-     * @return
-     */
-    private static int goodBreak(String quoted, int end) {
-        if (end > quoted.length()) {
-            return quoted.length();
-        }
-        // Don't break escaped Unicode characters.
-        // Need to handle both e.g. \u4E00 and \U00020000
-        for (int i = end - 1; i > end - 10;) {
-            char current = quoted.charAt(i--);
-            if (!Character.toString(current).matches("[0-9A-Fa-f]")) {
-                if ((current == 'u' || current == 'U') && i > end - 10 && quoted.charAt(i) == '\\') {
-                    return i;
-                }
-                break;
-            }
-        }
-        while (end > 0) {
-            char ch = quoted.charAt(end - 1);
-            if (ch != '\\' && (ch < '\uD800' || ch > '\uDFFF')) {
-                break;
-            }
-            --end;
-        }
-        return end;
-    }
-
-    /**
-     * Fix characters inside strings.
-     *
-     * @param item
-     * @return
-     */
-    private static String quoteInside(String item) {
-        // Unicode-escape all quotes.
-        item = QUOTE_ESCAPE.matcher(item).replaceAll("\\\\u0022");
-        // Double up on backslashes, ignoring Unicode-escaped characters.
-        Pattern pattern = item.startsWith("[") && item.endsWith("]") ? UNICODESET_ESCAPE : STRING_ESCAPE;
-        Matcher matcher = pattern.matcher(item);
-
-        if (!matcher.find()) {
-            return item;
-        }
-        StringBuffer buffer = new StringBuffer();
-        int start = 0;
-        do {
-            buffer.append(item.substring(start, matcher.start()));
-            int punctuationChar = item.codePointAt(matcher.end() - 1);
-            buffer.append("\\");
-            if (punctuationChar == '\\') {
-                buffer.append('\\');
-            }
-            buffer.append(matcher.group());
-            start = matcher.end();
-        } while (matcher.find());
-        buffer.append(item.substring(start));
-        return buffer.toString();
-    }
-
-    /**
-     * find the initial labels (from a path) that are identical.
-     *
-     * @param item
-     * @return
-     */
-    private static int getCommon(String[] lastLabels, String[] labels) {
-        int min = Math.min(lastLabels.length, labels.length);
-        int i;
-        for (i = 0; i < min; ++i) {
-            if (!lastLabels[i].equals(labels[i])) {
-                return i - 1;
-            }
-        }
-        return i - 1;
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/KeyTypeDataConverter.java b/tools/java/org/unicode/cldr/icu/KeyTypeDataConverter.java
deleted file mode 100644
index b273b02..0000000
--- a/tools/java/org/unicode/cldr/icu/KeyTypeDataConverter.java
+++ /dev/null
@@ -1,423 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.TreeMap;
-
-import org.unicode.cldr.icu.ICUResourceWriter.Resource;
-import org.unicode.cldr.icu.ICUResourceWriter.ResourceAlias;
-import org.unicode.cldr.icu.ICUResourceWriter.ResourceString;
-import org.unicode.cldr.icu.ICUResourceWriter.ResourceTable;
-import org.unicode.cldr.util.LDMLUtilities;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-
-public class KeyTypeDataConverter {
-    private final ICULog log;
-    private final String bcp47Dir;
-    private final String[] externalTypeKeys;
-    private Collection<Document> documents;
-
-    private static final String SOURCE_INFO = "common/bcp47/*.xml";
-    private static final String EXTERNAL_TYPES_SUFFIX = "Types";
-
-    private static final boolean DEBUG = false;
-
-    public KeyTypeDataConverter(ICULog log, String bcp47Dir, String[] externalTypeKeys) {
-        this.log = log;
-        this.bcp47Dir = bcp47Dir;
-        this.externalTypeKeys = (externalTypeKeys == null) ? new String[0] : externalTypeKeys;
-    }
-
-    public void convert(ICUWriter writer) {
-        // creating key mapping data
-        Map<String, String> keyMap = new TreeMap<String, String>();
-        for (Document doc : getDocuments()) {
-            addKeyMap(keyMap, doc);
-        }
-
-        if (DEBUG) {
-            log.log("Key mappings ---------------------------------------------");
-            dumpMap(keyMap);
-        }
-
-        // creating type mapping data
-        Map<String, Map<String, String>> typeMaps = new TreeMap<String, Map<String, String>>();
-        Map<String, Map<String, String>> typeAliases = new TreeMap<String, Map<String, String>>();
-        for (Document doc : getDocuments()) {
-            addTypeMaps(typeMaps, typeAliases, doc);
-        }
-
-        if (DEBUG) {
-            for (Map.Entry<String, Map<String, String>> e : typeMaps.entrySet()) {
-                log.log("\n\n\nType mappings for " + e.getKey() + " ---------------------------------------------");
-                dumpMap(e.getValue());
-            }
-
-            for (Map.Entry<String, Map<String, String>> e : typeAliases.entrySet()) {
-                log.log("\n\n\nAlias mappings for " + e.getKey() + " ---------------------------------------------");
-                dumpMap(e.getValue());
-            }
-        }
-
-        // write out keyTypeData.txt
-        Resource cur;
-
-        ResourceTable keyTypeDataRes = new ResourceTable();
-        keyTypeDataRes.name = LDMLBCP47Constants.KEYTYPEDATA;
-        keyTypeDataRes.annotation = ResourceTable.NO_FALLBACK;
-
-        // keyMap
-        ResourceTable keyMapRes = new ResourceTable();
-        keyMapRes.name = LDMLBCP47Constants.KEYMAP;
-        keyTypeDataRes.first = keyMapRes;
-
-        cur = null;
-        for (Entry<String, String> keyMapItem : keyMap.entrySet()) {
-            ResourceString keyRes = new ResourceString();
-            keyRes.name = keyMapItem.getKey();
-            keyRes.val = keyMapItem.getValue();
-
-            if (cur == null) {
-                keyMapRes.first = keyRes;
-            } else {
-                cur.next = keyRes;
-            }
-            cur = keyRes;
-        }
-
-        // typeMap
-        Resource typeMapRes = createTypeMapResource(typeMaps, null);
-        keyMapRes.next = typeMapRes;
-
-        // typeAlias
-        Resource typeAliasRes = createTypeAliasResource(typeAliases, null);
-        typeMapRes.next = typeAliasRes;
-
-        writer.writeResource(keyTypeDataRes, SOURCE_INFO);
-
-        // externalized type/alias map data
-        for (String key : externalTypeKeys) {
-            ResourceTable extTypeDataRes = new ResourceTable();
-            extTypeDataRes.name = key + EXTERNAL_TYPES_SUFFIX;
-            extTypeDataRes.annotation = ResourceTable.NO_FALLBACK;
-
-            // typeMap
-            Resource extTypeMapRes = createTypeMapResource(typeMaps, key);
-            extTypeDataRes.first = extTypeMapRes;
-
-            // typeAlias
-            Resource extTypeAliasRes = createTypeAliasResource(typeAliases, key);
-            extTypeMapRes.next = extTypeAliasRes;
-
-            writer.writeResource(extTypeDataRes, SOURCE_INFO);
-        }
-
-    }
-
-    private Collection<Document> getDocuments() {
-        if (documents != null) {
-            return documents;
-        }
-
-        documents = new ArrayList<Document>();
-
-        FilenameFilter filter = new FilenameFilter() {
-            public boolean accept(File dir, String name) {
-                if (name.endsWith(".xml")) {
-                    return true;
-                }
-                return false;
-            }
-        };
-
-        File dir = new File(bcp47Dir);
-        String[] files = dir.list(filter);
-        if (files == null) {
-            String canonicalPath;
-            try {
-                canonicalPath = dir.getCanonicalPath();
-            } catch (IOException e) {
-                canonicalPath = e.getMessage();
-            }
-            log.error("BCP47 files are missing " + canonicalPath);
-            System.exit(-1);
-        }
-
-        String dirPath = dir.getAbsolutePath();
-        for (String fileName : files) {
-            try {
-                log.info("Parsing document " + fileName);
-                String filePath = dirPath + File.separator + fileName;
-                Document doc = LDMLUtilities.parse(filePath, false);
-                documents.add(doc);
-            } catch (Throwable se) {
-                log.error("Parsing: " + fileName + " " + se.toString(), se);
-                System.exit(1);
-            }
-        }
-        return documents;
-    }
-
-    private static void addKeyMap(Map<String, String> keyMap, Document root) {
-        for (Node node = root.getFirstChild(); node != null; node = node.getNextSibling()) {
-            if (node.getNodeType() != Node.ELEMENT_NODE) {
-                continue;
-            }
-
-            if (node.getNodeName().equals(LDMLBCP47Constants.LDMLBCP47)) {
-                // Stop iterating over top-level elements, restart iterating over elements
-                // under ldmlBCP47.
-                node = node.getFirstChild();
-                continue;
-            }
-
-            if (node.getNodeName().equals(LDMLBCP47Constants.KEYWORD)) {
-                // iterating into elements under keyword
-                node = node.getFirstChild();
-                continue;
-            }
-
-            if (node.getNodeName().equals(LDMLBCP47Constants.KEY)) {
-                String bcpKey = LDMLUtilities.getAttributeValue(node, LDMLBCP47Constants.NAME);
-                String key = LDMLUtilities.getAttributeValue(node, LDMLBCP47Constants.ALIAS);
-                if (key != null && !bcpKey.equals(key)) {
-                    /* keys are case-insensitive */
-                    keyMap.put(escapeKey(key.toLowerCase(Locale.ROOT)), bcpKey);
-                }
-            }
-        }
-    }
-
-    private static void addTypeMaps(Map<String, Map<String, String>> typeMaps,
-        Map<String, Map<String, String>> typeAliases, Document root) {
-        for (Node node = root.getFirstChild(); node != null; node = node.getNextSibling()) {
-            if (node.getNodeType() != Node.ELEMENT_NODE) {
-                continue;
-            }
-
-            if (node.getNodeName().equals(LDMLBCP47Constants.LDMLBCP47)) {
-                // Stop iterating over top-level elements, restart iterating over elements
-                // under ldmlBCP47.
-                node = node.getFirstChild();
-                continue;
-            }
-
-            if (node.getNodeName().equals(LDMLBCP47Constants.KEYWORD)) {
-                // iterating into elements under keyword
-                node = node.getFirstChild();
-                continue;
-            }
-
-            if (node.getNodeName().equals(LDMLBCP47Constants.KEY)) {
-                String bcpKey = LDMLUtilities.getAttributeValue(node, LDMLBCP47Constants.NAME);
-                String key = LDMLUtilities.getAttributeValue(node, LDMLBCP47Constants.ALIAS);
-                if (key == null) {
-                    key = bcpKey;
-                }
-                key = key.toLowerCase(Locale.ROOT); // keys are case-insensitive
-                for (Node node2 = node.getFirstChild(); node2 != null; node2 = node2.getNextSibling()) {
-                    if (node2.getNodeType() != Node.ELEMENT_NODE) {
-                        continue;
-                    }
-                    if (node2.getNodeName().equals(LDMLBCP47Constants.TYPE)) {
-                        String bcpType = LDMLUtilities.getAttributeValue(node2, LDMLBCP47Constants.NAME);
-                        String type = LDMLUtilities.getAttributeValue(node2, LDMLBCP47Constants.ALIAS);
-                        if (type != null) {
-                            // type may contain multiple values delimited by space character
-                            String[] types = type.split(" ");
-                            if (types.length > 1) {
-                                type = types[0];
-
-                                // add 2nd and following type values into the alias map
-                                Map<String, String> singleTypeAliases = typeAliases.get(key);
-                                if (singleTypeAliases == null) {
-                                    singleTypeAliases = new TreeMap<String, String>();
-                                    typeAliases.put(key, singleTypeAliases);
-                                }
-                                for (int i = 1; i < types.length; i++) {
-                                    singleTypeAliases.put(escapeKey(types[i]), type);
-                                }
-                            }
-                        }
-
-                        if (type != null && !bcpType.equals(type)) {
-                            // only populating mapping data when bcp47 representation is different
-                            Map<String, String> singleTypeMap = typeMaps.get(key);
-                            if (singleTypeMap == null) {
-                                singleTypeMap = new TreeMap<String, String>();
-                                typeMaps.put(key, singleTypeMap);
-                            }
-                            singleTypeMap.put(escapeKey(type), bcpType);
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    private Resource createTypeMapResource(Map<String, Map<String, String>> typeMaps, String key) {
-        ResourceTable typeMapRes = new ResourceTable();
-        typeMapRes.name = LDMLBCP47Constants.TYPEMAP;
-
-        Resource cur = null;
-        for (Entry<String, Map<String, String>> typesForKeyItem : typeMaps.entrySet()) {
-            String itemKey = typesForKeyItem.getKey();
-            if (key != null && !itemKey.equals(key)) {
-                // skip this key
-                continue;
-            }
-
-            String aliasName = null;
-            if (key == null) {
-                for (String extKey : externalTypeKeys) {
-                    if (extKey.equals(itemKey)) {
-                        aliasName = "/ICUDATA/" + itemKey + EXTERNAL_TYPES_SUFFIX
-                            + "/" + LDMLBCP47Constants.TYPEMAP
-                            + "/" + itemKey;
-                        break;
-                    }
-                }
-            }
-
-            Resource res = null;
-            if (aliasName != null) {
-                // generating alias resource
-                ResourceAlias typeMapForKeyResAlias = new ResourceAlias();
-                typeMapForKeyResAlias.name = itemKey;
-                typeMapForKeyResAlias.val = aliasName;
-
-                res = typeMapForKeyResAlias;
-            } else {
-                // generating type mapping container table per key
-                ResourceTable typeMapForKeyRes = new ResourceTable();
-                typeMapForKeyRes.name = itemKey;
-
-                Resource curTypeRes = null;
-                for (Entry<String, String> typeItem : typesForKeyItem.getValue().entrySet()) {
-                    // generating each type map data
-                    ResourceString typeRes = new ResourceString();
-                    typeRes.name = typeItem.getKey();
-                    typeRes.val = typeItem.getValue();
-
-                    if (curTypeRes == null) {
-                        typeMapForKeyRes.first = typeRes;
-                    } else {
-                        curTypeRes.next = typeRes;
-                    }
-                    curTypeRes = typeRes;
-                }
-
-                res = typeMapForKeyRes;
-            }
-
-            if (cur == null) {
-                typeMapRes.first = res;
-            } else {
-                cur.next = res;
-            }
-            cur = res;
-        }
-
-        return typeMapRes;
-    }
-
-    private Resource createTypeAliasResource(Map<String, Map<String, String>> typeAliases, String key) {
-        ResourceTable typeAliasRes = new ResourceTable();
-        typeAliasRes.name = LDMLBCP47Constants.TYPEALIAS;
-
-        Resource cur = null;
-        for (Entry<String, Map<String, String>> aliasesForKeyItem : typeAliases.entrySet()) {
-            String itemKey = aliasesForKeyItem.getKey();
-            if (key != null && !itemKey.equals(key)) {
-                // skip this key
-                continue;
-            }
-
-            String aliasName = null;
-            if (key == null) {
-                for (String extKey : externalTypeKeys) {
-                    if (extKey.equals(itemKey)) {
-                        aliasName = "/ICUDATA/" + itemKey + EXTERNAL_TYPES_SUFFIX
-                            + "/" + LDMLBCP47Constants.TYPEALIAS
-                            + "/" + itemKey;
-                        break;
-                    }
-                }
-            }
-
-            Resource res = null;
-
-            if (aliasName != null) {
-                // generating alias resource
-                ResourceAlias aliasesForKeyResAlias = new ResourceAlias();
-                aliasesForKeyResAlias.name = itemKey;
-                aliasesForKeyResAlias.val = aliasName;
-
-                res = aliasesForKeyResAlias;
-            } else {
-                // generating alias mapping container table per key
-                ResourceTable aliasesForKeyRes = new ResourceTable();
-                aliasesForKeyRes.name = itemKey;
-
-                Resource curAliasRes = null;
-                for (Entry<String, String> aliasItem : aliasesForKeyItem.getValue().entrySet()) {
-                    // generating each alias map data
-                    ResourceString aliasRes = new ResourceString();
-                    aliasRes.name = aliasItem.getKey();
-                    aliasRes.val = aliasItem.getValue();
-
-                    if (curAliasRes == null) {
-                        aliasesForKeyRes.first = aliasRes;
-                    } else {
-                        curAliasRes.next = aliasRes;
-                    }
-                    curAliasRes = aliasRes;
-                }
-
-                res = aliasesForKeyRes;
-            }
-
-            if (cur == null) {
-                typeAliasRes.first = res;
-            } else {
-                cur.next = res;
-            }
-            cur = res;
-        }
-
-        return typeAliasRes;
-    }
-
-    private static String escapeKey(String key) {
-        if (key.contains("/")) {
-            key = "\"" + key.replace('/', ':') + "\"";
-        }
-        return key;
-    }
-
-    private void dumpMap(Map<String, String> map) {
-        for (Map.Entry<String, String> e : map.entrySet()) {
-            log.log(e.getKey() + " -> " + e.getValue());
-        }
-    }
-
-    private static class LDMLBCP47Constants {
-        static final String LDMLBCP47 = "ldmlBCP47";
-        static final String KEYWORD = "keyword";
-        static final String KEY = "key";
-        static final String NAME = "name";
-        static final String ALIAS = "alias";
-        static final String TYPE = "type";
-        static final String KEYTYPEDATA = "keyTypeData";
-        static final String KEYMAP = "keyMap";
-        static final String TYPEMAP = "typeMap";
-        static final String TYPEALIAS = "typeAlias";
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/LDMLComparator.java b/tools/java/org/unicode/cldr/icu/LDMLComparator.java
index b01497f..762d148 100644
--- a/tools/java/org/unicode/cldr/icu/LDMLComparator.java
+++ b/tools/java/org/unicode/cldr/icu/LDMLComparator.java
@@ -122,31 +122,31 @@
         return temp;
     }
 
-    Hashtable<String, String> optionTable = new Hashtable<String, String>();
+    Hashtable<String, String> optionTable = new Hashtable<>();
     private String destFolder = ".";
     private String localeStr;
     private Calendar cal = Calendar.getInstance();
-    private Hashtable<String, String> colorHash = new Hashtable<String, String>();
+    private Hashtable<String, String> colorHash = new Hashtable<>();
     private String goldFileName;
     private String goldKey;
     private int serialNumber = 0;
-    private Map<String, Object> compareMap = new TreeMap<String, Object>(getDefaultCollation());
-    private Hashtable<String, String> doesNotExist = new Hashtable<String, String>();
-    private Hashtable<String, String> requested = new Hashtable<String, String>();
-    private Hashtable<String, String> deprecatedLanguageCodes = new Hashtable<String, String>();
-    private Hashtable<String, String> deprecatedCountryCodes = new Hashtable<String, String>();
-    private Set<String> vettingSet = new TreeSet<String>();
+    private Map<String, Object> compareMap = new TreeMap<>(getDefaultCollation());
+    private Hashtable<String, String> doesNotExist = new Hashtable<>();
+    private Hashtable<String, String> requested = new Hashtable<>();
+    private Hashtable<String, String> deprecatedLanguageCodes = new Hashtable<>();
+    private Hashtable<String, String> deprecatedCountryCodes = new Hashtable<>();
+    private Set<String> vettingSet = new TreeSet<>();
     private String encoding = "UTF-8"; // default encoding
 
     // PN added
-    private Vector<String> m_PlatformVect = new Vector<String>(); // holds names of platforms
-    private Vector<String> m_PlatformFolderVect = new Vector<String>(); // holds names of folders containing locale data
+    private Vector<String> m_PlatformVect = new Vector<>(); // holds names of platforms
+    private Vector<String> m_PlatformFolderVect = new Vector<>(); // holds names of folders containing locale data
     // for each platform
     private int m_iOptions;
-    private Map<String, AccumulatedResults> m_AccumulatedResultsMap = new TreeMap<String, AccumulatedResults>();
+    private Map<String, AccumulatedResults> m_AccumulatedResultsMap = new TreeMap<>();
     private int m_iTotalConflictingElements = 0;
     private int m_iTotalNonConflictingElements = 0;
-    private Map<String, SummaryData> m_LocaleSummaryDataMap = new TreeMap<String, SummaryData>(); // key = localename,
+    private Map<String, SummaryData> m_LocaleSummaryDataMap = new TreeMap<>(); // key = localename,
     // data = summary info
     private boolean m_Vetting = false;
 
@@ -158,7 +158,7 @@
         String node;
         String index;
         String parentNode;
-        Hashtable<String, String> platformData = new Hashtable<String, String>();
+        Hashtable<String, String> platformData = new Hashtable<>();
         String referenceUrl;
     }
 
@@ -172,8 +172,8 @@
         String node;
         String index;
         String parentNode;
-        Vector<String> localeVectDiff = new Vector<String>(); // holds locales where a conflict in data was found
-        Vector<String> localeVectSame = new Vector<String>(); // holds locales where a no conflict in data was found
+        Vector<String> localeVectDiff = new Vector<>(); // holds locales where a conflict in data was found
+        Vector<String> localeVectSame = new Vector<>(); // holds locales where a no conflict in data was found
     }
 
     private class SummaryData {
@@ -235,8 +235,8 @@
                     addToCompareMap(goldFileName, goldKey);
                 }
                 for (; en.hasMoreElements();) {
-                    String key = (String) en.nextElement();
-                    String compFile = (String) optionTable.get(key);
+                    String key = en.nextElement();
+                    String compFile = optionTable.get(key);
                     if ((m_iOptions & OPT_VETTING) != 0) {
                         addVettable(goldFileName, goldKey);
                     } else {
@@ -317,7 +317,7 @@
                 for (int i = 0; i < USER_OPTIONS.length; i++) {
 
                     if (USER_OPTIONS[i].equals(option)) {
-                        result |= (int) (1 << i); // calculate option bit value
+                        result |= 1 << i; // calculate option bit value
                         optionRecognized = true;
                         if (USER_OPTIONS[i].equals("-s")) {
                         } else if (USER_OPTIONS[i].equals("-d")) {
@@ -381,7 +381,7 @@
                         parent = localeStr.substring(0, index);
                     }
                     writer.print("                <th bgcolor=\"" +
-                        (String) colorHash.get(name) + "\">" +
+                        colorHash.get(name) + "\">" +
                         name.toUpperCase() +
                         " (<a href=\"../../" + folder + localeStr + ".xml\">" + localeStr + "</a>," +
                         " <a href=\"../../" + folder + parent + ".xml\">" + parent + "</a>," +
@@ -389,7 +389,7 @@
                         "</th>\n");
                 } else {
                     writer.print("                <th bgcolor=\"" +
-                        (String) colorHash.get(name) + "\">" +
+                        colorHash.get(name) + "\">" +
                         name.toUpperCase() +
                         " (<a href=\"../../" + folder + localeStr + ".xml\">" + localeStr + "</a>)" +
                         "</th>\n");
@@ -412,7 +412,7 @@
             "                <th width=10%>ID</th>\n");
 
         for (int i = 0; i < m_PlatformVect.size(); i++) {
-            String name = (String) m_PlatformVect.elementAt(i);
+            String name = m_PlatformVect.elementAt(i);
             String folder;
 
             // Object obj = requested.get(name);
@@ -420,7 +420,7 @@
             // {
             folder = name + "/xml/";
             writer.print("                <th bgcolor=\"" +
-                (String) colorHash.get(name) + "\">" +
+                colorHash.get(name) + "\">" +
                 name.toUpperCase() +
                 " (<a href=\"../" + folder + localeStr + ".xml\">xml</a>)" +
                 "</th>\n");
@@ -440,8 +440,8 @@
     private boolean printDifferentValues(CompareElement element, PrintWriter writer) {
         boolean isEqual = true;
         // following don't count
-        if ((element.node.compareTo((String) "generation") == 0)
-            || (element.node.compareTo((String) "version") == 0)) {
+        if ((element.node.compareTo("generation") == 0)
+            || (element.node.compareTo("version") == 0)) {
             return isEqual;
         }
 
@@ -482,7 +482,7 @@
             writer.print("                <td>" + element.index + "</td>\n");
 
             for (int i = 0; i < m_PlatformVect.size(); i++) {
-                String val = (String) element.platformData.get(m_PlatformVect.elementAt(i));
+                String val = element.platformData.get(m_PlatformVect.elementAt(i));
                 if (val != null) {
                     writer.print("                <td>" + val + "</td>\n");
                 } else {
@@ -503,8 +503,8 @@
     private boolean printDifferentValuesWithRef(CompareElement element, PrintWriter writer) {
         boolean isEqual = true;
         // following don't count
-        if ((element.node.compareTo((String) "generation") == 0)
-            || (element.node.compareTo((String) "version") == 0)) {
+        if ((element.node.compareTo("generation") == 0)
+            || (element.node.compareTo("version") == 0)) {
             return isEqual;
         }
 
@@ -512,11 +512,11 @@
         boolean bFoundFirst = false;
         for (int i = 0; i < m_PlatformVect.size(); i++) {
             // excluding Common from diff
-            String platform = (String) m_PlatformVect.elementAt(i);
+            String platform = m_PlatformVect.elementAt(i);
             if (platform.compareTo(COMMON) == 0)
                 continue;
 
-            String value = (String) element.platformData.get(platform);
+            String value = element.platformData.get(platform);
             if (value == null)
                 continue;
 
@@ -557,7 +557,7 @@
             writer.print("                <td>" + element.index + "</td>\n");
 
             for (int i = 0; i < m_PlatformVect.size(); i++) {
-                String val = (String) element.platformData.get(m_PlatformVect.elementAt(i));
+                String val = element.platformData.get(m_PlatformVect.elementAt(i));
                 if (val != null) {
                     writer.print("                <td>" + val + "</td>\n");
                 } else {
@@ -583,8 +583,8 @@
         serialNumber++;
 
         for (int i = 0; i < PLATFORM_PRINT_ORDER.length; i++) {
-            String value = (String) element.platformData.get(PLATFORM_PRINT_ORDER[i]);
-            String color = (String) colorHash.get(PLATFORM_PRINT_ORDER[i]);
+            String value = element.platformData.get(PLATFORM_PRINT_ORDER[i]);
+            String color = colorHash.get(PLATFORM_PRINT_ORDER[i]);
             boolean caseDiff = false;
             boolean isEqual = false;
             // the locale exists for the given platform but there is no data
@@ -597,7 +597,7 @@
             } else {
                 // pick the correct color
                 for (int j = 0; j < i; j++) {
-                    String compareTo = (String) element.platformData.get(PLATFORM_PRINT_ORDER[j]);
+                    String compareTo = element.platformData.get(PLATFORM_PRINT_ORDER[j]);
                     if (compareTo == null) {
                         continue;
                     } else if (value.equals("")) {
@@ -606,17 +606,17 @@
                     } else if (element.parentNode.indexOf("decimalFormat") > -1
                         || element.parentNode.indexOf("currencyFormat") > -1) {
                         if (comparePatterns(compareTo, value)) {
-                            color = (String) colorHash.get(PLATFORM_PRINT_ORDER[j]);
+                            color = colorHash.get(PLATFORM_PRINT_ORDER[j]);
                             isEqual = true;
                             break;
                         }
                     } else if (Normalizer.compare(compareTo, value, 0) == 0) {
-                        color = (String) colorHash.get(PLATFORM_PRINT_ORDER[j]);
+                        color = colorHash.get(PLATFORM_PRINT_ORDER[j]);
                         isEqual = true;
                         break;
                     } else if (Normalizer.compare(compareTo, value, Normalizer.COMPARE_IGNORE_CASE) == 0) {
                         caseDiff = true;
-                        color = (String) colorHash.get(PLATFORM_PRINT_ORDER[j]);
+                        color = colorHash.get(PLATFORM_PRINT_ORDER[j]);
                         break;
                     }
                 }
@@ -624,8 +624,8 @@
                     value = "=";
                 } else {
                     if (i > 0) { // not the first platform
-                        if ((element.node.compareTo((String) "generation") == 0)
-                            || (element.node.compareTo((String) "version") == 0)) {
+                        if ((element.node.compareTo("generation") == 0)
+                            || (element.node.compareTo("version") == 0)) {
                             // ignored
                         } else {
                             m_diffcount++;
@@ -633,7 +633,7 @@
                     }
                 }
                 if (m_Vetting) {
-                    String altText = (String) element.platformData.get("ALT");
+                    String altText = element.platformData.get("ALT");
                     writer.print("<td>" + value);
                     String parName = mapToAbbr(element.parentNode);
                     if ((parName.indexOf("_dateFormat") != -1)
@@ -1187,12 +1187,12 @@
                     // for country codes and language codes
                     // replace the deprecated codes with the latest ones
                     if (childNodeName.equals("language")) {
-                        String temp = (String) deprecatedLanguageCodes.get(index);
+                        String temp = deprecatedLanguageCodes.get(index);
                         if (temp != null) {
                             index = temp;
                         }
                     } else if (childNodeName.equals("territory")) {
-                        String temp = (String) deprecatedCountryCodes.get(index);
+                        String temp = deprecatedCountryCodes.get(index);
                         if (temp != null) {
                             index = temp;
                         }
@@ -1301,9 +1301,9 @@
             // build a HashSet superset
             File localeDir = null;
             String[] fileList;
-            Set<String> localeTreeSet = new TreeSet<String>(); // use TreeSet for locales in alphabetical order
+            Set<String> localeTreeSet = new TreeSet<>(); // use TreeSet for locales in alphabetical order
             for (int i = 0; i < m_PlatformFolderVect.size(); i++) {
-                localeDir = new File((String) m_PlatformFolderVect.elementAt(i));
+                localeDir = new File(m_PlatformFolderVect.elementAt(i));
                 fileList = localeDir.list();
                 for (int j = 0; j < fileList.length; j++) {
                     if (fileList[j].endsWith(".xml")) {
@@ -1316,7 +1316,7 @@
                         // as common will only be shown as a reference if there are differences between locales for
                         // other platforms
                         if ((m_iOptions & OPT_DIFF_REF_COMMON) != 0) {
-                            String platform = (String) m_PlatformVect.elementAt(i);
+                            String platform = m_PlatformVect.elementAt(i);
                             if (platform.compareTo(COMMON) == 0)
                                 continue;
                         }
@@ -1346,12 +1346,12 @@
 
                 // add entry to CompareMap for any platforms having an xml file for the locale in question
                 for (int j = 0; j < m_PlatformFolderVect.size(); j++) {
-                    localeDir = new File((String) m_PlatformFolderVect.elementAt(j));
+                    localeDir = new File(m_PlatformFolderVect.elementAt(j));
                     fileList = localeDir.list();
                     for (int k = 0; k < fileList.length; k++) {
                         if (fileList[k].compareTo(localeFile) == 0) // test for 2 matching xml filenames
                         {
-                            String key = (String) m_PlatformVect.elementAt(j); // should use hashtable to link
+                            String key = m_PlatformVect.elementAt(j); // should use hashtable to link
                             // m_PlatformVect and
                             // m_PlatformFolderVect
                             String xmlFileName = localeDir + "/" + localeArray[i];
diff --git a/tools/java/org/unicode/cldr/icu/LocaleMapper.java b/tools/java/org/unicode/cldr/icu/LocaleMapper.java
deleted file mode 100644
index 0d8f787..0000000
--- a/tools/java/org/unicode/cldr/icu/LocaleMapper.java
+++ /dev/null
@@ -1,492 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.unicode.cldr.icu.RegexManager.CldrArray;
-import org.unicode.cldr.icu.RegexManager.PathValueInfo;
-import org.unicode.cldr.icu.RegexManager.RegexResult;
-import org.unicode.cldr.test.DisplayAndInputProcessor.NumericType;
-import org.unicode.cldr.tool.FilterFactory;
-import org.unicode.cldr.util.Builder;
-import org.unicode.cldr.util.CLDRFile;
-import org.unicode.cldr.util.DtdType;
-import org.unicode.cldr.util.Factory;
-import org.unicode.cldr.util.LanguageTagParser;
-import org.unicode.cldr.util.LocaleIDParser;
-import org.unicode.cldr.util.PatternCache;
-import org.unicode.cldr.util.RegexLookup;
-import org.unicode.cldr.util.RegexLookup.Finder;
-import org.unicode.cldr.util.SupplementalDataInfo;
-//import org.unicode.cldr.util.SupplementalDataInfo.MeasurementType;
-
-import com.ibm.icu.util.Output;
-
-/**
- * A mapper that converts locale data from CLDR to the ICU data structure.
- *
- * @author jchye
- */
-public class LocaleMapper extends Mapper {
-    /**
-     * Map for converting enums to their integer values.
-     */
-    private static final Map<String, String> enumMap = Builder.with(new HashMap<String, String>())
-        .put("titlecase-firstword", "1")
-        .put("no-change", "0")
-        .freeze();
-
-    private static final Pattern DRAFT_PATTERN = PatternCache.get("\\[@draft=\"\\w+\"]");
-    private static final Pattern TERRITORY_XPATH = PatternCache.get(
-        "//ldml/localeDisplayNames/territories/territory\\[@type=\"(\\w+)\"]");
-    private static final Pattern RB_DATETIMEPATTERN = PatternCache.get(
-        "/calendar/(\\w++)/DateTimePatterns");
-
-    private SupplementalDataInfo supplementalDataInfo;
-    // We may use different factories for resolved or unresolved CLDRFiles depending
-    // on whether filtering is required.
-    private Factory unresolvedFactory;
-    private Factory resolvedFactory;
-    private Factory specialFactory;
-    private RegexManager manager;
-    private String debugXPath;
-
-    private Set<String> deprecatedTerritories;
-
-    /**
-     * Special hack comparator, so that RB strings come out in the right order.
-     * This is only important for the order of items in arrays.
-     */
-    private static Comparator<String> comparator = new Comparator<String>() {
-        private final Pattern CURRENCY_FORMAT = PatternCache.get(
-            "//ldml/numbers/currencies/currency\\[@type=\"\\w++\"]/(.++)");
-        private final Pattern DATE_OR_TIME_FORMAT = PatternCache.get(
-            "//ldml/dates/calendars/calendar\\[@type=\"\\w++\"]/(date|time)Formats/.*");
-        private final Pattern MONTH_PATTERN = PatternCache
-            .get(
-                "//ldml/dates/calendars/calendar\\[@type=\"\\w++\"]/months/monthContext\\[@type=\"[\\w\\-]++\"]/monthWidth\\[@type=\"\\w++\"]/month\\[@type=\"\\d++\"](\\[@yeartype=\"leap\"])?");
-        private final Pattern CONTEXT_TRANSFORM = PatternCache.get(
-            "//ldml/contextTransforms/contextTransformUsage\\[@type=\"([^\"]++)\"]/contextTransform\\[@type=\"([^\"]++)\"]");
-
-        private final String[] CURRENCY_ORDER = { "symbol", "displayName",
-            "pattern[@type=\"standard\"]", "decimal", "group" };
-
-        /**
-         * Reverse the ordering of the following:
-         * //ldml/numbers/currencies/currency[@type="([^"]*)"]/displayName ; curr ; /Currencies/$1
-         * //ldml/numbers/currencies/currency[@type="([^"]*)"]/symbol ; curr ; /Currencies/$1
-         * and the following (time/date)
-         * //ldml/dates/calendars/calendar[@type="([^"]*)"]/(dateFormats|dateTimeFormats|timeFormats)/(?:[^/\[]*)[@type=
-         * "([^"]*)"]/(?:[^/\[]*)[@type="([^"]*)"]/.* ; locales ; /calendar/$1/DateTimePatterns
-         */
-        @Override
-        public int compare(String arg0, String arg1) {
-            Matcher[] matchers = new Matcher[2];
-            if (RegexManager.matches(CURRENCY_FORMAT, arg0, arg1, matchers)) {
-                // Use ldml ordering except that symbol should be first.
-                int index0 = getIndexOf(CURRENCY_ORDER, matchers[0].group(1));
-                int index1 = getIndexOf(CURRENCY_ORDER, matchers[1].group(1));
-                return index0 - index1;
-            } else if (RegexManager.matches(DATE_OR_TIME_FORMAT, arg0, arg1, matchers)) {
-                int compareValue = matchers[0].group(1).compareTo(matchers[1].group(1));
-                if (compareValue != 0) return -compareValue;
-            } else if (RegexManager.matches(CONTEXT_TRANSFORM, arg0, arg1, matchers)) {
-                // Sort uiListOrMenu before stand-alone.
-                if (matchers[0].group(1).equals(matchers[1].group(1))) {
-                    return -matchers[0].group(2).compareTo(matchers[1].group(2));
-                }
-            } else if (RegexManager.matches(MONTH_PATTERN, arg0, arg1, matchers)) {
-                // Sort leap year types after normal month types.
-                String matchGroup0 = matchers[0].group(1);
-                String matchGroup1 = matchers[1].group(1);
-                if (matchGroup0 != matchGroup1) {
-                    return matchGroup0 == null && matchGroup1 != null ? -1 : 1;
-                }
-            }
-
-            return CLDRFile.getComparator(DtdType.ldml).compare(arg0, arg1);
-        }
-    };
-
-    /**
-     * Looks for a string in an array
-     *
-     * @param order
-     *            the array to be searched
-     * @param key
-     *            the string to be searched for
-     * @return the index of the string if found, -1 if not found
-     */
-    private static int getIndexOf(String[] order, String key) {
-        for (int i = 0; i < order.length; i++) {
-            if (order[i].equals(key)) return i;
-        }
-        return -1;
-    }
-
-    /**
-     * LocaleMapper constructor.
-     *
-     * @param factory
-     *            the factory containing the CLDR data to be converted
-     * @param specialFactory
-     *            a factory containing any additional CLDR data
-     * @param supplementalDataInfo
-     *            SupplementalDataInfo object
-     * @param useAltValues
-     *            true if alt path filtering should be performed
-     * @param organization
-     *            the organization to filter the data by
-     *            (null if coverage filtering is not needed)
-     */
-    public LocaleMapper(Factory factory, Factory specialFactory,
-        SupplementalDataInfo supplementalDataInfo, boolean useAltValues,
-        String organization) {
-        manager = new RegexManager("ldml2icu_locale.txt");
-        unresolvedFactory = resolvedFactory = factory;
-        // If filtering is required, filter all unresolved CLDRFiles for use in
-        // fillFromCldr(). We don't filter the resolved CLDRFiles by organization
-        // coverage level because
-        // some rbPaths (e.g. /calendar/x/DateTimePatterns) have a fixed number
-        // of values that must always be present regardless of filtering.
-        if (useAltValues || organization != null) {
-            unresolvedFactory = FilterFactory.load(factory, organization, useAltValues);
-            resolvedFactory = FilterFactory.load(factory, null, useAltValues);
-        }
-        this.specialFactory = specialFactory;
-        this.supplementalDataInfo = supplementalDataInfo;
-    }
-
-    /**
-     * @return the set of locales available for processing by this mapper
-     */
-    @Override
-    public Set<String> getAvailable() {
-        return unresolvedFactory.getAvailable();
-    }
-
-    /**
-     * @param filename
-     * @return true if a special XML file with the specified filename is available.
-     */
-    private boolean hasSpecialFile(String filename) {
-        return specialFactory != null && specialFactory.getAvailable().contains(filename);
-    }
-
-    /**
-     * @return the set of deprecated territories to be ignored. Remove when no longer
-     *         present in CLDR data.
-     */
-    private Set<String> getDeprecatedTerritories() {
-        if (deprecatedTerritories == null) {
-            deprecatedTerritories = Builder.with(
-                supplementalDataInfo.getLocaleAliasInfo().get("territory").keySet())
-                .remove("062").remove("172").remove("200").remove("830")
-                .remove("AN").remove("CS").remove("QU").get();
-        }
-        return deprecatedTerritories;
-    }
-
-    /**
-     * Fills an IcuData object using the CLDR data for the specified locale.
-     *
-     * @param locale
-     * @return the filled IcuData object
-     */
-    @Override
-    public IcuData[] fillFromCldr(String locale) {
-        Set<String> deprecatedTerritories = getDeprecatedTerritories();
-        CLDRFile resolvedCldr = resolvedFactory.make(locale, true);
-        RegexLookup<RegexResult> pathConverter = manager.getPathConverter(resolvedCldr);
-
-        // First pass through the unresolved CLDRFile to get all icu paths.
-        CLDRFile cldr = unresolvedFactory.make(locale, false);
-        Map<String, CldrArray> pathValueMap = new HashMap<String, CldrArray>();
-        Set<String> validRbPaths = new HashSet<String>();
-        for (String xpath : cldr) {
-            // Territory hacks to be removed once CLDR data is fixed.
-            Matcher matcher = TERRITORY_XPATH.matcher(xpath);
-            if (matcher.matches()) {
-                String country = matcher.group(1);
-                if (deprecatedTerritories.contains(country)) {
-                    continue;
-                }
-            }
-
-            // Add rb paths.
-            Output<Finder> matcherFound = new Output<Finder>();
-            Output<String[]> firstInfo = new Output<>();
-            RegexResult regexResult = matchXPath(pathConverter, cldr, xpath, matcherFound, firstInfo);
-            if (regexResult == null) continue;
-//            String[] arguments = matcherFound.value.getInfo();
-            String[] arguments = firstInfo.value;
-            for (PathValueInfo info : regexResult) {
-                String rbPath = info.processRbPath(arguments);
-                validRbPaths.add(rbPath);
-                // The immediate parent of every path should also exist.
-                validRbPaths.add(rbPath.substring(0, rbPath.lastIndexOf('/')));
-            }
-        }
-
-        // Get all values from the resolved CLDRFile.
-        for (String xpath : resolvedCldr) {
-            // Since the unresolved CLDRFile may have been modified, use it
-            // to add values instead of the resolved CLDRFile if possible.
-            CLDRFile fileToUse = cldr.getStringValue(xpath) == null ? resolvedCldr : cldr;
-            addMatchesForPath(xpath, fileToUse, validRbPaths, pathConverter, pathValueMap);
-        }
-
-        // Add fallback paths if necessary.
-        manager.addFallbackValues(resolvedCldr, pathValueMap);
-
-        // Add special values to file.
-        boolean hasSpecial = hasSpecialFile(locale);
-        if (hasSpecial) {
-            CLDRFile specialCldrFile = specialFactory.make(locale, false);
-            for (String xpath : specialCldrFile) {
-                if (resolvedCldr.isHere(xpath)) continue;
-                addMatchesForPath(xpath, specialCldrFile, null, pathConverter, pathValueMap);
-            }
-        }
-
-        for (String rbPath : pathValueMap.keySet()) {
-            // HACK: DateTimePatterns needs a duplicate of the medium
-            // dateTimeFormat (formerly indicated using dateTimeFormats/default).
-            // This hack can be removed when ICU no longer requires it.
-            Matcher matcher = RB_DATETIMEPATTERN.matcher(rbPath);
-            if (matcher.matches()) {
-                String calendar = matcher.group(1);
-                CldrArray valueList = RegexManager.getCldrArray(rbPath, pathValueMap);
-                // Create a dummy xpath to sort the value in front of the other date time formats.
-                String basePath = "//ldml/dates/calendars/calendar[@type=\"" + calendar + "\"]/dateTimeFormats";
-                String mediumFormatPath = basePath
-                    + "/dateTimeFormatLength[@type=\"medium\"]/dateTimeFormat[@type=\"standard\"]/pattern[@type=\"standard\"]";
-                valueList.add(basePath,
-                    getStringValue(resolvedCldr, mediumFormatPath),
-                    null);
-            }
-        }
-
-        // HACK: Fill missing narrow era values with their abbreviated versions.
-        CldrArray narrowEras = pathValueMap.get("/calendar/japanese/eras/narrow");
-        CldrArray abbreviatedEras = pathValueMap.get("/calendar/japanese/eras/abbreviated");
-        if (narrowEras != null && abbreviatedEras != null) {
-            narrowEras.addAll(abbreviatedEras);
-        }
-
-        IcuData icuData = new IcuData("common/main/" + locale + ".xml", locale, true, enumMap);
-        if (hasSpecial) {
-            icuData.setFileComment("ICU <specials> source: <path>/common/main/" + locale + ".xml");
-        }
-        fillIcuData(pathValueMap, comparator, icuData);
-
-        // More hacks
-        hackAddExtras(resolvedCldr, locale, icuData);
-        return new IcuData[] { icuData };
-    }
-
-    private void fillIcuData(Map<String, CldrArray> pathValueMap,
-        Comparator<String> comparator, IcuData icuData) {
-        // Convert values to final data structure.
-        for (String rbPath : pathValueMap.keySet()) {
-            icuData.addAll(rbPath, pathValueMap.get(rbPath).sortValues(comparator));
-        }
-    }
-
-    public static String getFullXPath(String xpath, CLDRFile cldrFile) {
-        String fullPath = cldrFile.getFullXPath(xpath);
-        return fullPath == null ? xpath : DRAFT_PATTERN.matcher(fullPath).replaceAll("");
-    }
-
-    /**
-     * @param cldr
-     * @param path
-     * @param matcherFound
-     * @param firstInfo
-     * @return the result of converting an xpath into an ICU-style path
-     */
-    private RegexResult matchXPath(RegexLookup<RegexResult> lookup,
-        CLDRFile cldr, String path,
-        Output<Finder> matcherFound, Output<String[]> firstInfo) {
-        String fullPath = cldr.getFullXPath(path);
-        fullPath = fullPath == null ? path : DRAFT_PATTERN.matcher(fullPath).replaceAll("");
-        List<String> debugResults = isDebugXPath(fullPath) ? new ArrayList<String>() : null;
-        Output<String[]> info = new Output<>();
-        RegexResult result = lookup.get(fullPath, null, info, matcherFound, debugResults);
-        if (debugResults != null) {
-            if (result == null) {
-                RegexManager.printLookupResults(fullPath, debugResults);
-            } else {
-                System.out.println(fullPath + " successfully matched");
-            }
-        }
-        if (firstInfo != null && info.value != null) {
-            firstInfo.value = info.value;
-        }
-        return result;
-    }
-
-    /**
-     * Attempts to match an xpath and adds the results of a successful match to
-     * the specified map
-     *
-     * @param xpath
-     *            the xpath to be matched
-     * @param cldrFile
-     *            the CLDR file to get locale data from
-     * @param validRbPaths
-     *            the set of valid rbPaths that the result must belong
-     *            to, null if such a requirement does not exist
-     * @param pathValueMap
-     *            the map that the results will be added to
-     */
-    private void addMatchesForPath(String xpath, CLDRFile cldrFile,
-        Set<String> validRbPaths, RegexLookup<RegexResult> pathConverter,
-        Map<String, CldrArray> pathValueMap) {
-        Output<Finder> matcher = new Output<Finder>();
-        Output<String[]> firstInfo = new Output<>();
-        RegexResult regexResult = matchXPath(pathConverter,
-            cldrFile, xpath, matcher, firstInfo);
-        if (regexResult == null) return;
-//        String[] arguments = matcher.value.getInfo();
-        String[] arguments = firstInfo.value;
-        String cldrValue = getStringValue(cldrFile, xpath);
-        for (PathValueInfo info : regexResult) {
-            String rbPath = info.processRbPath(arguments);
-            // Don't add additional paths at this stage.
-            if (validRbPaths != null && !validRbPaths.contains(rbPath)) continue;
-            CldrArray valueList = RegexManager.getCldrArray(rbPath, pathValueMap);
-            List<String> values = info.processValues(arguments, cldrValue);
-            String baseXPath = info.processXPath(arguments, xpath);
-            String groupKey = info.processGroupKey(arguments);
-            valueList.put(baseXPath, values, groupKey);
-        }
-    }
-
-    /**
-     * @param cldrFile
-     * @param xpath
-     * @return the value of the specified xpath (fallback or otherwise)
-     */
-    private String getStringValue(CLDRFile cldrFile, String xpath) {
-        String value = cldrFile.getStringValue(xpath);
-        // HACK: DAIP doesn't currently make spaces in currency formats non-breaking.
-        // Remove this when fixed.
-        if (NumericType.getNumericType(xpath) == NumericType.CURRENCY) {
-            value = value.replace(' ', '\u00A0');
-        }
-        return value;
-    }
-
-    /**
-     * Adds all mappings that couldn't be represented in the ldml2icu.txt file.
-     *
-     * @param cldrResolved
-     * @param locale
-     */
-    private void hackAddExtras(CLDRFile cldrResolved, String locale, IcuData icuData) {
-        // Specify parent of non-language locales.
-        String parent = supplementalDataInfo.getExplicitParentLocale(locale);
-        if (parent != null) {
-            icuData.add("/%%Parent", parent);
-        }
-
-        // <version number="$Revision: 5806 $"/>
-        String version = cldrResolved.getFullXPath("//ldml/identity/version");
-        icuData.add("/Version", CLDRFile.GEN_VERSION);
-
-        // PaperSize:intvector{ 279, 216, } - now in supplemental
-        // MeasurementSystem:int{1} - now in supplemental
-
-        // Default calendar.
-        String localeID = cldrResolved.getLocaleID();
-        String calendar = getCalendarIfDifferent(localeID);
-        if (calendar != null) {
-            icuData.add("/calendar/default", calendar);
-        }
-    }
-
-    /**
-     * Returns the default calendar to be used for a locale. If the default
-     * calendar for the parent locale is the same, null is returned.
-     */
-    private String getCalendarIfDifferent(String localeID) {
-        String calendar = getCalendar(localeID);
-        if (calendar == null) return null;
-        String parent = LocaleIDParser.getParent(localeID);
-        String parentCalendar = null;
-        while (parentCalendar == null && parent != null) {
-            parentCalendar = getCalendar(parent);
-            parent = LocaleIDParser.getParent(parent);
-        }
-        return calendar.equals(parentCalendar) ? null : calendar;
-    }
-
-    /**
-     * Returns the default calendar to be used for a locale, if any.
-     */
-    private String getCalendar(String localeID) {
-        LanguageTagParser parser = new LanguageTagParser().set(localeID);
-        String region = localeID.equals("root") ? "001" : parser.getRegion();
-        if (region.equals("")) {
-            localeID = supplementalDataInfo.getLikelySubtags().get(parser.getLanguage());
-            if (localeID == null) {
-                throw new RuntimeException("Likely subtag not found for " + parser.getLanguage());
-            }
-            parser.set(localeID);
-            region = parser.getRegion();
-            if (region == null) region = "001";
-        }
-        List<String> calendars = supplementalDataInfo.getCalendars(region);
-        return calendars == null ? null : calendars.get(0);
-    }
-
-    //private String getMeasurementToDisplay(String localeID, MeasurementType measurementType) {...} // deleted
-
-    /**
-     * @param localeID
-     * @param measurementType
-     *            the type of measurement required
-     * @return the measurement of the specified locale
-     */
-//    private String getMeasurement(String localeID, MeasurementType measurementType) {
-//        String region = localeID.equals("root") ? "001" : new LanguageTagParser().set(localeID).getRegion();
-//        Map<MeasurementType, Map<String, String>> regionMeasurementData = supplementalDataInfo
-//            .getTerritoryMeasurementData();
-//        Map<String, String> typeMap = regionMeasurementData.get(measurementType);
-//        return typeMap.get(region);
-//    }     //not used
-
-    /**
-     * Sets xpath to monitor for debugging purposes.
-     * @param debugXPath
-     */
-    public void setDebugXPath(String debugXPath) {
-        this.debugXPath = debugXPath;
-    }
-
-    /**
-     * @param xpath
-     * @return true if the xpath is to be debugged
-     */
-    boolean isDebugXPath(String xpath) {
-        return debugXPath == null ? false : xpath.startsWith(debugXPath);
-    }
-
-    @Override
-    public Makefile generateMakefile(Collection<String> aliases) {
-        Makefile makefile = new Makefile("GENRB");
-        makefile.addSyntheticAlias(aliases);
-        makefile.addAliasSource();
-        makefile.addSource(sources);
-        return makefile;
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/Makefile.java b/tools/java/org/unicode/cldr/icu/Makefile.java
deleted file mode 100644
index fa84aaa..0000000
--- a/tools/java/org/unicode/cldr/icu/Makefile.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.regex.Pattern;
-
-import org.unicode.cldr.draft.FileUtilities;
-import org.unicode.cldr.util.CLDRFile;
-import org.unicode.cldr.util.FileCopier;
-import org.unicode.cldr.util.PatternCache;
-
-import com.google.common.collect.ImmutableMap;
-import com.ibm.icu.util.Calendar;
-
-/**
- * Stores the content of a makefile and writes it to disk.
- * @author jchye
- */
-class Makefile {
-    private static final Pattern VARIABLE = PatternCache.get("\\$\\([\\w_]++\\)");
-
-    private String prefix;
-    private List<MakefileEntry> entries = new ArrayList<MakefileEntry>();
-
-    private static final Comparator<String> valueComparator = new Comparator<String>() {
-        @Override
-        public int compare(String arg0, String arg1) {
-            return arg0.compareTo(arg1);
-        }
-    };
-
-    class MakefileEntry {
-        String name;
-        String comment;
-        List<String> values = new ArrayList<String>();
-
-        public MakefileEntry(String name, String comment) {
-            this.name = name;
-            this.comment = comment;
-        }
-    }
-
-    public Makefile(String prefix) {
-        this.prefix = prefix;
-    }
-
-    public MakefileEntry addEntry(String name, String comment) {
-        MakefileEntry entry = new MakefileEntry(name, comment);
-        entries.add(entry);
-        return entry;
-    }
-
-    public MakefileEntry addEntry(String name, String comment, Collection<String> values) {
-        MakefileEntry entry = addEntry(name, comment);
-        entry.values.addAll(values);
-        Collections.sort(entry.values, valueComparator);
-        return entry;
-    }
-
-    public void addSyntheticAlias(Collection<String> aliases) {
-        addEntry(prefix + "_SYNTHETIC_ALIAS",
-            "Aliases without a corresponding xx.xml file (see icu-config.xml & build.xml)",
-            aliases);
-    }
-
-    public void addAliasSource() {
-        MakefileEntry entry = addEntry(prefix + "_ALIAS_SOURCE",
-            "All aliases (to not be included under 'installed'), but not including root.");
-        entry.values.add("$(" + prefix + "_SYNTHETIC_ALIAS)");
-    }
-
-    public void addSource(Collection<String> sources) {
-        addEntry(prefix + "_SOURCE", "Ordinary resources", sources);
-    }
-
-    public void print(String outputDir, String filename) throws IOException {
-        PrintWriter out = FileUtilities.openUTF8Writer(outputDir, filename);
-        ImmutableMap<String, String> params = ImmutableMap.of(
-            "%year%", String.valueOf(Calendar.getInstance().get(Calendar.YEAR)),
-            "%prefix%", prefix,
-            "%local%", filename.replace("files.mk", "local.mk"),
-            "%version%", CLDRFile.GEN_VERSION);
-
-        FileCopier.copyAndReplace(NewLdml2IcuConverter.class, "makefile_header.txt",
-            Charset.forName("UTF-8"),
-            params,
-            out);
-
-        for (MakefileEntry entry : entries) {
-            out.println();
-            out.append("# ").append(entry.comment).println();
-            out.append(entry.name).append(" =");
-            int lineCount = 0;
-            for (String value : entry.values) {
-                if (value.equals("root")) continue;
-                if (lineCount == 4) {
-                    out.append('\\').println();
-                }
-                out.append(' ').append(value);
-                if (!VARIABLE.matcher(value).matches()) {
-                    out.append(".txt");
-                }
-                lineCount = (lineCount + 1) % 5;
-            }
-            out.println();
-            out.println();
-        }
-        out.close();
-    }
-}
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/icu/Mapper.java b/tools/java/org/unicode/cldr/icu/Mapper.java
deleted file mode 100644
index ea33562..0000000
--- a/tools/java/org/unicode/cldr/icu/Mapper.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * Superclass for mappers that convert CLDR data to ICU text files.
- * @author jchye
- */
-public abstract class Mapper {
-    // Store list of sources for makefile generation.
-    protected Set<String> sources = new HashSet<String>();
-
-    /**
-     * Converts the specified locale into one or more IcuData objects.
-     */
-    public abstract IcuData[] fillFromCldr(String locale); // private/protected?
-
-    /**
-     * Returns an iterator that iterates through all of the CLDR data within the
-     * scope of this mapper and matching the specified filter and returns the generated IcuData objects.
-     */
-    public Iterator<IcuData> iterator(final Filter filter) {
-        IcuDataIterator iterator = new IcuDataIterator(filter);
-        iterator.init();
-        return iterator;
-    }
-
-    private class IcuDataIterator implements Iterator<IcuData> {
-        private Filter filter;
-        private Iterator<String> localeIterator = getAvailable().iterator();
-        private IcuData[] curArray;
-        private int curIndex = -1;
-
-        private IcuDataIterator(Filter filter) {
-            this.filter = filter;
-        }
-
-        /**
-         * Initializes internal variables before starting iteration.
-         */
-        private void init() {
-            curArray = new IcuData[0];
-            loadNextPos();
-        }
-
-        @Override
-        public boolean hasNext() {
-            return localeIterator.hasNext() || curIndex < curArray.length;
-        }
-
-        @Override
-        public IcuData next() {
-            IcuData icuData = curArray[curIndex];
-            sources.add(icuData.getName());
-            // Move to next valid position.
-            loadNextPos();
-            return icuData;
-        }
-
-        /**
-         * Prepares the next item in the iterator.
-         */
-        private void loadNextPos() {
-            do {
-                curIndex++;
-                if (curIndex == curArray.length) {
-                    String locale = null;
-                    do {
-                        if (!localeIterator.hasNext()) {
-                            // No more items left in the iterator.
-                            return;
-                        }
-                        locale = localeIterator.next();
-                    } while (!filter.includes(locale));
-                    curArray = fillFromCldr(locale);
-                    curIndex = 0;
-                }
-            } while (!filter.includes(curArray[curIndex].getName()));
-        }
-
-        @Override
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-    }
-
-    /**
-     * @return the set of IcuData objects that were generated by the mapper.
-     */
-    public Set<String> getGenerated() {
-        return sources;
-    }
-
-    /**
-     * Returns the set of all CLDR locales available for conversion.
-     */
-    public abstract Collection<String> getAvailable();
-
-    /**
-     * Generates a makefile from the list of locales converted by this mapper.
-     * @param aliases any aliases that were created apart from this mapper
-     * @return the generated makefile
-     */
-    public abstract Makefile generateMakefile(Collection<String> aliases);
-}
diff --git a/tools/java/org/unicode/cldr/icu/MapperUtils.java b/tools/java/org/unicode/cldr/icu/MapperUtils.java
deleted file mode 100644
index 756993d..0000000
--- a/tools/java/org/unicode/cldr/icu/MapperUtils.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.unicode.cldr.util.InputStreamFactory;
-import org.unicode.cldr.util.XMLFileReader;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-
-/**
- * Utility class for NewLdml2IcuConverter mappers.
- *
- * @author jchye
- */
-public class MapperUtils {
-    /**
-     * Parses an XML file.
-     *
-     * @param inputFile
-     *            the file to be parsed
-     * @param handler
-     *            the XML parser to be used
-     */
-    public static void parseFile(File inputFile, ContentHandler handler) {
-        XMLReader xmlReader = XMLFileReader.createXMLReader(true);
-        xmlReader.setContentHandler(handler);
-        if (inputFile == null) {
-            System.err.println("Please call with non-null input file");
-            return;
-        }
-        try (InputStream fis = InputStreamFactory.createInputStream(inputFile)) {
-//            FileInputStream fis = new FileInputStream(inputFile);
-            InputSource is = new InputSource(fis);
-            // Set the system ID so the parser knows where to find the dtd.
-            is.setSystemId(inputFile.toString());
-            xmlReader.parse(is);
-//            fis.close();
-        } catch (IOException | SAXException e) {
-            System.err.println("Error loading " + inputFile.getAbsolutePath());
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * Empty convenience superclass for all XML parsers used in mappers.
-     *
-     * @author jchye
-     *
-     */
-    public static abstract class EmptyHandler implements ContentHandler {
-        @Override
-        public void characters(char[] ch, int start, int length) throws SAXException {
-        }
-
-        @Override
-        public void endElement(String uri, String localName, String qName) throws SAXException {
-        }
-
-        @Override
-        public void startPrefixMapping(String arg0, String arg1) throws SAXException {
-        }
-
-        @Override
-        public void endPrefixMapping(String arg0) throws SAXException {
-        }
-
-        @Override
-        public void ignorableWhitespace(char[] arg0, int arg1, int arg2) throws SAXException {
-        }
-
-        @Override
-        public void processingInstruction(String arg0, String arg1) throws SAXException {
-        }
-
-        @Override
-        public void setDocumentLocator(Locator arg0) {
-        }
-
-        @Override
-        public void skippedEntity(String arg0) throws SAXException {
-        }
-
-        @Override
-        public void startDocument() throws SAXException {
-        }
-
-        @Override
-        public void endDocument() throws SAXException {
-        }
-    }
-
-    public static IcuData[] toArray(Collection<IcuData> collection) {
-        IcuData[] dataList = new IcuData[collection.size()];
-        return collection.toArray(dataList);
-    }
-
-    /**
-     * Returns a list of names of XML files in the specified directory.
-     * @param sourceDir
-     * @return
-     */
-    public static List<String> getNames(String sourceDir) {
-        return getNames(new File(sourceDir));
-    }
-
-    /**
-     * Returns a list of names of XML files in the specified directory.
-     * @param sourceDir
-     * @return
-     */
-    public static List<String> getNames(File sourceDir) {
-        List<String> locales = new ArrayList<String>();
-        for (String filename : sourceDir.list()) {
-            if (!filename.endsWith(".xml")) continue;
-            String locale = filename.substring(0, filename.length() - 4);
-            locales.add(locale);
-        }
-        return locales;
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/NewLdml2IcuConverter.java b/tools/java/org/unicode/cldr/icu/NewLdml2IcuConverter.java
deleted file mode 100644
index a14dd9f..0000000
--- a/tools/java/org/unicode/cldr/icu/NewLdml2IcuConverter.java
+++ /dev/null
@@ -1,503 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.regex.Pattern;
-
-import org.unicode.cldr.ant.CLDRConverterTool;
-import org.unicode.cldr.icu.ResourceSplitter.SplitInfo;
-import org.unicode.cldr.tool.Option;
-import org.unicode.cldr.tool.Option.Options;
-import org.unicode.cldr.util.CLDRFile.DraftStatus;
-import org.unicode.cldr.util.Factory;
-import org.unicode.cldr.util.FileReaders;
-import org.unicode.cldr.util.PatternCache;
-import org.unicode.cldr.util.SupplementalDataInfo;
-
-/**
- * Simpler mechanism for converting CLDR data to ICU Resource Bundles, intended
- * to replace LDML2ICUConverter. The format is almost entirely data-driven
- * instead of having lots of special-case code.
- *
- * The flags used to specify the data to be generated are copied directly from
- * LDML2ICUConverter.
- *
- * Unlike the instructions in CLDRConverterTool, this converter does not invoke
- * computeConvertibleXPaths to check if each xpath is convertible because the
- * xpaths that are convertible have already been filtered out by the regex lookups.
- * It may make more sense down the road to refactor CLDRConverterTool such that
- * this class doesn't inherit unnecessary functionality.
- *
- * A rough overview of the new converter is available at
- * https://sites.google.com/site/cldr/development/coding-cldr-tools/newldml2icuconverter
- *
- * @author jchye
- */
-public class NewLdml2IcuConverter extends CLDRConverterTool {
-    private static final String ALIAS_PATH = "/\"%%ALIAS\"";
-
-    static final boolean DEBUG = true;
-
-    static final Pattern SEMI = PatternCache.get("\\s*+;\\s*+");
-
-    /*
-     * The type of file to be converted.
-     */
-    enum Type {
-        locales, dayPeriods, genderList, likelySubtags, metadata, metaZones, numberingSystems, plurals, pluralRanges, postalCodeData, rgScope, supplementalData, windowsZones, keyTypeData, brkitr, collation, rbnf;
-    }
-
-    private static final Options options = new Options(
-        "Usage: LDML2ICUConverter [OPTIONS] [FILES]\n" +
-            "This program is used to convert LDML files to ICU data text files.\n" +
-            "Please refer to the following options. Options are not case sensitive.\n" +
-            "\texample: org.unicode.cldr.icu.Ldml2IcuConverter -s xxx -d yyy en")
-                .add("sourcedir", ".*", "Source directory for CLDR files")
-                .add("destdir", ".*", ".", "Destination directory for output files, defaults to the current directory")
-                .add("specialsdir", 'p', ".*", null, "Source directory for files containing special data, if any")
-                .add("supplementaldir", 'm', ".*", null, "The supplemental data directory")
-                .add("keeptogether", 'k', null, null,
-                    "Write locale data to one file instead of splitting into separate directories. For debugging")
-                .add("type", 't', "\\w+", null, "The type of file to be generated")
-                .add("xpath", 'x', ".*", null, "An optional xpath to debug the regexes with")
-                .add("filter", 'f', null, null, "Perform filtering on the locale data to be converted.")
-                .add("organization", 'o', ".*", null, "The organization to filter the data for")
-                .add("makefile", 'g', ".*", null, "If set, generates makefiles and alias files for the specified type. " +
-                    "The value to set should be the name of the makefile.")
-                .add("depgraphfile", 'e', ".*", null, "If set, generates a dependency graph file in JSON form summarizing parent and alias mappings between locale files. Only works when --type=locales.")
-                .add("verbose", 'v', null, null, "Debugging aids");
-
-    private static final String LOCALES_DIR = "locales";
-
-    private boolean keepTogether = false;
-    private Map<String, String> dirMapping;
-    private Set<String> allDirs;
-    private String sourceDir;
-    private String destinationDir;
-    private String supplementalDir;
-    private IcuDataSplitter splitter;
-    private Filter filter;
-    private boolean verbose = false;
-
-    /**
-     * Maps ICU paths to the directories they should end up in.
-     */
-    private Map<String, String> getDirMapping() {
-        if (dirMapping == null) {
-            dirMapping = loadMapFromFile("ldml2icu_dir_mapping.txt");
-            allDirs = new HashSet<String>(dirMapping.values());
-            allDirs.remove("*");
-            allDirs.add(LOCALES_DIR);
-        }
-        return dirMapping;
-    }
-
-    private static Map<String, String> loadMapFromFile(String filename) {
-        Map<String, String> map = new HashMap<String, String>();
-        BufferedReader reader = FileReaders.openFile(NewLdml2IcuConverter.class, filename);
-        String line;
-        try {
-            int lineNum = 1;
-            while ((line = reader.readLine()) != null) {
-                if (line.length() == 0 || line.startsWith("#")) continue;
-                String[] content = line.split(SEMI.toString());
-                if (content.length != 2) {
-                    throw new IllegalArgumentException("Invalid syntax of " + filename + " at line " + lineNum);
-                }
-                map.put(content[0], content[1]);
-                lineNum++;
-            }
-        } catch (IOException e) {
-            System.err.println("Failed to read fallback file.");
-            e.printStackTrace();
-        }
-        return map;
-    }
-
-    private List<SplitInfo> loadSplitInfoFromFile() {
-        Map<String, String> dirMapping = getDirMapping();
-        List<SplitInfo> splitInfos = new ArrayList<SplitInfo>();
-        for (Entry<String, String> entry : dirMapping.entrySet()) {
-            SplitInfo splitInfo = new SplitInfo(entry.getKey(), entry.getValue());
-            splitInfos.add(splitInfo);
-        }
-        return splitInfos;
-    }
-
-    @Override
-    public void processArgs(String[] args) {
-        Set<String> extraArgs = options.parse(args, true);
-        // For supplemental output files, the supplemental directory is specified
-        // as the source directory and the supplemental directory argument is
-        // not required.
-        if (!options.get("sourcedir").doesOccur()) {
-            throw new IllegalArgumentException("Source directory must be specified.");
-        }
-        sourceDir = options.get("sourcedir").getValue();
-        supplementalDir = options.get("supplementaldir").getValue();
-
-        destinationDir = options.get("destdir").getValue();
-        if (!options.get("type").doesOccur()) {
-            throw new IllegalArgumentException("Type not specified: " + Arrays.asList(Type.values()));
-        }
-        Type type = Type.valueOf(options.get("type").getValue());
-        keepTogether = options.get("keeptogether").doesOccur();
-        if (!keepTogether && type == Type.supplementalData || type == Type.locales) {
-            if (splitInfos == null) {
-                splitInfos = loadSplitInfoFromFile();
-            }
-            splitter = IcuDataSplitter.make(destinationDir, splitInfos);
-        }
-
-        verbose = options.get("verbose").doesOccur();
-
-        String debugXPath = options.get("xpath").getValue();
-        // Quotes are stripped out at the command line so add them back in.
-        if (debugXPath != null) {
-            debugXPath = debugXPath.replaceAll("=([^\\]\"]++)\\]", "=\"$1\"\\]");
-        }
-
-        Factory specialFactory = null;
-        File specialsDir = null;
-        Option option = options.get("specialsdir");
-        if (option.doesOccur()) {
-            if (type == Type.rbnf) {
-                specialsDir = new File(option.getValue());
-            } else {
-                specialFactory = Factory.make(option.getValue(), ".*");
-            }
-        } else if (type == Type.brkitr) {
-            specialFactory = Factory.make(options.get("specialsdir").getValue(), ".*");
-        }
-
-        // Get list of locales if defined.
-        Set<String> includedLocales = getIncludedLocales();
-        Map<String, String> localesMap = getLocalesMap();
-        if (includedLocales != null && includedLocales.size() > 0) {
-            final Set<String> locales = new HashSet<String>();
-            for (String locale : includedLocales) {
-                if (localesMap.containsKey(locale + ".xml")) {
-                    locales.add(locale);
-                }
-            }
-
-            filter = new Filter() {
-                @Override
-                public boolean includes(String value) {
-                    return locales.contains(value);
-                }
-            };
-        } else if (extraArgs.size() > 0) {
-            final String regex = extraArgs.iterator().next();
-            filter = new Filter() {
-                @Override
-                public boolean includes(String value) {
-                    return value.matches(regex);
-                }
-            };
-        } else if (type == Type.locales || type == Type.collation) {
-            throw new IllegalArgumentException(
-                "Missing locale list. Please provide a list of locales or a regex.");
-        } else {
-            filter = new Filter() {
-                @Override
-                public boolean includes(String value) {
-                    return true;
-                }
-            };
-        }
-
-        // Process files.
-        Mapper mapper = null;
-        switch (type) {
-        case locales:
-            // Generate locale data.
-            SupplementalDataInfo supplementalDataInfo = null;
-            option = options.get("supplementaldir");
-            if (option.doesOccur()) {
-                supplementalDataInfo = SupplementalDataInfo.getInstance(supplementalDir);
-            } else {
-                throw new IllegalArgumentException("Supplemental directory must be specified with -s");
-            }
-
-            option = options.get("depgraphfile");
-            if (option.doesOccur()) {
-                DependencyGraphData dependencyGraphData = new DependencyGraphData(
-                    supplementalDataInfo, aliasDeprecates);
-                generateDependencyGraphFile(dependencyGraphData, option.getValue());
-            }
-
-            Factory factory = Factory.make(sourceDir, ".*", DraftStatus.contributed);
-            String organization = options.get("organization").getValue();
-            LocaleMapper localeMapper = new LocaleMapper(factory, specialFactory,
-                supplementalDataInfo, options.get("filter").doesOccur(), organization);
-            localeMapper.setDebugXPath(debugXPath);
-            mapper = localeMapper;
-            break;
-        case keyTypeData:
-            processBcp47Data();
-            break;
-        case brkitr:
-            mapper = new BreakIteratorMapper(sourceDir, specialFactory);
-            break;
-        case collation:
-            mapper = new CollationMapper(sourceDir, specialFactory);
-            break;
-        case rbnf:
-            mapper = new RbnfMapper(new File(sourceDir), specialsDir);
-            break;
-        default: // supplemental data
-            processSupplemental(type, debugXPath);
-        }
-
-        if (mapper != null) {
-            convert(mapper);
-            option = options.get("makefile");
-            generateSynthetics(mapper, option.getValue());
-        }
-    }
-
-    private void processBcp47Data() {
-        Bcp47Mapper mapper = new Bcp47Mapper(sourceDir);
-        IcuData[] icuData = mapper.fillFromCldr();
-        for (IcuData data : icuData) {
-            writeIcuData(data, destinationDir);
-        }
-    }
-
-    private void processSupplemental(Type type, String debugXPath) {
-        IcuData icuData;
-        // Use the supplementaldir if explicitly specified , otherwise the source dir.
-        String dir = options.get("supplementaldir").doesOccur() ? supplementalDir : sourceDir;
-        switch (type) {
-        case plurals: {
-            PluralsMapper mapper = new PluralsMapper(dir);
-            icuData = mapper.fillFromCldr();
-            break;
-        }
-        case pluralRanges: {
-            PluralRangesMapper mapper = new PluralRangesMapper(dir);
-            icuData = mapper.fillFromCldr();
-            break;
-        }
-        case dayPeriods: {
-            DayPeriodsMapper mapper = new DayPeriodsMapper(dir);
-            icuData = mapper.fillFromCldr();
-            break;
-        }
-        default: {
-            SupplementalMapper mapper = SupplementalMapper.create(dir);
-            if (debugXPath != null) {
-                mapper.setDebugXPath(debugXPath);
-            }
-            icuData = mapper.fillFromCldr(type.toString());
-        }
-        }
-        writeIcuData(icuData, destinationDir);
-    }
-
-    /**
-     * Writes the given IcuData object to file.
-     *
-     * @param icuData
-     *            the IcuData object to be written
-     * @param outputDir
-     *            the destination directory of the output file
-     */
-    private void writeIcuData(IcuData icuData, String outputDir) {
-        if (icuData.keySet().size() == 0) {
-            throw new RuntimeException(icuData.getName() + " was not written because no data was generated.");
-        }
-        try {
-            // Split data into different directories if necessary.
-            // splitInfos is filled from the <remap> element in ICU's build.xml.
-            if (splitter == null) {
-                IcuTextWriter.writeToFile(icuData, outputDir);
-            } else {
-                String fallbackDir = new File(outputDir).getName();
-                Map<String, IcuData> splitData = splitter.split(icuData, fallbackDir);
-                for (String dir : splitData.keySet()) {
-                    IcuTextWriter.writeToFile(splitData.get(dir), outputDir + "/../" + dir);
-                }
-            }
-        } catch (IOException e) {
-            System.err.println("Error while converting " + icuData.getSourceFile());
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * Converts CLDR XML files using the specified mapper.
-     */
-    private void convert(Mapper mapper) {
-        IcuData icuData;
-        Iterator<IcuData> iterator = mapper.iterator(filter);
-        final Type type = Type.valueOf(options.get("type").getValue());
-        while (iterator.hasNext()) {
-            long time = System.currentTimeMillis();
-            icuData = iterator.next();
-            writeIcuData(icuData, destinationDir);
-            System.out.println("Converted " + type + ": " + icuData.getName() + ".xml in " +
-                (System.currentTimeMillis() - time) + "ms");
-        }
-    }
-
-    /**
-     * Generates makefiles for files generated from the specified mapper.
-     * @param mapper
-     * @param makefileName If non-null, print Makefile data to this file.
-     */
-    private void generateSynthetics(Mapper mapper, String makefileName) {
-        // Generate aliases and makefiles for main directory.
-        Set<String> aliases = writeSyntheticFiles(mapper.getGenerated(), destinationDir);
-        if (makefileName != null) {
-            Makefile makefile = mapper.generateMakefile(aliases);
-            writeMakefile(makefile, destinationDir, makefileName);
-        }
-        if (splitter == null) return;
-
-        // Generate aliases and locales for remaining directories if a splitter was used.
-        for (String dir : splitter.getTargetDirs()) {
-            File outputDir = new File(destinationDir, "../" + dir);
-            aliases = writeSyntheticFiles(splitter.getDirSources(dir), outputDir.getAbsolutePath());
-            if (makefileName != null) {
-                Makefile makefile = splitter.generateMakefile(aliases, outputDir.getName());
-                writeMakefile(makefile, outputDir.getAbsolutePath(), makefileName);
-            }
-        }
-    }
-
-    /**
-     * Generates dependency graph files (usually named _dependencies.py).
-     */
-    private void generateDependencyGraphFile(DependencyGraphData dependencyGraphData, String filename) {
-        try {
-            dependencyGraphData.print(destinationDir, filename);
-        } catch (IOException e) {
-            System.err.println("Unable to write " + filename + ": " + e);
-            System.exit(-1);
-        }
-    }
-
-    /**
-     * Creates all synthetic files needed by the makefile in the specified output directory.
-     * @param sources the set of source files that have already been generated
-     * @param outputDir
-     * @return
-     */
-    private Set<String> writeSyntheticFiles(Set<String> sources, String outputDir) {
-        Set<String> targets = new HashSet<String>();
-        if (aliasDeprecates != null) {
-            if (aliasDeprecates.emptyLocaleList != null) {
-                for (String locale : aliasDeprecates.emptyLocaleList) {
-                    IcuData icuData = createEmptyFile(locale);
-                    System.out.println("Empty locale created: " + locale);
-                    targets.add(locale);
-                    writeIcuData(icuData, outputDir);
-                }
-            }
-            if (aliasDeprecates.aliasList != null) {
-                for (Alias alias : aliasDeprecates.aliasList) {
-                    try {
-                        writeAlias(alias, outputDir, sources, targets);
-                    } catch (IOException e) {
-                        System.err.println("Error writing alias " + alias.from + "-" + alias.to);
-                        System.exit(-1);
-                    }
-                }
-            }
-        }
-        return targets;
-    }
-
-    /**
-     * Writes a makefile to the specified directory and filename.
-     */
-    private void writeMakefile(Makefile makefile, String outputDir, String makefileName) {
-        try {
-            new File(outputDir + File.separator + makefileName).createNewFile();
-            makefile.print(outputDir, makefileName);
-        } catch (IOException e) {
-            System.err.println("Error while writing makefile for " + outputDir + "/" + makefileName);
-        }
-    }
-
-    /**
-     * Creates an empty IcuData object to act as a placeholder for the specified alias target locale.
-     */
-    public IcuData createEmptyFile(String locale) {
-        IcuData icuData = new IcuData("icu-locale-deprecates.xml & build.xml", locale, true);
-        icuData.setFileComment("generated alias target");
-        icuData.add("/___", "");
-        return icuData;
-    }
-
-    /**
-     * Creates any synthetic files required for the specified alias.
-     * @param alias
-     * @param outputDir
-     * @param sources the set of sources in the output directory
-     * @param aliasTargets the alias targets already created in the output directory
-     * @throws IOException
-     */
-    private void writeAlias(Alias alias, String outputDir,
-        Set<String> sources, Set<String> aliasTargets) throws IOException {
-        String from = alias.from;
-        String to = alias.to;
-        // Add synthetic destination file for alias if necessary.
-        if (!sources.contains(to) && !aliasTargets.contains(to) && new File(outputDir + File.separator + alias.to + ".txt").createNewFile()) {
-            System.out.println(to + " not found, creating empty file in " + outputDir);
-            IcuTextWriter.writeToFile(createEmptyFile(alias.to), outputDir);
-            aliasTargets.add(to);
-        }
-
-        if (from == null || to == null) {
-            throw new IllegalArgumentException("Malformed alias - no 'from' or 'to': from=\"" +
-                from + "\" to=\"" + to + "\"");
-        }
-
-        if (sources.contains(from)) {
-            throw new IllegalArgumentException(
-                "Can't be both a synthetic alias locale and a real xml file - "
-                    + "consider using <aliasLocale locale=\"" + from + "\"/> instead. ");
-        }
-
-        String rbPath = alias.rbPath;
-        String value = alias.value;
-        if ((rbPath == null) != (value == null)) {
-            throw new IllegalArgumentException("Incomplete alias specification for " +
-                from + "-" + to + ": both rbPath (" +
-                rbPath + ") and value (" + value + ") must be specified");
-        }
-
-        IcuData icuData = new IcuData("icu-locale-deprecates.xml & build.xml", from, true);
-        if (rbPath == null) {
-            icuData.add(ALIAS_PATH, to);
-        } else {
-            icuData.add(rbPath, value);
-        }
-
-        if (new File(outputDir + File.separator + from + ".txt").createNewFile()) {
-            IcuTextWriter.writeToFile(icuData, outputDir);
-            aliasTargets.add(alias.from);
-            System.out.println("Created alias from " + from + " to " + to + " in " + outputDir + ".");
-        }
-    }
-
-    public static void main(String[] args) throws IOException {
-        long totalTime = System.currentTimeMillis();
-        NewLdml2IcuConverter converter = new NewLdml2IcuConverter();
-        converter.processArgs(args);
-        System.out.println("Total time taken: " + (System.currentTimeMillis() - totalTime) + "ms");
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/PluralRangesMapper.java b/tools/java/org/unicode/cldr/icu/PluralRangesMapper.java
deleted file mode 100644
index 5f1fa75..0000000
--- a/tools/java/org/unicode/cldr/icu/PluralRangesMapper.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.TreeMap;
-
-import org.unicode.cldr.util.PluralRanges;
-import org.unicode.cldr.util.SupplementalDataInfo;
-import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo.Count;
-
-/**
- * Class for converting CLDR plurals files to a format suitable for outputting
- * ICU data with. It might be possible for PluralsMapper and LdmlLocaleMapper to
- * share a parent class, but there isn't currently a need for that so they're
- * kept separate for the time being.
- *
- * @author markdavis
- * Based on PluralsMapper
- */
-public class PluralRangesMapper {
-    private static final boolean DO_NUMBER = false;
-    private static final boolean DO_INT_VECTOR = DO_NUMBER && true;
-
-    private String supplementalDir;
-
-    /**
-     * Constructor. A SupplementalDataInfo object is used rather than the
-     * supplemental directory because the supplemental data parsing is already
-     * done for us. The RegexLookup method used by LdmlLocaleMapper wouldn't
-     * work well, since there would only be one regex.
-     *
-     * @param supplementalDataInfo
-     */
-    public PluralRangesMapper(String supplementalDir) {
-        this.supplementalDir = supplementalDir;
-    }
-
-    /**
-     * @return CLDR data converted to an ICU-friendly format
-     */
-    public IcuData fillFromCldr() {
-        IcuData icuData = new IcuData("pluralRanges.xml", "pluralRanges", false);
-        SupplementalDataInfo sdi = SupplementalDataInfo.getInstance(supplementalDir);
-        Map<PluralRanges, Integer> rulesToSet = new TreeMap<>();
-        for (String locale : sdi.getPluralRangesLocales()) {
-            PluralRanges ranges = sdi.getPluralRanges(locale);
-            Integer number = rulesToSet.get(ranges);
-            if (number == null) {
-                rulesToSet.put(ranges, number = rulesToSet.size());
-            }
-            icuData.add("/locales/" + locale, format(number));
-        }
-        String intStyle = DO_INT_VECTOR ? ":intvector" : "";
-
-        for (Entry<PluralRanges, Integer> rulesAndSet : rulesToSet.entrySet()) {
-            PluralRanges ranges = rulesAndSet.getKey();
-            Integer setNumber = rulesAndSet.getValue();
-            int numberWritten = 0;
-            for (Count start : Count.VALUES) {
-                for (Count end : Count.VALUES) {
-                    Count value = ranges.getExplicit(start, end);
-                    if (value != null) {
-                        ++numberWritten;
-                        icuData.add("/rules/" + format(setNumber) + intStyle,
-                            getString(start),
-                            getString(end),
-                            getString(value));
-                    }
-                }
-            }
-        }
-        return icuData;
-    }
-
-    private String format(int number) {
-        return "set" + (number < 10 ? "0" + number : String.valueOf(number));
-    }
-
-    public String getString(Count start) {
-        return DO_NUMBER ? String.valueOf(start.ordinal()) : start.toString();
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/PluralsMapper.java b/tools/java/org/unicode/cldr/icu/PluralsMapper.java
deleted file mode 100644
index 7c9840f..0000000
--- a/tools/java/org/unicode/cldr/icu/PluralsMapper.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.unicode.cldr.util.SupplementalDataInfo.PluralType;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-import com.ibm.icu.impl.Row.R2;
-
-/**
- * Class for converting CLDR plurals files to a format suitable for outputting
- * ICU data with. It might be possible for PluralsMapper and LdmlLocaleMapper to
- * share a parent class, but there isn't currently a need for that so they're
- * kept separate for the time being.
- *
- * @author jchye
- */
-public class PluralsMapper {
-    private int numRuleSets = 0;
-    private String supplementalDir;
-    private Map<String, Integer> ruleOrder;
-
-    /**
-     * Constructor. A SupplementalDataInfo object is used rather than the
-     * supplemental directory because the supplemental data parsing is already
-     * done for us. The RegexLookup method used by LdmlLocaleMapper wouldn't
-     * work well, since there would only be one regex.
-     *
-     * @param supplementalDataInfo
-     */
-    public PluralsMapper(String supplementalDir) {
-        this.supplementalDir = supplementalDir;
-        ruleOrder = new HashMap<String, Integer>();
-    }
-
-    /**
-     * @return CLDR data converted to an ICU-friendly format
-     */
-    public IcuData fillFromCldr() {
-        IcuData icuData = new IcuData("plurals.xml, ordinals.xml", "plurals", false);
-        fillType(PluralType.cardinal, icuData);
-        fillType(PluralType.ordinal, icuData);
-        return icuData;
-    }
-
-    private void fillType(PluralType type, IcuData icuData) {
-        PluralsHandler handler = new PluralsHandler(type, icuData);
-        String filename = type == PluralType.cardinal ? "plurals.xml" : "ordinals.xml";
-        File inputFile = new File(supplementalDir, filename); // handle ordinals too.
-        MapperUtils.parseFile(inputFile, handler);
-    }
-
-    private class PluralsHandler extends MapperUtils.EmptyHandler {
-        private StringBuffer currentText;
-        private String currentCount;
-        private String[] currentLocales;
-        // List of plural counts and corresponding rules.
-        private List<R2<String, String>> currentRules;
-        private IcuData icuData;
-        String prefix;
-
-        public PluralsHandler(PluralType type, IcuData icuData) {
-            this.icuData = icuData;
-            prefix = type == PluralType.cardinal ? "/locales/" : "/locales_ordinals/";
-            currentText = new StringBuffer();
-            currentRules = new ArrayList<R2<String, String>>();
-        }
-
-        @Override
-        public void characters(char[] ch, int start, int length) throws SAXException {
-            currentText.append(ch, start, length);
-        }
-
-        @Override
-        public void startElement(String uri, String localName, String qName, Attributes attr) throws SAXException {
-            if (qName.equals("pluralRules")) {
-                currentLocales = attr.getValue("locales").split("\\s+");
-            } else if (qName.equals("pluralRule")) {
-                currentCount = attr.getValue("count");
-            }
-        }
-
-        @Override
-        public void endElement(String uri, String localName, String qName) throws SAXException {
-            if (qName.equals("pluralRules")) {
-                // add locale path to ICU data
-                StringBuffer ruleBuffer = new StringBuffer();
-                for (R2<String, String> rule : currentRules) {
-                    ruleBuffer.append(rule.toString() + '\n');
-                }
-                Integer setNum = ruleOrder.get(ruleBuffer.toString());
-                // Only add the rules to the ICU file if they aren't a duplicate
-                // of an earlier rule set.
-                if (setNum == null) {
-                    setNum = numRuleSets;
-                    ruleOrder.put(ruleBuffer.toString(), setNum);
-                    for (R2<String, String> rule : currentRules) {
-                        icuData.add("/rules/set" + numRuleSets + '/' + rule.get0(), rule.get1());
-                    }
-                    numRuleSets++;
-                }
-                String setName = currentRules.size() == 0 ? "" : "set" + setNum;
-                for (String locale : currentLocales) {
-                    icuData.add(prefix + locale, setName);
-                }
-                currentRules.clear();
-            } else if (qName.equals("pluralRule")) {
-                currentRules.add(new R2<String, String>(currentCount,
-                    currentText.toString()));
-                currentText.setLength(0);
-            }
-        }
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/RbnfMapper.java b/tools/java/org/unicode/cldr/icu/RbnfMapper.java
deleted file mode 100644
index 617275b..0000000
--- a/tools/java/org/unicode/cldr/icu/RbnfMapper.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.File;
-import java.util.Collection;
-
-import org.unicode.cldr.util.CLDRFile;
-import org.unicode.cldr.util.SupplementalDataInfo;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-import com.ibm.icu.impl.Utility;
-
-public class RbnfMapper extends Mapper {
-    private File sourceDir;
-    private File specialsDir;
-    private SupplementalDataInfo sdi;
-
-    public RbnfMapper(File sourceDir, File specialsDir) {
-        this.sourceDir = sourceDir;
-        this.specialsDir = specialsDir;
-    }
-
-    /**
-     * @return CLDR data converted to an ICU-friendly format
-     */
-    @Override
-    public IcuData[] fillFromCldr(String locale) {
-        IcuData icuData = new IcuData("common/rbnf/" + locale + ".xml", locale, true);
-        RbnfHandler handler = new RbnfHandler(icuData);
-        // Parse the specials first.
-        File specialsFile = getSpecialsFile(locale);
-        if (specialsFile != null) {
-            icuData.setFileComment("ICU <specials> source: <path>/xml/rbnf/" + locale + ".xml");
-            MapperUtils.parseFile(specialsFile, handler);
-        }
-
-        File file = new File(sourceDir, locale + ".xml");
-        MapperUtils.parseFile(file, handler);
-
-        if (sdi == null) {
-            sdi = SupplementalDataInfo.getInstance();
-        }
-        String parent = sdi.getExplicitParentLocale(locale);
-        if (parent != null) { // Empty except for version
-            icuData.add("/%%Parent", parent);
-        }
-        return new IcuData[] { icuData };
-    }
-
-    /**
-     * @param filename
-     * @return true if a special XML file with the specified filename is available.
-     */
-    private File getSpecialsFile(String filename) {
-        if (specialsDir == null) return null;
-        File file = new File(specialsDir, filename + ".xml");
-        return file.exists() ? file : null;
-    }
-
-    /**
-     * The XML handler for collation data.
-     */
-    private class RbnfHandler extends MapperUtils.EmptyHandler {
-        private IcuData icuData;
-        private String rbPath;
-        private StringBuilder currentText = new StringBuilder();
-        private StringBuilder value = new StringBuilder();
-        private boolean isLenient;
-
-        public RbnfHandler(IcuData icuData) {
-            this.icuData = icuData;
-        }
-
-        @Override
-        public void startElement(String uri, String localName, String qName, Attributes attr) throws SAXException {
-            if (qName.equals("rulesetGrouping")) {
-                rbPath = "/RBNFRules/" + attr.getValue("type");
-            } else if (qName.equals("ruleset")) {
-                String access = attr.getValue("access");
-                String value = access != null && access.equals("private") ? "%%" : "%";
-                String type = attr.getValue("type");
-                value += type + ":";
-                icuData.add(rbPath, value);
-                isLenient = type.equals("lenient-parse");
-            } else if (qName.equals("rbnfrule")) {
-                if (isLenient) return;
-                value.append(attr.getValue("value"));
-                String radix = attr.getValue("radix");
-                if (radix != null) {
-                    value.append('/').append(radix);
-                }
-                value.append(": ");
-            } else if (qName.equals("version")) {
-                icuData.replace("/Version", CLDRFile.GEN_VERSION);
-            }
-        }
-
-        @Override
-        public void endElement(String uri, String localName, String qName) throws SAXException {
-            if (qName.equals("rbnfrule")) {
-                // TODO(jchye): Utility.escape unicode-escapes all non-ASCII chars.
-                // Find out what non-ASCII chars really need to be escaped.
-                value.append(Utility.escape(currentText.toString()
-                    .replace('→', '>')
-                    .replace('←', '<')));
-                icuData.add(rbPath, value.toString());
-                currentText.setLength(0);
-                value.setLength(0);
-            }
-        }
-
-        @Override
-        public void characters(char[] ch, int start, int length) throws SAXException {
-            currentText.append(ch, start, length);
-        }
-    }
-
-    @Override
-    public Collection<String> getAvailable() {
-        return MapperUtils.getNames(sourceDir);
-    }
-
-    @Override
-    public Makefile generateMakefile(Collection<String> aliases) {
-        Makefile makefile = new Makefile("RBNF");
-        makefile.addSyntheticAlias(aliases);
-        makefile.addAliasSource();
-        makefile.addSource(sources);
-        return makefile;
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/RegexManager.java b/tools/java/org/unicode/cldr/icu/RegexManager.java
deleted file mode 100644
index 2ad7c4a..0000000
--- a/tools/java/org/unicode/cldr/icu/RegexManager.java
+++ /dev/null
@@ -1,742 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.BufferedReader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.unicode.cldr.util.CLDRFile;
-import org.unicode.cldr.util.CldrUtility.VariableReplacer;
-import org.unicode.cldr.util.FileReaders;
-import org.unicode.cldr.util.PatternCache;
-import org.unicode.cldr.util.RegexLookup;
-import org.unicode.cldr.util.RegexLookup.Finder;
-import org.unicode.cldr.util.RegexLookup.Merger;
-import org.unicode.cldr.util.RegexLookup.RegexFinder;
-
-import com.ibm.icu.impl.Row.R2;
-import com.ibm.icu.impl.Row.R3;
-import com.ibm.icu.text.Transform;
-import com.ibm.icu.text.UnicodeSet;
-import com.ibm.icu.util.Output;
-
-/**
- * A class for loading and managing the xpath converters used to map CLDR data
- * to ICU.
- * @author jchye
- */
-class RegexManager {
-    private static final Pattern SEMI = PatternCache.get("\\s*+;\\s*+");
-    private static final Pattern FUNCTION_PATTERN = PatternCache.get("\\&(\\w++)\\(([^\\)]++)\\)");
-    private static final Pattern QUOTES = PatternCache.get("\"([^\"]++)\"");
-    private static final UnicodeSet SPACE_CHARACTERS = new UnicodeSet(
-        "[\\u0000\\uFEFF[:pattern_whitespace:]]");
-    // Matches arguments with or without enclosing quotes.
-    private static final Pattern ARGUMENT = PatternCache.get("[<\"]?\\$(\\d)[\">]?");
-
-    private static Map<String, Function> functionMap = new HashMap<String, Function>();
-
-    private String converterFile;
-    private Map<String, RegexResult> unprocessedMatchers;
-    private Map<String, String> xpathVariables;
-    private VariableReplacer cldrVariables;
-
-    /**
-     * Wrapper class for functions that need to be performed on CLDR values as
-     * part of the ICU conversion,
-     */
-    static abstract class Function {
-        int maxArgs;
-
-        /**
-         * @param maxArgs
-         *            the maximum number of args that can be passed to this function,
-         *            or a negative number if there is no limit.
-         */
-        Function(int maxArgs) {
-            this.maxArgs = maxArgs;
-        }
-
-        /**
-         * Processes a comma-delimited list of arguments.
-         *
-         * @param arg
-         * @return
-         */
-        public String process(String arg) {
-            String[] args = arg.split(",");
-            if (maxArgs > -1 && args.length > maxArgs) {
-                throw new IllegalArgumentException("Function has too many args: expected "
-                    + maxArgs + " but got (" + arg + ")");
-            }
-            return run(args);
-        }
-
-        /**
-         * Runs the function on a list of arguments.
-         *
-         * @return the resultant string
-         */
-        abstract String run(String... args);
-    }
-
-    /**
-     * A wrapper class for storing and working with the unprocessed path-value pairs of a RegexResult.
-     */
-    static class PathValueInfo {
-        private String rbPath;
-        private String valueArg;
-        private String groupKey;
-        private String baseXPath;
-        private int splitRbPathArg;
-
-        /**
-         * @param rbPath
-         *            the rbPath expression to be used for this set of path-value pairs.
-         * @param instructions
-         *            any special instructions to be carried out on this set of path-value pairs
-         * @param splitRbPathArg
-         *            if applicable, the number of the argument in the rbPath
-         *            expression that needs to be split to create multiple rbPaths, each with the same value
-         */
-        public PathValueInfo(String rbPath, Map<String, String> instructions, int splitRbPathArg) {
-            this.rbPath = rbPath;
-            this.valueArg = instructions.get("values");
-            this.groupKey = instructions.get("group");
-            this.baseXPath = instructions.get("base_xpath");
-            this.splitRbPathArg = splitRbPathArg;
-        }
-
-        /**
-         * @param arguments
-         *            the arguments retrieved from the regex corresponding to this PathValueInfo
-         * @return the processed rb path
-         */
-        public String processRbPath(String[] arguments) {
-            String path = processString(rbPath, arguments);
-            // Replace slashes in metazone names,
-            // e.g. "America/Argentina/La_Rioja"
-            Matcher matcher = QUOTES.matcher(path);
-            if (matcher.find()) {
-                path = path.substring(0, matcher.start(1))
-                    + matcher.group(1).replace('/', ':')
-                    + path.substring(matcher.end(1));
-            }
-            return path;
-        }
-
-        public String processGroupKey(String[] arguments) {
-            return processString(groupKey, arguments);
-        }
-
-        public List<String> processValues(String[] arguments, String cldrValue) {
-            if (valueArg == null) {
-                List<String> values = new ArrayList<String>();
-                values.add(cldrValue);
-                return values;
-            }
-            // Split single args using spaces.
-            String processedValue = processValue(valueArg, cldrValue, arguments);
-            return splitValues(processedValue);
-        }
-
-        public String processXPath(String[] arguments, String xpath) {
-            if (baseXPath != null) {
-                return processString(baseXPath, arguments);
-            } else {
-                return xpath;
-            }
-        }
-
-        private List<String> splitValues(String unsplitValues) {
-            // Split up values using spaces unless enclosed by non-escaped quotes,
-            // e.g. a "b \" c" would become {"a", "b \" c"}
-            List<String> args = new ArrayList<String>();
-            StringBuffer valueBuffer = new StringBuffer();
-            boolean shouldSplit = true;
-            char lastChar = ' ';
-            for (char c : unsplitValues.toCharArray()) {
-                // Normalize whitespace input.
-                if (SPACE_CHARACTERS.contains(c)) {
-                    c = ' ';
-                }
-                if (c == '"' && lastChar != '\\') {
-                    shouldSplit = !shouldSplit;
-                } else if (c == ' ') {
-                    if (lastChar == ' ') {
-                        // Do nothing.
-                    } else if (shouldSplit) {
-                        args.add(valueBuffer.toString());
-                        valueBuffer.setLength(0);
-                    } else {
-                        valueBuffer.append(c);
-                    }
-                } else {
-                    valueBuffer.append(c);
-                }
-                lastChar = c;
-            }
-            if (valueBuffer.length() > 0) {
-                args.add(valueBuffer.toString());
-            }
-            return args;
-        }
-
-        private String processValue(String value, String cldrValue, String[] arguments) {
-            value = processString(value, arguments);
-            Matcher matcher = FUNCTION_PATTERN.matcher(value);
-            if (matcher.find()) {
-                int index = 0;
-                StringBuffer buffer = new StringBuffer();
-                do {
-                    buffer.append(value.substring(index, matcher.start()));
-                    String fnName = matcher.group(1);
-                    String fnArgs = matcher.group(2);
-                    String result = functionMap.get(fnName).process(fnArgs);
-                    buffer.append(result);
-                    index = matcher.end();
-                } while (matcher.find());
-                buffer.append(value.substring(index));
-                // System.out.println(value + " to " + buffer.toString());
-                value = buffer.toString();
-            }
-            if (value.contains("{value}")) {
-                value = value.replace("{value}", cldrValue);
-            }
-            return value;
-        }
-
-        @Override
-        public String toString() {
-            return rbPath + "=" + valueArg;
-        }
-
-        public int getSplitRbPathArg() {
-            return splitRbPathArg;
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (o instanceof PathValueInfo) {
-                PathValueInfo otherInfo = (PathValueInfo) o;
-                return rbPath.equals(otherInfo.rbPath)
-                    && valueArg.equals(otherInfo.valueArg);
-            } else {
-                return false;
-            }
-        }
-    }
-
-    static String processString(String value, String[] arguments) {
-        if (value == null) {
-            return null;
-        }
-        try {
-            return RegexLookup.replace(value, arguments);
-        } catch (ArrayIndexOutOfBoundsException e) {
-            throw new RuntimeException("Error while filling out arguments in " + value + " with "
-                + Arrays.asList(arguments), e);
-        }
-    }
-
-    static class RegexResult implements Iterable<PathValueInfo> {
-
-        private Set<PathValueInfo> unprocessed;
-
-        public RegexResult() {
-            unprocessed = new HashSet<PathValueInfo>();
-        }
-
-        public void add(String rbPath, Map<String, String> instructions,
-            int splitRbPathArg) {
-            unprocessed.add(new PathValueInfo(rbPath, instructions, splitRbPathArg));
-        }
-
-        @Override
-        public Iterator<PathValueInfo> iterator() {
-            return unprocessed.iterator();
-        }
-    }
-
-    static class CldrArray {
-        // Map of xpaths to values and group key.
-        private Map<String, R2<List<String>, String>> map;
-
-        public CldrArray() {
-            map = new HashMap<String, R2<List<String>, String>>();
-        }
-
-        public void put(String key, List<String> values, String groupKey) {
-            map.put(key, new R2<List<String>, String>(values, groupKey));
-        }
-
-        public void add(String key, String[] values, String groupKey) {
-            List<String> list = new ArrayList<String>();
-            for (String value : values) {
-                list.add(value);
-            }
-            put(key, list, groupKey);
-        }
-
-        public void add(String key, String value, String groupKey) {
-            List<String> list = new ArrayList<String>();
-            list.add(value);
-            put(key, list, groupKey);
-        }
-
-        public void addAll(CldrArray otherArray) {
-            // HACK: narrow alias to abbreviated. Remove after CLDR data fixed.
-            for (String otherKey : otherArray.map.keySet()) {
-                String narrowPath = otherKey.replace("eraAbbr", "eraNarrow");
-                if (!map.containsKey(narrowPath)) {
-                    map.put(narrowPath, otherArray.map.get(otherKey));
-                }
-
-            }
-        }
-
-        public boolean findKey(Finder finder) {
-            for (String key : map.keySet()) {
-                if (finder.find(key, null, null)) {
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        public List<String[]> sortValues(Comparator<String> comparator) {
-            List<String> sortedKeys = new ArrayList<String>(map.keySet());
-            Collections.sort(sortedKeys, comparator);
-            List<String[]> sortedValues = new ArrayList<String[]>();
-            // Group isArray for the same xpath together.
-            List<String> arrayValues = new ArrayList<String>();
-            for (int i = 0, len = sortedKeys.size(); i < len; i++) {
-                String key = sortedKeys.get(i);
-                R2<List<String>, String> currentEntry = map.get(key);
-                List<String> values = currentEntry.get0();
-                String groupKey = currentEntry.get1();
-                if (groupKey == null) {
-                    for (String value : values) {
-                        sortedValues.add(new String[] { value });
-                    }
-                } else {
-                    arrayValues.addAll(values);
-                    String nextKey = null;
-                    if (i < len - 1) {
-                        nextKey = map.get(sortedKeys.get(i + 1)).get1();
-                    }
-                    if (!groupKey.equals(nextKey)) {
-                        sortedValues.add(toArray(arrayValues));
-                        arrayValues.clear();
-                    }
-                }
-            }
-            return sortedValues;
-        }
-    }
-
-    /**
-     * Converts a list into an Array.
-     */
-    static String[] toArray(List<String> list) {
-        String[] array = new String[list.size()];
-        list.toArray(array);
-        return array;
-    }
-
-    private static Transform<String, Finder> regexTransform = new Transform<String, Finder>() {
-        @Override
-        public Finder transform(String source) {
-            return new RegexFinder(source);
-        }
-    };
-
-    Map<String, Function> addFunction(String fnName, Function function) {
-        functionMap.put(fnName, function);
-        return functionMap;
-    }
-
-    /**
-     * Checks if two strings match a specified pattern.
-     *
-     * @param pattern
-     *            the pattern to be matched against
-     * @param arg0
-     * @param arg1
-     * @param matchers
-     *            a 2-element array to contain the two matchers. The
-     *            array is not guaranteed to be filled if matches() returns false
-     * @return true if both strings successfully matched the pattern
-     */
-    static boolean matches(Pattern pattern, String arg0, String arg1, Matcher[] matchers) {
-        return (matchers[0] = pattern.matcher(arg0)).matches()
-            && (matchers[1] = pattern.matcher(arg1)).matches();
-    }
-
-    /**
-     * Outputs the list of debugging results returned from a RegexLookup.
-     * Only the matches most similar to the specified xpath will be returned.
-     * @param xpath
-     * @param results
-     */
-    static void printLookupResults(String xpath, List<String> results) {
-        if (results == null) return;
-        System.out.println("Debugging " + xpath + ":");
-        int[] haltPos = new int[results.size()];
-        int furthestPos = 0;
-        for (int i = 0; i < haltPos.length; i++) {
-            int pos = results.get(i).indexOf('\u2639'); // ☹
-            haltPos[i] = pos;
-            if (pos > furthestPos) furthestPos = pos;
-        }
-        for (int i = 0; i < haltPos.length; i++) {
-            if (haltPos[i] < furthestPos) continue;
-            System.out.println(results.get(i));
-        }
-    }
-
-    RegexLookup<FallbackInfo> fallbackConverter;
-    RegexLookup<RegexResult> xpathConverter;
-
-    // One FallbackInfo object for every type of rbPath.
-    class FallbackInfo implements Iterable<R3<Finder, String, List<String>>> {
-        // Fallback info in the order: xpath matcher, fallback xpath, fallback values.
-        private List<R3<Finder, String, List<String>>> fallbackItems;
-        private List<Integer> argsUsed; // list of args used by the rb pattern
-        private int numXpathArgs; // Number of args in the xpath
-
-        public FallbackInfo(List<Integer> argsUsed, int numXpathArgs) {
-            fallbackItems = new ArrayList<R3<Finder, String, List<String>>>();
-            this.argsUsed = argsUsed;
-            this.numXpathArgs = numXpathArgs;
-        }
-
-        public void addItem(Finder xpathMatcher, String fallbackXpath, String[] fallbackValues) {
-            List<String> values = new ArrayList<String>();
-            for (String fallbackValue : fallbackValues) {
-                values.add(fallbackValue);
-            }
-            fallbackItems.add(new R3<Finder, String, List<String>>(xpathMatcher, fallbackXpath, values));
-        }
-
-        /**
-         * Takes in arguments obtained from a RegexLookup on a RB path and fleshes
-         * it out for the corresponding xpath.
-         *
-         * @param arguments
-         * @return
-         */
-        public String[] getArgumentsForXpath(String[] arguments) {
-            String[] output = new String[numXpathArgs + 1];
-            output[0] = arguments[0];
-            for (int i = 0; i < argsUsed.size(); i++) {
-                output[argsUsed.get(i)] = arguments[i + 1];
-            }
-            for (int i = 0; i < output.length; i++) {
-                if (output[i] == null) output[i] = "x"; // dummy value
-            }
-            return output;
-        }
-
-        private R3<Finder, String, List<String>> getItem(Finder finder) {
-            for (R3<Finder, String, List<String>> item : fallbackItems) {
-                if (item.get0().equals(finder)) return item;
-            }
-            return null;
-        }
-
-        public FallbackInfo merge(FallbackInfo newInfo) {
-            for (R3<Finder, String, List<String>> newItem : newInfo.fallbackItems) {
-                R3<Finder, String, List<String>> item = getItem(newItem.get0());
-                if (item == null) {
-                    fallbackItems.add(newItem);
-                } else {
-                    item.get2().addAll(newItem.get2());
-                }
-            }
-            return this;
-        }
-
-        @Override
-        public Iterator<R3<Finder, String, List<String>>> iterator() {
-            return fallbackItems.iterator();
-        }
-    }
-
-    /**
-     * All child classes should call this constructor.
-     *
-     * @param converterFile
-     */
-    RegexManager(String converterFile) {
-        this.converterFile = converterFile;
-        unprocessedMatchers = new HashMap<String, RegexResult>();
-    }
-
-    /**
-     * @return a RegexLookup for matching rb paths that may require fallback
-     *         values.
-     */
-    RegexLookup<FallbackInfo> getFallbackConverter() {
-        if (fallbackConverter == null) {
-            loadConverters();
-        }
-        return fallbackConverter;
-    }
-
-    /**
-     * @return a RegexLookup for matching xpaths
-     */
-    RegexLookup<RegexResult> getPathConverter() {
-        if (xpathConverter == null) {
-            loadConverters();
-        }
-        return xpathConverter;
-    }
-
-    RegexLookup<RegexResult> getPathConverter(CLDRFile cldrFile) {
-        RegexLookup<RegexResult> basePathConverter = getPathConverter();
-
-        RegexLookup<RegexResult> processedPathConverter = new RegexLookup<RegexResult>()
-            .setPatternTransform(regexTransform);
-        cldrVariables = new VariableReplacer();
-        for (Entry<String, String> entry : xpathVariables.entrySet()) {
-            cldrVariables.add(entry.getKey(), cldrFile.getStringValue(entry.getValue()));
-        }
-        for (Map.Entry<Finder, RegexResult> entry : basePathConverter) {
-            processedPathConverter.add(entry.getKey(), entry.getValue());
-        }
-        for (Entry<String, RegexResult> entry : unprocessedMatchers.entrySet()) {
-            processedPathConverter.add(cldrVariables.replace(entry.getKey()),
-                entry.getValue());
-        }
-        return processedPathConverter;
-    }
-
-    private void loadConverters() {
-        xpathConverter = new RegexLookup<RegexResult>()
-            .setPatternTransform(regexTransform);
-        fallbackConverter = new RegexLookup<FallbackInfo>()
-            .setValueMerger(new Merger<FallbackInfo>() {
-                @Override
-                public FallbackInfo merge(FallbackInfo a, FallbackInfo into) {
-                    return into.merge(a);
-                }
-            });
-        xpathVariables = new HashMap<String, String>();
-        BufferedReader reader = FileReaders.openFile(NewLdml2IcuConverter.class, converterFile);
-        VariableReplacer variables = new VariableReplacer();
-        Finder xpathMatcher = null;
-        RegexResult regexResult = null;
-        String line = null;
-        int lineNum = 0;
-        try {
-            while ((line = reader.readLine()) != null) {
-                lineNum++;
-                line = line.trim();
-                // Skip comments.
-                if (line.length() == 0 || line.startsWith("#")) continue;
-                // Read variables.
-                if (line.charAt(0) == '%') {
-                    int pos = line.indexOf("=");
-                    if (pos < 0) {
-                        throw new IllegalArgumentException();
-                    }
-                    String varName = line.substring(0, pos).trim();
-                    String varValue = line.substring(pos + 1).trim();
-                    // Variables representing xpaths should be replaced later on.
-                    if (varValue.startsWith("//")) {
-                        xpathVariables.put(varName, varValue);
-                    } else {
-                        variables.add(varName, varValue);
-                    }
-                    continue;
-                }
-                if (line.contains("%")) {
-                    line = variables.replace(line);
-                }
-                // if line still contains "%", still unprocessed
-                // Process a line in the input file for xpath conversion.
-                String[] content = line.split(SEMI.toString());
-                // xpath ; rbPath ; value
-                // Create a reverse lookup for rbPaths to xpaths.
-                if (!line.startsWith(";")) {
-                    if (regexResult != null) {
-                        if (xpathMatcher.toString().contains("%")) {
-                            unprocessedMatchers.put(xpathMatcher.toString(), regexResult);
-                        } else {
-                            xpathConverter.add(xpathMatcher, regexResult);
-                        }
-                    }
-                    xpathMatcher = new RegexFinder(content[0].replace("[@", "\\[@"));
-                    regexResult = new RegexResult();
-                }
-                if (content.length > 1) {
-                    addConverterEntry(xpathMatcher, content, regexResult);
-                }
-            }
-            xpathConverter.add(xpathMatcher, regexResult);
-        } catch (Exception e) {
-            System.err.println("Error reading " + converterFile + " at line " + lineNum + ": " + line);
-            e.printStackTrace();
-        }
-    }
-
-    private void addConverterEntry(Finder xpathMatcher, String[] content,
-        RegexResult regexResult) {
-        String rbPath = content[1];
-        // Find arguments in rbPath.
-        Matcher matcher = ARGUMENT.matcher(rbPath);
-        int splitRbPathArg = -1;
-        while (matcher.find()) {
-            char startChar = rbPath.charAt(matcher.start());
-            char endChar = rbPath.charAt(matcher.end() - 1);
-            boolean shouldSplit = !(startChar == '"' && endChar == '"' ||
-                startChar == '<' && endChar == '>');
-            if (shouldSplit) {
-                splitRbPathArg = Integer.parseInt(matcher.group(1));
-                break;
-            }
-        }
-
-        // Parse remaining special instructions.
-        Map<String, String> instructions = new HashMap<String, String>();
-        for (int i = 2; i < content.length; i++) {
-            String[] instruction = content[i].split("=", 2);
-            if (instruction[0].equals("fallback")) {
-                // WARNING: fallback might backfire if more than one type of xpath for the same rbpath
-                addFallback(xpathMatcher, rbPath, instruction[1]);
-            } else {
-                instructions.put(instruction[0], instruction[1]);
-            }
-        }
-        regexResult.add(rbPath, instructions, splitRbPathArg);
-    }
-
-    /**
-     * Adds an entry to the fallback converter.
-     *
-     * @param xpathMatcher
-     *            the xpath matcher that determines if a fallback value
-     *            is necessary
-     * @param rbPath
-     *            the rb path that the fallback value is for
-     * @param fallbackValue
-     *            the fallback value
-     */
-    private void addFallback(Finder xpathMatcher, String rbPath, String fallbackValue) {
-        ArrayList<StringBuffer> args = new ArrayList<StringBuffer>();
-        int numBraces = 0;
-        int argNum = 0;
-        // Create RB path matcher and xpath replacement.
-        // WARNING: doesn't currently take lookaround groups into account.
-        StringBuffer xpathReplacement = new StringBuffer();
-        for (char c : xpathMatcher.toString().toCharArray()) {
-            boolean isBrace = false;
-            if (c == '(') {
-                numBraces++;
-                argNum++;
-                args.add(new StringBuffer());
-                isBrace = true;
-                if (numBraces == 1) {
-                    xpathReplacement.append('$').append(argNum);
-                }
-            }
-            if (numBraces > 0) {
-                for (int i = args.size() - numBraces; i < args.size(); i++) {
-                    args.get(i).append(c);
-                }
-            }
-            if (c == ')') {
-                numBraces--;
-                isBrace = true;
-            }
-            if (!isBrace && numBraces == 0) {
-                xpathReplacement.append(c);
-            }
-        }
-        String fallbackXpath = xpathReplacement.toString().replaceAll("\\\\\\[", "[");
-        if (fallbackXpath.contains("(")) {
-            System.err.println("Warning: malformed xpath " + fallbackXpath);
-        }
-
-        // Create rb matcher.
-        Matcher matcher = ARGUMENT.matcher(rbPath);
-        StringBuffer rbPattern = new StringBuffer();
-        int lastIndex = 0;
-        List<Integer> argsUsed = new ArrayList<Integer>();
-        while (matcher.find()) {
-            rbPattern.append(rbPath.substring(lastIndex, matcher.start()));
-            argNum = Integer.parseInt(matcher.group(1));
-            rbPattern.append(args.get(argNum - 1));
-            argsUsed.add(argNum);
-            lastIndex = matcher.end();
-        }
-        rbPattern.append(rbPath.substring(lastIndex));
-        FallbackInfo info = new FallbackInfo(argsUsed, args.size());
-        info.addItem(xpathMatcher, fallbackXpath, fallbackValue.split("\\s"));
-        fallbackConverter.add(new RegexFinder(rbPattern.toString()), info);
-    }
-
-    void addFallbackValues(Map<String, CldrArray> pathValueMap) {
-        addFallbackValues(null, pathValueMap);
-    }
-
-    /**
-     * Checks if any fallback values are required and adds them to the specified
-     * map.
-     *
-     * @param pathValueMap
-     */
-    void addFallbackValues(CLDRFile cldrFile, Map<String, CldrArray> pathValueMap) {
-        RegexLookup<FallbackInfo> fallbackConverter = getFallbackConverter();
-        for (String rbPath : pathValueMap.keySet()) {
-            Output<String[]> arguments = new Output<String[]>();
-            FallbackInfo fallbackInfo = fallbackConverter.get(rbPath, null, arguments);
-            if (fallbackInfo == null) continue;
-            CldrArray values = pathValueMap.get(rbPath);
-            for (R3<Finder, String, List<String>> info : fallbackInfo) {
-                if (!values.findKey(info.get0())) {
-                    // The fallback xpath is just for sorting purposes.
-                    String fallbackXpath = processString(info.get1(),
-                        fallbackInfo.getArgumentsForXpath(arguments.value));
-                    // Sanity check.
-                    if (fallbackXpath.contains("$")) {
-                        System.err.println("Warning: " + fallbackXpath + " for " + rbPath +
-                            " still contains unreplaced arguments.");
-                    }
-                    List<String> fallbackValues = info.get2();
-                    List<String> valueList = new ArrayList<String>();
-                    for (String value : fallbackValues) {
-                        value = processString(value, arguments.value);
-                        // Value is an xpath, so get real value from CLDRFile.
-                        if (value.startsWith("//") && cldrFile != null) {
-                            value = cldrFile.getStringValue(cldrVariables.replace(value));
-                        }
-                        valueList.add(value);
-                    }
-                    values.put(fallbackXpath, valueList, null);
-                }
-            }
-        }
-    }
-
-    static CldrArray getCldrArray(String key, Map<String, CldrArray> pathValueMap) {
-        CldrArray cldrArray = pathValueMap.get(key);
-        if (cldrArray == null) {
-            cldrArray = new CldrArray();
-            pathValueMap.put(key, cldrArray);
-        }
-        return cldrArray;
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/ResourceSplitter.java b/tools/java/org/unicode/cldr/icu/ResourceSplitter.java
deleted file mode 100644
index e5379fe..0000000
--- a/tools/java/org/unicode/cldr/icu/ResourceSplitter.java
+++ /dev/null
@@ -1,393 +0,0 @@
-// Copyright 2009 Google Inc. All Rights Reserved.
-
-package org.unicode.cldr.icu;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.unicode.cldr.icu.ICUResourceWriter.Resource;
-import org.unicode.cldr.icu.ICUResourceWriter.ResourceInt;
-import org.unicode.cldr.icu.ICUResourceWriter.ResourceString;
-import org.unicode.cldr.icu.ICUResourceWriter.ResourceTable;
-
-public class ResourceSplitter {
-    private final ICULog log;
-    private final List<SplitInfo> splitInfos;
-    private final Map<String, File> targetDirs;
-
-    public static class SplitInfo {
-        final String srcNodePath;
-        final String targetNodePath;
-        final String targetDirPath;
-
-        public SplitInfo(String srcNodePath, String targetDirPath) {
-            this(srcNodePath, targetDirPath, null);
-        }
-
-        public SplitInfo(String srcNodePath, String targetDirPath, String targetNodePath) {
-            // normalize
-            if (!srcNodePath.endsWith("/")) {
-                srcNodePath += "/";
-            }
-
-            if (targetNodePath == null) {
-                targetNodePath = srcNodePath;
-            } else if (!targetNodePath.endsWith("/")) {
-                targetNodePath += "/";
-            }
-
-            this.srcNodePath = srcNodePath;
-            this.targetNodePath = targetNodePath;
-            this.targetDirPath = targetDirPath;
-        }
-    }
-
-    static class ResultInfo {
-        final File directory;
-        final ResourceTable root;
-
-        public ResultInfo(File directory, ResourceTable root) {
-            this.directory = directory;
-            this.root = root;
-        }
-    }
-
-    static class Path {
-        private StringBuilder sb = new StringBuilder();
-        private int[] indices = new int[10]; // default length should be enough
-        private int depth;
-
-        Path(String s) {
-            sb.append(s);
-        }
-
-        String fullPath() {
-            return sb.toString();
-        }
-
-        void push(String pathSegment) {
-            if (depth == indices.length) {
-                int[] temp = new int[depth * 2];
-                System.arraycopy(indices, 0, temp, 0, depth);
-                indices = temp;
-            }
-
-            indices[depth++] = sb.length();
-            sb.append(pathSegment).append("/");
-        }
-
-        void pop() {
-            if (depth == 0) {
-                throw new IndexOutOfBoundsException("can't pop past start of path");
-            }
-            sb.setLength(indices[--depth]);
-        }
-    }
-
-    ResourceSplitter(ICULog log, String baseDirPath, List<SplitInfo> splitInfos) {
-        this.log = log;
-        this.splitInfos = splitInfos;
-        this.targetDirs = new HashMap<String, File>();
-
-        File baseDir = new File(baseDirPath);
-
-        for (SplitInfo si : splitInfos) {
-            String dirPath = si.targetDirPath;
-            if (!targetDirs.containsKey(dirPath)) {
-                File dir = new File(dirPath);
-                if (!dir.isAbsolute()) {
-                    dir = new File(baseDir, dirPath);
-                }
-                if (dir.exists()) {
-                    if (!dir.isDirectory()) {
-                        throw new IllegalArgumentException(
-                            "File \"" + dirPath + "\" exists and is not a directory");
-                    }
-                    if (!dir.canWrite()) {
-                        throw new IllegalArgumentException(
-                            "Cannot write to directory \"" + dirPath + "\"");
-                    }
-                } else {
-                    if (!dir.mkdirs()) {
-                        throw new IllegalArgumentException(
-                            "Unable to create directory path \"" + dirPath + "\"");
-                    }
-                }
-                targetDirs.put(dirPath, dir);
-            }
-        }
-    }
-
-    public List<ResultInfo> split(File targetDir, ResourceTable root) {
-        return new SplitProcessor(new ResultInfo(targetDir, root)).split();
-    }
-
-    // Does the actual work of splitting the resource, based on the ResourceSplitter's specs.
-    private class SplitProcessor {
-        private final ResultInfo source;
-
-        private final Path path;
-        private final Map<String, ResourceTable> resultMap;
-        private final Map<String, ResourceTable> aliasMap;
-        private final List<SplitInfo> remainingInfos;
-
-        private SplitProcessor(ResultInfo source) {
-            this.source = source;
-
-            this.path = new Path("/");
-            this.resultMap = new HashMap<String, ResourceTable>();
-            this.aliasMap = new HashMap<String, ResourceTable>();
-            this.remainingInfos = new ArrayList<SplitInfo>();
-            this.remainingInfos.addAll(splitInfos);
-        }
-
-        private List<ResultInfo> split() {
-            // start split below the root, so we don't match against the locale name
-            if (!handleAlias()) {
-                process(source.root, source.root.first);
-            }
-
-            // All trees need a root resource. Add one to any tree that didn't get one.
-            // Not only that, but some locales that use root data rely on the presence of
-            // a resource file matching the prefix of the locale to prevent fallback
-            // lookup through the default locale. To prevent this error, all resources
-            // need at least a language-only stub resource to be present.
-            //
-            // If the locale string does not contain an underscore, we assume that it's
-            // either the 'root' locale or a language-only locale, so we always generate
-            // the resource.
-            //
-            // Arrgh. The icu package tool wants all internal nodes in the tree to be
-            // present. Currently, the missing nodes are all lang_Script locales.
-            // Maybe change the package tool to fix this.
-            int x = source.root.name.indexOf('_');
-            if (x == -1 || source.root.name.length() - x == 5) {
-                for (String targetDirPath : targetDirs.keySet()) {
-                    ResourceTable root = resultMap.get(targetDirPath);
-                    if (root == null) {
-                        log.log("Generate stub '" + source.root.name + ".txt' in '" + targetDirPath + "'");
-                        getResultRoot(targetDirPath);
-                    }
-                }
-            }
-
-            List<ResultInfo> results = new ArrayList<ResultInfo>();
-            results.add(source); // write out what's left of the original
-
-            for (Map.Entry<String, ResourceTable> e : resultMap.entrySet()) {
-                File dir = targetDirs.get(e.getKey());
-                results.add(new ResultInfo(dir, e.getValue()));
-            }
-
-            for (Map.Entry<String, ResourceTable> e : aliasMap.entrySet()) {
-                File dir = targetDirs.get(e.getKey());
-                results.add(new ResultInfo(dir, e.getValue()));
-            }
-
-            return results;
-        }
-
-        // if there is an "%%ALIAS" resource at the top level, copy the file to
-        // all target directories. We're done.
-        // Well, maybe not. We need to ensure that all aliases have their targets in
-        // their directories.
-        //
-        // It's probably ok to generate them. if they were created already, we'll
-        // not bother. If we generate one, and there is real data later, we'll
-        // just overwrite it.
-        private boolean handleAlias() {
-            for (Resource res = source.root.first; res != null; res = res.next) {
-                if ("\"%%ALIAS\"".equals(res.name)) {
-                    // it's an alias, create for all targets
-                    for (String targetDirPath : targetDirs.keySet()) {
-                        log.log("Generate alias '" + source.root.name + "' in '" + targetDirPath + "'");
-                        getResultRoot(targetDirPath);
-                        generateTargetIfNeeded(((ResourceString) res).val, targetDirPath);
-                    }
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        private void generateTargetIfNeeded(String resName, String dirPath) {
-            File targetDir = targetDirs.get(dirPath);
-            String fileName = resName + ".txt";
-            if (!new File(targetDir, fileName).exists()) {
-                log.log("Generating alias target '" + resName + "' in '" + dirPath + "'");
-
-                ResourceTable res = new ResourceTable();
-                res.name = resName;
-                ResourceString str = new ResourceString();
-                str.name = "___";
-                str.val = "";
-                str.comment = "empty target resource";
-                res.first = str;
-
-                aliasMap.put(dirPath, res);
-            }
-        }
-
-        private void process(Resource parent, Resource res) {
-            while (true) {
-                Resource next = res.next;
-
-                path.push(res.name);
-                String fullPath = path.fullPath();
-                for (Iterator<SplitInfo> iter = remainingInfos.iterator(); iter.hasNext();) {
-                    SplitInfo si = iter.next();
-                    if (si.srcNodePath.startsWith(fullPath)) {
-                        if (si.srcNodePath.equals(fullPath)) {
-                            handleSplit(parent, res, si);
-                            iter.remove(); // don't need to look for this path anymore
-                        } else {
-                            if (res.first != null) {
-                                process(res, res.first);
-                            }
-                        }
-                        break;
-                    }
-                }
-                path.pop();
-
-                if (next == null) {
-                    break;
-                }
-
-                res = next;
-            }
-        }
-
-        private void handleSplit(Resource parent, Resource res, SplitInfo si) {
-            ResourceTable root = getResultRoot(si.targetDirPath);
-
-            removeChildFromParent(res, parent);
-
-            placeResourceAtPath(root, si.targetNodePath, res);
-        }
-
-        private ResourceTable getResultRoot(String targetDirPath) {
-            ResourceTable root = resultMap.get(targetDirPath);
-            if (root == null) {
-                root = createRoot();
-                resultMap.put(targetDirPath, root);
-            }
-            return root;
-        }
-
-        /**
-         * Creates a new ResourceTable root. It is a copy of the top of the source resource.
-         * It includes the Version and %%ParentIsRoot resources from the source resource, if present.
-         */
-        private ResourceTable createRoot() {
-            ResourceTable src = source.root;
-            ResourceTable root = new ResourceTable();
-            root.annotation = src.annotation;
-            root.comment = src.comment;
-            root.name = src.name;
-
-            // if the src contains a version element, copy that element
-            final String versionKey = "Version";
-            final String parentRootKey = "%%ParentIsRoot";
-            final String aliasKey = "\"%%ALIAS\"";
-
-            for (Resource child = src.first; child != null; child = child.next) {
-                if (versionKey.equals(child.name)) {
-                    String value = ((ResourceString) child).val;
-                    root.appendContents(ICUResourceWriter.createString(versionKey, value));
-                } else if (parentRootKey.equals(child.name)) {
-                    ResourceInt parentIsRoot = new ResourceInt();
-                    parentIsRoot.name = parentRootKey;
-                    parentIsRoot.val = ((ResourceInt) child).val;
-                    root.appendContents(parentIsRoot);
-                } else if (aliasKey.equals(child.name)) {
-                    String value = ((ResourceString) child).val;
-                    root.appendContents(ICUResourceWriter.createString(aliasKey, value));
-                }
-            }
-
-            return root;
-        }
-
-        /**
-         * Ensures that targetNodePath exists rooted at res, and returns the resource at that
-         * path.
-         */
-        private void placeResourceAtPath(Resource root, String targetNodePath, Resource res) {
-            String[] nodeNames = targetNodePath.split("/");
-
-            // rename the resource with the last name in the path, and shorten the path
-            int len = nodeNames.length;
-            res.name = nodeNames[--len];
-
-            // find or build nodes corresponding to remaining path
-            // Skip initial empty node name (because of leading slash in target path)
-            for (int i = 1; i < len; ++i) {
-                root = findOrCreateNode(root, nodeNames[i]);
-            }
-
-            // put the renamed node at the end of the new parent
-            root.appendContents(res);
-        }
-
-        private Resource findOrCreateNode(Resource parent, String nodeName) {
-            // if no children, just create one, set it as the first child, and return it
-            if (parent.first == null) {
-                ResourceTable newNode = new ResourceTable();
-                newNode.name = nodeName;
-                parent.first = newNode;
-                return newNode;
-            }
-
-            // if the first child is the one we want, return it
-            if (nodeName.equals(parent.first.name)) {
-                return parent.first;
-            }
-
-            // search for the node we want, remembering its 'elder' sibling, and if we find the
-            // one we want, return it
-            Resource child = parent.first;
-            for (; child.next != null; child = child.next) {
-                if (nodeName.equals(child.next.name)) {
-                    return child.next;
-                }
-            }
-
-            // didn't find it, so create the node, make it the sibling of the youngest child,
-            // and return it
-            ResourceTable newNode = new ResourceTable();
-            newNode.name = nodeName;
-            child.next = newNode;
-            return newNode;
-        }
-
-        /**
-         * Removes this single child resource from parent, leaving other children
-         * of parent undisturbed.
-         *
-         * @return the child resource (with no siblings)
-         */
-        private Resource removeChildFromParent(Resource child, Resource parent) {
-            Resource first = parent.first;
-            if (first == child) {
-                parent.first = child.next;
-            } else {
-                while (first.next != null && first.next != child) {
-                    first = first.next;
-                }
-                if (first.next == null) {
-                    throw new IllegalArgumentException("Resource " + child + " is not a child of " +
-                        parent);
-                }
-                first.next = child.next;
-            }
-            child.next = null;
-
-            return child;
-        }
-    }
-}
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/icu/SupplementalMapper.java b/tools/java/org/unicode/cldr/icu/SupplementalMapper.java
deleted file mode 100644
index 1213f60..0000000
--- a/tools/java/org/unicode/cldr/icu/SupplementalMapper.java
+++ /dev/null
@@ -1,492 +0,0 @@
-package org.unicode.cldr.icu;
-
-import java.io.File;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.unicode.cldr.icu.RegexManager.CldrArray;
-import org.unicode.cldr.icu.RegexManager.Function;
-import org.unicode.cldr.icu.RegexManager.PathValueInfo;
-import org.unicode.cldr.icu.RegexManager.RegexResult;
-import org.unicode.cldr.util.Builder;
-import org.unicode.cldr.util.CLDRFile;
-import org.unicode.cldr.util.DtdType;
-import org.unicode.cldr.util.Pair;
-import org.unicode.cldr.util.PatternCache;
-import org.unicode.cldr.util.RegexLookup;
-import org.unicode.cldr.util.RegexLookup.Finder;
-import org.unicode.cldr.util.XMLFileReader;
-import org.unicode.cldr.util.XPathParts;
-
-import com.ibm.icu.text.NumberFormat;
-import com.ibm.icu.text.SimpleDateFormat;
-import com.ibm.icu.util.Calendar;
-import com.ibm.icu.util.GregorianCalendar;
-import com.ibm.icu.util.Output;
-import com.ibm.icu.util.TimeZone;
-import com.ibm.icu.util.ULocale;
-
-/**
- * A mapper that converts supplemental LDML data from CLDR to the ICU data
- * structure.
- */
-public class SupplementalMapper {
-    private static final Pattern ARRAY_INDEX = PatternCache.get("(/[^\\[]++)(?:\\[(\\d++)\\])?$");
-    private static final Map<String, String> enumMap = Builder.with(new HashMap<String, String>())
-        .put("sun", "1").put("mon", "2").put("tues", "3").put("wed", "4")
-        .put("thu", "5").put("fri", "6").put("sat", "7").get();
-    private static final NumberFormat numberFormat = NumberFormat.getInstance();
-    static {
-        numberFormat.setMinimumIntegerDigits(4);
-    }
-
-    private int fifoCounter;
-    private String inputDir;
-    private RegexManager regexMapper;
-    private String debugXPath;
-
-    private enum DateFieldType {
-        from, to;
-
-        public static DateFieldType toEnum(String value) {
-            value = value.toLowerCase();
-            if (value.equals("from") || value.equals("start")) {
-                return from;
-            } else if (value.equals("to") || value.equals("end")) {
-                return to;
-            } else {
-                throw new IllegalArgumentException(value + " is not a valid date field type");
-            }
-        }
-    };
-
-    /**
-     * Comparator for sorting LDML supplementalData xpaths.
-     */
-    private static Comparator<String> supplementalComparator = new Comparator<String>() {
-        private final Pattern FROM_ATTRIBUTE = PatternCache.get("\\[@from=\"([^\"]++)\"]");
-        private final Pattern WEEKDATA = PatternCache.get(
-            "//supplementalData/weekData/(minDays|firstDay|weekendStart|weekendEnd).*");
-
-        @Override
-        public int compare(String arg0, String arg1) {
-            Matcher[] matchers = new Matcher[2];
-            String metazone = "//supplementalData/metaZones/metazoneInfo/timezone";
-            if (arg0.startsWith(metazone) && arg1.startsWith(metazone)) {
-                int startPos = metazone.length();
-                boolean from0 = FROM_ATTRIBUTE.matcher(arg0).find(startPos);
-                boolean from1 = FROM_ATTRIBUTE.matcher(arg1).find(startPos);
-                if (from0 != from1) {
-                    return from0 ? 1 : -1;
-                } else {
-                    // CLDRFile.ldmlComparator doesn't always order the from
-                    // dates correctly, so use a regular string comparison.
-                    return arg0.compareTo(arg1);
-                }
-            } else if (RegexManager.matches(WEEKDATA, arg0, arg1, matchers)) {
-                // Sort weekData elements ourselves because ldmlComparator
-                // sorts firstDay after minDays.
-                String elem0 = matchers[0].group(1);
-                String elem1 = matchers[1].group(1);
-                int compareElem = elem0.compareTo(elem1);
-                if (compareElem == 0) return compareElem;
-                if (elem0.equals("weekendEnd")) {
-                    return 1;
-                } else if (elem1.equals("weekendEnd")) {
-                    return -1;
-                }
-                return compareElem;
-            }
-            return CLDRFile.getComparator(DtdType.supplementalData).compare(arg0, arg1);
-        }
-    };
-
-    /**
-     * SupplementalMapper constructor.
-     *
-     * @param inputDir
-     *            the directory that the input files are in
-     */
-    private SupplementalMapper(String inputDir) {
-        this.inputDir = inputDir;
-    }
-
-    public static SupplementalMapper create(String inputDir) {
-        SupplementalMapper mapper = new SupplementalMapper(inputDir);
-        // Handlers for functions in regex file.
-        RegexManager manager = new RegexManager("ldml2icu_supplemental.txt");
-        manager.addFunction("date", new Function(2) {
-            /**
-             * args[0] = value
-             * args[1] = type (i.e. from/to)
-             */
-            @Override
-            protected String run(String... args) {
-                DateFieldType dft = DateFieldType.toEnum(args[1].trim());
-                return getSeconds(args[0], dft);
-            }
-        });
-        manager.addFunction("algorithm", new Function(1) {
-            @Override
-            protected String run(String... args) {
-                // Insert % into numberingSystems descriptions.
-                String value = args[0];
-                int percentPos = value.lastIndexOf('/') + 1;
-                return value.substring(0, percentPos) + '%' + value.substring(percentPos);
-            }
-        });
-        // Converts a number into a special integer that represents the number in
-        // normalized scientific notation for ICU's RB parser.
-        // Resultant integers are in the form -?xxyyyyyy, where xx is the exponent
-        // offset by 50 and yyyyyy is the coefficient to 5 decimal places, e.g.
-        // 14660000000000 -> 1.466E13 -> 63146600
-        // 0.0001 -> 1E-4 -> 46100000
-        // -123.456 -> -1.23456E-2 -> -48123456
-        // args[0] = number to be converted
-        // args[2] = an (optional) additional exponent offset,
-        // e.g. -2 for converting percentages into fractions.
-        manager.addFunction("exp", new Function(2) {
-            @Override
-            protected String run(String... args) {
-                double value = Double.parseDouble(args[0]);
-                if (value == 0) {
-                    return "0";
-                }
-                int exponent = 50;
-                if (args.length == 2) {
-                    exponent += Integer.parseInt(args[1]);
-                }
-                String sign = value >= 0 ? "" : "-";
-                value = Math.abs(value);
-                while (value >= 10) {
-                    value /= 10;
-                    exponent++;
-                }
-                while (value < 1) {
-                    value *= 10;
-                    exponent--;
-                }
-                if (exponent < 0 || exponent > 99) {
-                    throw new IllegalArgumentException("Exponent out of bounds: " + exponent);
-                }
-                return sign + exponent + Math.round(value * 100000);
-            }
-        });
-        manager.addFunction("ymd", new Function(1) {
-            /**
-             * "Y-M-D" to "Y M D". Year value might be negative.
-             * Also leading zeros are removed.
-             * 
-             * Month value is 1-base unlike month
-             * field in ICU calendar implementation.
-             */
-            @Override
-            protected String run(String... args) {
-                // Extracts fields separated by "-"
-                String[] fields = args[0].replaceAll("([^-]+)-", "$1 ").split(" ");
-                if (fields.length != 3) {
-                    throw new IllegalArgumentException("Not Y-M-D: " + args[0]);
-                }
-                StringBuilder buf = new StringBuilder();
-                for (int i = 0; i < 3; i++) {
-                    // Validate each field as a numeric value,
-                    // emit the value as text without leading zeros.
-                    int val = Integer.parseInt(fields[i]);
-                    if (i != 0) {
-                        buf.append(" ");
-                    }
-                    buf.append(val);
-                }
-                return buf.toString();
-            }
-        });
-        mapper.regexMapper = manager;
-        return mapper;
-    }
-
-    /**
-     * Loads an IcuData object of the specified type.
-     *
-     * @param outputName
-     *            the type of data to be converted
-     * @return an IcuData object
-     */
-    public IcuData fillFromCldr(String outputName) {
-        Map<String, CldrArray> pathValueMap = new HashMap<String, CldrArray>();
-        String category = outputName;
-        if (outputName.equals("supplementalData")) {
-            String[] categories = {
-                //                "characters", explicitly skipped
-//                "coverageLevels", explicitly skipped
-//                "dayPeriods", done in processSupplemental
-//                "genderList", done elsewhere??
-                "languageInfo",
-                //                "likelySubtags", done elsewhere??
-//                "metaZones", done elsewhere??
-//                "numberingSystems", done elsewhere??
-//                "ordinals", done in processSupplemental
-//                "pluralRanges", done in processSupplemental
-//                "plurals", done in processSupplemental
-//                "postalCodeData", deprecated
-                "supplementalData",
-                "subdivisions",
-//                "telephoneCodeData",
-                "/../validity/"
-                //                "windowsZones", done elsewhere??
-            };
-            for (String cat : categories) {
-                loadValues(cat, pathValueMap);
-            }
-        } else {
-            if (outputName.equals("metadata")) category = "supplementalMetadata";
-            loadValues(category, pathValueMap);
-        }
-        regexMapper.addFallbackValues(pathValueMap);
-        IcuData icuData = new IcuData(category + ".xml", outputName, false, enumMap);
-        for (String rbPath : pathValueMap.keySet()) {
-            CldrArray values = pathValueMap.get(rbPath);
-            icuData.addAll(rbPath, values.sortValues(supplementalComparator));
-        }
-        // Final pass through IcuData object to clean up any fallback rbpaths
-        // in the values.
-        // Assume one value per fallback path.
-        for (String rbPath : icuData) {
-            List<String[]> values = icuData.get(rbPath);
-            for (int i = 0, len = values.size(); i < len; i++) {
-                String[] valueArray = values.get(i);
-                if (valueArray.length != 1) continue;
-                String value = valueArray[0];
-                Matcher matcher = ARRAY_INDEX.matcher(value);
-                if (!matcher.matches()) continue;
-                String replacePath = matcher.group(1);
-                List<String[]> replaceValues = icuData.get(replacePath);
-                if (replaceValues == null) {
-                    throw new RuntimeException(replacePath + " is missing from IcuData object.");
-                }
-                int replaceIndex = matcher.groupCount() > 1 ? Integer.valueOf(matcher.group(2)) : 0;
-                if (replaceIndex >= replaceValues.size()) {
-                    throw new RuntimeException(replaceIndex + " out of range of values in " + replacePath);
-                }
-                values.set(i, replaceValues.get(replaceIndex));
-            }
-        }
-        // Hack to add the CLDR version
-        if (outputName.equals("supplementalData")) {
-            icuData.add("/cldrVersion", CLDRFile.GEN_VERSION);
-        }
-        return icuData;
-    }
-
-    /**
-     * Loads values for the specified category from CLDR.
-     *
-     * @param category
-     * @param pathValueMap
-     *            the output map
-     */
-    private void loadValues(String category, Map<String, CldrArray> pathValueMap) {
-        if (category.endsWith("/")) {
-            File dir = new File(inputDir + category);
-            for (File subfile : dir.listFiles()) {
-                String name = subfile.getName();
-                if (name.endsWith(".xml")) {
-                    name = name.substring(0, name.length() - 4);
-                    loadValues(category + name, pathValueMap);
-                }
-            }
-            return;
-        }
-        String inputFile = new File(inputDir, category + ".xml").getAbsolutePath();
-        List<Pair<String, String>> contents = new ArrayList<Pair<String, String>>();
-        XMLFileReader.loadPathValues(inputFile, contents, true);
-        RegexLookup<RegexResult> pathConverter = regexMapper.getPathConverter();
-        fifoCounter = 0; // Helps to keep unsorted rb paths in order.
-        for (Pair<String, String> pair : contents) {
-            Output<Finder> matcher = new Output<Finder>();
-            XPathParts parts = XPathParts.getFrozenInstance(pair.getFirst());
-            String fullPath = parts.toString();
-            // Only convert contributed or higher data
-            if (parts.containsAttributeValue("draft", "provisional") ||
-                parts.containsAttributeValue("draft", "unconfirmed")) {
-                continue;
-            }
-            List<String> debugResults = isDebugXPath(fullPath) ? new ArrayList<String>() : null;
-            Output<String[]> argInfo = new Output<>();
-            RegexResult regexResult = pathConverter.get(fullPath, null, argInfo, matcher, debugResults);
-            if (regexResult == null) {
-                RegexManager.printLookupResults(fullPath, debugResults);
-                continue;
-            }
-            if (debugResults != null) {
-                System.out.println(fullPath + " successfully matched");
-            }
-            // String[] arguments = matcher.value.getInfo();
-            String[] arguments = argInfo.value;
-            String cldrValue = pair.getSecond();
-            for (PathValueInfo info : regexResult) {
-                List<String> values = info.processValues(arguments, cldrValue);
-                // Check if there are any arguments that need splitting for the rbPath.
-                String groupKey = info.processGroupKey(arguments);
-                String baseXPath = info.processXPath(arguments, fullPath);
-                boolean splitNeeded = false;
-                int argIndex = info.getSplitRbPathArg();
-                if (argIndex != -1) {
-                    String[] splitArgs = arguments[argIndex].split("\\s++");
-                    // Only split the first splittable argument needed for each rbPath.
-                    if (splitArgs.length > 1) {
-                        String[] newArgs = arguments.clone();
-                        for (String splitArg : splitArgs) {
-                            newArgs[argIndex] = splitArg;
-                            String rbPath = info.processRbPath(newArgs);
-                            processValues(baseXPath, rbPath, values, groupKey, pathValueMap);
-                        }
-                        splitNeeded = true;
-                    }
-                }
-                // No splitting required, process as per normal.
-                if (!splitNeeded) {
-                    String rbPath = info.processRbPath(arguments);
-                    processValues(baseXPath, rbPath, values, groupKey, pathValueMap);
-                }
-            }
-            fifoCounter++;
-        }
-    }
-
-    /**
-     * Processes values to be added to the ICU data structure
-     *
-     * @param xpath
-     *            the CLDR path that the values came from
-     * @param rbPath
-     *            the rbPath that the values belong to
-     * @param values
-     *            the values
-     * @param groupKey
-     *            the key that the values should be grouped by
-     * @param pathValueMap
-     *            the output map
-     */
-    private void processValues(String xpath, String rbPath, List<String> values,
-        String groupKey, Map<String, CldrArray> pathValueMap) {
-        // The fifo counter needs to be formatted with leading zeros for sorting.
-        if (rbPath.contains("<FIFO>")) {
-            rbPath = rbPath.replace("<FIFO>", '<' + numberFormat.format(fifoCounter) + '>');
-        }
-        CldrArray cldrArray = RegexManager.getCldrArray(rbPath, pathValueMap);
-        cldrArray.put(xpath, values, groupKey);
-    }
-
-    /**
-     * Converts a date string to a pair of millisecond values.
-     *
-     * @param dateStr
-     * @return
-     */
-    private static String getSeconds(String dateStr, DateFieldType type) {
-        long millis;
-        try {
-            millis = getMilliSeconds(dateStr, type);
-        } catch (ParseException ex) {
-            throw new IllegalArgumentException("Could not parse date: " + dateStr, ex);
-        }
-
-        int top = (int) ((millis & 0xFFFFFFFF00000000L) >>> 32); // top
-        int bottom = (int) ((millis & 0x00000000FFFFFFFFL)); // bottom
-
-        if (NewLdml2IcuConverter.DEBUG) {
-            long bot = 0xffffffffL & bottom;
-            long full = ((long) (top) << 32);
-            full += bot;
-            if (full != millis) {
-                System.err.println("Error when converting " + millis + ": " +
-                    top + ", " + bottom + " was converted back into " + full);
-            }
-        }
-
-        return top + " " + bottom;
-    }
-
-    /**
-     * Parses a string date and normalizes it depending on what type of date it
-     * is.
-     *
-     * @param dateStr
-     * @param type
-     *            whether the date is a from or a to
-     * @return
-     * @throws ParseException
-     */
-    private static long getMilliSeconds(String dateStr, DateFieldType type)
-        throws ParseException {
-        int count = countHyphens(dateStr);
-        if (count != 2) {
-            throw new RuntimeException("Tried to parse invalid date: " + dateStr);
-        }
-        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", ULocale.ROOT);
-        TimeZone timezone = TimeZone.getTimeZone("GMT");
-        format.setTimeZone(timezone);
-        Date date = format.parse(dateStr);
-        Calendar calendar = new GregorianCalendar();
-        calendar.setTimeZone(timezone);
-        calendar.setTime(date);
-        switch (type) {
-        case from: {
-            // Set the times for to fields to the beginning of the day.
-            calendar.set(Calendar.HOUR_OF_DAY, 0);
-            calendar.set(Calendar.MINUTE, 0);
-            calendar.set(Calendar.SECOND, 0);
-            calendar.set(Calendar.MILLISECOND, 0);
-            break;
-        }
-        case to: {
-            // Set the times for to fields to the end of the day.
-            calendar.set(Calendar.HOUR_OF_DAY, 23);
-            calendar.set(Calendar.MINUTE, 59);
-            calendar.set(Calendar.SECOND, 59);
-            calendar.set(Calendar.MILLISECOND, 999);
-            break;
-        }
-        }
-        return calendar.getTimeInMillis();
-    }
-
-    /**
-     * Counts the number of hyphens in a string.
-     *
-     * @param str
-     * @return
-     */
-    private static int countHyphens(String str) {
-        // Hyphens in front are actually minus signs.
-        int lastPos = 0;
-        int numHyphens = 0;
-        while ((lastPos = str.indexOf('-', lastPos + 1)) > -1) {
-            numHyphens++;
-        }
-        return numHyphens;
-    }
-
-    /**
-     * Sets xpath to monitor for debugging purposes.
-     * @param debugXPath
-     */
-    public void setDebugXPath(String debugXPath) {
-        this.debugXPath = debugXPath;
-    }
-
-    /**
-     * @param xpath
-     * @return true if the xpath is to be debugged
-     */
-    boolean isDebugXPath(String xpath) {
-        return debugXPath == null ? false : xpath.startsWith(debugXPath);
-    }
-}
diff --git a/tools/java/org/unicode/cldr/icu/TestCldr.java b/tools/java/org/unicode/cldr/icu/TestCldr.java
index 8502d5f..9908dd8 100644
--- a/tools/java/org/unicode/cldr/icu/TestCldr.java
+++ b/tools/java/org/unicode/cldr/icu/TestCldr.java
@@ -35,6 +35,7 @@
 import org.unicode.cldr.util.CldrUtility;
 import org.unicode.cldr.util.Factory;
 import org.unicode.cldr.util.LanguageTagParser;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.PatternCache;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
@@ -82,7 +83,7 @@
 
     String directory;
 
-    Set<String> allLocales = new TreeSet<String>();
+    Set<String> allLocales = new TreeSet<>();
 
     public void TestScripts() {
         Factory cldrFactory = Factory.make(
@@ -92,7 +93,7 @@
             ULocale locale = locales[i];
             logln(locale.toString());
             int[] scriptNumbers = UScript.getCode(locale);
-            Set<String> ICUScripts = new TreeSet<String>();
+            Set<String> ICUScripts = new TreeSet<>();
             for (int j = 0; j < scriptNumbers.length; ++j) {
                 ICUScripts.add(UScript.getShortName(scriptNumbers[j]));
             }
@@ -128,7 +129,7 @@
         }
         scriptBits.clear(UScript.COMMON);
         scriptBits.clear(UScript.INHERITED);
-        Set<String> scripts = new TreeSet<String>();
+        Set<String> scripts = new TreeSet<>();
         for (int j = 0; j < scriptBits.size(); ++j) {
             if (scriptBits.get(j)) {
                 scripts.add(UScript.getShortName(j));
@@ -156,7 +157,7 @@
          * }
          */
         // only get ICU's locales
-        Set<String> s = new TreeSet<String>();
+        Set<String> s = new TreeSet<>();
         addLocales(NumberFormat.getAvailableULocales(), s);
         addLocales(DateFormat.getAvailableULocales(), s);
         addLocales(Collator.getAvailableULocales(), s);
@@ -183,7 +184,7 @@
         // oLocale = uLocale.toLocale();
 
         File f = new File(directory, localeName + ".xml");
-        logln("Testing " + f.getCanonicalPath());
+        logln("Testing " + PathUtilities.getNormalizedPathString(f));
         SAX.parse(f, DEFAULT_HANDLER);
     }
 
@@ -196,15 +197,15 @@
     // ============ SAX Handler Infrastructure ============
     enum AttributeName {
         numberType, dateType, timeType, date, field, zone, parse, input, draft
-    };
+    }
 
     abstract public class Handler {
 
-        Map<AttributeName, String> settings = new TreeMap<AttributeName, String>();
+        Map<AttributeName, String> settings = new TreeMap<>();
 
         String name;
 
-        List<ULocale> currentLocales = new ArrayList<ULocale>();
+        List<ULocale> currentLocales = new ArrayList<>();
 
         int failures = 0;
 
@@ -247,7 +248,7 @@
             for (Iterator<AttributeName> it = settings.keySet().iterator(); it
                 .hasNext();) {
                 AttributeName attributeName = it.next();
-                String attributeValue = (String) settings.get(attributeName);
+                String attributeValue = settings.get(attributeName);
                 temp += " " + attributeName + "=<" + attributeValue + ">";
             }
             logln(temp + "]");
@@ -290,7 +291,7 @@
     public Handler getHandler(String name, Attributes attributes) {
         if (DEBUG)
             logln("Creating Handler: " + name);
-        Handler result = (Handler) RegisteredHandlers.get(name);
+        Handler result = RegisteredHandlers.get(name);
         if (result == null)
             logln("Unexpected test type: " + name);
         else {
@@ -304,7 +305,7 @@
         RegisteredHandlers.put(name, handler);
     }
 
-    Map<String, Handler> RegisteredHandlers = new HashMap<String, Handler>();
+    Map<String, Handler> RegisteredHandlers = new HashMap<>();
 
     // ============ Statics for Date/Number Support ============
 
@@ -339,6 +340,7 @@
 
     {
         addHandler("collation", new Handler() {
+            @Override
             public void handleResult(ULocale currentLocale, String value) {
                 Collator col = Collator.getInstance(currentLocale);
                 String lastLine = "";
@@ -370,6 +372,7 @@
         addHandler("number", new Handler() {
             String numberType = null;
 
+            @Override
             public void handleResult(ULocale locale, String result) {
                 NumberFormat nf = null;
                 double v = Double.NaN;
@@ -435,6 +438,7 @@
 
             int timeFormat = 0;
 
+            @Override
             public void handleResult(ULocale locale, String result)
                 throws ParseException {
                 Date date = new Date();
@@ -515,6 +519,7 @@
 
             String pattern = "";
 
+            @Override
             public void handleResult(ULocale locale, String result)
                 throws ParseException {
                 for (Iterator<AttributeName> it = settings.keySet().iterator(); it
@@ -575,6 +580,7 @@
 
         Handler handler;
 
+        @Override
         public void startElement(String uri, String localName, String qName,
             Attributes attributes) throws SAXException {
             // data.put(new ContextStack(contextStack), lastChars);
@@ -598,6 +604,7 @@
             }
         }
 
+        @Override
         public void endElement(String uri, String localName, String qName)
             throws SAXException {
             try {
@@ -615,6 +622,7 @@
         }
 
         // Have to hack around the fact that the character data might be in pieces
+        @Override
         public void characters(char[] ch, int start, int length)
             throws SAXException {
             try {
@@ -630,20 +638,24 @@
 
         // just for debugging
 
+        @Override
         public void notationDecl(String name, String publicId, String systemId)
             throws SAXException {
             logln("notationDecl: " + name + ", " + publicId + ", " + systemId);
         }
 
+        @Override
         public void processingInstruction(String target, String data)
             throws SAXException {
             logln("processingInstruction: " + target + ", " + data);
         }
 
+        @Override
         public void skippedEntity(String name) throws SAXException {
             logln("skippedEntity: " + name);
         }
 
+        @Override
         public void unparsedEntityDecl(String name, String publicId,
             String systemId, String notationName) throws SAXException {
             logln("unparsedEntityDecl: " + name + ", " + publicId + ", " + systemId
@@ -651,4 +663,4 @@
         }
 
     };
-}
\ No newline at end of file
+}
diff --git a/tools/java/org/unicode/cldr/icu/ldml2icu_dir_mapping.txt b/tools/java/org/unicode/cldr/icu/ldml2icu_dir_mapping.txt
deleted file mode 100644
index 4c32723..0000000
--- a/tools/java/org/unicode/cldr/icu/ldml2icu_dir_mapping.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-# Mapping of ICU paths to their respective folders.
-# Any leftover paths will be written to the locales folder.
-# '*' means that the path will be written to all folders.
-# Used by LDMLConverter.
-
-/Keys/                   ; lang
-/Languages/              ; lang
-/LanguagesShort/         ; lang
-/Scripts/                ; lang
-/Scripts%stand-alone/    ; lang
-/Types/                  ; lang
-/Variants/               ; lang
-/codePatterns/           ; lang
-/annotationPatterns/     ; lang
-/localeDisplayPattern/   ; lang
-/Countries/              ; region
-/Currencies/             ; curr
-/CurrencyPlurals/        ; curr
-/CurrencyUnitPatterns/   ; curr
-/currencySpacing/        ; curr
-/zoneStrings/            ; zone
-/CurrencyMap/            ; curr
-/CurrencyMeta/           ; curr
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/icu/ldml2icu_header.txt b/tools/java/org/unicode/cldr/icu/ldml2icu_header.txt
deleted file mode 100644
index a9bd38f..0000000
--- a/tools/java/org/unicode/cldr/icu/ldml2icu_header.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html#License
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/icu/ldml2icu_locale.txt b/tools/java/org/unicode/cldr/icu/ldml2icu_locale.txt
deleted file mode 100644
index 61d87f5..0000000
--- a/tools/java/org/unicode/cldr/icu/ldml2icu_locale.txt
+++ /dev/null
@@ -1,285 +0,0 @@
-# ldml2icu_locale.txt
-#
-# Copyright © 2011-2016 Unicode, Inc.
-# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
-# For terms of use, see http://www.unicode.org/copyright.html
-#
-# Used by LdmlLocaleMapper.
-# Data-driven file for mapping LDML locale paths to ICU paths.
-# See ldml2icu_readme.txt for a detailed explanation of this file.
-
-# Variables
-# Attribute value
-%A=[^"']++
-# Word
-%W=[\w\-]++
-# Greedy word match
-%G=[\w\-]+
-# Number match
-%N=\d++
-# The default numbering system to be used.
-%D=//ldml/numbers/defaultNumberingSystem
-
-# Main locale data
-
-# Aliases
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/alias[@source="locale"][@path="../calendar[@type='(%A)']"]   ; /calendar/$1lo ; values=/LOCALE/calendar/$2
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/dayPeriods/alias[@source="locale"][@path="../../calendar[@type='(%A)']/dayPeriods"] ; /calendar/$1/AmPmMarkers:alias ; values=/LOCALE/calendar/$2/AmPmMarkers
-     ; /calendar/$1/AmPmMarkersNarrow:alias ; values=/LOCALE/calendar/$2/AmPmMarkersNarrow
-     ; /calendar/$1/NoonMarker:alias ; values=/LOCALE/calendar/$2/NoonMarker
-     ; /calendar/$1/NoonMarkerNarrow:alias ; values=/LOCALE/calendar/$2/NoonMarkerNarrow
-
-//ldml/dates/calendars/calendar[@type="gregorian"]/dayPeriods/dayPeriodContext[@type="format"]/dayPeriodWidth[@type="wide"]/alias[@source="locale"][@path="../dayPeriodWidth[@type='abbreviated']"] ; /calendar/gregorian/AmPmMarkers:alias ; values=/LOCALE/calendar/gregorian/AmPmMarkersAbbr
-//ldml/dates/calendars/calendar[@type="gregorian"]/dayPeriods/dayPeriodContext[@type="format"]/dayPeriodWidth[@type="narrow"]/alias[@source="locale"][@path="../dayPeriodWidth[@type='abbreviated']"] ; /calendar/gregorian/AmPmMarkersNarrow:alias ; values=/LOCALE/calendar/gregorian/AmPmMarkersAbbr
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/(eras|quarters|cyclicNameSets|monthPatterns)/alias[@source="locale"][@path="../../%W[@type='(%A)']/%W"] ; /calendar/$1/$2:alias ; values=/LOCALE/calendar/$3/$2
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/eras/eraNarrow/alias[@source="locale"][@path="../eraAbbr"] ; /calendar/$1/eras/narrow:alias ; values=/LOCALE/calendar/$1/eras/abbreviated
-//ldml/dates/calendars/calendar[@type="(%A)"]/eras/eraNames/alias[@source="locale"][@path="../eraAbbr"] ; /calendar/$1/eras/wide:alias ; values=/LOCALE/calendar/$1/eras/abbreviated
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/(cyclicNameSet)s/\2[@type="(%W)"]/alias[@source="locale"][@path="../\2[@type='(%A)']"]   ; /calendar/$1/$2s/$3:alias ; values=/LOCALE/calendar/$1/$2s/$4
-//ldml/dates/calendars/calendar[@type="(%A)"]/(cyclicNameSet)s/\2[@type="(%W)"]/(cyclicName)Context[@type="(%W)"]/\4Width[@type="(%W)"]/alias[@source="locale"][@path="../../../\4Set[@type='(%A)']/\4Context[@type='(%A)']/\4Width[@type='(%A)']"]   ; /calendar/$1/$2s/$3/$5/$6:alias ; values=/LOCALE/calendar/$1/$2s/$7/$8/$9
-//ldml/dates/calendars/calendar[@type="(%A)"]/(cyclicNameSet)s/\2[@type="(%W)"]/(cyclicName)Context[@type="(%W)"]/\4Width[@type="(%W)"]/alias[@source="locale"][@path="../\4Width[@type='(%A)']"]   ; /calendar/$1/$2s/$3/$5/$6:alias ; values=/LOCALE/calendar/$1/$2s/$3/$5/$7
-//ldml/dates/calendars/calendar[@type="(%A)"]/(cyclicNameSet|monthPattern|quarter)s/\2Context[@type="(%W)"]/\2Width[@type="(%W)"]/alias[@source="locale"][@path="../../\2Context[@type='(%W)']/\2Width[@type='(%A)']"]   ; /calendar/$1/$2s/$3/$4:alias ; values=/LOCALE/calendar/$1/$2s/$5/$6
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/(day|month)s/alias[@source="locale"][@path="../../%W[@type='(%A)']/%W"] ; /calendar/$1/$2Names:alias ; values=/LOCALE/calendar/$3/$2Names
-//ldml/dates/calendars/calendar[@type="(%A)"]/(day|month)s/\2Context[@type="(%W)"]/\2Width[@type="(%W)"]/alias[@source="locale"][@path="../\2Width[@type='(%A)']"]   ; /calendar/$1/$2Names/$3/$4:alias ; values=/LOCALE/calendar/$1/$2Names/$3/$5
-//ldml/dates/calendars/calendar[@type="(%A)"]/(day|month)s/\2Context[@type="(%W)"]/\2Width[@type="(%W)"]/alias[@source="locale"][@path="../../\2Context[@type='(%W)']/\2Width[@type='(%A)']"]   ; /calendar/$1/$2Names/$3/$4:alias ; values=/LOCALE/calendar/$1/$2Names/$5/$6
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/(monthPattern|quarter)s/\2Context[@type="(%W)"]/\2Width[@type="(%W)"]/alias[@source="locale"][@path="../\2Width[@type='(%A)']"]   ; /calendar/$1/$2s/$3/$4:alias ; values=/LOCALE/calendar/$1/$2s/$3/$5
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/dateFormats/alias[@source="locale"][@path="../../calendar[@type='(%A)']/dateFormats"]   ; /calendar/$1/DateTimePatterns:alias ; values=/LOCALE/calendar/$2/DateTimePatterns
-//ldml/dates/calendars/calendar[@type="(%A)"]/dateTimeFormats/alias[@source="locale"][@path="../../calendar[@type='(%A)']/dateTimeFormats"]
-     ; /calendar/$1/availableFormats:alias ; values=/LOCALE/calendar/$2/availableFormats
-     ; /calendar/$1/appendItems:alias ; values=/LOCALE/calendar/$2/appendItems
-     ; /calendar/$1/intervalFormats:alias ; values=/LOCALE/calendar/$2/intervalFormats
-//ldml/dates/calendars/calendar[@type="(%A)"]/dateTimeFormats/(availableFormats|appendItems|intervalFormats)/alias[@source="locale"][@path="../../../calendar[@type='(%A)']/dateTimeFormats/\2"]   ; /calendar/$1/$2:alias ; values=/LOCALE/calendar/$3/$2
-
-//ldml/units/unitLength[@type="long"]/alias[@source="locale"][@path="../unitLength[@type='short']"] ; /units:alias ; values=/LOCALE/unitsShort
-//ldml/units/unitLength[@type="narrow"]/alias[@source="locale"][@path="../unitLength[@type='short']"] ; /unitsNarrow:alias ; values=/LOCALE/unitsShort
-
-//ldml/listPatterns/listPattern[@type="(%A)"]/alias[@source="locale"][@path="../listPattern"]
-     ; /listPattern/$1/start:alias ; values=/LOCALE/listPattern/standard/start
-     ; /listPattern/$1/middle:alias ; values=/LOCALE/listPattern/standard/middle
-     ; /listPattern/$1/end:alias ; values=/LOCALE/listPattern/standard/end
-     ; /listPattern/$1/2:alias ; values=/LOCALE/listPattern/standard/2
-//ldml/listPatterns/listPattern[@type="(%A)"]/alias[@source="locale"][@path="../listPattern[@type='(%A)']"]
-     ; /listPattern/$1/start:alias ; values=/LOCALE/listPattern/$2/start
-     ; /listPattern/$1/middle:alias ; values=/LOCALE/listPattern/$2/middle
-     ; /listPattern/$1/end:alias ; values=/LOCALE/listPattern/$2/end
-     ; /listPattern/$1/2:alias ; values=/LOCALE/listPattern/$2/2
-
-//ldml/numbers/currencyFormats[@numberSystem="(%A)"]/currencyFormatLength/currencyFormat[@type="accounting"]/alias[@source="locale"][@path="../(%W)[@type='standard']"] ; /NumberElements/$1/patterns/accountingFormat:alias ; values=/LOCALE/NumberElements/$1/patterns/$2
-
-# Characters
-
-//ldml/characters/exemplarCharacters[@type="auxiliary"] ; /AuxExemplarCharacters
-//ldml/characters/exemplarCharacters[@type="currencySymbol"] ; /ExemplarCharactersCurrency
-//ldml/characters/exemplarCharacters[@type="index"] ; /ExemplarCharactersIndex
-//ldml/characters/exemplarCharacters[@type="punctuation"] ; /ExemplarCharactersPunctuation
-//ldml/characters/exemplarCharacters[@type="numbers"] ; /ExemplarCharactersNumbers
-//ldml/characters/exemplarCharacters ; /ExemplarCharacters
-
-//ldml/characters/ellipsis[@type="(%A)"] ; /Ellipsis/$1
-//ldml/characters/moreInformation      ;   /MoreInformation
-//ldml/characters/special/icu:scripts/icu:script[@type="%N"]      ;   /LocaleScript
-
-//ldml/characters/parseLenients[@scope="(%A)"][@level="(%A)"]/parseLenient[@sample="(%A)"] ; /parse/$1/$2
-
-characters/parseLenients/parseLenient[@sample='%anyAttribute'][@scope='%anyAttribute']"/>
-characters/parseLenients/parseLenient[@sample='%anyAttribute'][@level='%anyAttribute']"/>
-characters/parseLenients/parseLenient[@sample='%anyAttribute'][@scope='%anyAttribute'][@level='%anyAttribute']"/>
-
-
-# Defaults
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/(monthPattern)s/\2Context[@type="(%W)"]/\2Width[@type="(%W)"]/\2[@type="(%W)"]   ; /calendar/$1/$2s/$3/$4/$5
-
-# Dates
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/cyclicNameSets/cyclicNameSet[@type="(%A)"]/cyclicNameContext[@type="(%A)"]/cyclicNameWidth[@type="(%A)"]/cyclicName[@type="(%A)"] ; /calendar/$1/cyclicNameSets/$2/$3/$4 ;
-# This is a weird edge case. When the number attribute is present in the xpath,
-# its value needs to be grouped together with the xpath value in its own special
-# array, which is treated like just another value in /DateTimePatterns.
-# The group keyword is used here to specify that values from the same xpath
-# should be grouped into their own separate array.
-# So far (Jan 2014), this only happens in the Chinese calendar for ja/zh/zh_Hant
-# and the Hebrew calendar for he, and all calendars for haw (which has numbers="M=romanlow").
-//ldml/dates/calendars/calendar[@type="(%A)"]/dateFormats/dateFormatLength[@type="(%A)"]/dateFormat[@type="%A"]/pattern[@type="%A"][@numbers="(%A)"] ; /calendar/$1/DateTimePatterns ;  values="{value}" $3 ; group=$2
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/((date|time|dateTime)Format)s/\2Length[@type="(%A)"]/\2[@type="%A"]/pattern[@type="%A"]$ ; /calendar/$1/DateTimePatterns
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/dateTimeFormats/appendItems/appendItem[@request="(%A)"] ; /calendar/$1/appendItems/$2
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/dateTimeFormats/availableFormats/dateFormatItem[@id="(%A)"]$ ; /calendar/$1/availableFormats/$2
-//ldml/dates/calendars/calendar[@type="(%A)"]/dateTimeFormats/availableFormats/dateFormatItem[@id="(%A)"][@count="(%A)"]$ ; /calendar/$1/availableFormats/$2/$3
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/dateTimeFormats/intervalFormats/intervalFormatItem[@id="(%A)"]/greatestDifference[@id="(%A)"]$ ; /calendar/$1/intervalFormats/$2/$3
-//ldml/dates/calendars/calendar[@type="(%A)"]/dateTimeFormats/intervalFormats/intervalFormatFallback ; /calendar/$1/intervalFormats/fallback
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/dayPeriods/dayPeriodContext[@type="format"]/dayPeriodWidth[@type="wide"]/dayPeriod[@type="(am|pm)"][@alt="(%A)"] ; /calendar/$1/AmPmMarkers%$3
-//ldml/dates/calendars/calendar[@type="(%A)"]/dayPeriods/dayPeriodContext[@type="format"]/dayPeriodWidth[@type="narrow"]/dayPeriod[@type="(am|pm)"][@alt="(%A)"] ; /calendar/$1/AmPmMarkersNarrow%$3
-//ldml/dates/calendars/calendar[@type="(%A)"]/dayPeriods/dayPeriodContext[@type="format"]/dayPeriodWidth[@type="abbreviated"]/dayPeriod[@type="(am|pm)"][@alt="(%A)"] ; /calendar/$1/AmPmMarkersAbbr%$3
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/dayPeriods/dayPeriodContext[@type="format"]/dayPeriodWidth[@type="wide"]/dayPeriod[@type="(am|pm)"] ; /calendar/$1/AmPmMarkers
-//ldml/dates/calendars/calendar[@type="(%A)"]/dayPeriods/dayPeriodContext[@type="format"]/dayPeriodWidth[@type="abbreviated"]/dayPeriod[@type="(am|pm)"] ; /calendar/$1/AmPmMarkersAbbr
-//ldml/dates/calendars/calendar[@type="(%A)"]/dayPeriods/dayPeriodContext[@type="format"]/dayPeriodWidth[@type="narrow"]/dayPeriod[@type="(am|pm)"] ; /calendar/$1/AmPmMarkersNarrow
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/dayPeriods/dayPeriodContext[@type="(stand-alone)"]/dayPeriodWidth[@type="(%A)"]/dayPeriod[@type="(am|pm)"][@alt="(%A)"] ; /calendar/$1/dayPeriod/$2/$3/$4%$5
-//ldml/dates/calendars/calendar[@type="(%A)"]/dayPeriods/dayPeriodContext[@type="(stand-alone)"]/dayPeriodWidth[@type="(%A)"]/dayPeriod[@type="(am|pm)"] ; /calendar/$1/dayPeriod/$2/$3/$4
-//ldml/dates/calendars/calendar[@type="(%A)"]/dayPeriods/dayPeriodContext[@type="(%A)"]/dayPeriodWidth[@type="(%A)"]/dayPeriod[@type="(?!am|pm)(%A)"][@alt="(%A)"] ; /calendar/$1/dayPeriod/$2/$3/$4%$5
-//ldml/dates/calendars/calendar[@type="(%A)"]/dayPeriods/dayPeriodContext[@type="(%A)"]/dayPeriodWidth[@type="(%A)"]/dayPeriod[@type="(?!am|pm)(%A)"] ; /calendar/$1/dayPeriod/$2/$3/$4
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/eras/eraNarrow/era[@type="(%A)"][@alt="(%A)"] ; /calendar/$1/eras/narrow%$3
-//ldml/dates/calendars/calendar[@type="(%A)"]/eras/eraAbbr/era[@type="(%A)"][@alt="(%A)"] ; /calendar/$1/eras/abbreviated%$3
-//ldml/dates/calendars/calendar[@type="(%A)"]/eras/eraNames/era[@type="(%A)"][@alt="(%A)"] ; /calendar/$1/eras/wide%$3
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/eras/eraNarrow/era[@type="(%A)"] ; /calendar/$1/eras/narrow
-//ldml/dates/calendars/calendar[@type="(%A)"]/eras/eraAbbr/era[@type="(%A)"] ; /calendar/$1/eras/abbreviated
-//ldml/dates/calendars/calendar[@type="(%A)"]/eras/eraNames/era[@type="(%A)"] ; /calendar/$1/eras/wide
-
-//ldml/dates/calendars/calendar[@type="(%A)"]/(day|month)s/%W[@type="(%A)"]/%W[@type="(%A)"]/%W[@type="(%A)"]([@yeartype="(%A)"])? ; /calendar/$1/$2Names/$3/$4
-//ldml/dates/calendars/calendar[@type="(%A)"]/(quarters)/%W[@type="(%A)"]/%W[@type="(%A)"]/%W[@type="(?:%A)"] ; /calendar/$1/$2/$3/$4
-
-//ldml/dates/fields/field[@type="(%A)"]/displayName[@alt="(%A)"] ; /fields/$1/dn%$2
-//ldml/dates/fields/field[@type="(%A)"]/displayName ; /fields/$1/dn
-//ldml/dates/fields/field[@type="(%A)"]/relative[@type="(%A)"] ; /fields/$1/relative/"$2"
-//ldml/dates/fields/field[@type="(%A)"]/relativePeriod ; /fields/$1/relativePeriod
-//ldml/dates/fields/field[@type="(%A)"]/relativeTime[@type="(%A)"]/relativeTimePattern[@count="(%A)"] ; /fields/$1/relativeTime/$2/$3
-
-//ldml/dates/fields/field[@type="(%A)"]/alias[@source="locale"][@path="../field[@type='(%A)']"]
-     ; /fields/$1:alias ; values=/LOCALE/fields/$2
-
-//ldml/dates/timeZoneNames/regionFormat[@type="daylight"]   ; /zoneStrings/regionFormatDaylight
-//ldml/dates/timeZoneNames/regionFormat[@type="standard"]   ; /zoneStrings/regionFormatStandard
-//ldml/dates/timeZoneNames/(%GFormat)   ; /zoneStrings/$1
-
-//ldml/dates/timeZoneNames/metazone[@type="(%A)"]/(\w)%W/(\w)%W ; /zoneStrings/"meta:$1"/$2$3
-
-//ldml/dates/timeZoneNames/zone[@type="(%W)/(%W)"]/exemplarCity[@alt="(%A)"] ; /zoneStrings/"$1:$2"/ec%$3
-//ldml/dates/timeZoneNames/zone[@type="(%W)/(%W)"]/exemplarCity ; /zoneStrings/"$1:$2"/ec
-//ldml/dates/timeZoneNames/zone[@type="(%W)/(%W)"]/(\w)%W/(\w)%W ; /zoneStrings/"$1:$2"/$3$4
-//ldml/dates/timeZoneNames/zone[@type="(%W)/(%W)/(%W)"]/exemplarCity[@alt="(%A)"] ; /zoneStrings/"$1:$2:$3"/ec%$4
-//ldml/dates/timeZoneNames/zone[@type="(%W)/(%W)/(%W)"]/exemplarCity ; /zoneStrings/"$1:$2:$3"/ec
-
-# Locale Display Names
-
-//ldml/localeDisplayNames/codePatterns/codePattern[@type="(%A)"] ; /codePatterns/$1
-//ldml/localeDisplayNames/annotationPatterns/annotationPattern[@type="(%A)"] ; /codePatterns/$1
-
-//ldml/localeDisplayNames/keys/key[@type="(%A)"] ; /Keys/$1
-
-//ldml/localeDisplayNames/languages/language[@type="(%A)"][@alt="(%A)"] ; /Languages%$2/$1
-//ldml/localeDisplayNames/languages/language[@type="(%A)"] ; /Languages/$1
-
-//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern ; /localeDisplayPattern/keyTypePattern
-//ldml/localeDisplayNames/localeDisplayPattern/localePattern ; /localeDisplayPattern/pattern
-//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator ; /localeDisplayPattern/separator
-
-//ldml/localeDisplayNames/measurementSystemNames/measurementSystemName[@type="(%A)"] ; /measurementSystemNames/$1
-
-//ldml/localeDisplayNames/scripts/script[@type="(%A)"][@alt="(%A)"] ; /Scripts%$2/$1
-//ldml/localeDisplayNames/scripts/script[@type="(%A)"] ; /Scripts/$1
-
-//ldml/localeDisplayNames/territories/territory[@type="(%A)"][@alt="(%A)"] ; /Countries%$2/$1
-//ldml/localeDisplayNames/territories/territory[@type="(%A)"] ; /Countries/$1
-
-//ldml/localeDisplayNames/transformNames/transformName[@type="(%W)"] ; /transformNames/$1
-
-//ldml/localeDisplayNames/types/type[@key="(%A)"][@type="(%A)"][@alt="(%A)"] ; /Types%$3/$1/$2
-//ldml/localeDisplayNames/types/type[@key="(%A)"][@type="(%A)"] ; /Types/$1/$2
-
-//ldml/localeDisplayNames/variants/variant[@type="(%A)"][@alt="(%A)"] ; /Variants%$2/$1
-//ldml/localeDisplayNames/variants/variant[@type="(%A)"] ; /Variants/$1
-
-# Numbers
-
-//ldml/numbers/currencies/currency[@type="(%A)"]/displayName[@count="(%A)"] ; /CurrencyPlurals/$1/$2
-
-//ldml/numbers/currencies/currency[@type="(%W)"]/symbol[@alt="(%A)"] ; /Currencies%$2/$1
-//ldml/numbers/currencies/currency[@type="(%W)"]/pattern[@type="standard"]; /Currencies/$1/ ; fallback=//ldml/numbers/currencyFormats[@numberSystem="%D"]/currencyFormatLength/currencyFormat[@type="standard"]/pattern[@type="standard"]
-//ldml/numbers/currencies/currency[@type="(%W)"]/decimal ; /Currencies/$1/ ; fallback=//ldml/numbers/symbols[@numberSystem="%D"]/decimal
-//ldml/numbers/currencies/currency[@type="(%W)"]/group ; /Currencies/$1/ ; fallback=//ldml/numbers/symbols[@numberSystem="%D"]/group
-//ldml/numbers/currencies/currency[@type="(%W)"]/symbol ; /Currencies/$1 ; fallback=$1
-//ldml/numbers/currencies/currency[@type="(%W)"]/displayName ; /Currencies/$1 ; fallback=$1
-
-
-//ldml/numbers/currencyFormats[@numberSystem="%D"]/currencySpacing/(%W)/(%W)   ; /currencySpacing/$1/$2
-//ldml/numbers/currencyFormats[@numberSystem="%D"]/unitPattern[@count="(%W)"] ; /CurrencyUnitPatterns/$1
-
-//ldml/numbers/defaultNumberingSystem[@alt="(%A)"] ; /NumberElements/default_$1
-//ldml/numbers/defaultNumberingSystem ; /NumberElements/default
-//ldml/numbers/minimumGroupingDigits ; /NumberElements/minimumGroupingDigits
-//ldml/numbers/otherNumberingSystems/(%W)   ; /NumberElements/$1
-
-//ldml/numbers/symbols[@numberSystem="(%A)"]/(%W)$ ; /NumberElements/$1/symbols/$2
-//ldml/numbers/(%GFormat)s[@numberSystem="(%W)"]/\1Length/\1[@type="standard"]/pattern[@type="standard"] ; /NumberElements/$2/patterns/$1
-//ldml/numbers/currencyFormats[@numberSystem="(%W)"]/currencyFormatLength/currencyFormat[@type="accounting"]/pattern[@type="standard"] ; /NumberElements/$1/patterns/accountingFormat
-//ldml/numbers/currencyFormats[@numberSystem="(%W)"]/currencyFormatLength[@type="short"]/currencyFormat[@type="standard"]/pattern[@type="(%N)"][@count="(%W)"] ; /NumberElements/$1/patternsShort/currencyFormat/$2/$3
-//ldml/numbers/decimalFormats[@numberSystem="(%W)"]/decimalFormatLength[@type="short"]/decimalFormat[@type="standard"]/pattern[@type="(%N)"][@count="(%W)"] ; /NumberElements/$1/patternsShort/decimalFormat/$2/$3
-//ldml/numbers/decimalFormats[@numberSystem="(%W)"]/decimalFormatLength[@type="long"]/decimalFormat[@type="standard"]/pattern[@type="(%N)"][@count="(%W)"] ; /NumberElements/$1/patternsLong/decimalFormat/$2/$3
-
-//ldml/numbers/miscPatterns[@numberSystem="(%W)"]/pattern[@type="(%W)"] ; /NumberElements/$1/miscPatterns/$2
-//ldml/numbers/minimalPairs/ordinalMinimalPairs[@ordinal="(%A)"] ; /NumberElements/minimalPairs/ordinal/$1
-//ldml/numbers/minimalPairs/pluralMinimalPairs[@count="(%A)"] ; /NumberElements/minimalPairs/plural/$1
-
-# Misc
-
-//ldml/contextTransforms/contextTransformUsage[@type="(%W)"]/contextTransform[@type="uiListOrMenu"] ; /contextTransforms/$1:intvector ; fallback=0
-//ldml/contextTransforms/contextTransformUsage[@type="(%W)"]/contextTransform[@type="stand-alone"] ; /contextTransforms/$1:intvector ; fallback=0
-
-//ldml/delimiters/(%W) ; /delimiters/$1
-
-//ldml/layout/orientation/(%G)Order ; /layout/$1s
-
-//ldml/listPatterns/listPattern/listPatternPart[@type="(%A)"] ; /listPattern/standard/$1
-//ldml/listPatterns/listPattern[@type="(%A)"]/listPatternPart[@type="(%A)"] ; /listPattern/$1/$2
-
-//ldml/units/unitLength[@type="narrow"]/unit[@type="(\w++)-(%A)"]/displayName ; /unitsNarrow/$1/$2/dnam
-//ldml/units/unitLength[@type="short"]/unit[@type="(\w++)-(%A)"]/displayName ; /unitsShort/$1/$2/dnam
-//ldml/units/unitLength[@type="long"]/unit[@type="(\w++)-(%A)"]/displayName ; /units/$1/$2/dnam
-
-//ldml/units/unitLength[@type="narrow"]/unit[@type="(\w++)-(%A)"]/unitPattern[@count="(%A)"] ; /unitsNarrow/$1/$2/$3
-//ldml/units/unitLength[@type="short"]/unit[@type="(\w++)-(%A)"]/unitPattern[@count="(%A)"] ; /unitsShort/$1/$2/$3
-//ldml/units/unitLength[@type="long"]/unit[@type="(\w++)-(%A)"]/unitPattern[@count="(%A)"] ; /units/$1/$2/$3
-
-//ldml/units/unitLength[@type="narrow"]/compoundUnit[@type="(%A)"]/compoundUnitPattern1 ; /unitsNarrow/compound1/$1
-//ldml/units/unitLength[@type="short"]/compoundUnit[@type="(%A)"]/compoundUnitPattern1 ; /unitsShort/compound1/$1
-//ldml/units/unitLength[@type="long"]/compoundUnit[@type="(%A)"]/compoundUnitPattern1 ; /units/compound1/$1
-
-//ldml/units/unitLength[@type="narrow"]/compoundUnit[@type="(%A)"]/compoundUnitPattern1[@count="(%A)"] ; /unitsNarrow/compoundPlurals/$1/$2
-//ldml/units/unitLength[@type="short"]/compoundUnit[@type="(%A)"]/compoundUnitPattern1[@count="(%A)"] ; /unitsShort/compoundPlurals/$1/$2
-//ldml/units/unitLength[@type="long"]/compoundUnit[@type="(%A)"]/compoundUnitPattern1[@count="(%A)"] ; /units/compoundPlurals/$1/$2
-
-//ldml/units/unitLength[@type="narrow"]/compoundUnit[@type="(%A)"]/compoundUnitPattern ; /unitsNarrow/compound/$1
-//ldml/units/unitLength[@type="short"]/compoundUnit[@type="(%A)"]/compoundUnitPattern ; /unitsShort/compound/$1
-//ldml/units/unitLength[@type="long"]/compoundUnit[@type="(%A)"]/compoundUnitPattern ; /units/compound/$1
-
-//ldml/units/unitLength[@type="narrow"]/compoundUnit[@type="(%A)"]/unitPrefixPattern ; /unitsNarrow/prefix/$1
-//ldml/units/unitLength[@type="short"]/compoundUnit[@type="(%A)"]/unitPrefixPattern ; /unitsShort/prefix/$1
-//ldml/units/unitLength[@type="long"]/compoundUnit[@type="(%A)"]/unitPrefixPattern ; /units/prefix/$1
-
-//ldml/units/unitLength[@type="narrow"]/coordinateUnit/displayName ; /unitsNarrow/coordinate/dnam
-//ldml/units/unitLength[@type="short"]/coordinateUnit/displayName ; /unitsShort/coordinate/dnam
-//ldml/units/unitLength[@type="long"]/coordinateUnit/displayName ; /units/coordinate/dnam
-
-//ldml/units/unitLength[@type="narrow"]/coordinateUnit/coordinateUnitPattern[@type="(%A)"] ; /unitsNarrow/coordinate/$1
-//ldml/units/unitLength[@type="short"]/coordinateUnit/coordinateUnitPattern[@type="(%A)"] ; /unitsShort/coordinate/$1
-//ldml/units/unitLength[@type="long"]/coordinateUnit/coordinateUnitPattern[@type="(%A)"] ; /units/coordinate/$1
-
-//ldml/units/unitLength[@type="narrow"]/unit[@type="(\w++)-(%A)"]/perUnitPattern ; /unitsNarrow/$1/$2/per
-//ldml/units/unitLength[@type="short"]/unit[@type="(\w++)-(%A)"]/perUnitPattern ; /unitsShort/$1/$2/per
-//ldml/units/unitLength[@type="long"]/unit[@type="(\w++)-(%A)"]/perUnitPattern ; /units/$1/$2/per
-
-//ldml/units/durationUnit[@type="(%A)"]/durationUnitPattern$ ; /durationUnits/$1
-
-//ldml/units/unitLength[@type="narrow"]/unit[@type="(\w++)-(%A)"]/alias[@source="locale"][@path="../unit[@type='(\w++)-(%A)']"] ; /unitsNarrow/$1/$2:alias ; values=/LOCALE/unitsNarrow/$3/$4
-//ldml/units/unitLength[@type="short"]/unit[@type="(\w++)-(%A)"]/alias[@source="locale"][@path="../unit[@type='(\w++)-(%A)']"] ; /unitsShort/$1/$2:alias ; values=/LOCALE/unitsShort/$3/$4
-//ldml/units/unitLength[@type="long"]/unit[@type="(\w++)-(%A)"]/alias[@source="locale"][@path="../unit[@type='(\w++)-(%A)']"] ; /units/$1/$2:alias ; values=/LOCALE/units/$3/$4
-
-//ldml/characterLabels/characterLabelPattern[@type="(%A)"][@count="(%A)"] ; /characterLabelPattern/$1/$2
-//ldml/characterLabels/characterLabelPattern[@type="(%A)"] ; /characterLabelPattern/$1 
-//ldml/characterLabels/characterLabel[@type="(%A)"] ; /characterLabel/$1 
-
diff --git a/tools/java/org/unicode/cldr/icu/ldml2icu_readme.txt b/tools/java/org/unicode/cldr/icu/ldml2icu_readme.txt
deleted file mode 100644
index bd95389..0000000
--- a/tools/java/org/unicode/cldr/icu/ldml2icu_readme.txt
+++ /dev/null
@@ -1,182 +0,0 @@
-# README.txt for regex files used by org.unicode.cldr.icu.NewLdml2IcuConverter.
-#
-# Copyright © 2012-2014 Unicode, Inc.
-# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
-# For terms of use, see http://www.unicode.org/copyright.html
-
-======
-Basics
-======
-
-NewLdml2IcuConverter maps CLDR XPaths to ICU Resource Bundle paths based on
-regexes in special text files (ldml2icu.txt for locale data and
-ldml2icu_supplemental.txt for supplemental data). A Resource Bundle path is
-comprised of the ordered list of labels that appear for a value, e.g. the
-following ICU text file would have the paths /a/b/c and a/b/d:
-
-rootLabel{
-  a{
-    b{
-      c{
-        "x",
-        "y"
-      }
-      d{3}
-    }
-  }
-}
-
-Root labels are not included in Resource Bundle paths for brevity.
-
-The format of a line in the regex file is:
-  ldmlRegex ; icuPath (; specialInstructions)*
-
-All regexes in a file are assumed to be mutually exclusive and unique, so order
-is not important and the lines can be grouped logically.
-NOTE: The above is no longer true in CLDR 26 !!
-
-If an LDML xpath results in two or more ICU paths, they should be split into
-multiple lines, like this:
-  ldmlRegex
-      ; rbPath1 (; specialInstructions)*
-      ; rbPath2 (; specialInstructions)*
-      ...
-
-rbPath is a ICU path replacement expression that is filled out with arguments
-from ldmlRegex, e.g. given the line:
-    //ldml/(.*)/b ; /x/$1
-matching //ldml/a/b would result in the ICU path /x/a.
-
-Each regex pattern must match an xpath completely to have a successful match.
-Square brackets that are part of the xpath will be preceded by a backslash
-during processing, so there's no need to do it here.
-
-When an xpath is matched, the value of the mapped ICU path will be the
-unsplit value in the CLDRFile. This can be overridden by using the special
-instruction "values=".
-
-All values written to ICU files are treated as strings and enclosed with quotes
-in the output by default. To force values to be written without quotes, the
-corresponding RB path should have :int (for single values) or :intvector
-(for arrays) appended to it, e.g. /contextTransforms/$1:intvector.
-
-There may be zero or more semicolon-delimited specialInstructions per line. See
-the section "Special Instructions" for details.
-
-
-=========
-Variables
-=========
-
-Variables are substituted into all the regexes in a file and should be declared
-at the top of the file. The value of the variable can either be a regex or a
-CLDR XPath that is present in the file being converted.
-All variable names should start with '%' and be one character long.
-Any regex being used that contains square brackets should be made a variable,
-since the converter will automatically escape all brackets that occur in the
-XPath regex unless they are represented by variables.
-
-
-====================
-Special Instructions
-====================
-
-There may be one or more semicolon-separated special instructions per line, each
-of which are performed whenever the regex in that line is matched.
-Each instruction may be one of the following:
-
-* values=<space-delimited-values>
-The values instruction explicitly specifies the values to be mapped to the
-generated rbPath instead of using the default values in CLDR.
-
-<space-delimited-values> may contain hardcoded values, replacement arguments
-from the xpath regex, or the keyword {value} which represents the value of the
-xpath in the CLDR data file.
-
-* fallback=<space-delimited-values>
-This instruction specifies that if the generated rbPath does not contain a value
-from an xpath that matches the current regex, the specified fallback values
-will be added to the rbPath instead.
-
-<space-delimited-values> may contain hardcoded values, replacement arguments
-from the xpath regex, or the XPath of another value in the CLDR file currently
-being converted.
-
-* group (no arguments)
-If present, this instruction indicates that the values created using this xpath
-should be grouped together in their own sub-array in the ICU data file. This
-instruction should be used instead of hidden labels if the array is in an array
-of values, e.g. the example below is generated by putting "EEEE, d בMMMM y" and
-"hebr" in the same group:
-      DateTimePatterns {
-           "HH:mm",
-           {
-               "EEEE, d בMMMM y",
-               "hebr",
-           }
-           ...
-
-
-==========
-Functions
-==========
-
-Values sometimes need some further processing to be suitable for ICU. In such
-cases, functions can be written to process these values and their use is
-specified in the regex file like this:
-    value=&date($1)
-
-This helps to put the special-case code in one place to minimize hackiness.
-
-Currently available functions:
-
-* &date(<arg>)
-Converts a formatted date to a pair of integers.
-
-* &algorithm(<arg>)
-Converts aliases for algorithmic numbering system descriptions to an
-ICU-compatible format.
-
-
-================
-Space Delimiting
-================
-
-All matched arguments from xpaths in the rbPath or specialInstructions will be
-split by whitespace, e.g. if the special instruction value=$1 is given an
-argument of "New York", it will be split into "New" and "York" in the output.
-In the case of rbPaths, multiple ICU paths will be created from the split argument,
-each containing one part of the argument.
-
-To prevent splitting, enclose the the corresponding argument in the replacement
-string with quotes, e.g. "$1" or "1999-01-01 9:00" will not be split.
-
-This trick can be used to split default values; the instruction values={value}
-will cause the CLDR value to be split by whitespace, while values="{value}" has
-the same effect as not including the instruction at all.
-
-
-=============
-Hidden Labels
-=============
-
-Some ICU paths will contain labels which are enclosed in angle brackets,
-e.g. /telephoneCodeData/$1/<$2>/code. They are processed and sorted like any
-any other ICU path, except that labels enclosed in angle brackets will not be
-written to the ICU file. This is used to create arrays without labels where
-necessary, e.g. the RB path mentioned earlier would result in the following
-output:
-   telephoneCodeData{
-       001{
-           {
-               code{"388"}
-           }
-           {
-               code{"800"}
-           }
-           ...
-
-<FIFO> is a special hidden label for ldml2icu_supplemental.txt only: using this
-label will cause the values from a single xpath to be grouped together in the
-same array, and the arrays will be written in the same order that they were read
-from the CLDR file.
diff --git a/tools/java/org/unicode/cldr/icu/ldml2icu_supplemental.txt b/tools/java/org/unicode/cldr/icu/ldml2icu_supplemental.txt
deleted file mode 100644
index ab714bd..0000000
--- a/tools/java/org/unicode/cldr/icu/ldml2icu_supplemental.txt
+++ /dev/null
@@ -1,208 +0,0 @@
-# ldml2icu_supplemental.txt
-#
-# Copyright © 2012-2015 Unicode, Inc.
-# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
-# For terms of use, see http://www.unicode.org/copyright.html
-#
-# Used by SupplementalMapper.
-# Data-driven file for mapping supplemental LDML paths to ICU paths.
-# See ldml2icu_readme.txt for a detailed explanation of this file.
-
-# Attribute value
-%A=[^"']++
-# Attribute value, no underscore
-%B=[^"'_]++
-# Word/Zone match
-%W=[\s\w\-/]++
-# Greedy word match
-%G=[\s\w\-]+
-# Number match
-%N=[\d\.]++
-
-# supplementalData.xml
-//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"]
-     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
-//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"][@tender="false"]
-     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
-     ; /CurrencyMap/$1/<FIFO>/tender ; values=false
-//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@from="(%W)"][@iso4217="(%W)"]
-     ; /CurrencyMap/$1/<FIFO>/id ; values=$3
-     ; /CurrencyMap/$1/<FIFO>/from:intvector ; values=&date($2, from)
-//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@from="(%W)"][@iso4217="(%W)"][@tender="false"]
-     ; /CurrencyMap/$1/<FIFO>/id ; values=$3
-     ; /CurrencyMap/$1/<FIFO>/from:intvector ; values=&date($2, from)
-     ; /CurrencyMap/$1/<FIFO>/tender ; values=false
-//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@from="(%W)"][@to="(%W)"][@iso4217="(%W)"]
-     ; /CurrencyMap/$1/<FIFO>/id ; values=$4
-     ; /CurrencyMap/$1/<FIFO>/from:intvector ; values=&date($2, from)
-     ; /CurrencyMap/$1/<FIFO>/to:intvector ; values=&date($3, to)
-//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@from="(%W)"][@to="(%W)"][@iso4217="(%W)"][@tender="false"]
-     ; /CurrencyMap/$1/<FIFO>/id ; values=$4
-     ; /CurrencyMap/$1/<FIFO>/from:intvector ; values=&date($2, from)
-     ; /CurrencyMap/$1/<FIFO>/to:intvector ; values=&date($3, to)
-     ; /CurrencyMap/$1/<FIFO>/tender ; values=false
-//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@to="(%W)"][@iso4217="(%W)"][@tender="false"]
-     ; /CurrencyMap/$1/<FIFO>/id ; values=$3
-     ; /CurrencyMap/$1/<FIFO>/to:intvector ; values=&date($2, to)
-     ; /CurrencyMap/$1/<FIFO>/tender ; values=false
-//supplementalData/currencyData/fractions/info[@iso4217="(%W)"][@digits="(%N)"][@rounding="(%N)"][@cashDigits="(%N)"][@cashRounding="(%N)"] ; /CurrencyMeta/$1:intvector ; values=$2 $3 $4 $5
-//supplementalData/currencyData/fractions/info[@iso4217="(%W)"][@digits="(%N)"][@rounding="(%N)"][@cashRounding="(%N)"] ; /CurrencyMeta/$1:intvector ; values=$2 $3 $2 $4
-//supplementalData/currencyData/fractions/info[@iso4217="(%W)"][@digits="(%N)"][@rounding="(%N)"] ; /CurrencyMeta/$1:intvector ; values=$2 $3 $2 $3
-
-//supplementalData/calendarPreferenceData/calendarPreference[@territories="(%A)"][@ordering="(%A)"] ; /calendarPreferenceData/$1    ; values=$2
-//supplementalData/codeMappings/territoryCodes[@type="(%W)"][@numeric="(%N)"][@alpha3="(%W)"].* ; /codeMappings/<$1> ; values=$1 $2 $3
-
-//supplementalData/codeMappings/currencyCodes[@type="(%W)"][@numeric="(%N)"].* ; /codeMappingsCurrency/<$1> ; values=$1 $2
-
-//supplementalData/languageData/language[@type="(%W)"][@scripts="(%W)"][@territories="(%W)"][@alt="secondary"]
-     ; /languageData/$1/secondary/scripts ; values=$2
-     ; /languageData/$1/secondary/territories ; values=$3
-//supplementalData/languageData/language[@type="(%W)"][@scripts="(%W)"][@alt="secondary"] ; /languageData/$1/secondary/scripts ; values=$2
-//supplementalData/languageData/language[@type="(%W)"][@territories="(%G)"][@alt="secondary"] ; /languageData/$1/secondary/territories ; values=$2
-
-//supplementalData/languageData/language[@type="(%W)"][@scripts="(%W)"][@territories="(%W)"]
-     ; /languageData/$1/primary/scripts ; values=$2
-     ; /languageData/$1/primary/territories; values=$3
-//supplementalData/languageData/language[@type="(%W)"][@scripts="(%W)"] ; /languageData/$1/primary/scripts ; values=$2
-//supplementalData/languageData/language[@type="(%W)"][@territories="(%W)"] ; /languageData/$1/primary/territories ; values=$2
-
-//supplementalData/territoryContainment/group[@type="(%W)"][@contains="(%A)"][@status="deprecated"] ; /territoryContainment/deprecated/$1 ; values=$2
-//supplementalData/territoryContainment/group[@type="(%W)"][@contains="(%A)"][@status="grouping"] ; /territoryContainment/containedGroupings/$1 ; values=$2
-//supplementalData/territoryContainment/group[@type="(%W)"][@contains="(%A)"][@grouping="true"] ; /territoryContainment/grouping/$1 ; values=$2
-//supplementalData/territoryContainment/group[@type="(%W)"][@contains="(%A)"]; /territoryContainment/$1 ; values=$2
-
-//supplementalData/subdivisionContainment/subgroup[@type="(%W)"][@contains="(%A)"]; /subdivisionContainment/$1 ; values=$2
-//supplementalData/subdivisionContainment/subgroup[@type="(%W)"][@subtype="(%W)"][@contains="(%A)"]; /subdivisionContainment/$1-$2 ; values=$3
-
-//supplementalData/weekData/firstDay[@day="(%W)"][@territories="(%W)"]([@references="(%A)"])?[@alt="(%A)"] ; /weekData%$5/$2:intvector     ; values=$1 ; fallback=/weekData/001:intvector[0]
-
-//supplementalData/weekData/firstDay[@day="(%W)"][@territories="(%W)"] ; /weekData/$2:intvector     ; values=$1 ; fallback=/weekData/001:intvector[0]
-//supplementalData/weekData/minDays[@count="(%N)"][@territories="(%W)"] ; /weekData/$2:intvector    ; values=$1 ; fallback=/weekData/001:intvector[1]
-//supplementalData/weekData/weekendStart[@day="(%W)"][@territories="(%W)"] ; /weekData/$2:intvector     ; values=$1 0 ; fallback=/weekData/001:intvector[2] /weekData/001:intvector[3]
-//supplementalData/weekData/weekendEnd[@day="(%W)"][@territories="(%W)"] ; /weekData/$2:intvector     ; values=$1 86400000 ; fallback=/weekData/001:intvector[4] /weekData/001:intvector[5]
-
-# 		<weekOfPreference ordering="weekOfYear" locales="und"/>
-//supplementalData/weekData/weekOfPreference[@locales="(%A)"][@ordering="(%A)"] ; /weekOfPreference/$1    ; values=$2
-
-//supplementalData/timeData/hours[@allowed="(%W)"][@preferred="(%W)"][@regions="(%W)"]
-     ; /timeData/$3/allowed ; values=$1
-     ; /timeData/$3/preferred ; values=$2
-
-//supplementalData/measurementData/measurementSystem[@type="metric"][@category="(%W)"][@territories="(%W)"] ; /measurementData/$2/MeasurementSystemCategory/$1:int ; values=0
-//supplementalData/measurementData/measurementSystem[@type="US"][@category="(%W)"][@territories="(%W)"] ; /measurementData/$2/MeasurementSystemCategory/$1:int ; values=1
-//supplementalData/measurementData/measurementSystem[@type="UK"][@category="(%W)"][@territories="(%W)"] ; /measurementData/$2/MeasurementSystemCategory/$1:int ; values=2
-
-//supplementalData/measurementData/measurementSystem[@type="metric"][@territories="(%W)"] ; /measurementData/$1/MeasurementSystem:int ; values=0
-//supplementalData/measurementData/measurementSystem[@type="US"][@territories="(%W)"] ; /measurementData/$1/MeasurementSystem:int ; values=1
-//supplementalData/measurementData/measurementSystem[@type="UK"][@territories="(%W)"] ; /measurementData/$1/MeasurementSystem:int ; values=2
-//supplementalData/measurementData/paperSize[@type="A4"][@territories="(%W)"] ; /measurementData/$1/PaperSize:intvector ; values=297 210
-//supplementalData/measurementData/paperSize[@type="US-Letter"][@territories="(%W)"] ; /measurementData/$1/PaperSize:intvector ; values=279 216
-
-//supplementalData/unitPreferenceData/unitPreferences[@category="(%W)"][@usage="(%A)"][@scope="small"]/unitPreference[@regions="(%A)"][@alt="informal"] ; /unitPreferenceData/$3/$1-$2-small-informal
-//supplementalData/unitPreferenceData/unitPreferences[@category="(%W)"][@usage="(%A)"][@scope="small"]/unitPreference[@regions="(%A)"] ; /unitPreferenceData/$3/$1-$2-small
-//supplementalData/unitPreferenceData/unitPreferences[@category="(%W)"][@usage="(%A)"]/unitPreference[@regions="(%A)"][@alt="informal"] ; /unitPreferenceData/$3/$1-$2-informal
-//supplementalData/unitPreferenceData/unitPreferences[@category="(%W)"][@usage="(%A)"]/unitPreference[@regions="(%A)"] ; /unitPreferenceData/$3/$1-$2
-
-//supplementalData/territoryInfo/territory[@type="(%W)"][@gdp="(%N)"][@literacyPercent="(%N)"][@population="(%N)"]/languagePopulation[@type="(%W)"][@writingPercent="(%N)"][@populationPercent="(%N)"][@officialStatus="(%W)"]([@references="%W"])?
-    ; /territoryInfo/$1/territoryF:intvector ; values=&exp($2) &exp($3,-2) &exp($4) ; base_xpath=//supplementalData/territoryInfo/territory[@type="$1"]
-    ; /territoryInfo/$1/$5/writingShareF:int ; values=&exp($6,-2)
-    ; /territoryInfo/$1/$5/populationShareF:int ; values=&exp($7,-2)
-    ; /territoryInfo/$1/$5/officialStatus ; values=$8
-
-//supplementalData/territoryInfo/territory[@type="(%W)"][@gdp="(%N)"][@literacyPercent="(%N)"][@population="(%N)"]/languagePopulation[@type="(%W)"][@writingPercent="(%N)"][@populationPercent="(%N)"]([@references="%W"])?
-    ; /territoryInfo/$1/territoryF:intvector ; values=&exp($2) &exp($3,-2) &exp($4) ; base_xpath=//supplementalData/territoryInfo/territory[@type="$1"]
-    ; /territoryInfo/$1/$5/writingShareF:int ; values=&exp($6,-2)
-    ; /territoryInfo/$1/$5/populationShareF:int ; values=&exp($7,-2)
-
-//supplementalData/territoryInfo/territory[@type="(%W)"][@gdp="(%N)"][@literacyPercent="(%N)"][@population="(%N)"]/languagePopulation[@type="(%W)"][@literacyPercent="(%N)"][@populationPercent="(%N)"][@officialStatus="(%W)"]([@references="%W"])?
-    ; /territoryInfo/$1/territoryF:intvector ; values=&exp($2) &exp($3,-2) &exp($4) ; base_xpath=//supplementalData/territoryInfo/territory[@type="$1"]
-    ; /territoryInfo/$1/$5/literacyShareF:int ; values=&exp($6,-2)
-    ; /territoryInfo/$1/$5/populationShareF:int ; values=&exp($7,-2)
-    ; /territoryInfo/$1/$5/officialStatus ; values=$8
-
-//supplementalData/territoryInfo/territory[@type="(%W)"][@gdp="(%N)"][@literacyPercent="(%N)"][@population="(%N)"]/languagePopulation[@type="(%W)"][@literacyPercent="(%N)"][@populationPercent="(%N)"]([@references="%W"])?
-    ; /territoryInfo/$1/territoryF:intvector ; values=&exp($2) &exp($3,-2) &exp($4) ; base_xpath=//supplementalData/territoryInfo/territory[@type="$1"]
-    ; /territoryInfo/$1/$5/literacyShareF:int ; values=&exp($6,-2)
-    ; /territoryInfo/$1/$5/populationShareF:int ; values=&exp($7,-2)
-
-//supplementalData/territoryInfo/territory[@type="(%W)"][@gdp="(%N)"][@literacyPercent="(%N)"][@population="(%N)"]/languagePopulation[@type="(%W)"][@populationPercent="(%N)"][@officialStatus="(%W)"]([@references="%W"])?
-    ; /territoryInfo/$1/territoryF:intvector ; values=&exp($2) &exp($3,-2) &exp($4) ; base_xpath=//supplementalData/territoryInfo/territory[@type="$1"]
-    ; /territoryInfo/$1/$5/populationShareF:int ; values=&exp($6,-2)
-    ; /territoryInfo/$1/$5/officialStatus ; values=$7
-
-//supplementalData/territoryInfo/territory[@type="(%W)"][@gdp="(%N)"][@literacyPercent="(%N)"][@population="(%N)"]/languagePopulation[@type="(%W)"][@populationPercent="(%N)"]([@references="%W"])?
-    ; /territoryInfo/$1/territoryF:intvector ; values=&exp($2) &exp($3,-2) &exp($4) ; base_xpath=//supplementalData/territoryInfo/territory[@type="$1"]
-    ; /territoryInfo/$1/$5/populationShareF:int ; values=&exp($6,-2)
-
-//supplementalData/territoryInfo/territory[@type="(%W)"][@gdp="(%N)"][@literacyPercent="(%N)"][@population="(%N)"]
-    ; /territoryInfo/$1/territoryF:intvector ; values=&exp($2) &exp($3,-2) &exp($4) ; base_xpath=//supplementalData/territoryInfo/territory[@type="$1"]
-
-//supplementalData/calendarData/calendar[@type="(%W)"]/calendarSystem[@type="(%W)"] ; /calendarData/$1/system ; values=$2
-//supplementalData/calendarData/calendar[@type="(%W)"]/eras/era[@type="(%W)"][@(start|end)="(%A)"][@named="(%W)"]
-    ; /calendarData/$1/eras/$2/$3:intvector ; values=&ymd($4)
-    ; /calendarData/$1/eras/$2/named ; values=$5
-//supplementalData/calendarData/calendar[@type="(%W)"]/eras/era[@type="(%W)"][@(start|end)="(%A)"]
-    ; /calendarData/$1/eras/$2/$3:intvector ; values=&ymd($4)
-
-# telephoneCodeData.xml
-#//supplementalData/telephoneCodeData/codesByTerritory[@territory="(%W)"]/telephoneCountryCode[@code="(%N)"][@alt="(%A)"] ; /telephoneCodeData/$1/<$2>/code%$3 ; values=$2
-#//supplementalData/telephoneCodeData/codesByTerritory[@territory="(%W)"]/telephoneCountryCode[@code="(%N)"] ; /telephoneCodeData/$1/<$2>/code ; values=$2
-
-# languageInfo.xml
-
-//supplementalData/languageMatching/languageMatches[@type="(%B)_new"]/paradigmLocales[@locales="(%A)"] ; /languageMatchingInfo/$1/paradigmLocales ; values=$2
-//supplementalData/languageMatching/languageMatches[@type="(%B)_new"]/matchVariable[@id="\$(%A)"][@value="(%A)"] ; /languageMatchingInfo/$1/matchVariable/$2 ; values=$3
-
-//supplementalData/languageMatching/languageMatches[@type="(%B)_new"]/languageMatch[@desired="(%A)"][@supported="(%A)"][@distance="(%N)"][@oneway="true"] ; /languageMatchingNew/$1/<FIFO> ; values=$2 $3 $4 1
-//supplementalData/languageMatching/languageMatches[@type="(%B)_new"]/languageMatch[@desired="(%A)"][@supported="(%A)"][@distance="(%N)"] ; /languageMatchingNew/$1/<FIFO> ; values=$2 $3 $4 0
-
-//supplementalData/languageMatching/languageMatches[@type="(%B)"]/languageMatch[@desired="(%A)"][@supported="(%A)"][@percent="(%N)"][@oneway="true"] ; /languageMatching/$1/<FIFO> ; values=$2 $3 $4 1
-//supplementalData/languageMatching/languageMatches[@type="(%B)"]/languageMatch[@desired="(%A)"][@supported="(%A)"][@percent="(%N)"] ; /languageMatching/$1/<FIFO> ; values=$2 $3 $4 0
-
-# likelySubtags.xml
-//supplementalData/likelySubtags/likelySubtag[@from="(%A)"][@to="(%A)"] ; /$1 ; values=$2
-
-# metaZones.xml - metaZones.txt
-//supplementalData/metaZones/mapTimezones[@type="metazones"][@typeVersion="%A"]/mapZone[@type="(%A)"][@other="(%W)"][@territory="(%W)"] ; /mapTimezones/$2/$3 ; values=$1
-//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@mzone="(%W)"] ; /metazoneInfo/"$1"/<$2> ; values=$2
-//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@from="(%A)"][@mzone="(%W)"] ; /metazoneInfo/"$1"/<$2> ; values=$3 "$2" "9999-12-31 23:59"
-//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@from="(%A)"][@to="(%A)"][@mzone="(%W)"] ; /metazoneInfo/"$1"/<$2> ; values=$4 "$2" "$3"
-//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@to="(%A)"][@mzone="(%W)"] ; /metazoneInfo/"$1"/<1970-01-01 00:00> ; values=$3 "1970-01-01 00:00" "$2"
-
-//supplementalData/primaryZones/primaryZone[@iso3166="(%W)"] ; /primaryZones/$1 ; values={value}
-
-# numberingSystems.txt
-//supplementalData/numberingSystems/numberingSystem[@type="algorithmic"][@id="(%W)"][@rules="(%A)"]
-     ; /numberingSystems/$1/algorithmic:int ; values=1
-     ; /numberingSystems/$1/desc ; values=&algorithm($2)
-     ; /numberingSystems/$1/radix:int ; values=10
-
-//supplementalData/numberingSystems/numberingSystem[@type="numeric"][@id="(%W)"][@digits="(%A)"]
-     ; /numberingSystems/$1/algorithmic:int ; values=0
-     ; /numberingSystems/$1/desc ; values=$2
-     ; /numberingSystems/$1/radix:int ; values=10
-
-# windowsZones.txt
-//supplementalData/windowsZones/mapTimezones[@otherVersion="%W"][@typeVersion="%W"]/mapZone[@type="(%A)"][@other="(%A)"][@territory="(%W)"] ; /mapTimezones/"$2"/$3 ; values="$1"
-
-# genderList.txt
-//supplementalData/gender/personList[@type="(%W)"][@locales="(%W)"] ; /genderList/$2 ; values=$1
-
-# postalCodeData.xml
-//supplementalData/postalCodeData/postCodeRegex[@territoryId="(%W)"] ; /$1
-
-# locale info
-//supplementalData/parentLocales/parentLocale[@parent="(%A)"][@locales="(%A)"] ; /parentLocales/$1 ; values=$2
-//supplementalData/metadata/defaultContent[@locales="(%A)"] ; /defaultContent ; values=$1
-
-# supplementalMetadata.xml (metadata.txt)
-//supplementalData/metadata/alias/(language|script|territory|subdivision|variant)Alias[@type="(%A)"][@replacement="(%A)"][@reason="(%A)"]
-     ; /alias/$1/$2/reason ; values="$4"
-     ; /alias/$1/$2/replacement ; values="$3"
-
-# Region codes used by ICU's Region class
-# Specify the value explicitly so that the LDMLConverter will split it.
-//supplementalData/metadata/validity/variable[@type="choice"][@id="\$territory"] ; /regionCodes ; values={value}
-
-# validity
-//supplementalData/idValidity/id[@type="(%A)"][@idStatus="(%A)"] ; /idValidity/$1/$2 ; values={value}
diff --git a/tools/java/org/unicode/cldr/json/CldrItem.java b/tools/java/org/unicode/cldr/json/CldrItem.java
index f74ef31..092f408 100644
--- a/tools/java/org/unicode/cldr/json/CldrItem.java
+++ b/tools/java/org/unicode/cldr/json/CldrItem.java
@@ -30,7 +30,7 @@
         }
 
         int start = 0;
-        ArrayList<String> segments = new ArrayList<String>();
+        ArrayList<String> segments = new ArrayList<>();
         boolean inBracket = false;
         boolean inBracketQuote = false;
         for (int pos = start; pos < path.length(); ++pos) {
@@ -94,7 +94,7 @@
      */
     private String value;
 
-    CldrItem(String path, String fullPath, String untransformedPath, String untransformedFullPath, String value) {
+    CldrItem(final String path, String fullPath, String untransformedPath, String untransformedFullPath, String value) {
 
         if (DEBUG) {
             System.out.println("---");
@@ -104,6 +104,11 @@
             System.out.println("---");
         }
 
+        if(path.isEmpty()) {
+            // Should not happen
+            throw new IllegalArgumentException("empty path with " + fullPath+"|"+untransformedPath+"|"+untransformedFullPath+ " = " + value );
+        }
+
         this.path = path;
         this.fullPath = fullPath;
         this.untransformedPath = untransformedPath;
@@ -163,7 +168,7 @@
         String[] pathSegments = splitPathToSegments(path);
         String[] fullPathSegments = splitPathToSegments(fullPath);
         assert (pathSegments.length == fullPathSegments.length);
-        ArrayList<CldrNode> nodesInPath = new ArrayList<CldrNode>();
+        ArrayList<CldrNode> nodesInPath = new ArrayList<>();
 
         String parent = "";
         for (int i = 0; i < pathSegments.length; i++) {
@@ -203,6 +208,9 @@
     }
 
     public void setPath(String path) {
+        if(path.isEmpty()) {
+            throw new IllegalArgumentException("empty path");
+        }
         this.path = path;
     }
 
@@ -224,15 +232,15 @@
 
         for (SplittableAttributeSpec s : LdmlConvertRules.SPLITTABLE_ATTRS) {
             if (fullxpp.containsElement(s.element) && fullxpp.containsAttribute(s.attribute)) {
-                ArrayList<CldrItem> list = new ArrayList<CldrItem>();
+                ArrayList<CldrItem> list = new ArrayList<>();
                 String wordString = fullxpp.findAttributeValue(s.element, s.attribute);
                 String[] words = null;
                 words = wordString.trim().split("\\s+");
                 for (String word : words) {
-                    XPathParts newxpp = XPathParts.getInstance(xpp.toString());
-                    XPathParts newfullxpp = XPathParts.getInstance(fullxpp.toString());
-                    XPathParts untransformednewxpp = XPathParts.getInstance(untransformedxpp.toString());
-                    XPathParts untransformednewfullxpp = XPathParts.getInstance(untransformedfullxpp.toString());
+                    XPathParts newxpp = xpp.cloneAsThawed();
+                    XPathParts newfullxpp = fullxpp.cloneAsThawed();
+                    XPathParts untransformednewxpp = untransformedxpp.cloneAsThawed();
+                    XPathParts untransformednewfullxpp = untransformedfullxpp.cloneAsThawed();
 
                     newxpp.setAttribute(s.element, s.attribute, word);
                     newfullxpp.setAttribute(s.element, s.attribute, word);
diff --git a/tools/java/org/unicode/cldr/json/CldrNode.java b/tools/java/org/unicode/cldr/json/CldrNode.java
index f000c24..a4559eb 100644
--- a/tools/java/org/unicode/cldr/json/CldrNode.java
+++ b/tools/java/org/unicode/cldr/json/CldrNode.java
@@ -130,8 +130,8 @@
     private String uniqueNodeName;
 
     private CldrNode() {
-        distinguishingAttributes = new HashMap<String, String>();
-        nondistinguishingAttributes = new HashMap<String, String>();
+        distinguishingAttributes = new HashMap<>();
+        nondistinguishingAttributes = new HashMap<>();
     }
 
     /**
@@ -140,7 +140,7 @@
      * @return String map.
      */
     public Map<String, String> getAttrAsValueMap() {
-        Map<String, String> attributesAsValues = new HashMap<String, String>();
+        Map<String, String> attributesAsValues = new HashMap<>();
         for (String key : distinguishingAttributes.keySet()) {
             String keyStr = parent + ":" + name + ":" + key;
             if (LdmlConvertRules.ATTR_AS_VALUE_SET.contains(keyStr)) {
diff --git a/tools/java/org/unicode/cldr/json/JSON_config.txt b/tools/java/org/unicode/cldr/json/JSON_config.txt
index ba63a5e..2f9274b 100644
--- a/tools/java/org/unicode/cldr/json/JSON_config.txt
+++ b/tools/java/org/unicode/cldr/json/JSON_config.txt
@@ -8,6 +8,8 @@
 section=contextTransforms ; path=//cldr/main/[^/]++/contextTransforms/.* ; package=misc
 section=layout ; path=//cldr/main/[^/]++/layout/.* ; package=misc
 section=characters ; path=//cldr/main/[^/]++/characters/.* ; package=misc
+section=typographic ; path=//cldr/main/[^/]++/typographicNames/.* ; package=misc
+section=characterLabels ; path=//cldr/main/[^/]++/characterLabel.*/.* ; package=misc
 section=delimiters ; path=//cldr/main/[^/]++/delimiters/.* ; package=misc
 section=ca-buddhist ; path=//cldr/main/[^/]++/dates/calendars/buddhist/.* ; package=cal-buddhist
 section=ca-chinese ; path=//cldr/main/[^/]++/dates/calendars/chinese/.* ; package=cal-chinese
diff --git a/tools/java/org/unicode/cldr/json/JSON_config_annotations.txt b/tools/java/org/unicode/cldr/json/JSON_config_annotations.txt
new file mode 100644
index 0000000..0dc61d6
--- /dev/null
+++ b/tools/java/org/unicode/cldr/json/JSON_config_annotations.txt
@@ -0,0 +1 @@
+section=annotations ; path=//cldr/annotation.* ; package=annotations
diff --git a/tools/java/org/unicode/cldr/json/JSON_config_annotationsDerived.txt b/tools/java/org/unicode/cldr/json/JSON_config_annotationsDerived.txt
new file mode 100644
index 0000000..316a34d
--- /dev/null
+++ b/tools/java/org/unicode/cldr/json/JSON_config_annotationsDerived.txt
@@ -0,0 +1 @@
+section=annotations ; path=//cldr/annotation.* ; package=annotations-derived
diff --git a/tools/java/org/unicode/cldr/json/JSON_config_supplemental.txt b/tools/java/org/unicode/cldr/json/JSON_config_supplemental.txt
index 6cd5b55..ad29616 100644
--- a/tools/java/org/unicode/cldr/json/JSON_config_supplemental.txt
+++ b/tools/java/org/unicode/cldr/json/JSON_config_supplemental.txt
@@ -8,6 +8,7 @@
 section=numberingSystems ; path=//cldr/supplemental/numberingSystems/.* ; package=core
 section=ordinals ; path=//cldr/supplemental/plurals\[@type="ordinal"\]/.* ; package=core
 section=plurals ; path=//cldr/supplemental/plurals\[@type="cardinal"\]/.* ; package=core
+section=pluralRanges ; path=//cldr/supplemental/plurals/.* ; package=core
 section=postalCodeData ; path=//cldr/supplemental/postalCodeData/.* ; package=core
 section=currencyData ; path=//cldr/supplemental/currencyData/.* ; package=core
 section=territoryContainment ; path=//cldr/supplemental/territoryContainment/.* ; package=core
diff --git a/tools/java/org/unicode/cldr/json/Ldml2JsonConverter.java b/tools/java/org/unicode/cldr/json/Ldml2JsonConverter.java
index 7e3f64d..8086035 100644
--- a/tools/java/org/unicode/cldr/json/Ldml2JsonConverter.java
+++ b/tools/java/org/unicode/cldr/json/Ldml2JsonConverter.java
@@ -13,6 +13,7 @@
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -20,6 +21,7 @@
 import org.unicode.cldr.draft.ScriptMetadata;
 import org.unicode.cldr.draft.ScriptMetadata.Info;
 import org.unicode.cldr.tool.Option.Options;
+import org.unicode.cldr.util.Annotations;
 import org.unicode.cldr.util.CLDRConfig;
 import org.unicode.cldr.util.CLDRFile;
 import org.unicode.cldr.util.CLDRFile.DraftStatus;
@@ -38,13 +40,13 @@
 import org.unicode.cldr.util.SupplementalDataInfo;
 import org.unicode.cldr.util.XPathParts;
 
+import com.google.common.base.Joiner;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonPrimitive;
 import com.google.gson.stream.JsonWriter;
-import com.ibm.icu.dev.util.CollectionUtilities;
 
 /**
  * Utility methods to extract data from CLDR repository and export it in JSON
@@ -57,16 +59,16 @@
     private static boolean DEBUG = false;
 
     private enum RunType {
-        main, supplemental, segments, rbnf
-    };
+        main, supplemental, segments, rbnf, annotations, annotationsDerived
+    }
 
     private static final StandardCodes sc = StandardCodes.make();
     private Set<String> defaultContentLocales = SupplementalDataInfo.getInstance().getDefaultContentLocales();
-    private Set<String> skippedDefaultContentLocales = new TreeSet<String>();
+    private Set<String> skippedDefaultContentLocales = new TreeSet<>();
 
     private class availableLocales {
-        Set<String> modern = new TreeSet<String>();
-        Set<String> full = new TreeSet<String>();
+        Set<String> modern = new TreeSet<>();
+        Set<String> full = new TreeSet<>();
     }
 
     private availableLocales avl = new availableLocales();
@@ -82,7 +84,7 @@
                     "Destination directory for output files, defaults to CldrUtility.GEN_DIRECTORY")
                 .add("match", 'm', ".*", ".*",
                     "Regular expression to define only specific locales or files to be generated")
-                .add("type", 't', "(main|supplemental|segments|rbnf)", "main",
+                .add("type", 't', "(main|supplemental|segments|rbnf|annotations|annotationsDerived)", "main",
                     "Type of CLDR data being generated, main, supplemental, or segments.")
                 .add("resolved", 'r', "(true|false)", "false",
                     "Whether the output JSON for the main directory should be based on resolved or unresolved data")
@@ -140,17 +142,16 @@
 
     private class JSONSection implements Comparable<JSONSection> {
         public String section;
-        public Matcher matcher;
+        public Pattern pattern;
         public String packageName;
 
+        @Override
         public int compareTo(JSONSection other) {
             return section.compareTo(other.section);
         }
 
     }
 
-    private Map<JSONSection, List<CldrItem>> sectionItems = new TreeMap<JSONSection, List<CldrItem>>();
-
     private Map<String, String> dependencies;
     private List<JSONSection> sections;
     private Set<String> packages;
@@ -166,9 +167,9 @@
         this.writePackages = writePackages;
         this.coverageValue = Level.get(coverage).getLevel();
 
-        sections = new ArrayList<JSONSection>();
-        packages = new TreeSet<String>();
-        dependencies = new HashMap<String, String>();
+        sections = new ArrayList<>();
+        packages = new TreeSet<>();
+        dependencies = new HashMap<>();
 
         FileProcessor myReader = new FileProcessor() {
             @Override
@@ -203,7 +204,7 @@
                 if (hasSection && hasPath) {
                     JSONSection j = new JSONSection();
                     j.section = section;
-                    j.matcher = PatternCache.get(path).matcher("");
+                    j.pattern = PatternCache.get(path);
                     if (hasPackage) {
                         j.packageName = packageName;
                     }
@@ -232,34 +233,56 @@
             case rbnf:
                 myReader.process(Ldml2JsonConverter.class, "JSON_config_rbnf.txt");
                 break;
-
+            default:
+                myReader.process(Ldml2JsonConverter.class, "JSON_config_"+type.name()+".txt");
             }
         }
 
         // Add a section at the end of the list that will match anything not already matched.
         JSONSection j = new JSONSection();
         j.section = "other";
-        j.matcher = PatternCache.get(".*").matcher("");
+        j.pattern = PatternCache.get(".*");
         sections.add(j);
 
     }
 
     /**
+     * @see XPathParts#addInternal
+     */
+    static final Pattern ANNOTATION_CP_REMAP = PatternCache.get("^(.*)\\[@cp=\"(\\[|\\]|'|\"|@|/|=)\"\\](.*)$");
+    /**
      * Transform the path by applying PATH_TRANSFORMATIONS rules.
      *
      * @param pathStr
      *            The path string being transformed.
      * @return The transformed path.
      */
-    private String transformPath(String pathStr, String pathPrefix) {
+    private String transformPath(final String pathStr, final String pathPrefix) {
         String result = pathStr;
 
+        // handle annotation cp value
+        Matcher cpm = ANNOTATION_CP_REMAP.matcher(result);
+        if( cpm.matches() ) {
+            // We need to avoid breaking the syntax not just of JSON, but of XPATH.
+            final String badCodepointRange = cpm.group(2);
+            StringBuilder sb = new StringBuilder(cpm.group(1))
+                .append("[@cp=\"");
+            // JSON would handle a wide range of things if escaped, but XPATH will not.
+            if(badCodepointRange.codePointCount(0, badCodepointRange.length()) != 1) {
+                // forbid more than one U+ (because we will have to unescape it.)
+                throw new IllegalArgumentException("Need exactly one codepoint in the @cp string, but got " + badCodepointRange + " in xpath " + pathStr);
+            }
+            badCodepointRange.codePoints().forEach(cp -> sb.append("U+").append(Integer.toHexString(cp).toUpperCase()));
+            sb.append("\"]").append(cpm.group(3));
+            result = sb.toString();
+        }
+
         if (DEBUG) {
             System.out.println(" IN pathStr : " + result);
         }
         Matcher m;
         for (int i = 0; i < LdmlConvertRules.PATH_TRANSFORMATIONS.length; i++) {
-            m = LdmlConvertRules.PATH_TRANSFORMATIONS[i].pattern.matcher(pathStr);
+            m = LdmlConvertRules.PATH_TRANSFORMATIONS[i].pattern.matcher(result);
             if (m.matches()) {
                 if (DEBUG) {
                     System.out.println(LdmlConvertRules.PATH_TRANSFORMATIONS[i].pattern);
@@ -289,14 +312,16 @@
         return result;
     }
 
-    private void mapPathsToSections(CLDRFile file, String pathPrefix, SupplementalDataInfo sdi)
+    private Map<JSONSection, List<CldrItem>> mapPathsToSections(AtomicInteger readCount, int totalCount,
+            CLDRFile file, String pathPrefix, SupplementalDataInfo sdi)
         throws IOException, ParseException {
+        final Map<JSONSection, List<CldrItem>> sectionItems = new TreeMap<>();
 
         String locID = file.getLocaleID();
         Matcher noNumberingSystemMatcher = LdmlConvertRules.NO_NUMBERING_SYSTEM_PATTERN.matcher("");
         Matcher numberingSystemMatcher = LdmlConvertRules.NUMBERING_SYSTEM_PATTERN.matcher("");
         Matcher rootIdentityMatcher = LdmlConvertRules.ROOT_IDENTITY_PATTERN.matcher("");
-        Set<String> activeNumberingSystems = new TreeSet<String>();
+        Set<String> activeNumberingSystems = new TreeSet<>();
         activeNumberingSystems.add("latn"); // Always include latin script numbers
         for (String np : LdmlConvertRules.ACTIVE_NUMBERING_SYSTEM_XPATHS) {
             String ns = file.getWinningValue(np);
@@ -313,7 +338,7 @@
         CoverageInfo covInfo = CLDRConfig.getInstance().getCoverageInfo();
         for (Iterator<String> it = file.iterator("", DtdData.getInstance(fileDtdType).getDtdComparator(null)); it.hasNext();) {
             int cv = Level.UNDETERMINED.getLevel();
-            String path = it.next();
+            final String path = it.next();
             String fullPath = file.getFullXPath(path);
             String value = file.getWinningValue(path);
             if (path.startsWith("//ldml/localeDisplayNames/languages") &&
@@ -361,14 +386,17 @@
             String transformedPath = transformPath(path, pathPrefix);
             String transformedFullPath = transformPath(fullPath, pathPrefix);
 
+            if(transformedPath.isEmpty()) {
+                continue; // skip this path
+            }
+
             for (JSONSection js : sections) {
-                js.matcher.reset(transformedPath);
-                if (js.matcher.matches()) {
+                if (js.pattern.matcher(transformedPath).matches()) {
                     CldrItem item = new CldrItem(transformedPath, transformedFullPath, path, fullPath, value);
 
                     List<CldrItem> cldrItems = sectionItems.get(js);
                     if (cldrItems == null) {
-                        cldrItems = new ArrayList<CldrItem>();
+                        cldrItems = new ArrayList<>();
                     }
                     cldrItems.add(item);
                     sectionItems.put(js, cldrItems);
@@ -382,9 +410,9 @@
         JSONSection otherSection = sections.get(sections.size() - 1);
         List<CldrItem> others = sectionItems.get(otherSection);
         if (others == null) {
-            return;
+            return sectionItems;
         }
-        List<CldrItem> otherSectionItems = new ArrayList<CldrItem>(others);
+        List<CldrItem> otherSectionItems = new ArrayList<>(others);
         int addedItemCount = 0;
         boolean copyIdentityInfo = Boolean.parseBoolean(options.get("identity").getValue());
 
@@ -407,6 +435,7 @@
                 addedItemCount++;
             }
         }
+        return sectionItems;
     }
 
     /**
@@ -419,7 +448,9 @@
      * @throws IOException
      * @throws ParseException
      */
-    private void convertCldrItems(String dirName, String filename, String pathPrefix)
+    private void convertCldrItems(AtomicInteger readCount, int totalCount,
+            String dirName, String filename, String pathPrefix,
+            final Map<JSONSection, List<CldrItem>> sectionItems)
         throws IOException, ParseException {
         // zone and timezone items are queued for sorting first before they are
         // processed.
@@ -478,6 +509,8 @@
                         System.out.println("pack: " + js.packageName);
                         System.out.println("dir: " + dirName);
                     }
+                } else {
+                    outputDirname.append("/" + filename);
                 }
 
                 File dir = new File(outputDirname.toString());
@@ -485,7 +518,7 @@
                     dir.mkdirs();
                 }
 
-                List<String> outputDirs = new ArrayList<String>();
+                List<String> outputDirs = new ArrayList<>();
                 outputDirs.add(outputDirname.toString());
                 if (writePackages && type == RunType.main && tier.equals("-modern")) {
                     outputDirs.add(outputDirname.toString().replaceFirst("-modern", "-full"));
@@ -494,22 +527,27 @@
                 for (String outputDir : outputDirs) {
                     List<CldrItem> theItems = sectionItems.get(js);
                     if (theItems == null || theItems.size() == 0) {
+                        System.out.println(">"+progressPrefix(readCount, totalCount) +
+                            outputDir + " - no items to write");
                         continue;
                     }
+                    System.out.println("?"+progressPrefix(readCount, totalCount) + outputDir + " - " + theItems.size() + " item(s) to write.");
                     PrintWriter outf = FileUtilities.openUTF8Writer(outputDir, outFilename);
                     JsonWriter out = new JsonWriter(outf);
                     out.setIndent("  ");
 
-                    ArrayList<CldrItem> sortingItems = new ArrayList<CldrItem>();
-                    ArrayList<CldrItem> arrayItems = new ArrayList<CldrItem>();
+                    ArrayList<CldrItem> sortingItems = new ArrayList<>();
+                    ArrayList<CldrItem> arrayItems = new ArrayList<>();
 
-                    ArrayList<CldrNode> nodesForLastItem = new ArrayList<CldrNode>();
+                    ArrayList<CldrNode> nodesForLastItem = new ArrayList<>();
                     String lastLeadingArrayItemPath = null;
                     String leadingArrayItemPath = "";
                     int valueCount = 0;
                     String previousIdentityPath = null;
                     for (CldrItem item : theItems) {
-
+                        if(item.getPath().isEmpty()) {
+                            throw new IllegalArgumentException("empty xpath in " + filename + " section " + js.packageName+"/"+js.section);
+                        }
                         if (type == RunType.rbnf) {
                             item.setValue(item.getValue().replace('→', '>'));
                             item.setValue(item.getValue().replace('←', '<'));
@@ -627,7 +665,8 @@
 
                     resolveSortingItems(out, nodesForLastItem, sortingItems);
                     resolveArrayItems(out, nodesForLastItem, arrayItems);
-                    System.out.println(String.format("  %s = %d values", outFilename, valueCount));
+                    System.out.println(">"+progressPrefix(readCount, totalCount) + String.format(".../%s/%s\t= %d values", 
+                        dir.getPath().substring(this.outputDir.length()+1), outFilename, valueCount));
                     closeNodes(out, nodesForLastItem.size() - 2, 0);
                     outf.println();
                     out.close();
@@ -683,9 +722,7 @@
         JsonObject obj = new JsonObject();
         writeBasicInfo(obj, packageName, true);
 
-        JsonArray licenses = new JsonArray();
         JsonArray maintainers = new JsonArray();
-        JsonObject UnicodeLicense = new JsonObject();
         JsonObject primaryMaintainer = new JsonObject();
 
         obj.addProperty("homepage", "http://cldr.unicode.org");
@@ -702,10 +739,7 @@
         repository.addProperty("url", "git://github.com/unicode-cldr/" + packageName + ".git");
         obj.add("repository", repository);
 
-        UnicodeLicense.addProperty("type", "Unicode-TOU");
-        UnicodeLicense.addProperty("url", "http://www.unicode.org/copyright.html");
-        licenses.add(UnicodeLicense);
-        obj.add("licenses", licenses);
+        obj.addProperty("license", "Unicode-DFS-2016");
 
         obj.addProperty("bugs", "https://unicode-org.atlassian.net/projects/CLDR/issues");
 
@@ -761,13 +795,13 @@
     public void writeScriptMetadata(String outputDir) throws IOException {
         PrintWriter outf = FileUtilities.openUTF8Writer(outputDir + "/cldr-core", "scriptMetadata.json");
         System.out.println("Creating script metadata file => " + outputDir + File.separator + "cldr-core" + File.separator + "scriptMetadata.json");
-        Map<String, Info> scriptInfo = new TreeMap<String, Info>();
+        Map<String, Info> scriptInfo = new TreeMap<>();
         for (String script : ScriptMetadata.getScripts()) {
             Info i = ScriptMetadata.getInfo(script);
             scriptInfo.put(script, i);
         }
         if (ScriptMetadata.errors.size() > 0) {
-            System.err.println(CollectionUtilities.join(ScriptMetadata.errors, "\n\t"));
+            System.err.println(Joiner.on("\n\t").join(ScriptMetadata.errors));
             //throw new IllegalArgumentException();
         }
 
@@ -793,7 +827,7 @@
         ArrayList<CldrNode> nodesForLastItem,
         ArrayList<CldrItem> sortingItems)
         throws IOException, ParseException {
-        ArrayList<CldrItem> arrayItems = new ArrayList<CldrItem>();
+        ArrayList<CldrItem> arrayItems = new ArrayList<>();
         String lastLeadingArrayItemPath = null;
 
         if (!sortingItems.isEmpty()) {
@@ -1029,7 +1063,17 @@
 
         Map<String, String> attrAsValueMap = node.getAttrAsValueMap();
 
-        out.name(objName);
+        if( type == RunType.annotations || type == RunType.annotationsDerived ) {
+            if(objName.startsWith("U+")) {
+                // parse U+22 -> "   etc
+                out.name(com.ibm.icu.text.UTF16.valueOf(Integer.parseInt(objName.substring(2), 16)));
+            } else {
+                out.name(objName);
+            }
+        } else {
+            out.name(objName);
+        }
+
         out.beginObject();
         for (String key : attrAsValueMap.keySet()) {
             String value = escapeValue(attrAsValueMap.get(key));
@@ -1189,6 +1233,14 @@
         return i;
     }
 
+    private final String progressPrefix(AtomicInteger readCount, int totalCount) {
+        return progressPrefix(readCount.get(), totalCount);
+    }
+
+    private final String progressPrefix(int readCount, int totalCount) {
+        return String.format("[%d/%d]:\t", readCount, totalCount);
+    }
+
     /**
      * Process files in a directory of CLDR file tree.
      *
@@ -1205,28 +1257,63 @@
         Factory cldrFactory = Factory.make(
             cldrCommonDir + dirName + "/", ".*");
         Set<String> files = cldrFactory.getAvailable();
-        for (String filename : files) {
-            if (LdmlConvertRules.IGNORE_FILE_SET.contains(filename)) {
-                continue;
+        final int total = files.size();
+        AtomicInteger readCount = new AtomicInteger(0);
+        Map<String, Throwable> errs = new TreeMap<>();
+        files
+            .parallelStream()
+            .unordered()
+            .forEach(filename -> {
+
+                if (LdmlConvertRules.IGNORE_FILE_SET.contains(filename)) {
+                    return;
+                }
+                if (!filename.matches(match)) {
+                    return;
+                }
+
+                String pathPrefix;
+                CLDRFile file = cldrFactory.make(filename, resolve && type == RunType.main, minimalDraftStatus);
+                // Print 'reading' after the make, to stagger the output a little bit.
+                // Otherwise, the printout happens before any work happens, and is easily out of order.
+                System.out.println("<"+progressPrefix(readCount.incrementAndGet(), total) +
+                    "Reading " + dirName + "/" + filename);
+
+                if (type == RunType.main) {
+                    pathPrefix = "/cldr/" + dirName + "/" + filename.replaceAll("_", "-") + "/";
+                } else {
+                    pathPrefix = "/cldr/" + dirName + "/";
+                }
+
+                try {
+                    convertCldrItems(readCount, total, dirName, filename, pathPrefix, 
+                        mapPathsToSections(readCount, total, file, pathPrefix, sdi));
+                } catch(IOException | ParseException t) {
+                    t.printStackTrace();
+                    System.err.println("!"+progressPrefix(readCount.incrementAndGet(), total)+filename + " - err - " + t);
+                    errs.put(filename, t);
+                } finally {
+                    System.out.println("."+progressPrefix(readCount, total) + 
+                        "Completing " + dirName + "/" + filename);
+                }
+            });
+
+        if(!errs.isEmpty()) {
+            System.err.println("Errors in these files:");
+            for(Map.Entry<String,Throwable> e : errs.entrySet()) {
+                System.err.println(e.getKey() + " - " + e.getValue());
             }
-            if (!filename.matches(match)) {
-                continue;
+            // rethrow
+            for(Map.Entry<String,Throwable> e : errs.entrySet()) {
+                if(e.getValue() instanceof IOException ) {
+                    throw (IOException)e.getValue(); // throw the first one
+                } else if(e.getValue() instanceof ParseException ) {
+                    throw (ParseException)e.getValue(); // throw the first one
+                } else {
+                    throw new RuntimeException("Other exception thrown: "  + e.getValue());
+                }
+                /* NOTREACHED */
             }
-
-            System.out.println("Processing file " + dirName + "/" + filename);
-            String pathPrefix;
-            CLDRFile file = cldrFactory.make(filename, resolve && type == RunType.main, minimalDraftStatus);
-
-            sectionItems.clear();
-            if (type == RunType.main) {
-                pathPrefix = "/cldr/" + dirName + "/" + filename.replaceAll("_", "-") + "/";
-            } else {
-                pathPrefix = "/cldr/" + dirName + "/";
-            }
-            mapPathsToSections(file, pathPrefix, sdi);
-
-            convertCldrItems(dirName, filename, pathPrefix);
-
         }
 
         if (writePackages) {
@@ -1310,12 +1397,21 @@
         value = escapeValue(value);
 
         if (attrAsValueMap.isEmpty()) {
+            out.name(objName);
             if (value.isEmpty()) {
-                out.name(objName);
                 out.beginObject();
                 out.endObject();
+            } else if (type == RunType.annotations || 
+                type == RunType.annotationsDerived) {
+                out.beginArray();
+                // split this, so "a | b | c" becomes ["a","b","c"]
+                for (final String s : Annotations.splitter.split(value.trim())) {
+                    out.value(s);
+                }
+                out.endArray();
             } else {
-                out.name(objName).value(value);
+                // normal value
+                out.value(value);
             }
             return;
         }
@@ -1351,13 +1447,10 @@
                     out.value(s);
                 }
                 out.endArray();
-            } else {
-                if (type != RunType.rbnf) {
+            } else if (type != RunType.rbnf) {
                     out.name("_" + key).value(attrValue);
-                } else {
-                    out.name(key).value(attrValue);
-                }
-
+            } else {
+                out.name(key).value(attrValue);
             }
         }
         if (!objName.equals("rbnfrule")) {
diff --git a/tools/java/org/unicode/cldr/json/LdmlConvertRules.java b/tools/java/org/unicode/cldr/json/LdmlConvertRules.java
index 932b74f..b45185a 100644
--- a/tools/java/org/unicode/cldr/json/LdmlConvertRules.java
+++ b/tools/java/org/unicode/cldr/json/LdmlConvertRules.java
@@ -13,7 +13,7 @@
 class LdmlConvertRules {
 
     /** File sets that will not be processed in JSON transformation. */
-    public static final ImmutableSet<String> IGNORE_FILE_SET = ImmutableSet.of("attributeValueValidity", "coverageLevels", "grammaticalFeatures", "postalCodeData", "pluralRanges",
+    public static final ImmutableSet<String> IGNORE_FILE_SET = ImmutableSet.of("attributeValueValidity", "coverageLevels", "grammaticalFeatures", "postalCodeData",
         "subdivisions", "units");
 
     /**
@@ -26,6 +26,7 @@
         "monthWidth:month:yeartype",
         "characters:parseLenients:scope",
         "dateFormat:pattern:numbers",
+        "characterLabelPatterns:characterLabelPattern:count", // originally under characterLabels
         "currencyFormats:unitPattern:count",
         "currency:displayName:count",
         "numbers:symbols:numberSystem",
@@ -39,6 +40,10 @@
         "decimalFormat:pattern:count",
         "currencyFormat:pattern:count",
         "unit:unitPattern:count",
+        // compound units
+        "compoundUnit:compoundUnitPattern1:count",
+        "compoundUnit:compoundUnitPattern1:gender",
+        "compoundUnit:compoundUnitPattern1:case",
         "field:relative:type",
         "field:relativeTime:type",
         "relativeTime:relativeTimePattern:count",
@@ -53,8 +58,12 @@
         "unitPreferenceDataData:unitPreferences:category",
         "measurementData:measurementSystem:category",
         "supplemental:plurals:type",
+        "pluralRanges:pluralRange:start",
+        "pluralRanges:pluralRange:end",
         "pluralRules:pluralRule:count",
-        "languageMatches:languageMatch:desired");
+        "languageMatches:languageMatch:desired",
+        "styleNames:styleName:subtype",
+        "styleNames:styleName:alt");
 
     /**
      * The set of attributes that should become part of the name in form of
@@ -171,6 +180,9 @@
         // common/collation
         "collations:default:choice",
 
+        // common/supplemental/pluralRanges.xml
+        "pluralRanges:pluralRange:result",
+
         // identity elements
         "identity:language:type",
         "identity:script:type",
@@ -255,6 +267,7 @@
      */
     public static final SplittableAttributeSpec[] SPLITTABLE_ATTRS = {
         new SplittableAttributeSpec("calendarPreference", "territories", null),
+        new SplittableAttributeSpec("pluralRanges", "locales", null),
         new SplittableAttributeSpec("pluralRules", "locales", null),
         new SplittableAttributeSpec("minDays", "territories", "count"),
         new SplittableAttributeSpec("firstDay", "territories", "day"),
@@ -293,7 +306,7 @@
      * multiple items, and items for each locale should be grouped together.
      */
     public static final String[] ELEMENT_NEED_SORT = {
-        "zone", "timezone", "zoneItem", "typeMap", "dayPeriodRule",
+        "zone", "timezone", "zoneItem", "typeMap", "dayPeriodRule", "pluralRanges",
         "pluralRules", "personList", "calendarPreferenceData", "character-fallback", "types", "timeData", "minDays",
         "firstDay", "weekendStart", "weekendEnd", "measurementData", "measurementSystem"
     };
@@ -362,7 +375,7 @@
      * done by transforming the path. Following rules covers these kind of
      * transformation.
      * Note: It is important to keep the order for these rules. Whenever a
-     * rule matches, further rule won't be applied.
+     * rule matches, further rules won't be applied.
      */
     public static final PathTransformSpec PATH_TRANSFORMATIONS[] = {
         // Add "standard" as type attribute to exemplarCharacter element if there
@@ -401,6 +414,16 @@
         new PathTransformSpec("(.*)/types/type\\[@key=\"([^\"]*)\"\\]\\[@type=\"([^\"]*)\"\\](.*)$",
             "$1/types/$2/$3$4"),
 
+        // Typographic
+        new PathTransformSpec("(.*)/(typographicNames)/(axisName|featureName)\\[@type=\"([^\"]*)\"\\](.*)$",
+            "$1/$2/$3s/$4$5"),
+        new PathTransformSpec("(.*)/(typographicNames)/(styleName)(.*)$",
+            "$1/$2/$3s/$3$4"),
+
+        // put CharacterLabelPatterns under CharacterLabelPatterns
+        new PathTransformSpec("(.*)/(characterLabels)/(characterLabelPattern)(.*)$",
+            "$1/characterLabelPatterns/$3$4"),
+
         new PathTransformSpec(
             "(.*/numbers/(decimal|scientific|percent|currency)Formats\\[@numberSystem=\"([^\"]*)\"\\])/(decimal|scientific|percent|currency)FormatLength/(decimal|scientific|percent|currency)Format\\[@type=\"standard\"]/pattern.*$",
             "$1/standard"),
@@ -438,5 +461,12 @@
         new PathTransformSpec("(.*)/weekData/(.*)\\[@alt=\"variant\"\\](.*)", "$1/weekData/$2$3"),
         new PathTransformSpec("(.*)/unitPreferenceData/unitPreferences\\[@category=\"([^\"]*)\"\\]\\[@usage=\"([^\"]*)\"\\](.*)",
             "$1/unitPreferenceData/unitPreferences/$2/$3$4"),
+
+        // Annotations
+        // If there is a type, move that into a sibling value
+        new PathTransformSpec("(.*)/(annotations)/(annotation)\\[@cp=\"([^\"]*)\"\\]\\[@type=\"([^\"]*)\"\\](.*)$",
+                                "$1/$2/$4/$5$6"),
+        new PathTransformSpec("(.*)/(annotations)/(annotation)\\[@cp=\"([^\"]*)\"\\](.*)$",
+                                "$1/$2/$4/default$5"),
     };
 }
diff --git a/tools/java/org/unicode/cldr/posix/GenerateCharmap.java b/tools/java/org/unicode/cldr/posix/GenerateCharmap.java
index ca3be9b..ebb2637 100644
--- a/tools/java/org/unicode/cldr/posix/GenerateCharmap.java
+++ b/tools/java/org/unicode/cldr/posix/GenerateCharmap.java
@@ -69,6 +69,7 @@
                 CharacterAltName = "";
         }
 
+        @Override
         public int compareTo(Object o) {
             CharmapLine c = (CharmapLine) o;
             return (CharacterValue.compareTo(c.CharacterValue));
@@ -136,7 +137,7 @@
         int LongestCharNameLength = 0;
         int LongestCharValueLength = 0;
         UnicodeSet us = new UnicodeSet("[^[:Noncharacter_Code_Point:][:Cn:][:Cs:]]").retainAll(chars);
-        List<CharmapLine> cml = new ArrayList<CharmapLine>();
+        List<CharmapLine> cml = new ArrayList<>();
         CharmapLine current;
         for (UnicodeSetIterator it = new UnicodeSetIterator(us); it.next();) {
             String Name = POSIXUtilities.POSIXCharFullName(it.getString());
diff --git a/tools/java/org/unicode/cldr/posix/POSIXUtilities.java b/tools/java/org/unicode/cldr/posix/POSIXUtilities.java
index 048df43..de67258 100644
--- a/tools/java/org/unicode/cldr/posix/POSIXUtilities.java
+++ b/tools/java/org/unicode/cldr/posix/POSIXUtilities.java
@@ -23,7 +23,7 @@
 
     private static UnicodeSet repertoire = new UnicodeSet(0x0000, 0x10FFFF);
     private static CLDRFile char_fallbk;
-    private static Map<Integer, String> controlCodeNames = new HashMap<Integer, String>();
+    private static Map<Integer, String> controlCodeNames = new HashMap<>();
 
     // Since UCharacter.getExtendedName() in ICU doesn't provide the names for control characters
     // we have to force the issue here. Required elements for the POSIX portable character set will be
diff --git a/tools/java/org/unicode/cldr/posix/POSIX_LCCollate.java b/tools/java/org/unicode/cldr/posix/POSIX_LCCollate.java
index 7bb7d91..3fbcdc8 100644
--- a/tools/java/org/unicode/cldr/posix/POSIX_LCCollate.java
+++ b/tools/java/org/unicode/cldr/posix/POSIX_LCCollate.java
@@ -173,9 +173,9 @@
         }
     }
 
-    Set<Weights> nonUniqueWeights = new HashSet<Weights>();
-    Set<Weights> allWeights = new HashSet<Weights>();
-    Map<String, Weights> stringToWeights = new HashMap<String, Weights>();
+    Set<Weights> nonUniqueWeights = new HashSet<>();
+    Set<Weights> allWeights = new HashSet<>();
+    Map<String, Weights> stringToWeights = new HashMap<>();
 
     private void writeList(PrintWriter out) {
         // BitSet alreadySeen = new BitSet();
@@ -287,6 +287,7 @@
             }
         }
 
+        @Override
         public boolean equals(Object other) {
             Weights that = (Weights) other;
             return primaries.equals(that.primaries)
@@ -294,6 +295,7 @@
                 && tertiaries.equals(that.tertiaries);
         }
 
+        @Override
         public int hashCode() {
             return (primaries.hashCode() * 37
                 + secondaries.hashCode()) * 37
@@ -320,6 +322,7 @@
                 s.set(weights[j]);
         }
 
+        @Override
         public String toString() {
             if (count == 0) return "IGNORE";
             if (count == 1) return getID('X', weights[0]);
@@ -330,6 +333,7 @@
             return result + "\"";
         }
 
+        @Override
         public boolean equals(Object other) {
             WeightList that = (WeightList) other;
             for (int j = 0; j < count; ++j) {
@@ -338,6 +342,7 @@
             return true;
         }
 
+        @Override
         public int hashCode() {
             int result = count;
             for (int j = 0; j < count; ++j)
diff --git a/tools/java/org/unicode/cldr/test/BuildIcuCompactDecimalFormat.java b/tools/java/org/unicode/cldr/test/BuildIcuCompactDecimalFormat.java
index afa5c9f..eef66c1 100644
--- a/tools/java/org/unicode/cldr/test/BuildIcuCompactDecimalFormat.java
+++ b/tools/java/org/unicode/cldr/test/BuildIcuCompactDecimalFormat.java
@@ -57,8 +57,8 @@
     }
 
     public static Map<String, Map<String, String>> buildCustomData(CLDRFile resolvedCldrFile, CompactStyle style, CurrencyStyle currencyStyle) {
-        
-        final Map<String, Map<String, String>> customData = new TreeMap<String, Map<String, String>>();
+
+        final Map<String, Map<String, String>> customData = new TreeMap<>();
 
         String prefix = currencyStyle == CurrencyStyle.PLAIN ? "//ldml/numbers/decimalFormats[@numberSystem=\"latn\"]/decimalFormatLength"
             : "//ldml/numbers/currencyFormats[@numberSystem=\"latn\"]/currencyFormatLength";
@@ -116,6 +116,6 @@
             String currencySymbol = cldrFile.getWinningValue(prefix + "symbol");
             return currencySymbol != null ? currencySymbol : currencyCode;
         }
-    };
+    }
 
 }
diff --git a/tools/java/org/unicode/cldr/test/CLDRTest.java b/tools/java/org/unicode/cldr/test/CLDRTest.java
index ea1c261..bf0b452 100644
--- a/tools/java/org/unicode/cldr/test/CLDRTest.java
+++ b/tools/java/org/unicode/cldr/test/CLDRTest.java
@@ -6,6 +6,8 @@
  */
 package org.unicode.cldr.test;
 
+import static org.unicode.cldr.util.PathUtilities.getNormalizedPath;
+
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
@@ -30,6 +32,7 @@
 import org.unicode.cldr.util.CldrUtility;
 import org.unicode.cldr.util.Factory;
 import org.unicode.cldr.util.LanguageTagParser;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.SimpleFactory;
 import org.unicode.cldr.util.StandardCodes;
 import org.unicode.cldr.util.TimezoneFormatter;
@@ -75,10 +78,10 @@
         "[[:script=common:][:script=inherited:][:alphabetic=false:]]");
     private static final String[] WIDTHS = { "narrow", "wide", "abbreviated", "short" };
     private static final String[] MONTHORDAYS = { "day", "month" };
-    private Map<String, String> localeNameCache = new HashMap<String, String>();
+    private Map<String, String> localeNameCache = new HashMap<>();
     private CLDRFile english = null;
 
-    private Set<String> surveyInfo = new TreeSet<String>();
+    private Set<String> surveyInfo = new TreeSet<>();
 
     /**
      * TestFmwk boilerplate
@@ -172,8 +175,8 @@
     public void TestCommonChildren() {
         if (disableUntilLater("TestCommonChildren")) return;
 
-        Map<String, ValueCount> currentValues = new TreeMap<String, ValueCount>();
-        Set<String> okValues = new TreeSet<String>();
+        Map<String, ValueCount> currentValues = new TreeMap<>();
+        Set<String> okValues = new TreeSet<>();
 
         for (String parent : languageLocales) {
             logln("Testing: " + parent);
@@ -236,7 +239,7 @@
     public void TestThatExemplarsContainAll() {
         UnicodeSet allExemplars = new UnicodeSet();
         if (disableUntilLater("TestThatExemplarsContainAll")) return;
-        Set<String> counts = new TreeSet<String>();
+        Set<String> counts = new TreeSet<>();
         int totalCount = 0;
         UnicodeSet localeMissing = new UnicodeSet();
         for (String locale : locales) {
@@ -421,8 +424,8 @@
      */
     public void TestForIllegalAttributeValues() {
         // check for illegal attribute values that are not in the DTD
-        Map<String, Set<String>> result = new TreeMap<String, Set<String>>();
-        Map<String, Set<String>> totalResult = new TreeMap<String, Set<String>>();
+        Map<String, Set<String>> result = new TreeMap<>();
+        Map<String, Set<String>> totalResult = new TreeMap<>();
         for (String locale : locales) {
             logln("Testing: " + locale);
             CLDRFile item = cldrFactory.make(locale, false);
@@ -442,7 +445,7 @@
                 Set<String> avalues = result.get(code);
                 errln(getLocaleAndName(locale) + "\tillegal attribute value for " + code + ", value:\t" + show(avalues));
                 Set<String> totalvalues = totalResult.get(code);
-                if (totalvalues == null) totalResult.put(code, totalvalues = new TreeSet<String>());
+                if (totalvalues == null) totalResult.put(code, totalvalues = new TreeSet<>());
                 totalvalues.addAll(avalues);
             }
         }
@@ -463,9 +466,9 @@
 
         Map<String, String>[] maps = new HashMap[CLDRFile.LIMIT_TYPES];
         for (int i = 0; i < maps.length; ++i) {
-            maps[i] = new HashMap<String, String>();
+            maps[i] = new HashMap<>();
         }
-        Set<String> collisions = new TreeSet<String>();
+        Set<String> collisions = new TreeSet<>();
         for (Iterator<String> it = locales.iterator(); it.hasNext();) {
             String locale = it.next();
             CLDRFile item = cldrFactory.make(locale, true);
@@ -575,7 +578,7 @@
         if (results == null) return;
         Set<String> s = results.get(code);
         if (s == null) {
-            s = new TreeSet<String>();
+            s = new TreeSet<>();
             results.put(code, s);
         }
         s.add(avalue);
@@ -616,8 +619,8 @@
     private void checkTranslatedCode(CLDRFile cldrfile, StandardCodes codes, String type, String prefix, String postfix) {
 
         // TODO, expand to other languages
-        Map<String, Set<String>> completionExceptions = new HashMap<String, Set<String>>();
-        Set<String> scriptExceptions = new HashSet<String>();
+        Map<String, Set<String>> completionExceptions = new HashMap<>();
+        Set<String> scriptExceptions = new HashSet<>();
         scriptExceptions.add("Cham");
         scriptExceptions.add("Thai");
         completionExceptions.put("script", scriptExceptions);
@@ -710,7 +713,7 @@
                 if (scripts == null)
                     language_scripts.put(language, new TreeSet<String>());
                 else {
-                    language_scripts.put(language, new TreeSet<String>(CldrUtility.splitList(scripts, ' ', true)));
+                    language_scripts.put(language, new TreeSet<>(CldrUtility.splitList(scripts, ' ', true)));
                     if (SHOW)
                         System.out.println(getIDAndLocalization(language) + "\t\t"
                             + getIDAndLocalization(language_scripts.get(language)));
@@ -719,7 +722,7 @@
                 if (territories == null)
                     language_territories.put(language, new TreeSet<String>());
                 else {
-                    language_territories.put(language, new TreeSet<String>(CldrUtility.splitList(territories, ' ', true)));
+                    language_territories.put(language, new TreeSet<>(CldrUtility.splitList(territories, ' ', true)));
                     if (SHOW)
                         System.out.println(getIDAndLocalization(language) + "\t\t"
                             + getIDAndLocalization(language_territories.get(language)));
@@ -737,8 +740,8 @@
         if (disableUntilLater("TestMinimalLocalization")) return;
 
         boolean testDraft = false;
-        Map<String, Set<String>> language_scripts = new HashMap<String, Set<String>>();
-        Map<String, Set<String>> language_territories = new HashMap<String, Set<String>>();
+        Map<String, Set<String>> language_scripts = new HashMap<>();
+        Map<String, Set<String>> language_territories = new HashMap<>();
         getSupplementalData(language_scripts, language_territories, null, null, null);
         LanguageTagParser localIDParser = new LanguageTagParser();
         // see http://oss.software.ibm.com/cvs/icu/~checkout~/locale/docs/design/minimal_requirements.htm
@@ -762,7 +765,7 @@
             String language = localIDParser.getLanguage();
             logln("Testing: " + locale);
             // languages
-            Set<String> languages = new TreeSet<String>(CldrUtility.MINIMUM_LANGUAGES);
+            Set<String> languages = new TreeSet<>(CldrUtility.MINIMUM_LANGUAGES);
             languages.add(language);
             // LANGUAGE_NAME = 0, SCRIPT_NAME = 1, TERRITORY_NAME = 2, VARIANT_NAME = 3,
             // CURRENCY_NAME = 4, CURRENCY_SYMBOL = 5, TZID = 6
@@ -775,18 +778,18 @@
              * checkTranslatedCode(cldrfile, codes, "variant", "//ldml/localeDisplayNames/variants/variant");
              */
 
-            Set<String> scripts = new TreeSet<String>();
+            Set<String> scripts = new TreeSet<>();
             scripts.add("Latn");
             Set<String> others = language_scripts.get(language);
             if (others != null) scripts.addAll(others);
             checkForItems(item, scripts, CLDRFile.SCRIPT_NAME, missing, failureCount, null);
 
-            Set<String> countries = new TreeSet<String>(CldrUtility.MINIMUM_TERRITORIES);
+            Set<String> countries = new TreeSet<>(CldrUtility.MINIMUM_TERRITORIES);
             others = language_territories.get(language);
             if (others != null) countries.addAll(others);
             checkForItems(item, countries, CLDRFile.TERRITORY_NAME, missing, failureCount, null);
 
-            Set<String> currencies = new TreeSet<String>();
+            Set<String> currencies = new TreeSet<>();
             StandardCodes sc = StandardCodes.make();
             for (Iterator<String> it2 = countries.iterator(); it2.hasNext();) {
                 String country = it2.next();
@@ -801,10 +804,10 @@
             checkForItems(item, currencies, CLDRFile.CURRENCY_SYMBOL, missing, failureCount, exemplars);
 
             // context=format and width=wide; context=stand-alone & width=abbreviated
-            Set<String> months = new TreeSet<String>();
+            Set<String> months = new TreeSet<>();
             for (int i = 1; i <= 12; ++i)
                 months.add(i + "");
-            Set<String> days = new TreeSet<String>(Arrays.asList(new String[] { "sun", "mon", "tue", "wed", "thu", "fri", "sat" }));
+            Set<String> days = new TreeSet<>(Arrays.asList(new String[] { "sun", "mon", "tue", "wed", "thu", "fri", "sat" }));
             for (int i = -7; i < 0; ++i) {
                 checkForItems(item, (i < -4 ? months : days), i, missing, failureCount, null);
             }
@@ -816,7 +819,7 @@
                 out.close();
                 // String s = getIDAndLocalization(missing);
                 String message = "missing localizations, creating file"
-                    + new File(CLDRPaths.GEN_DIRECTORY + "missing/", filename).getCanonicalPath();
+                    + getNormalizedPath(CLDRPaths.GEN_DIRECTORY, "missing", filename);
                 if (failureCount[0] > 0)
                     warnln(getLocaleAndName(locale) + "\t" + message);
                 else
@@ -906,6 +909,7 @@
      */
 
     CldrUtility.CollectionTransform EnglishName = new CldrUtility.CollectionTransform() {
+        @Override
         public Object transform(Object source) {
             // TODO Auto-generated method stub
             return getLocalization(source.toString()) + " (" + source + ")";
@@ -913,6 +917,7 @@
     };
 
     CldrUtility.CollectionTransform EnglishCurrencyName = new CldrUtility.CollectionTransform() {
+        @Override
         public Object transform(Object source) {
             if (english == null) english = cldrFactory.make("en", true);
             return english.getName("currency", source.toString()) + " (" + source + ")";
@@ -924,13 +929,13 @@
      *
      */
     public void TestSupplementalData() {
-        Map<String, Set<String>> language_scripts = new TreeMap<String, Set<String>>();
-        Map<String, Set<String>> language_territories = new TreeMap<String, Set<String>>();
-        Map<String, Set<String>> groups = new TreeMap<String, Set<String>>();
-        Map<String, Set<String>> territory_currencies = new TreeMap<String, Set<String>>();
-        Map<String, Map<String, String>> aliases = new TreeMap<String, Map<String, String>>();
+        Map<String, Set<String>> language_scripts = new TreeMap<>();
+        Map<String, Set<String>> language_territories = new TreeMap<>();
+        Map<String, Set<String>> groups = new TreeMap<>();
+        Map<String, Set<String>> territory_currencies = new TreeMap<>();
+        Map<String, Map<String, String>> aliases = new TreeMap<>();
         getSupplementalData(language_scripts, language_territories, groups, territory_currencies, aliases);
-        Set<String> sTerritories = new TreeSet<String>();
+        Set<String> sTerritories = new TreeSet<>();
         for (Iterator<Set<String>> it = language_territories.values().iterator(); it.hasNext();) {
             sTerritories.addAll(it.next());
         }
@@ -938,7 +943,7 @@
         Set<String> fullTerritories = sc.getAvailableCodes("territory");
         Set<String> fullLanguages = sc.getAvailableCodes("language");
 
-        Set<String> allLanguages = new TreeSet<String>(language_scripts.keySet());
+        Set<String> allLanguages = new TreeSet<>(language_scripts.keySet());
         allLanguages.addAll(language_territories.keySet());
         for (Iterator<String> it = allLanguages.iterator(); it.hasNext();) {
             Object language = it.next();
@@ -949,7 +954,7 @@
                 + " territories: " + EnglishName.transform(territories));
         }
 
-        Map<String, String> changedLanguage = new TreeMap<String, String>();
+        Map<String, String> changedLanguage = new TreeMap<>();
         for (Iterator<String> it = fullLanguages.iterator(); it.hasNext();) {
             String code = it.next();
             List<String> data = sc.getFullData("language", code);
@@ -965,8 +970,8 @@
         }
 
         // remove private use, deprecated, groups
-        Set<String> standardTerritories = new TreeSet<String>();
-        Map<String, String> changedTerritory = new TreeMap<String, String>();
+        Set<String> standardTerritories = new TreeSet<>();
+        Map<String, String> changedTerritory = new TreeMap<>();
         for (Iterator<String> it = fullTerritories.iterator(); it.hasNext();) {
             String code = it.next();
             if (code.equals("200")) continue; // || code.equals("YU") || code.equals("PZ")
@@ -981,12 +986,12 @@
         standardTerritories.removeAll(groups.keySet());
 
         if (!standardTerritories.containsAll(sTerritories)) {
-            TreeSet<String> extras = new TreeSet<String>(sTerritories);
+            TreeSet<String> extras = new TreeSet<>(sTerritories);
             extras.removeAll(standardTerritories);
             errln("Supplemental Language Territories contain illegal values: " + EnglishName.transform(extras));
         }
         if (!sTerritories.containsAll(standardTerritories)) {
-            TreeSet<String> extras = new TreeSet<String>(standardTerritories);
+            TreeSet<String> extras = new TreeSet<>(standardTerritories);
             extras.removeAll(sTerritories);
             warnln("Missing Language Territories: " + EnglishName.transform(extras));
         }
@@ -994,26 +999,26 @@
         // now test currencies
         logln("Check that no illegal territories are used");
         if (!standardTerritories.containsAll(territory_currencies.keySet())) {
-            TreeSet<String> extras = new TreeSet<String>(territory_currencies.keySet());
+            TreeSet<String> extras = new TreeSet<>(territory_currencies.keySet());
             extras.removeAll(fullTerritories);
             if (extras.size() != 0) errln("Currency info -- Illegal Territories: " + EnglishName.transform(extras));
-            extras = new TreeSet<String>(territory_currencies.keySet());
+            extras = new TreeSet<>(territory_currencies.keySet());
             extras.retainAll(fullTerritories);
             extras.removeAll(standardTerritories);
             if (extras.size() != 0) warnln("Currency info -- Archaic Territories: " + EnglishName.transform(extras));
         }
         logln("Check that no territories are missing");
         if (!territory_currencies.keySet().containsAll(standardTerritories)) {
-            TreeSet<String> extras = new TreeSet<String>(standardTerritories);
+            TreeSet<String> extras = new TreeSet<>(standardTerritories);
             extras.removeAll(territory_currencies.keySet());
             errln("Currency info -- Missing Territories: " + EnglishName.transform(extras));
         }
-        Set<String> currencies = new TreeSet<String>();
+        Set<String> currencies = new TreeSet<>();
         for (Iterator<Set<String>> it = territory_currencies.values().iterator(); it.hasNext();) {
             currencies.addAll(it.next());
         }
         logln("Check that no illegal currencies are used");
-        Set<String> legalCurrencies = new TreeSet<String>(sc.getAvailableCodes("currency"));
+        Set<String> legalCurrencies = new TreeSet<>(sc.getAvailableCodes("currency"));
         // first remove non-ISO
         for (Iterator<String> it = legalCurrencies.iterator(); it.hasNext();) {
             String code = it.next();
@@ -1021,22 +1026,22 @@
             if ("X".equals(data.get(3))) it.remove();
         }
         if (!legalCurrencies.containsAll(currencies)) {
-            TreeSet<String> extras = new TreeSet<String>(currencies);
+            TreeSet<String> extras = new TreeSet<>(currencies);
             extras.removeAll(legalCurrencies);
             errln("Currency info -- Illegal Currencies: " + EnglishCurrencyName.transform(extras));
         }
         logln("Check that there are no missing currencies");
         if (!currencies.containsAll(legalCurrencies)) {
-            TreeSet<String> extras = new TreeSet<String>(legalCurrencies);
+            TreeSet<String> extras = new TreeSet<>(legalCurrencies);
             extras.removeAll(currencies);
-            Map<String, Set<String>> failures = new TreeMap<String, Set<String>>();
+            Map<String, Set<String>> failures = new TreeMap<>();
             for (Iterator<String> it = extras.iterator(); it.hasNext();) {
                 String code = it.next();
                 List<String> data = sc.getFullData("currency", code);
                 if (data.get(1).equals("ZZ")) continue;
                 String type = data.get(3) + "/" + data.get(1);
                 Set<String> s = failures.get(type);
-                if (s == null) failures.put(type, s = new TreeSet<String>());
+                if (s == null) failures.put(type, s = new TreeSet<>());
                 s.add(code);
             }
             for (Iterator<String> it = failures.keySet().iterator(); it.hasNext();) {
@@ -1118,14 +1123,14 @@
         }
 
         logln("Checking that all links are TO canonical zones");
-        Set<String> s = new TreeSet<String>(old_new.values());
+        Set<String> s = new TreeSet<>(old_new.values());
         s.removeAll(core);
         if (s.size() != 0) {
             errln("Links go TO zones that are not canonical! " + s);
         }
 
         logln("Checking that no links are FROM canonical zones");
-        s = new TreeSet<String>(core);
+        s = new TreeSet<>(core);
         s.retainAll(old_new.keySet());
         if (s.size() != 0) {
             errln("Links go FROM zones that are canonical! " + s);
@@ -1149,7 +1154,7 @@
             String oldItem = it.next();
             logln("old: " + oldItem + "\tnew: " + old_new.get(oldItem));
         }
-        Map<String, Set<String>> new_old = new TreeMap<String, Set<String>>();
+        Map<String, Set<String>> new_old = new TreeMap<>();
         for (Iterator<String> it = core.iterator(); it.hasNext();) {
             new_old.put(it.next(), new TreeSet<String>());
         }
diff --git a/tools/java/org/unicode/cldr/test/CasingInfo.java b/tools/java/org/unicode/cldr/test/CasingInfo.java
index 1dd0098..22c0435 100644
--- a/tools/java/org/unicode/cldr/test/CasingInfo.java
+++ b/tools/java/org/unicode/cldr/test/CasingInfo.java
@@ -50,7 +50,7 @@
     private List<File> casingDirs;
 
     public CasingInfo(Factory factory) {
-        casingDirs = new ArrayList<File>();
+        casingDirs = new ArrayList<>();
         for (File f : factory.getSourceDirectories()) {
             this.casingDirs.add(new File(f.getAbsolutePath() + "/../casing"));
         }
@@ -61,7 +61,7 @@
      * ONLY usable in command line tests.
      */
     public CasingInfo() {
-        casingDirs = new ArrayList<File>();
+        casingDirs = new ArrayList<>();
         this.casingDirs.add(new File(CLDRPaths.CASING_DIRECTORY));
         casing = CldrUtility.newConcurrentHashMap();
     }
@@ -122,10 +122,10 @@
         Set<String> defaultContentLocales = supplementalDataInfo.getDefaultContentLocales();
         String sourceDirectory = CldrUtility.checkValidDirectory(CLDRPaths.MAIN_DIRECTORY);
         Factory cldrFactory = Factory.make(sourceDirectory, localePattern);
-        Set<String> locales = new LinkedHashSet<String>(cldrFactory.getAvailable());
+        Set<String> locales = new LinkedHashSet<>(cldrFactory.getAvailable());
         locales.removeAll(defaultContentLocales); // Skip all default content locales
         UnicodeSet allCaps = new UnicodeSet("[:Lu:]");
-        Map<String, Boolean> localeUsesCasing = new HashMap<String, Boolean>();
+        Map<String, Boolean> localeUsesCasing = new HashMap<>();
         LocaleIDParser parser = new LocaleIDParser();
 
         for (String localeID : locales) {
@@ -199,7 +199,7 @@
     private void createCasingXml(String localeID, Map<Category, CasingType> localeCasing) {
         // Load any existing overrides over casing info.
         CasingHandler handler = loadFromXml(localeID);
-        Map<Category, CasingType> overrides = handler == null ? new EnumMap<Category, CasingType>(Category.class) : handler.getOverrides();
+        Map<Category, CasingType> overrides = handler == null ? new EnumMap<>(Category.class) : handler.getOverrides();
         localeCasing.putAll(overrides);
 
         XMLSource source = new SimpleXMLSource(localeID);
@@ -247,8 +247,8 @@
     private class CasingHandler extends XMLFileReader.SimpleHandler {
         private Pattern localePattern = PatternCache.get("//ldml/identity/language\\[@type=\"(\\w+)\"\\]");
         private String localeID;
-        private Map<Category, CasingTypeAndErrFlag> caseMap = new EnumMap<Category, CasingTypeAndErrFlag>(Category.class);
-        private Map<Category, CasingType> overrideMap = new EnumMap<Category, CasingType>(Category.class);
+        private Map<Category, CasingTypeAndErrFlag> caseMap = new EnumMap<>(Category.class);
+        private Map<Category, CasingType> overrideMap = new EnumMap<>(Category.class);
 
         @Override
         public void handlePathValue(String path, String value) {
diff --git a/tools/java/org/unicode/cldr/test/CheckAlt.java b/tools/java/org/unicode/cldr/test/CheckAlt.java
index 581fb20..23c3707 100644
--- a/tools/java/org/unicode/cldr/test/CheckAlt.java
+++ b/tools/java/org/unicode/cldr/test/CheckAlt.java
@@ -9,10 +9,11 @@
 
 public class CheckAlt extends CheckCLDR {
 
-    Set<String> seenSoFar = new HashSet<String>();
+    Set<String> seenSoFar = new HashSet<>();
 
     // determine if we have an alt=...proposed
     // if we have one, and there is not a non-proposed version -- in this same file, unaliased, there's a problem.
+    @Override
     public CheckCLDR handleCheck(String path, String fullPath, String value,
         Options options, List<CheckStatus> result) {
         if (fullPath == null) return this; // skip paths that we don't have
diff --git a/tools/java/org/unicode/cldr/test/CheckAttributeValues.java b/tools/java/org/unicode/cldr/test/CheckAttributeValues.java
index bd15a32..209b0fb 100644
--- a/tools/java/org/unicode/cldr/test/CheckAttributeValues.java
+++ b/tools/java/org/unicode/cldr/test/CheckAttributeValues.java
@@ -13,6 +13,7 @@
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
+import java.util.function.Predicate;
 import java.util.regex.Pattern;
 
 import org.unicode.cldr.test.CheckCLDR.CheckStatus.Subtype;
@@ -33,7 +34,6 @@
 import org.unicode.cldr.util.SupplementalDataInfo.PluralType;
 import org.unicode.cldr.util.XPathParts;
 
-import com.ibm.icu.dev.util.CollectionUtilities.ObjectMatcher;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
@@ -41,21 +41,21 @@
 
 public class CheckAttributeValues extends FactoryCheckCLDR {
 
-    private static final ObjectMatcher<String> NOT_DONE_YET = new RegexMatcher().set(".*", Pattern.COMMENTS);
+    private static final Predicate<String> NOT_DONE_YET = new RegexMatcher().set(".*", Pattern.COMMENTS);
     private static final boolean FIND_MISSING = CldrUtility.getProperty("FIND_MISSING_ATTRIBUTE_TESTS", false); // turn on to show <attributeValues> that are missing.
     private static final boolean SHOW_UNNECESSARY = false; // turn on to show <attributeValues> we should delete.
 
-    static LinkedHashSet<String> elementOrder = new LinkedHashSet<String>();
-    static LinkedHashSet<String> attributeOrder = new LinkedHashSet<String>();
-    static LinkedHashSet<String> serialElements = new LinkedHashSet<String>();
-    static Map<String, Map<String, MatcherPattern>> element_attribute_validity = new HashMap<String, Map<String, MatcherPattern>>();
-    static Map<String, MatcherPattern> common_attribute_validity = new HashMap<String, MatcherPattern>();
-    static Map<String, MatcherPattern> variables = new HashMap<String, MatcherPattern>();
+    static LinkedHashSet<String> elementOrder = new LinkedHashSet<>();
+    static LinkedHashSet<String> attributeOrder = new LinkedHashSet<>();
+    static LinkedHashSet<String> serialElements = new LinkedHashSet<>();
+    static Map<String, Map<String, MatcherPattern>> element_attribute_validity = new HashMap<>();
+    static Map<String, MatcherPattern> common_attribute_validity = new HashMap<>();
+    static Map<String, MatcherPattern> variables = new HashMap<>();
     // static VariableReplacer variableReplacer = new VariableReplacer(); // note: this can be coalesced with the above
     // -- to do later.
     static boolean initialized = false;
     static LocaleMatcher localeMatcher;
-    static Map<String, Map<String, String>> code_type_replacement = new TreeMap<String, Map<String, String>>();
+    static Map<String, Map<String, String>> code_type_replacement = new TreeMap<>();
     static final SupplementalDataInfo supplementalData = CLDRConfig.getInstance().getSupplementalDataInfo();
     static DtdData ldmlDtdData = DtdData.getInstance(DtdType.ldml);
 
@@ -69,12 +69,14 @@
         super(factory);
     }
 
+    @Override
     public void handleFinish() {
         for (Entry<String, Set<String>> entry : missingTests.keyValuesSet()) {
             System.out.println("Missing element: " + entry.getKey() + ", attributes: " + entry.getValue());
         }
     }
 
+    @Override
     public CheckCLDR handleCheck(String path, String fullPath, String value, Options options,
         List<CheckStatus> result) {
         if (fullPath == null) return this; // skip paths that we don't have
@@ -191,7 +193,7 @@
         if (matcherPattern == null) {
             return false; // no test
         }
-        if (matcherPattern.matcher.matches(attributeValue)) {
+        if (matcherPattern.matcher.test(attributeValue)) {
             return true;
         }
         // special check for deprecated codes
@@ -261,7 +263,7 @@
                 localeMatcher = LocaleMatcher.make();
             }
         }
-        if (!localeMatcher.matches(cldrFileToCheck.getLocaleID())) {
+        if (!localeMatcher.test(cldrFileToCheck.getLocaleID())) {
             possibleErrors.add(new CheckStatus()
                 .setCause(this).setMainType(CheckStatus.errorType).setSubtype(Subtype.invalidLocale)
                 .setMessage("Invalid Locale {0}",
@@ -333,7 +335,7 @@
                     // System.out.println("\t" + element);
                     Map<String, MatcherPattern> attribute_validity = element_attribute_validity.get(element);
                     if (attribute_validity == null) {
-                        element_attribute_validity.put(element, attribute_validity = new TreeMap<String, MatcherPattern>());
+                        element_attribute_validity.put(element, attribute_validity = new TreeMap<>());
                     }
                     addAttributes(attributeList, attribute_validity, mp);
                 }
@@ -420,7 +422,7 @@
         result.value = value;
         if ("choice".equals(typeAttribute)) {
             result.matcher = new CollectionMatcher()
-                .set(new HashSet<String>(Arrays.asList(value.trim().split("\\s+"))));
+                .set(new HashSet<>(Arrays.asList(value.trim().split("\\s+"))));
         } else if ("bcp47".equals(typeAttribute)) {
             result = getBcp47MatcherPattern(value);
         } else if ("regex".equals(typeAttribute)) {
@@ -449,74 +451,79 @@
 
     private static class MatcherPattern {
         public String value;
-        ObjectMatcher<String> matcher;
+        Predicate<String> matcher;
         String pattern;
 
+        @Override
         public String toString() {
             return matcher.getClass().getName() + "\t" + pattern;
         }
     }
 
-    public static class RegexMatcher implements ObjectMatcher<String> {
+    public static class RegexMatcher implements Predicate<String> {
         private java.util.regex.Matcher matcher;
 
-        public ObjectMatcher<String> set(String pattern) {
+        public Predicate<String> set(String pattern) {
             matcher = PatternCache.get(pattern).matcher("");
             return this;
         }
 
-        public ObjectMatcher<String> set(String pattern, int flags) {
+        public Predicate<String> set(String pattern, int flags) {
             matcher = Pattern.compile(pattern, flags).matcher("");
             return this;
         }
 
-        public boolean matches(String value) {
+        @Override
+        public boolean test(String value) {
             matcher.reset(value.toString());
             return matcher.matches();
         }
     }
 
-    public static class CollectionMatcher implements ObjectMatcher<String> {
+    public static class CollectionMatcher implements Predicate<String> {
         private Collection<String> collection;
 
-        public ObjectMatcher<String> set(Collection<String> collection) {
+        public Predicate<String> set(Collection<String> collection) {
             this.collection = collection;
             return this;
         }
 
-        public boolean matches(String value) {
+        @Override
+        public boolean test(String value) {
             return collection.contains(value);
         }
     }
 
-    public static class OrMatcher implements ObjectMatcher<String> {
-        private ObjectMatcher<String> a;
-        private ObjectMatcher<String> b;
+    public static class OrMatcher implements Predicate<String> {
+        private Predicate<String> a;
+        private Predicate<String> b;
 
-        public ObjectMatcher<String> set(ObjectMatcher<String> a, ObjectMatcher<String> b) {
+        public Predicate<String> set(Predicate<String> a, Predicate<String> b) {
             this.a = a;
             this.b = b;
             return this;
         }
 
-        public boolean matches(String value) {
-            return a.matches(value) || b.matches(value);
+        @Override
+        public boolean test(String value) {
+            return a.test(value) || b.test(value);
         }
     }
 
-    public static class ListMatcher implements ObjectMatcher<String> {
-        private ObjectMatcher<String> other;
+    public static class ListMatcher implements Predicate<String> {
+        private Predicate<String> other;
 
-        public ObjectMatcher<String> set(ObjectMatcher<String> other) {
+        public Predicate<String> set(Predicate<String> other) {
             this.other = other;
             return this;
         }
 
-        public boolean matches(String value) {
+        @Override
+        public boolean test(String value) {
             String[] values = value.trim().split("\\s+");
             if (values.length == 1 && values[0].length() == 0) return true;
             for (int i = 0; i < values.length; ++i) {
-                if (!other.matches(values[i])) {
+                if (!other.test(values[i])) {
                     return false;
                 }
             }
@@ -524,12 +531,12 @@
         }
     }
 
-    public static class LocaleMatcher implements ObjectMatcher<String> {
-        ObjectMatcher<String> grandfathered = variables.get("$grandfathered").matcher;
-        ObjectMatcher<String> language = variables.get("$language").matcher;
-        ObjectMatcher<String> script = variables.get("$script").matcher;
-        ObjectMatcher<String> territory = variables.get("$territory").matcher;
-        ObjectMatcher<String> variant = variables.get("$variant").matcher;
+    public static class LocaleMatcher implements Predicate<String> {
+        Predicate<String> legacy = variables.get("$grandfathered").matcher;
+        Predicate<String> language = variables.get("$language").matcher;
+        Predicate<String> script = variables.get("$script").matcher;
+        Predicate<String> territory = variables.get("$territory").matcher;
+        Predicate<String> variant = variables.get("$variant").matcher;
         LocaleIDParser lip = new LocaleIDParser();
         static LocaleMatcher singleton = null;
         static Object sync = new Object();
@@ -546,21 +553,22 @@
             return singleton;
         }
 
-        public boolean matches(String value) {
-            if (grandfathered.matches(value)) return true;
+        @Override
+        public boolean test(String value) {
+            if (legacy.test(value)) return true;
             lip.set((String) value);
             String field = lip.getLanguage();
-            if (!language.matches(field)) return false;
+            if (!language.test(field)) return false;
             field = lip.getScript();
-            if (field.length() != 0 && !script.matches(field)) return false;
+            if (field.length() != 0 && !script.test(field)) return false;
             field = lip.getRegion();
-            if (field.length() != 0 && !territory.matches(field)) return false;
+            if (field.length() != 0 && !territory.test(field)) return false;
             String[] fields = lip.getVariants();
             for (int i = 0; i < fields.length; ++i) {
-                if (!variant.matches(fields[i])) return false;
+                if (!variant.test(fields[i])) return false;
             }
             return true;
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/tools/java/org/unicode/cldr/test/CheckCLDR.java b/tools/java/org/unicode/cldr/test/CheckCLDR.java
index e6ee4cc..4bbf23b 100644
--- a/tools/java/org/unicode/cldr/test/CheckCLDR.java
+++ b/tools/java/org/unicode/cldr/test/CheckCLDR.java
@@ -12,7 +12,6 @@
 import java.text.ParsePosition;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -43,6 +42,7 @@
 import org.unicode.cldr.util.VoteResolver;
 import org.unicode.cldr.util.VoteResolver.Status;
 
+import com.google.common.collect.ImmutableSet;
 import com.ibm.icu.dev.util.ElapsedTimer;
 import com.ibm.icu.impl.Row.R3;
 import com.ibm.icu.text.ListFormatter;
@@ -78,7 +78,7 @@
 
     private boolean skipTest = false;
     private Phase phase;
-    private Map<Subtype, List<Pattern>> filtersForLocale = new HashMap<Subtype, List<Pattern>>();
+    private Map<Subtype, List<Pattern>> filtersForLocale = new HashMap<>();
 
     public enum InputMethod {
         DIRECT, BULK
@@ -104,11 +104,12 @@
         /**
          * Disallow (for various reasons)
          */
-        FORBID_ERRORS(true), 
-        FORBID_READONLY(true), 
-        FORBID_UNLESS_DATA_SUBMISSION(true), 
+        FORBID_ERRORS(true),
+        FORBID_READONLY(true),
+        FORBID_UNLESS_DATA_SUBMISSION(true),
         FORBID_NULL(true),
         FORBID_ROOT(true),
+        FORBID_CODE(true),
         FORBID_PERMANENT_WITHOUT_FORUM(true);
 
         private final boolean isForbidden;
@@ -130,7 +131,7 @@
         }
     }
 
-    private static final HashMap<String, Phase> PHASE_NAMES = new HashMap<String, Phase>();
+    private static final HashMap<String, Phase> PHASE_NAMES = new HashMap<>();
 
     public enum Phase {
         BUILD, SUBMISSION, VETTING, FINAL_TESTING("RESOLUTION");
@@ -340,7 +341,7 @@
             Option() {
                 this.key = name();
             }
-        };
+        }
 
         private static StandardCodes sc = StandardCodes.make();
 
@@ -383,7 +384,7 @@
         }
 
         private static String getValidKeys() {
-            Set<String> allkeys = new TreeSet<String>();
+            Set<String> allkeys = new TreeSet<>();
             for (Option o : Option.values()) {
                 allkeys.add(o.getKey());
             }
@@ -542,7 +543,7 @@
             }
             return sb.toString();
         }
-    };
+    }
 
     public boolean isSkipTest() {
         return skipTest;
@@ -668,7 +669,7 @@
             Subtype subtype = filter.get1();
             List<Pattern> xpaths = filtersForLocale.get(subtype);
             if (xpaths == null) {
-                filtersForLocale.put(subtype, xpaths = new ArrayList<Pattern>());
+                filtersForLocale.put(subtype, xpaths = new ArrayList<>());
             }
             xpaths.add(filter.get2());
         }
@@ -687,47 +688,50 @@
 
         public enum Type {
             Comment, Warning, Error, Example, Demo
-        };
+        }
 
         public enum Subtype {
-            none, noUnproposedVariant, deprecatedAttribute, illegalPlural, invalidLocale, incorrectCasing, 
+            none, noUnproposedVariant, deprecatedAttribute, illegalPlural, invalidLocale, incorrectCasing,
             valueMustBeOverridden,
-            valueAlwaysOverridden, nullChildFile, internalError, coverageLevel, missingPluralInfo, 
-            currencySymbolTooWide, incorrectDatePattern, abbreviatedDateFieldTooWide, displayCollision, 
-            illegalExemplarSet, missingAuxiliaryExemplars, extraPlaceholders, missingPlaceholders, 
-            shouldntHavePlaceholders, couldNotAccessExemplars, noExemplarCharacters, modifiedEnglishValue, 
-            invalidCurrencyMatchSet, multipleMetazoneMappings, noMetazoneMapping, noMetazoneMappingAfter1970, 
-            noMetazoneMappingBeforeNow, cannotCreateZoneFormatter, insufficientCoverage, missingLanguageTerritoryInfo, 
-            missingEuroCountryInfo, deprecatedAttributeWithReplacement, missingOrExtraDateField, internalUnicodeSetFormattingError, 
+            valueAlwaysOverridden, nullChildFile, internalError, coverageLevel, missingPluralInfo,
+            currencySymbolTooWide, incorrectDatePattern, abbreviatedDateFieldTooWide, displayCollision,
+            illegalExemplarSet, missingAuxiliaryExemplars, extraPlaceholders, missingPlaceholders,
+            shouldntHavePlaceholders, couldNotAccessExemplars, noExemplarCharacters, modifiedEnglishValue,
+            invalidCurrencyMatchSet, multipleMetazoneMappings, noMetazoneMapping, noMetazoneMappingAfter1970,
+            noMetazoneMappingBeforeNow, cannotCreateZoneFormatter, insufficientCoverage, missingLanguageTerritoryInfo,
+            missingEuroCountryInfo, deprecatedAttributeWithReplacement, missingOrExtraDateField, internalUnicodeSetFormattingError,
             auxiliaryExemplarsOverlap, missingPunctuationCharacters,
 
-            charactersNotInCurrencyExemplars, asciiCharactersNotInCurrencyExemplars, 
+            charactersNotInCurrencyExemplars, asciiCharactersNotInCurrencyExemplars,
             charactersNotInMainOrAuxiliaryExemplars, asciiCharactersNotInMainOrAuxiliaryExemplars,
 
             narrowDateFieldTooWide, illegalCharactersInExemplars, orientationDisagreesWithExemplars,
-            inconsistentDatePattern, inconsistentTimePattern, missingDatePattern, illegalDatePattern, 
-            missingMainExemplars, mustNotStartOrEndWithSpace, illegalCharactersInNumberPattern, 
-            numberPatternNotCanonical, currencyPatternMissingCurrencySymbol, missingMinusSign, 
-            badNumericType, percentPatternMissingPercentSymbol, illegalNumberFormat, unexpectedAttributeValue, 
-            metazoneContainsDigit, tooManyGroupingSeparators, inconsistentPluralFormat, sameAsEnglish, sameAsCode, 
-            dateSymbolCollision, incompleteLogicalGroup, extraMetazoneString, inconsistentDraftStatus, 
-            errorOrWarningInLogicalGroup, valueTooWide, valueTooNarrow, nameContainsYear, patternCannotContainDigits, 
-            patternContainsInvalidCharacters, parenthesesNotAllowed, illegalNumberingSystem, unexpectedOrderOfEraYear, 
-            invalidPlaceHolder, asciiQuotesNotAllowed, badMinimumGroupingDigits, inconsistentPeriods, 
+            inconsistentDatePattern, inconsistentTimePattern, missingDatePattern, illegalDatePattern,
+            missingMainExemplars, mustNotStartOrEndWithSpace, illegalCharactersInNumberPattern,
+            numberPatternNotCanonical, currencyPatternMissingCurrencySymbol, missingMinusSign,
+            badNumericType, percentPatternMissingPercentSymbol, illegalNumberFormat, unexpectedAttributeValue,
+            metazoneContainsDigit, tooManyGroupingSeparators, inconsistentPluralFormat, missingZeros, sameAsEnglish, sameAsCode,
+            dateSymbolCollision, incompleteLogicalGroup, extraMetazoneString, inconsistentDraftStatus,
+            errorOrWarningInLogicalGroup, valueTooWide, valueTooNarrow, nameContainsYear, patternCannotContainDigits,
+            patternContainsInvalidCharacters, parenthesesNotAllowed, illegalNumberingSystem, unexpectedOrderOfEraYear,
+            invalidPlaceHolder, asciiQuotesNotAllowed, badMinimumGroupingDigits, inconsistentPeriods,
             inheritanceMarkerNotAllowed, invalidDurationUnitPattern, invalidDelimiter, illegalCharactersInPattern,
-            badParseLenient, tooManyValues, invalidSymbol;
+            badParseLenient, tooManyValues, invalidSymbol, invalidGenderCode,
+            mismatchedUnitComponent, longPowerWithSubscripts, gapsInPlaceholderNumbers, duplicatePlaceholders, largerDifferences
+            ;
 
+            @Override
             public String toString() {
                 return TO_STRING.matcher(name()).replaceAll(" $1").toLowerCase();
             }
 
             static Pattern TO_STRING = PatternCache.get("([A-Z])");
-        };
+        }
 
-        /** 
+        /**
          * These error don't prevent entry during submission, since they become valid if a different row is changed.
          */
-        public static EnumSet<Subtype> crossCheckSubtypes = EnumSet.of(
+        public static Set<Subtype> crossCheckSubtypes = ImmutableSet.of(
             Subtype.dateSymbolCollision,
             Subtype.displayCollision,
             Subtype.inconsistentDraftStatus,
@@ -737,6 +741,15 @@
             Subtype.narrowDateFieldTooWide,
             Subtype.coverageLevel);
 
+        public static Set<Subtype> errorCodesPath = ImmutableSet.of(
+            Subtype.duplicatePlaceholders,
+            Subtype.extraPlaceholders,
+            Subtype.gapsInPlaceholderNumbers,
+            Subtype.invalidPlaceHolder,
+            Subtype.missingPlaceholders,
+            Subtype.shouldntHavePlaceholders);
+
+
         private Type type;
         private Subtype subtype = Subtype.none;
         private String messageFormat;
@@ -774,6 +787,9 @@
                     String fixedApos = MessageFormat.autoQuoteApostrophe(messageFormat);
                     MessageFormat format = new MessageFormat(fixedApos);
                     message = format.format(parameters);
+                    if (errorCodesPath.contains(subtype)) {
+                        message += "; see <a href='http://cldr.unicode.org/translation/error-codes#" + subtype.name() + "'  target='cldr_error_codes'>" + subtype + "</a>.";
+                    }
                 } catch (Exception e) {
                     message = messageFormat;
                     System.err.println("MessageFormat Failure: " + subtype + "; " + messageFormat + "; "
@@ -797,6 +813,7 @@
         /**
          * @deprecated
          */
+        @Deprecated
         public String getHTMLMessage() {
             return htmlMessage;
         }
@@ -804,6 +821,7 @@
         /**
          * @deprecated
          */
+        @Deprecated
         public CheckStatus setHTMLMessage(String message) {
             htmlMessage = message;
             return this;
@@ -830,6 +848,7 @@
             return this;
         }
 
+        @Override
         public String toString() {
             return getType() + ": " + getMessage();
         }
@@ -851,7 +870,7 @@
                 return null;
             }
 
-            List<Exception> errors = new ArrayList<Exception>();
+            List<Exception> errors = new ArrayList<>();
             for (Object o : parameters) {
                 if (o instanceof Exception) {
                     errors.add((Exception) o);
@@ -926,7 +945,7 @@
     }
 
     public static abstract class SimpleDemo {
-        Map<String, String> internalPostArguments = new HashMap<String, String>();
+        Map<String, String> internalPostArguments = new HashMap<>();
 
         /**
          * @param postArguments
@@ -969,6 +988,7 @@
 
         protected abstract void getArguments(Map<String, String> postArguments);
 
+        @Override
         public String getHTML(Map<String, String> postArguments) throws Exception {
             getArguments(postArguments);
             StringBuffer htmlMessage = new StringBuffer();
@@ -1086,10 +1106,11 @@
          */
         // if (value == cldrFileToCheck.getBaileyValue(path, null, null) && value != cldrFileToCheck.getWinningValue(path)) {
         if (value != null
-            && value.equals(cldrFileToCheck.getBaileyValue(path, null, null))
-            && !value.equals(cldrFileToCheck.getWinningValue(path))) {
-            return this;
+            && !value.equals(cldrFileToCheck.getWinningValue(path))
+            && cldrFileToCheck.getUnresolved().getStringValue(path) == null) {
+                return this;
         }
+
         // If we're being asked to run tests for an inheritance marker, then we need to change it
         // to the "real" value first before running tests. Testing the value CldrUtility.INHERITANCE_MARKER ("↑↑↑") doesn't make sense.
         if (CldrUtility.INHERITANCE_MARKER.equals(value)) {
@@ -1167,8 +1188,8 @@
      */
     static class CompoundCheckCLDR extends CheckCLDR {
         private Matcher filter;
-        private List<CheckCLDR> checkList = new ArrayList<CheckCLDR>();
-        private List<CheckCLDR> filteredCheckList = new ArrayList<CheckCLDR>();
+        private List<CheckCLDR> checkList = new ArrayList<>();
+        private List<CheckCLDR> filteredCheckList = new ArrayList<>();
 
         public CompoundCheckCLDR add(CheckCLDR item) {
             checkList.add(item);
@@ -1183,6 +1204,7 @@
             return this;
         }
 
+        @Override
         public CheckCLDR handleCheck(String path, String fullPath, String value,
             Options options, List<CheckStatus> result) {
             result.clear();
@@ -1219,6 +1241,7 @@
             }
         }
 
+        @Override
         protected CheckCLDR handleGetExamples(String path, String fullPath, String value, Options options,
             List<CheckStatus> result) {
             result.clear();
@@ -1245,6 +1268,7 @@
                 }));
         }
 
+        @Override
         public CheckCLDR setCldrFileToCheck(CLDRFile cldrFileToCheck, Options options,
             List<CheckStatus> possibleErrors) {
             ElapsedTimer testTime = null, testOverallTime = null;
@@ -1256,7 +1280,7 @@
             possibleErrors.clear();
 
             for (Iterator<CheckCLDR> it = filteredCheckList.iterator(); it.hasNext();) {
-                CheckCLDR item = (CheckCLDR) it.next();
+                CheckCLDR item = it.next();
                 if (SHOW_TIMES)
                     testTime = new ElapsedTimer("Test setup time for " + item.getClass().toString() + ": {0}");
                 try {
@@ -1339,7 +1363,7 @@
      */
     private void loadFilters() {
         if (allFilters != null) return;
-        allFilters = new ArrayList<R3<Pattern, Subtype, Pattern>>();
+        allFilters = new ArrayList<>();
         RegexFileParser fileParser = new RegexFileParser();
         fileParser.setLineParser(new RegexLineParser() {
             @Override
@@ -1348,7 +1372,7 @@
                 Subtype subtype = Subtype.valueOf(fields[0]);
                 Pattern locale = PatternCache.get(fields[1]);
                 Pattern xpathRegex = PatternCache.get(fields[2].replaceAll("\\[@", "\\\\[@"));
-                allFilters.add(new R3<Pattern, Subtype, Pattern>(locale, subtype, xpathRegex));
+                allFilters.add(new R3<>(locale, subtype, xpathRegex));
             }
         });
         fileParser.parse(CheckCLDR.class, "/org/unicode/cldr/util/data/CheckCLDR-exceptions.txt");
@@ -1381,4 +1405,8 @@
     public void setEnglishFile(CLDRFile englishFile) {
         this.englishFile = englishFile;
     }
+
+    public CharSequence fixedValueIfInherited(String value, String path) {
+        return !CldrUtility.INHERITANCE_MARKER.equals(value) ? value: getCldrFileToCheck().getStringValueWithBailey(path);
+    }
 }
diff --git a/tools/java/org/unicode/cldr/test/CheckCasing.java b/tools/java/org/unicode/cldr/test/CheckCasing.java
index 4a16768..067b35b 100644
--- a/tools/java/org/unicode/cldr/test/CheckCasing.java
+++ b/tools/java/org/unicode/cldr/test/CheckCasing.java
@@ -16,7 +16,7 @@
         public static Case forString(String input) {
             return valueOf(input.replace('-', '_'));
         }
-    };
+    }
 
     // remember to add this class to the list in CheckCLDR.getCheckAll
     // to run just this test, on just locales starting with 'nl', use CheckCLDR with -fnl.* -t.*Currencies.*
@@ -35,6 +35,7 @@
     }
 
     // If you don't need any file initialization or postprocessing, you only need this one routine
+    @Override
     public CheckCLDR handleCheck(String path, String fullPath, String value, Options options,
         List<CheckStatus> result) {
         // it helps performance to have a quick reject of most paths
diff --git a/tools/java/org/unicode/cldr/test/CheckChildren.java b/tools/java/org/unicode/cldr/test/CheckChildren.java
index 94010c4..41a1a86 100644
--- a/tools/java/org/unicode/cldr/test/CheckChildren.java
+++ b/tools/java/org/unicode/cldr/test/CheckChildren.java
@@ -14,12 +14,13 @@
 
 public class CheckChildren extends FactoryCheckCLDR {
     CLDRFile[] immediateChildren;
-    Map<String, String> tempSet = new HashMap<String, String>();
+    Map<String, String> tempSet = new HashMap<>();
 
     public CheckChildren(Factory factory) {
         super(factory);
     }
 
+    @Override
     public CheckCLDR handleCheck(String path, String fullPath, String value,
         Options options, List<CheckStatus> result) {
         if (immediateChildren == null) return this; // skip - test isn't even relevant
@@ -71,7 +72,7 @@
             return this;
         }
 
-        List<CLDRFile> iChildren = new ArrayList<CLDRFile>();
+        List<CLDRFile> iChildren = new ArrayList<>();
         super.setCldrFileToCheck(cldrFileToCheck, options, possibleErrors);
         CLDRLocale myLocale = CLDRLocale.getInstance(cldrFileToCheck.getLocaleID());
         if (myLocale.getCountry() != null && myLocale.getCountry().length() == 2) {
@@ -95,7 +96,7 @@
             immediateChildren = null;
         else {
             immediateChildren = new CLDRFile[iChildren.size()];
-            immediateChildren = (CLDRFile[]) iChildren.toArray(immediateChildren);
+            immediateChildren = iChildren.toArray(immediateChildren);
         }
         return this;
     }
diff --git a/tools/java/org/unicode/cldr/test/CheckConsistentCasing.java b/tools/java/org/unicode/cldr/test/CheckConsistentCasing.java
index ff8a5dc..c5d9964 100644
--- a/tools/java/org/unicode/cldr/test/CheckConsistentCasing.java
+++ b/tools/java/org/unicode/cldr/test/CheckConsistentCasing.java
@@ -21,7 +21,7 @@
 import org.unicode.cldr.util.PatternCache;
 import org.unicode.cldr.util.RegexLookup;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.lang.UCharacter;
 import com.ibm.icu.text.BreakIterator;
 import com.ibm.icu.util.ULocale;
@@ -81,6 +81,7 @@
     }
 
     // If you don't need any file initialization or postprocessing, you only need this one routine
+    @Override
     public CheckCLDR handleCheck(String path, String fullPath, String value, Options options,
         List<CheckStatus> result) {
         // it helps performance to have a quick reject of most paths
@@ -212,7 +213,7 @@
     // ldml/localeDisplayNames/transformNames/transformName[@type=".*"]
     ;
 
-    Map<Category, CasingTypeAndErrFlag> types = new EnumMap<Category, CasingTypeAndErrFlag>(Category.class);
+    Map<Category, CasingTypeAndErrFlag> types = new EnumMap<>(Category.class);
 
     public enum Category {
         language, script, territory, variant, keyValue, month_narrow, month_format_except_narrow, month_standalone_except_narrow, day_narrow, day_format_except_narrow, day_standalone_except_narrow, era_narrow, era_abbr, era_name, quarter_narrow, quarter_abbreviated, quarter_format_wide, quarter_standalone_wide, calendar_field, zone_exemplarCity, zone_short, zone_long, NOT_USED, metazone_short, metazone_long, symbol, currencyName_count, currencyName, relative, unit_pattern, key;
@@ -235,14 +236,14 @@
      */
     public static Map<Category, CasingType> getSamples(CLDRFile resolved) {
         // Use EnumMap instead of an array for type safety.
-        Map<Category, Counter<CasingType>> counters = new EnumMap<Category, Counter<CasingType>>(Category.class);
+        Map<Category, Counter<CasingType>> counters = new EnumMap<>(Category.class);
 
         for (Category category : Category.values()) {
             counters.put(category, new Counter<CasingType>());
         }
         PathStarrer starrer = new PathStarrer();
         boolean isRoot = "root".equals(resolved.getLocaleID());
-        Set<String> missing = !DEBUG ? null : new TreeSet<String>();
+        Set<String> missing = !DEBUG ? null : new TreeSet<>();
 
         for (String path : resolved) {
             if (!isRoot) {
@@ -267,7 +268,7 @@
             }
         }
 
-        Map<Category, CasingType> info = new EnumMap<Category, CasingType>(Category.class);
+        Map<Category, CasingType> info = new EnumMap<>(Category.class);
         for (Category category : Category.values()) {
             if (category == Category.NOT_USED) continue;
             Counter<CasingType> counter = counters.get(category);
@@ -287,7 +288,7 @@
             info.put(category, type);
         }
         if (DEBUG && missing.size() != 0) {
-            System.out.println("Paths skipped:\n" + CollectionUtilities.join(missing, "\n"));
+            System.out.println("Paths skipped:\n" + Joiner.on("\n").join(missing));
         }
         return info;
     }
diff --git a/tools/java/org/unicode/cldr/test/CheckCoverage.java b/tools/java/org/unicode/cldr/test/CheckCoverage.java
index 39fbd94..03b2a9b 100644
--- a/tools/java/org/unicode/cldr/test/CheckCoverage.java
+++ b/tools/java/org/unicode/cldr/test/CheckCoverage.java
@@ -50,6 +50,7 @@
         super(factory);
     }
 
+    @Override
     public CheckCLDR handleCheck(String path, String fullPath, String value,
         Options options, List<CheckStatus> result) {
 
@@ -68,11 +69,11 @@
         }
 
         Status status = new Status();
-        
+
         /*
          * Need skipInheritanceMarker false for getSourceLocaleIdExtended here.
          * Reference: https://unicode.org/cldr/trac/ticket/11720
-         * 
+         *
          * Compare same change in getMissingStatus for https://unicode.org/cldr/trac/ticket/11765
          */
         String source = resolvedCldrFileToCheck.getSourceLocaleIdExtended(path, status, false /* skipInheritanceMarker */);
diff --git a/tools/java/org/unicode/cldr/test/CheckCurrencies.java b/tools/java/org/unicode/cldr/test/CheckCurrencies.java
index 42ac069..382a51b 100644
--- a/tools/java/org/unicode/cldr/test/CheckCurrencies.java
+++ b/tools/java/org/unicode/cldr/test/CheckCurrencies.java
@@ -11,6 +11,7 @@
     // to run just this test, on just locales starting with 'nl', use CheckCLDR with -fnl.* -t.*Currencies.*
 
     // If you don't need any file initialization or postprocessing, you only need this one routine
+    @Override
     public CheckCLDR handleCheck(String path, String fullPath, String value, Options options,
         List<CheckStatus> result) {
         // it helps performance to have a quick reject of most paths
diff --git a/tools/java/org/unicode/cldr/test/CheckDates.java b/tools/java/org/unicode/cldr/test/CheckDates.java
index eaa984d..0f1efc3 100644
--- a/tools/java/org/unicode/cldr/test/CheckDates.java
+++ b/tools/java/org/unicode/cldr/test/CheckDates.java
@@ -43,7 +43,7 @@
 import org.unicode.cldr.util.XPathParts;
 import org.unicode.cldr.util.props.UnicodeProperty.PatternMatcher;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.text.BreakIterator;
 import com.ibm.icu.text.DateTimePatternGenerator;
@@ -222,6 +222,9 @@
             // possibleErrors.add(flexInfo.getFailurePath(path));
         }
         redundants.clear();
+        /*
+         * TODO: NullPointerException may be thrown in ICU here during cldr-unittest TestAll
+         */
         flexInfo.getRedundants(redundants);
         // Set baseSkeletons = flexInfo.gen.getBaseSkeletons(new TreeSet());
         // Set notCovered = new TreeSet(neededFormats);
@@ -276,7 +279,7 @@
      */
     BreakIterator bi;
     FlexibleDateFromCLDR flexInfo;
-    Collection<String> redundants = new HashSet<String>();
+    Collection<String> redundants = new HashSet<>();
     Status status = new Status();
     PathStarrer pathStarrer = new PathStarrer();
 
@@ -293,6 +296,7 @@
         return s;
     }
 
+    @Override
     public CheckCLDR handleCheck(String path, String fullPath, String value, Options options,
         List<CheckStatus> result) {
 
@@ -439,7 +443,7 @@
                 boolean endsWithDisplayName = path.endsWith("displayName"); // special hack, these shouldn't be in
                 // calendar.
 
-                Set<String> retrievedPaths = new HashSet<String>();
+                Set<String> retrievedPaths = new HashSet<>();
                 getResolvedCldrFileToCheck().getPathsWithValue(value, calendarPrefix, null, retrievedPaths);
                 if (retrievedPaths.size() < 2) {
                     break main;
@@ -458,7 +462,7 @@
 
                 // TODO redo above and below in terms of parts instead of searching strings
 
-                Set<String> filteredPaths = new HashSet<String>();
+                Set<String> filteredPaths = new HashSet<>();
                 Output<Integer> sampleError = new Output<>();
 
                 for (String item : retrievedPaths) {
@@ -491,7 +495,7 @@
                 if (filteredPaths.size() == 0) {
                     break main;
                 }
-                Set<String> others = new TreeSet<String>();
+                Set<String> others = new TreeSet<>();
                 for (String path2 : filteredPaths) {
                     PathHeader pathHeader = getPathHeaderFactory().fromPath(path2);
                     others.add(pathHeader.getHeaderCode());
@@ -567,7 +571,8 @@
         } catch (Exception e) {
             // e.printStackTrace();
             // HACK
-            if (!HACK_CONFLICTING.matcher(e.getMessage()).find()) {
+            String msg = e.getMessage();
+            if (msg == null || !HACK_CONFLICTING.matcher(msg).find()) {
                 CheckStatus item = new CheckStatus().setCause(this).setMainType(CheckStatus.errorType)
                     .setSubtype(Subtype.illegalDatePattern)
                     .setMessage("Error in creating date format {0}", new Object[] { e });
@@ -651,18 +656,19 @@
     }
 
     private String getValues(CLDRFile resolvedCldrFileToCheck, Collection<String> values) {
-        Set<String> results = new TreeSet<String>();
+        Set<String> results = new TreeSet<>();
         for (String path : values) {
             final String stringValue = resolvedCldrFileToCheck.getStringValue(path);
             if (stringValue != null) {
                 results.add(stringValue);
             }
         }
-        return "{" + CollectionUtilities.join(results, "},{") + "}";
+        return "{" + Joiner.on("},{").join(results) + "}";
     }
 
     static final Pattern HACK_CONFLICTING = PatternCache.get("Conflicting fields:\\s+M+,\\s+l");
 
+    @Override
     public CheckCLDR handleGetExamples(String path, String fullPath, String value, Options options, List<CheckStatus> result) {
         if (path.indexOf("/dates") < 0 || path.indexOf("gregorian") < 0) return this;
         try {
@@ -845,7 +851,7 @@
         date, time, dateTime
     }
 
-    static final Map<DateOrTime, Relation<DateTimeLengths, String>> STOCK_PATTERNS = new EnumMap<DateOrTime, Relation<DateTimeLengths, String>>(
+    static final Map<DateOrTime, Relation<DateTimeLengths, String>> STOCK_PATTERNS = new EnumMap<>(
         DateOrTime.class);
 
     //
@@ -927,7 +933,7 @@
             int countMismatches = 0;
             boolean errorOnMissing = false;
             String timezonePattern = null;
-            Set<String> bases = new LinkedHashSet<String>();
+            Set<String> bases = new LinkedHashSet<>();
             for (String key : keys) {
                 int star = key.indexOf('*');
                 boolean hasStar = star >= 0;
@@ -977,7 +983,7 @@
                     result.add(new CheckStatus().setCause(this).setMainType(CheckStatus.warningType)
                         .setSubtype(Subtype.missingDatePattern)
                         .setMessage(msg,
-                            dateTimeLength, dateOrTime, value, CollectionUtilities.join(bases, ", ")));
+                            dateTimeLength, dateOrTime, value, Joiner.on(", ").join(bases)));
                 }
             }
         }
@@ -1000,7 +1006,7 @@
             return false;
         }
 
-        List<Object> items1 = new ArrayList<Object>(formatParser.set(value1).getItems()); // clone
+        List<Object> items1 = new ArrayList<>(formatParser.set(value1).getItems()); // clone
         List<Object> items2 = formatParser.set(value2).getItems();
         if (items1.size() != items2.size()) {
             return false;
@@ -1022,7 +1028,7 @@
         return true;
     }
 
-    static final Set<String> YgLanguages = new HashSet<String>(Arrays.asList(
+    static final Set<String> YgLanguages = new HashSet<>(Arrays.asList(
         "ar", "cs", "da", "de", "en", "es", "fa", "fi", "fr", "he", "hr", "id", "it", "nb", "nl", "pt", "ru", "sv", "tr"));
 
     private GyState getExpectedGy(String localeID) {
@@ -1056,7 +1062,7 @@
 
     enum DateTimeLengths {
         SHORT, MEDIUM, LONG, FULL
-    };
+    }
 
     // The patterns below should only use the *canonical* characters for each field type:
     // y (not Y, u, U)
@@ -1125,6 +1131,7 @@
             return this;
         }
 
+        @Override
         public SimpleDemo getDemo() {
             return new MyDemo().setFormat(df);
         }
@@ -1133,10 +1140,12 @@
     static class MyDemo extends FormatDemo {
         private SimpleDateFormat df;
 
+        @Override
         protected String getPattern() {
             return df.toPattern();
         }
 
+        @Override
         protected String getSampleInput() {
             return neutralFormat.format(ExampleGenerator.DATE_SAMPLE);
         }
@@ -1146,6 +1155,7 @@
             return this;
         }
 
+        @Override
         protected void getArguments(Map<String, String> inout) {
             currentPattern = currentInput = currentFormatted = currentReparsed = "?";
             Date d;
@@ -1160,7 +1170,7 @@
                 return;
             }
             try {
-                currentInput = (String) inout.get("input");
+                currentInput = inout.get("input");
                 if (currentInput == null) {
                     currentInput = getSampleInput();
                 }
diff --git a/tools/java/org/unicode/cldr/test/CheckDisplayCollisions.java b/tools/java/org/unicode/cldr/test/CheckDisplayCollisions.java
index 6ee2f81..e897ace 100644
--- a/tools/java/org/unicode/cldr/test/CheckDisplayCollisions.java
+++ b/tools/java/org/unicode/cldr/test/CheckDisplayCollisions.java
@@ -1,10 +1,11 @@
 package org.unicode.cldr.test;
 
+import java.util.Arrays;
 import java.util.Calendar;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -22,13 +23,16 @@
 import org.unicode.cldr.util.XMLSource;
 import org.unicode.cldr.util.XPathParts;
 
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+
 public class CheckDisplayCollisions extends FactoryCheckCLDR {
     private static final String DEBUG_PATH_PART = "-mass"; // example: "//ldml/dates/fields/field[@type=\"sun-narrow\"]/relative[@type=\"-1\"]";
     /**
      * Set to true to get verbose logging of path removals
      */
     private static final boolean LOG_PATH_REMOVALS = false;
-    
+
     /**
      * Set to true to prevent "Turkey" from being used for both 🇹🇷 -name and 🦃 -name.
      * (Means clients need to use the "flag: Turkey" format.)
@@ -69,15 +73,15 @@
         UNITS_COMPOUND_SHORT("//ldml/units/unitLength[@type=\"short\"]/compoundUnit", MatchType.PREFIX),
         UNITS_COORDINATE( "//ldml/units/unitLength\\[@type=\".*\"\\]/coordinateUnit/", MatchType.REGEX),
         UNITS_IGNORE("//ldml/units/unitLength[@type=\"narrow\"]", MatchType.PREFIX),
-        UNITS("//ldml/units/unitLength", MatchType.PREFIX),
+        UNITS("//ldml/units/unitLength.*/(displayName|unitPattern|perUnitPattern)", MatchType.REGEX),
         FIELDS_NARROW("//ldml/dates/fields/field\\[@type=\"(sun|mon|tue|wed|thu|fri|sat)-narrow\"\\]/relative", MatchType.REGEX),
         FIELDS_RELATIVE("//ldml/dates/fields/field\\[@type=\".*\"\\]/relative\\[@type=\"(-1|0|1)\"\\]", MatchType.REGEX),
         ANNOTATIONS("//ldml/annotations/annotation\\[@cp=\".*\"\\]\\[@type=\"tts\"\\]", MatchType.REGEX),
         CARDINAL_MINIMAL("//ldml/numbers/minimalPairs/pluralMinimalPairs", MatchType.PREFIX),
-        ORDINAL_MINIMAL("//ldml/numbers/minimalPairs/ordinalMinimalPairs", MatchType.PREFIX), 
-        TYPOGRAPHIC_AXIS("//ldml/typographicNames/axisName", MatchType.PREFIX), 
-        TYPOGRAPHIC_FEATURE("//ldml/typographicNames/featureName", MatchType.PREFIX), 
-        TYPOGRAPHIC_STYLE("//ldml/typographicNames/styleName", MatchType.PREFIX), 
+        ORDINAL_MINIMAL("//ldml/numbers/minimalPairs/ordinalMinimalPairs", MatchType.PREFIX),
+        TYPOGRAPHIC_AXIS("//ldml/typographicNames/axisName", MatchType.PREFIX),
+        TYPOGRAPHIC_FEATURE("//ldml/typographicNames/featureName", MatchType.PREFIX),
+        TYPOGRAPHIC_STYLE("//ldml/typographicNames/styleName", MatchType.PREFIX),
         ;
 
         private MatchType matchType;
@@ -131,7 +135,7 @@
 
     private final Matcher exclusions = PatternCache.get("=\"narrow\"]").matcher(""); // no matches
     private final Matcher typePattern = PatternCache.get("\\[@type=\"([^\"]*+)\"]").matcher("");
-    private final Matcher ignoreAltAndCountAttributes = PatternCache.get("\\[@(?:count|alt)=\"[^\"]*+\"]").matcher("");
+    private final Matcher ignoreAltAndCountAttributes = PatternCache.get("\\[@(?:count|alt|gender|case)=\"[^\"]*+\"]").matcher("");
     private final Matcher ignoreAltAttributes = PatternCache.get("\\[@(?:alt)=\"[^\"]*+\"]").matcher("");
     private final Matcher ignoreAltShortOrVariantAttributes = PatternCache.get("\\[@(?:alt)=\"(?:short|variant)\"]").matcher("");
     private final Matcher compoundUnitPatterns = PatternCache.get("compoundUnitPattern").matcher("");
@@ -141,123 +145,140 @@
     private static final Map<String, Set<String>> mapPathPartsToSetsForDupOK = createMapPathPartsToSets();
 
     private static Map<String, Set<String>> createMapPathPartsToSets() {
-        Map<String, Set<String>> mapPathPartsToSets = new HashMap<String, Set<String>>();
+        Map<String, Set<String>> mapPathPartsToSets = new HashMap<>();
 
         // Add OK collisions for /unit[@type=\"energy-calorie\"]
-        Set<String> set1 = new HashSet<String>();
+        Set<String> set1 = new HashSet<>();
         set1.add("/unit[@type=\"energy-foodcalorie\"]");
         set1.add("/unit[@type=\"length-inch\"]"); // #11292
         mapPathPartsToSets.put("/unit[@type=\"energy-calorie\"]", set1);
 
         // Add OK collisions for /unit[@type=\"energy-foodcalorie\"]
-        Set<String> set2 = new HashSet<String>();
+        Set<String> set2 = new HashSet<>();
         set2.add("/unit[@type=\"energy-calorie\"]");
         set2.add("/unit[@type=\"energy-kilocalorie\"]");
         set2.add("/unit[@type=\"length-inch\"]"); // #11292
         mapPathPartsToSets.put("/unit[@type=\"energy-foodcalorie\"]", set2);
 
         // Add OK collisions for /unit[@type=\"energy-kilocalorie\"]
-        Set<String> set3 = new HashSet<String>();
+        Set<String> set3 = new HashSet<>();
         set3.add("/unit[@type=\"energy-foodcalorie\"]");
         mapPathPartsToSets.put("/unit[@type=\"energy-kilocalorie\"]", set3);
 
         // Add OK collisions for /unit[@type=\"mass-carat\"]
-        Set<String> set4 = new HashSet<String>();
+        Set<String> set4 = new HashSet<>();
         set4.add("/unit[@type=\"concentr-karat\"]");
         mapPathPartsToSets.put("/unit[@type=\"mass-carat\"]", set4);
 
         // Add OK collisions for /unit[@type=\"concentr-karat\"]
-        Set<String> set5 = new HashSet<String>();
+        Set<String> set5 = new HashSet<>();
         set5.add("/unit[@type=\"mass-carat\"]");
         set5.add("/unit[@type=\"temperature-kelvin\"]");
         mapPathPartsToSets.put("/unit[@type=\"concentr-karat\"]", set5);
 
         // Add OK collisions for /unit[@type=\"digital-byte\"]
-        Set<String> set6 = new HashSet<String>();
+        Set<String> set6 = new HashSet<>();
         set6.add("/unit[@type=\"mass-metric-ton\"]");
         mapPathPartsToSets.put("/unit[@type=\"digital-byte\"]", set6);
 
         // Add OK collisions for /unit[@type=\"mass-metric-ton\"]
-        Set<String> set7 = new HashSet<String>();
+        Set<String> set7 = new HashSet<>();
         set7.add("/unit[@type=\"digital-byte\"]");
         mapPathPartsToSets.put("/unit[@type=\"mass-metric-ton\"]", set7);
 
         // delete the exceptions allowing acceleration-g-force and mass-gram to have the same symbol, see #7561
 
         // Add OK collisions for /unit[@type=\"length-inch\"]
-        Set<String> set9 = new HashSet<String>();
+        Set<String> set9 = new HashSet<>();
         set9.add("/unit[@type=\"energy-calorie\"]");
         set9.add("/unit[@type=\"energy-foodcalorie\"]");
         mapPathPartsToSets.put("/unit[@type=\"length-inch\"]", set9);
 
         // Add OK collisions for /unit[@type=\"length-foot\"]
-        Set<String> set10 = new HashSet<String>();
+        Set<String> set10 = new HashSet<>();
         set10.add("/unit[@type=\"angle-arc-minute\"]");
         mapPathPartsToSets.put("/unit[@type=\"length-foot\"]", set10);
 
         // Add OK collisions for /unit[@type=\"angle-arc-minute\"]
-        Set<String> set11 = new HashSet<String>();
+        Set<String> set11 = new HashSet<>();
         set11.add("/unit[@type=\"length-foot\"]");
         mapPathPartsToSets.put("/unit[@type=\"angle-arc-minute\"]", set11);
 
         // Add OK collisions for /unit[@type=\"temperature-kelvin\"]
-        Set<String> set12 = new HashSet<String>();
+        Set<String> set12 = new HashSet<>();
         set12.add("/unit[@type=\"concentr-karat\"]");
         mapPathPartsToSets.put("/unit[@type=\"temperature-kelvin\"]", set12);
 
         // Add OK collisions for /unit[@type=\"temperature-generic\"]
-        Set<String> set13 = new HashSet<String>();
+        Set<String> set13 = new HashSet<>();
         set13.add("/unit[@type=\"angle-degree\"]");
         mapPathPartsToSets.put("/unit[@type=\"temperature-generic\"]", set13);
 
         // Add OK collisions for /unit[@type=\"angle-degree\"]
-        Set<String> set14 = new HashSet<String>();
+        Set<String> set14 = new HashSet<>();
         set14.add("/unit[@type=\"temperature-generic\"]");
         mapPathPartsToSets.put("/unit[@type=\"angle-degree\"]", set14);
 
         // Add OK collisions for /unit[@type=\"length-point\"]
-        Set<String> set15 = new HashSet<String>();
+        Set<String> set15 = new HashSet<>();
         set15.add("/unit[@type=\"volume-pint\"]");
         set15.add("/unit[@type=\"mass-pound\"]");
         mapPathPartsToSets.put("/unit[@type=\"length-point\"]", set15);
 
         // Add OK collisions for /unit[@type=\"volume-pint\"]
-        Set<String> set16 = new HashSet<String>();
+        Set<String> set16 = new HashSet<>();
         set16.add("/unit[@type=\"length-point\"]");
         mapPathPartsToSets.put("/unit[@type=\"volume-pint\"]", set16);
 
         // Add OK collisions for /unit[@type=\"pressure-hectopascal\"]
-        Set<String> set17 = new HashSet<String>();
+        Set<String> set17 = new HashSet<>();
         set17.add("/unit[@type=\"pressure-millibar\"]");
         mapPathPartsToSets.put("/unit[@type=\"pressure-hectopascal\"]", set17);
 
         // Add OK collisions for /unit[@type=\"pressure-millibar\"]
-        Set<String> set18 = new HashSet<String>();
+        Set<String> set18 = new HashSet<>();
         set18.add("/unit[@type=\"pressure-hectopascal\"]");
         mapPathPartsToSets.put("/unit[@type=\"pressure-millibar\"]", set18);
 
         // Add OK collisions for /unit[@type=\"mass-pound\"]
-        Set<String> set19 = new HashSet<String>();
+        Set<String> set19 = new HashSet<>();
         set19.add("/unit[@type=\"length-point\"]");
         mapPathPartsToSets.put("/unit[@type=\"mass-pound\"]", set19);
 
         // Add OK collisions for /unit[@type=\"duration-century\"]
-        Set<String> set20 = new HashSet<String>();
+        Set<String> set20 = new HashSet<>();
         set20.add("/unitLength[@type=\"short\"]/unit[@type=\"duration-second\"]");
         mapPathPartsToSets.put("/unitLength[@type=\"short\"]/unit[@type=\"duration-century\"]", set20);
         // Add OK collisions for /unit[@type=\"duration-second\"]
-        Set<String> set21 = new HashSet<String>();
+        Set<String> set21 = new HashSet<>();
         set21.add("/unitLength[@type=\"short\"]/unit[@type=\"duration-century\"]");
         mapPathPartsToSets.put("/unitLength[@type=\"short\"]/unit[@type=\"duration-second\"]", set21);
 
+        // Add OK collisions for dot and pixel
+        addNonColliding(mapPathPartsToSets, "[@type=\"graphics-pixel\"]", "[@type=\"graphics-dot\"]");
+        addNonColliding(mapPathPartsToSets, "[@type=\"graphics-pixel-per-inch\"]", "[@type=\"graphics-dot-per-inch\"]");
+        addNonColliding(mapPathPartsToSets, "[@type=\"graphics-dot-per-centimeter\"]", "[@type=\"graphics-pixel-per-centimeter\"]");
+
         // all done, return immutable version
-        return Collections.unmodifiableMap(mapPathPartsToSets);
+        return ImmutableMap.copyOf(mapPathPartsToSets);
+    }
+
+    // TODO Clean up the mapPathPartsToSets; clumsy to build and probably not speedy to use.
+
+    public static void addNonColliding(Map<String, Set<String>> mapPathPartsToSets, String... alternatives) {
+        LinkedHashSet<String> items = new LinkedHashSet<>(Arrays.asList(alternatives));
+        for (String item : items) {
+            LinkedHashSet<String> others = new LinkedHashSet<>(items);
+            others.remove(item);
+            mapPathPartsToSets.put(item, ImmutableSet.copyOf(others));
+        }
     }
 
     public CheckDisplayCollisions(Factory factory) {
         super(factory);
     }
 
+    @Override
     @SuppressWarnings("unused")
     public CheckCLDR handleCheck(String path, String fullPath, String value, Options options,
         List<CheckStatus> result) {
@@ -293,7 +314,7 @@
             if (!path.contains("[@count=") || "0".equals(value)) {
                 return this;
             }
-            XPathParts parts = XPathParts.getInstance(path); // not frozen, for removeElement
+            XPathParts parts = XPathParts.getFrozenInstance(path).cloneAsThawed(); // not frozen, for removeElement
             String type = parts.getAttributeValue(-1, "type");
             myPrefix = parts.removeElement(-1).toString();
             matcher = PatternCache.get(myPrefix.replaceAll("\\[", "\\\\[") +
@@ -302,6 +323,7 @@
             message = "Can't have same number pattern as {0}";
             paths = getPathsWithValue(getResolvedCldrFileToCheck(), path, value, myType, myPrefix, matcher, currentAttributesToIgnore, Equivalence.exact);
         } else if (myType == Type.UNITS || myType == Type.UNIT_PREFIX) {
+            currentAttributesToIgnore = ignoreAltAttributes;
             paths = getPathsWithValue(getResolvedCldrFileToCheck(), path, value, myType, myPrefix, matcher, currentAttributesToIgnore, Equivalence.unit);
         } else if (myType == Type.CARDINAL_MINIMAL || myType == Type.ORDINAL_MINIMAL) {
             if (value.equals("{0}?")) {
@@ -338,7 +360,7 @@
 //                paths.add(subdivisionPath);
 //            }
             paths.addAll(duplicatePaths);
-        } else if (CHECK_FLAG_AND_EMOJI && myType == Type.ANNOTATIONS) { 
+        } else if (CHECK_FLAG_AND_EMOJI && myType == Type.ANNOTATIONS) {
             // make sure that annotations don't have same value as regions, eg “日本” for 🇯🇵 & 🗾
             // NOTE: this is an asymmetric test; we presume the name of the region is ok.
             Set<String> duplicatePaths = getPathsWithValue(
@@ -373,7 +395,7 @@
                 }
             }
         }
-        
+
         // Collisions between different lengths and counts of the same unit are allowed
         // Collisions between 'narrow' forms are allowed (the current is filtered by UNITS_IGNORE)
         //ldml/units/unitLength[@type="narrow"]/unit[@type="duration-day-future"]/unitPattern[@count="one"]
@@ -440,7 +462,7 @@
                 }
             }
         }
-        
+
         // removeMatches(myType);
         // check again on size
         if (paths.isEmpty()) {
@@ -448,7 +470,7 @@
         }
 
         // ok, we probably have a collision! Extract the types
-        Set<String> collidingTypes = new TreeSet<String>();
+        Set<String> collidingTypes = new TreeSet<>();
 
         if (SKIP_TYPE_CHECK) {
             for (String pathName : paths) {
@@ -532,7 +554,7 @@
                     log("Ignore a collision between exemplarCity and another name for Etc/* zones");
                     return this;
                 }
-                Set<String> collidingZoneTypes = new TreeSet<String>();
+                Set<String> collidingZoneTypes = new TreeSet<>();
                 collidingZoneTypes.add(thisZoneType);
                 collidingZoneTypes.add(collidingZoneType);
                 if (collidingZoneTypes.size() == 2 &&
@@ -579,7 +601,7 @@
             int debug = 0;
         }
 
-        Set<String> retrievedPaths = new HashSet<String>();
+        Set<String> retrievedPaths = new HashSet<>();
         if (myType.matchType == MatchType.PREFIX) {
             file.getPathsWithValue(value, myPrefix, matcher, retrievedPaths);
         } else {
@@ -596,8 +618,8 @@
         }
 
         // Do first cleanup
-        // remove paths with "alt/count"; they can be duplicates
-        Set<String> paths = new HashSet<String>();
+        // remove paths with "alt/count" per currentAttributesToIgnore; they can be duplicates
+        Set<String> paths = new HashSet<>();
         for (String pathName : retrievedPaths) {
             Type thisPathType = Type.getType(pathName);
             // If the colliding path is of a different type than the original,
@@ -605,7 +627,6 @@
             if (myType != thisPathType) {
                 continue;
             }
-            ;
             if (exclusions.reset(pathName).find() && thisPathType != Type.UNITS_COORDINATE) {
                 continue;
             }
@@ -691,7 +712,7 @@
         CLDRFile english = getEnglishFile();
         // Pick up all instances in English where the exemplarCity and territory match
         // and include them as exceptions.
-        exceptions = new HashMap<String, String>();
+        exceptions = new HashMap<>();
         for (Iterator<String> it = english.iterator(Type.ZONE.getPrefix()); it.hasNext();) {
             String xpath = it.next();
             if (!xpath.endsWith("/exemplarCity")) continue;
diff --git a/tools/java/org/unicode/cldr/test/CheckExemplars.java b/tools/java/org/unicode/cldr/test/CheckExemplars.java
index 3166f70..306c940 100644
--- a/tools/java/org/unicode/cldr/test/CheckExemplars.java
+++ b/tools/java/org/unicode/cldr/test/CheckExemplars.java
@@ -146,6 +146,7 @@
         return this;
     }
 
+    @Override
     public CheckCLDR handleCheck(String path, String fullPath, String value, Options options,
         List<CheckStatus> result) {
         if (fullPath == null) return this; // skip paths that we don't have
@@ -275,7 +276,14 @@
                     .setMessage("ParseLenient sample not in value: {0} ∌ {1}", us, sampleValue);
                 result.add(message);
             }
-        } catch (Exception e) {
+        } catch (IllegalArgumentException e) {
+            /*
+             * new UnicodeSet(value) throws IllegalArgumentException if, for example, value is null or value = "?".
+             * This can happen during cldr-unittest TestAll.
+             * path = //ldml/characters/parseLenients[@scope="general"][@level="lenient"]/parseLenient[@sample="’"]
+             * or
+             * path = //ldml/characters/parseLenients[@scope="date"][@level="lenient"]/parseLenient[@sample="-"]
+             */
             CheckStatus message = new CheckStatus().setCause(this)
                 .setMainType(CheckStatus.errorType)
                 .setSubtype(Subtype.badParseLenient)
@@ -349,7 +357,7 @@
         } catch (Exception e) {
             result.add(new CheckStatus().setCause(this).setMainType(CheckStatus.errorType)
                 .setSubtype(Subtype.illegalExemplarSet)
-                .setMessage("This field must be a set of the form [a b c-d ...]: ", new Object[] { e.getMessage() }));
+                .setMessage("This field must be a set of the form [a b c-d ...]: {0}", new Object[] { e.getMessage() }));
             return;
         }
 
diff --git a/tools/java/org/unicode/cldr/test/CheckForCopy.java b/tools/java/org/unicode/cldr/test/CheckForCopy.java
index 540294b..b201d3e 100644
--- a/tools/java/org/unicode/cldr/test/CheckForCopy.java
+++ b/tools/java/org/unicode/cldr/test/CheckForCopy.java
@@ -9,11 +9,11 @@
 import org.unicode.cldr.util.CLDRFile.Status;
 import org.unicode.cldr.util.CldrUtility;
 import org.unicode.cldr.util.Factory;
+import org.unicode.cldr.util.InternalCldrException;
 import org.unicode.cldr.util.LanguageTagParser;
 import org.unicode.cldr.util.RegexLookup;
 import org.unicode.cldr.util.XPathParts;
 
-import com.ibm.icu.lang.CharSequences;
 import com.ibm.icu.text.UnicodeSet;
 import com.ibm.icu.util.ICUException;
 
@@ -37,7 +37,6 @@
             "|dayPeriod" +
             "|(monthWidth|dayWidth|quarterWidth)\\[@type=\"(narrow|abbreviated)\"]" +
             "|exemplarCity" +
-            // "|localeDisplayNames/(scripts|territories)" +
             "|currency\\[@type=\"[A-Z]+\"]/symbol" +
             "|pattern" +
             "|field\\[@type=\"dayperiod\"]" +
@@ -55,170 +54,152 @@
     private static final RegexLookup<Boolean> SKIP_CODE_CHECK = new RegexLookup<Boolean>()
         .add("^//ldml/characterLabels/characterLabel", true)
         .add("^//ldml/dates/fields/field\\[@type=\"(era|week|minute|quarter|second)\"]/displayName", true)
-        .add("^//ldml/localeDisplayNames/scripts/script\\[@type=\"(Jamo|Thai|Ahom|Loma|Moon|Newa|Arab|Lisu|Bali|Cham|Modi)\"]", true)   
-        .add("^//ldml/localeDisplayNames/languages/language\\[@type=\"(fon|gan|luo|tiv|yao|vai)\"]", true)   
-        .add("^//ldml/dates/timeZoneNames/metazone\\[@type=\"GMT\"]", true)  
-        .add("^//ldml/localeDisplayNames/territories/territory\\[@type=\"[^\"]*+\"]\\[@alt=\"short\"]", true)  
-        .add("^//ldml/localeDisplayNames/measurementSystemNames/measurementSystemName", true)  
-        .add("^//ldml/localeDisplayNames/types/type\\[@key=\"collation\"]\\[@type=\"standard\"]", true)  
+        .add("^//ldml/localeDisplayNames/scripts/script\\[@type=\"(Jamo|Thai|Ahom|Loma|Moon|Newa|Arab|Lisu|Bali|Cham|Modi)\"]", true)
+        .add("^//ldml/localeDisplayNames/languages/language\\[@type=\"(fon|gan|luo|tiv|yao|vai)\"]", true)
+        .add("^//ldml/dates/timeZoneNames/metazone\\[@type=\"GMT\"]", true)
+        .add("^//ldml/localeDisplayNames/territories/territory\\[@type=\"[^\"]*+\"]\\[@alt=\"short\"]", true)
+        .add("^//ldml/localeDisplayNames/measurementSystemNames/measurementSystemName", true)
+        .add("^//ldml/localeDisplayNames/types/type\\[@key=\"collation\"]\\[@type=\"standard\"]", true)
         ;
 
-//    private static final Set<String> SKIP_TYPES = ImmutableSet.of(
-//        "CHF", "EUR", "XPD",
-//        "Vaii", "Yiii", "Thai",
-//        "SAAHO", "BOONT", "SCOUSE",
-//        "fon", "ijo", "luo", "tiv", "yao", "zu", "zza", "tw", "ur", "vo", "ha", "hi", "ig", "yo", "ak", "vai",
-//        "eo", "af",
-//        "Cuba",
-//        // languages that are the same in English as in themselves
-//        // and countries that have the same name as English in one of their official languages.
-//        "af", // Afrikaans
-//        "ak", // Akan
-//        "AD", // Andorra
-//        "LI", // Liechtenstein
-//        "NA", // Namibia
-//        "AR", // Argentina
-//        "CO", // Colombia
-//        "VE", // Venezuela
-//        "CL", // Chile
-//        "CU", // Cuba
-//        "EC", // Ecuador
-//        "GT", // Guatemala
-//        "BO", // Bolivia
-//        "HN", // Honduras
-//        "SV", // El Salvador
-//        "CR", // Costa Rica
-//        "PR", // Puerto Rico
-//        "NI", // Nicaragua
-//        "UY", // Uruguay
-//        "PY", // Paraguay
-//        "fil", // Filipino
-//        "FR", // France
-//        "MG", // Madagascar
-//        "CA", // Canada
-//        "CI", // Côte d’Ivoire
-//        "BI", // Burundi
-//        "ML", // Mali
-//        "TG", // Togo
-//        "NE", // Niger
-//        "BF", // Burkina Faso
-//        "RE", // Réunion
-//        "GA", // Gabon
-//        "LU", // Luxembourg
-//        "MQ", // Martinique
-//        "GP", // Guadeloupe
-//        "YT", // Mayotte
-//        "VU", // Vanuatu
-//        "SC", // Seychelles
-//        "MC", // Monaco
-//        "DJ", // Djibouti
-//        "RW", // Rwanda
-//        "ha", // Hausa
-//        "ID", // Indonesia
-//        "ig", // Igbo
-//        "NG", // Nigeria
-//        "SM", // San Marino
-//        "kln", // Kalenjin
-//        "mg", // Malagasy
-//        "MY", // Malaysia
-//        "BN", // Brunei
-//        "MT", // Malta
-//        "ZW", // Zimbabwe
-//        "SR", // Suriname
-//        "AW", // Aruba
-//        "PT", // Portugal
-//        "AO", // Angola
-//        "TL", // Timor-Leste
-//        "RS", // Serbia
-//        "rw", // Kinyarwanda
-//        "RW", // Rwanda
-//        "ZW", // Zimbabwe
-//        "FI", // Finland
-//        "TZ", // Tanzania
-//        "KE", // Kenya
-//        "UG", // Uganda
-//        "TO", // Tonga
-//        "wae", // Walser
-//        "metric");
-
     static UnicodeSet ASCII_LETTER = new UnicodeSet("[a-zA-Z]").freeze();
 
     enum Failure {
         ok, same_as_english, same_as_code
     }
 
+    @Override
+    @SuppressWarnings("unused")
     public CheckCLDR handleCheck(String path, String fullPath, String value,
         Options options, List<CheckStatus> result) {
 
-        if (fullPath == null || value == null) {
+        if (fullPath == null || path == null || value == null) {
             return this; // skip root, and paths that we don't have
         }
-        if (value.contentEquals("Hanb")) {
-            int debug = 0;
-        }
+        Failure failure = sameAsCodeOrEnglish(value, path, getCldrFileToCheck(), false);
+        addFailure(result, failure);
+        return this;
+    }
+
+    /**
+     * Check the given path and value, and return true if it has a same_as_code failure
+
+     * @param value the value
+     * @param path the path
+     * @param cldrFile the CLDRFile
+     * @return true or false
+     */
+    public static boolean sameAsCode(String value, String path, CLDRFile cldrFile) {
+        return sameAsCodeOrEnglish(value, path, cldrFile, true) == Failure.same_as_code;
+    }
+
+    /**
+     * Check the given path and value for same_as_code and same_as_english failures
+     *
+     * @param value the value
+     * @param path the path
+     * @param cldrFile the CLDRFile
+     * @param contextIsVoteSubmission true when a new or imported vote is in question, else false
+     * @return the Failure object
+     */
+    private static Failure sameAsCodeOrEnglish(String value, String path, CLDRFile cldrFile, boolean contextIsVoteSubmission) {
 
         Status status = new Status();
 
-        // don't check inherited values unless they are from ^^^
-        String topStringValue = getCldrFileToCheck().getUnresolved().getStringValue(path);
+        /*
+         * Don't check inherited values unless they are from ^^^
+         *
+         * In the context of vote submission, we must check inherited values,
+         * otherwise nothing prevents voting to inherit the code value.
+         *
+         * TODO: clarify the purpose of using topStringValue and getConstructedValue here;
+         * cf. getConstructedBaileyValue. This code is confusing and warrants explanation.
+         * The meaning of "explicit" here seems to be the opposite of its meaning elsewhere.
+         */
+        String topStringValue = cldrFile.getUnresolved().getStringValue(path);
         final boolean isExplicitBailey = CldrUtility.INHERITANCE_MARKER.equals(topStringValue);
-        if (!isExplicitBailey) {
-            String loc = getCldrFileToCheck().getSourceLocaleID(path, status);
-            if (!getCldrFileToCheck().getLocaleID().equals(loc) 
+        String loc = cldrFile.getSourceLocaleID(path, status);
+        if (!contextIsVoteSubmission && !isExplicitBailey) {
+            if (!cldrFile.getLocaleID().equals(loc)
                 || !path.equals(status.pathWhereFound)) {
-                return this;
+                return Failure.ok;
             }
-        }       
+        }
 
-
+        /*
+         * Since get() may return null here, comparison with Boolean.TRUE prevents NullPointerException.
+         */
         if (Boolean.TRUE == skip.get(path)) {
-            return this;
+            return Failure.ok;
         }
 
         Failure failure = Failure.ok;
 
-        String english = getDisplayInformation().getStringValue(path);
-        if (CharSequences.equals(english, value)) {
+        CLDRFile di = getDisplayInformation();
+        if (di == null) {
+            throw new InternalCldrException("CheckForCopy.sameAsCodeOrEnglish error: getDisplayInformation is null");
+        }
+        String english = di.getStringValue(path);
+        if (value.equals(english)) {
             if (ASCII_LETTER.containsSome(english)) {
                 failure = Failure.same_as_english;
             }
         }
 
-        // Check for attributes.
-        // May override English test
-        if (Boolean.TRUE != SKIP_CODE_CHECK.get(path)) {
-            String value2 = value;
-            if (isExplicitBailey) {
-                value2 = getCldrFileToCheck().getConstructedValue(path);
-                if (value2 == null) { // no special constucted value
-                    value2 = value;
-                }
+        /*
+         * Check for attributes. May override English test.
+         * Since get() may return null here, comparison with Boolean.TRUE prevents NullPointerException.
+         */
+        if (Boolean.TRUE == SKIP_CODE_CHECK.get(path)) {
+            return Failure.ok;
+        }
+        if (CldrUtility.INHERITANCE_MARKER.equals(value)) {
+            value = cldrFile.getConstructedBaileyValue(path, null, null);
+        }
+        if (value == null) {
+            return Failure.ok;
+        }
+        if ("en".equals(loc) || loc.startsWith("en_")) {
+            if ("year".equals(value) || "month".equals(value) || "day".equals(value) || "hour".equals(value)) {
+                return Failure.ok;
             }
-
-            XPathParts parts = XPathParts.getFrozenInstance(path);
-
-            int elementCount = parts.size();
-            for (int i = 2; i < elementCount; ++i) {
-                Map<String, String> attributes = parts.getAttributes(i);
-                for (Entry<String, String> attributeEntry : attributes.entrySet()) {
-                    final String attributeValue = attributeEntry.getValue();
-                    //                    if (SKIP_TYPES.contains(attributeValue)) {
-                    //                        failure = Failure.ok; // override English test
-                    //                        break;
-                    //                    }
-                    try {
-                        if (value2.equals(attributeValue)) {
-                            failure = Failure.same_as_code;
-                            break;
-                        }
-                    } catch (NullPointerException e) {
-                        throw new ICUException("Value: " + value + "\nattributeValue: " + attributeValue
-                            + "\nPath: " + path, e);
-                    }                
-                }
+        }
+        String value2 = value;
+        if (isExplicitBailey) {
+            value2 = cldrFile.getConstructedValue(path);
+            if (value2 == null) { // no special constructed value
+                value2 = value;
             }
         }
 
+        XPathParts parts = XPathParts.getFrozenInstance(path);
+
+        int elementCount = parts.size();
+        for (int i = 2; i < elementCount; ++i) {
+            Map<String, String> attributes = parts.getAttributes(i);
+            for (Entry<String, String> attributeEntry : attributes.entrySet()) {
+                final String attributeValue = attributeEntry.getValue();
+                try {
+                    if (value2.equals(attributeValue)) {
+                        failure = Failure.same_as_code;
+                        break;
+                    }
+                } catch (NullPointerException e) {
+                    throw new ICUException("Value: " + value + "\nattributeValue: " + attributeValue
+                        + "\nPath: " + path, e);
+                }
+            }
+        }
+        return failure;
+    }
+
+    /**
+     * If there is a failure, add it to the list
+     *
+     * @param result the list of CheckStatus objects
+     * @param failure the Failure object
+     */
+    private void addFailure(List<CheckStatus> result, Failure failure) {
         switch (failure) {
         case same_as_english:
             result
@@ -244,21 +225,22 @@
             break;
         default:
         }
-        return this;
     }
 
     @Override
     public CheckCLDR setCldrFileToCheck(CLDRFile cldrFileToCheck, Options options,
         List<CheckStatus> possibleErrors) {
-        
-        if (cldrFileToCheck == null) return this;
+
+        if (cldrFileToCheck == null) {
+            return this;
+        }
 
         final String localeID = cldrFileToCheck.getLocaleID();
-        
+
         LanguageTagParser ltp = new LanguageTagParser().set(localeID);
         String lang = ltp.getLanguage();
 
-        setSkipTest(false);        
+        setSkipTest(false);
         if (lang.equals("en") || localeID.equals("root")) {// || exemplars != null && ASCII_LETTER.containsNone(exemplars)) {
             setSkipTest(true);
             if (DEBUG) {
diff --git a/tools/java/org/unicode/cldr/test/CheckForExemplars.java b/tools/java/org/unicode/cldr/test/CheckForExemplars.java
index 645b1c0..f06341e 100644
--- a/tools/java/org/unicode/cldr/test/CheckForExemplars.java
+++ b/tools/java/org/unicode/cldr/test/CheckForExemplars.java
@@ -12,6 +12,7 @@
 import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -24,6 +25,7 @@
 import org.unicode.cldr.util.LocaleIDParser;
 import org.unicode.cldr.util.PatternCache;
 import org.unicode.cldr.util.PatternPlaceholders;
+import org.unicode.cldr.util.PatternPlaceholders.PlaceholderInfo;
 import org.unicode.cldr.util.PatternPlaceholders.PlaceholderStatus;
 import org.unicode.cldr.util.SupplementalDataInfo;
 import org.unicode.cldr.util.SupplementalDataInfo.BasicLanguageData;
@@ -33,6 +35,10 @@
 import org.unicode.cldr.util.XMLSource;
 import org.unicode.cldr.util.XPathParts;
 
+import com.google.common.base.Joiner;
+import com.google.common.collect.Multiset;
+import com.google.common.collect.Multiset.Entry;
+import com.google.common.collect.TreeMultiset;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.lang.UScript;
 import com.ibm.icu.text.Collator;
@@ -134,7 +140,7 @@
         ")");
     private Matcher leadOrTrailWhitespaceOk = LEAD_OR_TRAIL_WHITESPACE_OK.matcher("");
 
-    private static UnicodeSet ASCII = (UnicodeSet) new UnicodeSet("[\\u0020-\\u007F]").freeze();
+    private static UnicodeSet ASCII = new UnicodeSet("[\\u0020-\\u007F]").freeze();
 
     private PatternPlaceholders patternPlaceholders = PatternPlaceholders.getInstance();
     private SupplementalDataInfo sdi;
@@ -156,7 +162,7 @@
     static class PlaceholderTransform implements Transform<String, Set<String>> {
         @Override
         public Set<String> transform(String source) {
-            Set<String> placeholders = new LinkedHashSet<String>();
+            Set<String> placeholders = new LinkedHashSet<>();
             String[] parts = source.split(";\\s+");
             for (String part : parts) {
                 int equalsPos = part.indexOf('=');
@@ -257,6 +263,7 @@
         return result;
     }
 
+    @Override
     public CheckCLDR handleCheck(String path, String fullPath, String value,
         Options options, List<CheckStatus> result) {
         if (fullPath == null) return this; // skip paths that we don't have
@@ -294,13 +301,13 @@
         if (path.startsWith("//ldml/numbers/miscPatterns") && path.contains("[@type=\"range\"]")) {
             if (DISALLOWED_IN_RANGE.containsSome(value)) {
                 result
-                    .add(new CheckStatus()
-                        .setCause(this)
-                        .setMainType(CheckStatus.errorType)
-                        .setSubtype(Subtype.illegalCharactersInPattern)
-                        .setMessage(
-                            "Range patterns should not have letters.",
-                            new Object[] {}));
+                .add(new CheckStatus()
+                    .setCause(this)
+                    .setMainType(CheckStatus.errorType)
+                    .setSubtype(Subtype.illegalCharactersInPattern)
+                    .setMessage(
+                        "Range patterns should not have letters.",
+                        new Object[] {}));
             }
         }
         // Now handle date patterns.
@@ -413,7 +420,7 @@
                         if (localeID == null) {
                             throw new IllegalArgumentException(
                                 "A likely subtag for " + parser.getLanguage() +
-                                    " is required to get its script.");
+                                " is required to get its script.");
                         }
                     }
                     script = parser.set(localeID).getScript();
@@ -462,88 +469,89 @@
     }
 
     private String checkAndReplacePlaceholders(String path, String value, List<CheckStatus> result) {
-        // add checks for patterns. Make sure that all and only the message format patterns have {n}
-        Matcher matcher = patternMatcher.reset(value);
-        Set<String> matchList = new HashSet<String>();
-        StringBuffer placeholderBuffer = new StringBuffer();
-        while (matcher.find()) {
-            // Look for duplicate values.
-            if (!matchList.add(matcher.group())) {
-                placeholderBuffer.append(", ").append(matcher.group());
-            }
-        }
-        Set<String> placeholders = null;
+        CheckStatus.Type statusType = getPhase() == Phase.BUILD ? CheckStatus.warningType : CheckStatus.errorType; // new errors, so get past the tests.
+
+        // Get information about what should be there
         PlaceholderStatus placeholderStatus = patternPlaceholders.getStatus(path);
-        if (placeholderStatus != PlaceholderStatus.DISALLOWED) {
-            placeholders = patternPlaceholders.get(path).keySet();
-        }
+        Map<String, PlaceholderInfo> placeholderInfo = patternPlaceholders.get(path);
 
-        boolean supposedToHaveMessageFormatFields =
-            // supposedToBeMessageFormat.reset(path).find()
-            placeholders != null;
+        int minimum = placeholderInfo.size();
+        int maximum = placeholderInfo.size();
 
-        if (supposedToHaveMessageFormatFields) {
-            if (placeholderBuffer.length() > 0) {
-                if (placeholderStatus != PlaceholderStatus.MULTIPLE) {
-                    result.add(new CheckStatus().setCause(this).setMainType(CheckStatus.errorType)
-                        .setSubtype(Subtype.extraPlaceholders)
-                        .setMessage("Remove duplicates of{0}",
-                            new Object[] { placeholderBuffer.substring(1) }));
+        if (placeholderStatus == PlaceholderStatus.LOCALE_DEPENDENT || placeholderStatus == PlaceholderStatus.MULTIPLE) {
+            // if locale dependent, it is because of count= or ordinal=. Figure out what the values are, and whether we are allowed to have none or one
+            PluralRules rules = PluralRules.forLocale(new ULocale(getCldrFileToCheck().getLocaleID()));
+            if (rules != null) {
+                XPathParts parts = XPathParts.getFrozenInstance(path);
+                String keyword = parts.getAttributeValue(-1, "count");
+                if (keyword == null) {
+                    keyword = parts.getAttributeValue(-1, "ordinal");
                 }
-            }
-            placeholderBuffer.setLength(0);
-            // Check that the needed placeholders are there.
-            if (placeholders == null) placeholders = new HashSet<String>();
-            for (String placeholder : placeholders) {
-                if (!matchList.contains(placeholder)) {
-                    placeholderBuffer.append(", ").append(placeholder);
-                }
-            }
-            boolean placeholdersMissing = false;
-            if (placeholderBuffer.length() > 0) {
-                // Check
-                if (placeholderStatus == PlaceholderStatus.LOCALE_DEPENDENT && (path.contains("[@count=") || path.contains("[@ordinal="))) {
-                    PluralRules rules = PluralRules.forLocale(new ULocale(getCldrFileToCheck().getLocaleID()));
-                    XPathParts parts = XPathParts.getFrozenInstance(path);
-                    String keyword = parts.getAttributeValue(-1, "count");
-                    if (keyword == null) {
-                        keyword = parts.getAttributeValue(-1, "ordinal");
+                try {
+                    if (rules.getUniqueKeywordValue(keyword) != PluralRules.NO_UNIQUE_VALUE) {
+                        minimum = 0;
                     }
-                    placeholdersMissing = rules.getUniqueKeywordValue(keyword) == PluralRules.NO_UNIQUE_VALUE;
-                } else {
-                    placeholdersMissing = placeholderStatus == PlaceholderStatus.REQUIRED;
+                } catch (Exception e) {
+                    // internal error, skip
                 }
             }
-            if (placeholdersMissing) {
-                result.add(new CheckStatus().setCause(this).setMainType(CheckStatus.errorType)
-                    .setSubtype(Subtype.missingPlaceholders)
-                    .setMessage("This message pattern is missing placeholder(s){0}. See the English for an example.",
-                        new Object[] { placeholderBuffer.substring(1) }));
-            }
-            // Check for extra placeholders.
-            matchList.removeAll(placeholders);
-            if (matchList.size() > 0) {
-                String list = matchList.toString();
-                list = list.substring(1, list.length() - 1);
-                result.add(new CheckStatus().setCause(this).setMainType(CheckStatus.errorType)
-                    .setSubtype(Subtype.extraPlaceholders)
-                    .setMessage("Extra placeholders {0} should be removed.",
-                        new Object[] { list }));
-            }
-            // check the other characters in the message format patterns
-            value = patternMatcher.replaceAll(STAND_IN);
-        } else if (matchList.size() > 0 && placeholderStatus == PlaceholderStatus.DISALLOWED) { // non-message field has
-            // placeholder values
-            result.add(new CheckStatus()
-                .setCause(this)
-                .setMainType(CheckStatus.errorType)
-                .setSubtype(Subtype.shouldntHavePlaceholders)
-                .setMessage(
-                    "This field is not a message pattern, and should not have '{0}, {1},' etc. See the English for an example.",
-                    new Object[] {}));
-            // end checks for patterns
         }
-        return value;
+
+        // TODO: move these tests to CheckPlaceholder
+
+        // Now see what is there, and see if they match
+        Matcher matcher = patternMatcher.reset(value);
+        Multiset<String> matchList = TreeMultiset.create(); // Look for duplicate values.
+        while (matcher.find()) {
+            matchList.add(matcher.group());
+        }
+        final Set<String> distinctPlaceholders = matchList.elementSet();
+        int countDistinctPlaceholders = distinctPlaceholders.size();
+
+        if (countDistinctPlaceholders > 0) {
+            // Verify that all placeholders are monotonically increasing from zero.
+            int expected = 0;
+            for (String element : distinctPlaceholders) {
+                // int elementValue = Integer.parseInt(element, 1, element.length()-1, 10);
+                int elementValue = Integer.parseInt(element.substring(1, element.length()-1), 10);
+                if (elementValue != expected) {
+                    result.add(new CheckStatus().setCause(this).setMainType(statusType)
+                        .setSubtype(Subtype.gapsInPlaceholderNumbers)
+                        .setMessage("Placeholders {0} should be strictly increasing, starting at zero.", distinctPlaceholders));
+                    break;
+                }
+                ++expected;
+            }
+        }
+
+        // Check if duplicates are allowed
+        if (matchList.size() > countDistinctPlaceholders && placeholderStatus != PlaceholderStatus.MULTIPLE) {
+            Set<String> errors = new LinkedHashSet<>();
+            for (Entry<String> entry : matchList.entrySet()) {
+                if (entry.getCount() > 1) {
+                    errors.add(entry.getElement());
+                }
+            }
+            result.add(new CheckStatus().setCause(this).setMainType(statusType)
+                .setSubtype(Subtype.duplicatePlaceholders)
+                .setMessage("Duplicate placeholders: {0}.", Joiner.on(", ").join(errors)));
+        }
+
+        // Now see if the number we have is within bounds
+
+        if (countDistinctPlaceholders < minimum) {
+            result.add(new CheckStatus().setCause(this).setMainType(statusType)
+                .setSubtype(Subtype.missingPlaceholders)
+                .setMessage("Need at least {0} placeholder(s), but only have {1}. Placeholders are: {2}", minimum, countDistinctPlaceholders, placeholderInfo));
+        } else {
+            if (countDistinctPlaceholders > maximum) {
+                result.add(new CheckStatus().setCause(this).setMainType(statusType)
+                    .setSubtype(Subtype.extraPlaceholders)
+                    .setMessage("Need no more than {0} placeholders, but have too many with {1}.", countDistinctPlaceholders, minimum));
+            }
+        }
+        // Return the pattern with placeholders replaced
+        return matchList.isEmpty() ? value : patternMatcher.replaceAll(STAND_IN);
     }
 
     /**
@@ -570,7 +578,7 @@
                 if (localeID == null) {
                     throw new IllegalArgumentException(
                         "A likely subtag for " + parser.getLanguage() +
-                            " is required to get its script.");
+                        " is required to get its script.");
                 }
             }
             script = parser.set(localeID).getScript();
@@ -608,7 +616,7 @@
         scriptToCurrencies = new Relation(new HashMap<String, Set<String>>(), HashSet.class);
         for (Object curScript : scriptToTerritories.keySet()) {
             Set<String> territories = scriptToTerritories.get(curScript);
-            Set<String> currencies = new HashSet<String>();
+            Set<String> currencies = new HashSet<>();
             for (String territory : territories) {
                 Set<CurrencyDateInfo> currencyInfo = sdi.getCurrencyDateInfo(territory);
                 for (CurrencyDateInfo info : currencyInfo) {
@@ -684,14 +692,14 @@
             scriptString.append("}");
         }
         result
-            .add(new CheckStatus()
-                .setCause(this)
-                .setMainType(warningVsError)
-                .setSubtype(ASCII.containsAll(missing) ? subtypeAscii : subtype)
-                .setMessage(
-                    "The characters \u200E{0}\u200E {1} {2}. "
-                        +
-                        "For what to do, see <i>Handling Warnings</i> in <a target='CLDR-ST-DOCS' href='http://cldr.org/translation/characters#TOC-Handing-Warnings'>Characters</a>.",
+        .add(new CheckStatus()
+            .setCause(this)
+            .setMainType(warningVsError)
+            .setSubtype(ASCII.containsAll(missing) ? subtypeAscii : subtype)
+            .setMessage(
+                "The characters \u200E{0}\u200E {1} {2}. "
+                    +
+                    "For what to do, see <i>Handling Warnings</i> in <a target='CLDR-ST-DOCS' href='http://cldr.org/translation/characters#TOC-Handing-Warnings'>Characters</a>.",
                     new Object[] { fixedMissing, scriptString, qualifier }));
     }
 
diff --git a/tools/java/org/unicode/cldr/test/CheckLogicalGroupings.java b/tools/java/org/unicode/cldr/test/CheckLogicalGroupings.java
index 8b6b871..af96eb4 100644
--- a/tools/java/org/unicode/cldr/test/CheckLogicalGroupings.java
+++ b/tools/java/org/unicode/cldr/test/CheckLogicalGroupings.java
@@ -3,6 +3,8 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.TreeSet;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
 import org.unicode.cldr.test.CheckCLDR.CheckStatus.Subtype;
@@ -12,10 +14,21 @@
 import org.unicode.cldr.util.Level;
 import org.unicode.cldr.util.LocaleIDParser;
 import org.unicode.cldr.util.LogicalGrouping;
+import org.unicode.cldr.util.LogicalGrouping.PathType;
+import org.unicode.cldr.util.With;
 import org.unicode.cldr.util.XMLSource;
 import org.unicode.cldr.util.XPathParts;
 
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMultiset;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Multiset;
+import com.google.common.collect.Multiset.Entry;
+import com.google.common.collect.TreeMultiset;
+import com.ibm.icu.dev.util.UnicodeMap;
+import com.ibm.icu.text.Transliterator;
+import com.ibm.icu.text.UnicodeSet;
+import com.ibm.icu.util.Output;
 
 public class CheckLogicalGroupings extends FactoryCheckCLDR {
     // Change MINIMUM_DRAFT_STATUS to DraftStatus.contributed if you only care about
@@ -26,7 +39,7 @@
 
     private boolean phaseCausesError;
     private CoverageLevel2 coverageLevel;
-    
+
     public CheckLogicalGroupings(Factory factory) {
         super(factory);
     }
@@ -36,18 +49,18 @@
         List<CheckStatus> possibleErrors) {
         super.setCldrFileToCheck(cldrFileToCheck, options, possibleErrors);
 
-        // skip the test unless we are at the top level, eg 
+        // skip the test unless we are at the top level, eg
         //    test root, fr, sr_Latn, ...
         //    but skip fr_CA, sr_Latn_RS, etc.
         // TODO: could simplify some of the code later, since non-topLevel locales are skipped
-        // NOTE: we could have a weaker test. 
+        // NOTE: we could have a weaker test.
         // Skip if all of the items are either inherited, or aliased *including votes for inherited (3 up arrows)*
 
         String parent = LocaleIDParser.getParent(cldrFileToCheck.getLocaleID());
         boolean isTopLevel = parent == null || parent.equals("root");
         setSkipTest(!isTopLevel);
         phaseCausesError = PHASES_CAUSE_ERROR.contains(getPhase());
-        
+
         coverageLevel = CoverageLevel2.getInstance(cldrFileToCheck.getLocaleID());
 
         return this;
@@ -58,7 +71,7 @@
     // to run just this test, on just locales starting with 'nl', use CheckCLDR with -fnl.* -t.*LogicalGroupings.*
 
     /**
-     * We are not as strict with sublocales (where the parent is neither root nor code_fallback). 
+     * We are not as strict with sublocales (where the parent is neither root nor code_fallback).
      * @param path
      * @return
      */
@@ -79,6 +92,9 @@
         return !source.equals(XMLSource.ROOT_ID) && !source.equals(XMLSource.CODE_FALLBACK_ID);
     }
 
+    static final int LIMIT_DISTANCE = 5;
+
+    @Override
     public CheckCLDR handleCheck(String path, String fullPath, String value, Options options,
         List<CheckStatus> result) {
 
@@ -87,11 +103,34 @@
             return this;
         }
 
-        Set<String> paths = LogicalGrouping.getPaths(getCldrFileToCheck(), path);
+        Output<PathType> pathType = new Output<>();
+        Set<String> paths = LogicalGrouping.getPaths(getCldrFileToCheck(), path, pathType);
         if (paths == null || paths.size() < 2) return this; // skip if not part of a logical grouping
 
-        // TODO 
-        Set<String> paths2 = new HashSet<String>(paths);
+        // check the edit distances for count, gender, case
+        switch(pathType.value) {
+        case COUNT_CASE:
+        case COUNT:
+        case COUNT_CASE_GENDER:
+            // only check the first path
+            TreeSet<String> sorted = new TreeSet<>(paths);
+            if (path.equals(sorted.iterator().next())) {
+                Multiset<String> values = TreeMultiset.create();
+                int maxDistance = getMaxDistance(path, value, sorted, values);
+                if (maxDistance >= LIMIT_DISTANCE) {
+                    maxDistance = getMaxDistance(path, value, paths, values);
+                    result.add(new CheckStatus().setCause(this).setMainType(CheckStatus.warningType)
+                        .setSubtype(Subtype.largerDifferences) // typically warningType or errorType
+                        .setMessage("{0} different characters within {1}; {2}", maxDistance, showInvisibles(values), pathType.value));
+                }
+            }
+            break;
+        default: break;
+        }
+
+
+        // TODO make this more efficient
+        Set<String> paths2 = new HashSet<>(paths);
         for (String p : paths2) {
             if (LogicalGrouping.isOptional(getCldrFileToCheck(), p)) {
                 paths.remove(p);
@@ -99,7 +138,8 @@
         }
         if (paths.size() < 2) return this; // skip if not part of a logical grouping
 
-        Set<String> missingPaths = new HashSet<String>();
+
+        Set<String> missingPaths = new HashSet<>();
         boolean havePath = false;
         String firstPath = null;
         for (String apath : paths) {
@@ -111,7 +151,7 @@
                 }
                 missingPaths.add(apath);
             }
-        }        
+        }
 
         if (havePath && !missingPaths.isEmpty()) {
             if (path.equals(firstPath)) {
@@ -120,7 +160,7 @@
                     .map(x -> getPathReferenceForMessage(x, true))
                     .collect(Collectors.toSet());
                 Level cLevel = coverageLevel.getLevel(path);
-                
+
                 CheckStatus.Type showError = phaseCausesError ? CheckStatus.errorType : CheckStatus.warningType;
                 result.add(new CheckStatus().setCause(this).setMainType(showError)
                     .setSubtype(Subtype.incompleteLogicalGroup)
@@ -177,7 +217,7 @@
             return this; // bail if we are ok
         }
 
-        // If some other path in the LG has a higher draft status, then cause error on this path. 
+        // If some other path in the LG has a higher draft status, then cause error on this path.
         // NOTE: changed to show in Vetting, not just Resolution
 
         for (String apath : paths) {
@@ -197,11 +237,115 @@
                 CheckStatus.Type showError = phaseCausesError ? CheckStatus.errorType : CheckStatus.warningType;
                 result.add(new CheckStatus().setCause(this).setMainType(showError)
                     .setSubtype(Subtype.inconsistentDraftStatus) // typically warningType or errorType
-                    .setMessage("This item has a lower draft status (in its logical group) than {0}.", 
+                    .setMessage("This item has a lower draft status (in its logical group) than {0}.",
                         getPathReferenceForMessage(apath, true))); // the
                 break; // no need to continue
             }
         }
         return this;
     }
+
+    static final Transliterator SHOW_INVISIBLES = Transliterator.createFromRules(
+        "show",
+        "([[:C:][:Z:][:whitespace:][:Default_Ignorable_Code_Point:]-[\\u0020]]) > &hex/perl($1);",
+        Transliterator.FORWARD);
+
+    public static String showInvisibles(String value) {
+        return SHOW_INVISIBLES.transform(value);
+    }
+
+    public static String showInvisibles(int codePoint) {
+        return showInvisibles(With.fromCodePoint(codePoint));
+    }
+
+    public static String showInvisibles(Multiset<?> codePointCounts) {
+        StringBuilder b = new StringBuilder().append('{');
+        for (Entry<?> entry : codePointCounts.entrySet()) {
+            if (b.length() > 1) {
+                b.append(", ");
+            }
+            Object element = entry.getElement();
+            b.append(element instanceof Integer ? showInvisibles((int) element) : showInvisibles(element.toString()));
+            if (entry.getCount() > 1) {
+                b.append('⨱').append(entry.getCount());
+            }
+        }
+        return b.append('}').toString();
+    }
+
+    private int getMaxDistance(String path, String value, Set<String> paths, Multiset<String> values) {
+        values.clear();
+        final CLDRFile cldrFileToCheck = getCldrFileToCheck();
+        Set<Fingerprint> fingerprints = new HashSet<>();
+        for (String path1 : paths) {
+            final String pathValue = cleanSpaces(path.contentEquals(path1) ? value : cldrFileToCheck.getWinningValue(path1));
+            values.add(pathValue);
+            fingerprints.add(Fingerprint.make(pathValue));
+        }
+        return Fingerprint.maxDistanceBetween(fingerprints);
+    }
+
+    private static final UnicodeMap<String> OTHER_SPACES = new UnicodeMap<String>().putAll(new UnicodeSet("[[:Z:][:S:][:whitespace:]]"), " ").freeze();
+    public static String cleanSpaces(String pathValue) {
+        return OTHER_SPACES.transform(pathValue);
+    }
+
+    // Later
+    private static ConcurrentHashMap<String, Fingerprint> FINGERPRINT_CACHE = new ConcurrentHashMap<>();
+
+    /**
+     * Use cheap distance metric for testing differences; just the number of characters of each kind.
+     */
+    public static class Fingerprint {
+        private final Multiset<Integer> codePointCounts;
+
+        private Fingerprint(String value) {
+            Multiset<Integer> result = TreeMultiset.create();
+            for (int cp : With.codePointArray(value)) {
+                result.add(cp);
+            }
+            codePointCounts = ImmutableMultiset.copyOf(result);
+        }
+
+        public static int maxDistanceBetween(Set<Fingerprint> fingerprintsIn) {
+            int distance = 0;
+            List<Fingerprint> fingerprints = ImmutableList.copyOf(fingerprintsIn); // The set removes duplicates
+            // get the n x n comparisons (but skipping inverses, so (n x (n-1))/2). Quadratic, but most sets are small.
+            for (int i = fingerprints.size()-1; i > 0; --i) { // note the lower bound is different for i and j
+                final Fingerprint fingerprint_i = fingerprints.get(i);
+                for (int j = i-1; j >= 0; --j) {
+                    final Fingerprint fingerprints_j = fingerprints.get(j);
+                    final int currentDistance = fingerprint_i.getDistanceTo(fingerprints_j);
+                    distance = Math.max(distance, currentDistance);
+                }
+            }
+            return distance;
+        }
+
+        public int getDistanceTo(Fingerprint that) {
+            int distance = 0;
+            Set<Integer> allChars = new HashSet<>(that.codePointCounts.elementSet());
+            allChars.addAll(codePointCounts.elementSet());
+
+            for (Integer element :allChars) {
+                final int count = codePointCounts.count(element);
+                final int otherCount = that.codePointCounts.count(element);
+                distance += Math.abs(count - otherCount);
+            }
+            return distance;
+        }
+
+        public int size() {
+            return codePointCounts.size();
+        }
+
+        public static Fingerprint make(String value) {
+            return FINGERPRINT_CACHE.computeIfAbsent(value, v -> new Fingerprint(v));
+        }
+
+        @Override
+        public String toString() {
+            return showInvisibles(codePointCounts);
+        }
+    }
 }
diff --git a/tools/java/org/unicode/cldr/test/CheckMetazones.java b/tools/java/org/unicode/cldr/test/CheckMetazones.java
index 5ad88f7..24d7afd 100644
--- a/tools/java/org/unicode/cldr/test/CheckMetazones.java
+++ b/tools/java/org/unicode/cldr/test/CheckMetazones.java
@@ -11,6 +11,7 @@
     // to run just this test, on just locales starting with 'nl', use CheckCLDR with -fnl.* -t.*Metazones.*
 
     // If you don't need any file initialization or postprocessing, you only need this one routine
+    @Override
     public CheckCLDR handleCheck(String path, String fullPath, String value, Options options,
         List<CheckStatus> result) {
         // it helps performance to have a quick reject of most paths
diff --git a/tools/java/org/unicode/cldr/test/CheckNew.java b/tools/java/org/unicode/cldr/test/CheckNew.java
index 6a17f47..6a75c81 100644
--- a/tools/java/org/unicode/cldr/test/CheckNew.java
+++ b/tools/java/org/unicode/cldr/test/CheckNew.java
@@ -2,16 +2,16 @@
 
 import java.util.Date;
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.unicode.cldr.test.CheckCLDR.CheckStatus.Subtype;
-import org.unicode.cldr.util.CLDRConfig;
 import org.unicode.cldr.util.CLDRFile;
-import org.unicode.cldr.util.CLDRFile.Status;
 import org.unicode.cldr.util.Factory;
 
 public class CheckNew extends FactoryCheckCLDR {
     private OutdatedPaths outdatedPaths;
-    private CLDRFile annotationsRoot;
+    boolean isRoot;
 
     public CheckNew(Factory factory) {
         super(factory);
@@ -24,41 +24,30 @@
         if (cldrFileToCheck == null) {
             return this;
         }
-        //        if (Phase.VETTING == getPhase()) {
-        //            setSkipTest(false); // ok
-        //        } else {
-        //            setSkipTest(true);
-        //            return this;
-        //        }
-
         super.setCldrFileToCheck(cldrFileToCheck, options, possibleErrors);
-        annotationsRoot = CLDRConfig.getInstance().getAnnotationsFactory().make("root", false);
+        isRoot = "root".equals(cldrFileToCheck.getLocaleID());
+
         return this;
     }
 
+    static final Pattern BAD_EMOJI = Pattern.compile("E\\d+(\\.\\d+)?-\\d+");
+
     @Override
     public CheckCLDR handleCheck(String path, String fullPath, String value, Options options,
         List<CheckStatus> result) {
 
         CLDRFile cldrFileToCheck = getCldrFileToCheck();
-        if (path.startsWith("//ldml/annotations/annotation") && value != null) {
+        if (!isRoot
+            && value != null
+            && path.startsWith("//ldml/annotations/annotation")
+            && cldrFileToCheck.getUnresolved().getStringValue(path) != null) { // don't check inherited values
             // first see if the value is inherited or not
-            boolean skip = false;
-            if (cldrFileToCheck.isResolved()) {
-                Status status = new Status();
-                String localeFound = cldrFileToCheck.getSourceLocaleID(path, status);
-                if ("root".equals(localeFound)) {
-                    skip = true;
-                }
-            }
-            if (!skip) {
-                String rootValue = annotationsRoot.getStringValueWithBailey(path);
-                if (value.equals(rootValue)) {
-                    result.add(new CheckStatus().setCause(this)
-                        .setMainType(CheckStatus.errorType)
-                        .setSubtype(Subtype.valueMustBeOverridden)
-                        .setMessage("This value must be a real translation, NOT the name/keyword placeholder."));
-                }
+            Matcher matcher = BAD_EMOJI.matcher(value);
+            if (matcher.matches()) {
+                result.add(new CheckStatus().setCause(this)
+                    .setMainType(CheckStatus.errorType)
+                    .setSubtype(Subtype.valueMustBeOverridden)
+                    .setMessage("This value must be a real translation, NOT the name/keyword placeholder."));
             }
         }
 
diff --git a/tools/java/org/unicode/cldr/test/CheckNumbers.java b/tools/java/org/unicode/cldr/test/CheckNumbers.java
index cbc815f..76203cc 100644
--- a/tools/java/org/unicode/cldr/test/CheckNumbers.java
+++ b/tools/java/org/unicode/cldr/test/CheckNumbers.java
@@ -33,7 +33,7 @@
 
 public class CheckNumbers extends FactoryCheckCLDR {
     private static final Splitter SEMI_SPLITTER = Splitter.on(';');
-    
+
     private static final Set<String> SKIP_TIME_SEPARATOR = ImmutableSet.of("nds", "fr_CA");
 
     private static final UnicodeSet FORBIDDEN_NUMERIC_PATTERN_CHARS = new UnicodeSet("[[:n:]-[0]]");
@@ -188,11 +188,11 @@
             if (patternForHm != null && !patternForHm.contains(value)) {
                 // Should be fixed to not require hack, see #11833
                 if (!SKIP_TIME_SEPARATOR.contains(getCldrFileToCheck().getLocaleID())) {
-                result.add(new CheckStatus()
-                    .setCause(this)
-                    .setMainType(CheckStatus.errorType)
-                    .setSubtype(Subtype.invalidSymbol)
-                    .setMessage("Invalid timeSeparator: " + value + "; must match what is used in Hm time pattern: " + patternForHm));
+                    result.add(new CheckStatus()
+                        .setCause(this)
+                        .setMainType(CheckStatus.errorType)
+                        .setSubtype(Subtype.invalidSymbol)
+                        .setMessage("Invalid timeSeparator: " + value + "; must match what is used in Hm time pattern: " + patternForHm));
                 }
             }
         }
@@ -202,7 +202,7 @@
         if (type == NumericType.NOT_NUMERIC) {
             return this; // skip
         }
-        XPathParts parts = XPathParts.getInstance(path); // can't be frozen because some of the following code modifies it!
+        XPathParts parts = XPathParts.getFrozenInstance(path);
 
         boolean isPositive = true;
         for (String patternPart : SEMI_SPLITTER.split(value)) {
@@ -280,6 +280,7 @@
         // Tests that assume that the value is a valid number pattern.
         // Notice that we pick up any exceptions, so that we can
         // give a reasonable error message.
+        parts = parts.cloneAsThawed();
         try {
             if (type == NumericType.DECIMAL_ABBREVIATED || type == NumericType.CURRENCY_ABBREVIATED) {
                 // Check for consistency in short/long decimal formats.
@@ -373,6 +374,10 @@
         return this;
     }
 
+    /**
+     * Only called when we are looking at compact decimals. Make sure that we have a consistent number of 0's at each level, and check for missing 0's.
+     * (The latter are only allowed for "singular" plural forms).
+     */
     private void checkDecimalFormatConsistency(XPathParts parts, String path, String value,
         List<CheckStatus> result, NumericType type) {
         // Look for duplicates of decimal formats with the same number
@@ -389,15 +394,36 @@
             // can happen if count is numeric literal, like "1"
         }
         CLDRFile resolvedFile = getResolvedCldrFileToCheck();
-        Set<String> inconsistentItems = new TreeSet<String>();
-        Set<Count> otherCounts = new HashSet<Count>(pluralTypes);
+        Set<String> inconsistentItems = new TreeSet<>();
+        Set<Count> otherCounts = new HashSet<>(pluralTypes);
         if (thisCount != null) {
-            if (pluralExamples.get(thisCount).size() == 1 && numIntegerDigits <= 0) {
-                // If a plural case corresponds to a single double value, the format is
-                // allowed to not include a numeric value and in this way be inconsistent
-                // with the numeric formats used for other plural cases.
+            Set<Double> pe = pluralExamples.get(thisCount);
+            if (pe == null) {
+                /*
+                 * This can happen for unknown reasons when path =
+                 * //ldml/numbers/currencyFormats[@numberSystem="latn"]/currencyFormatLength[@type="short"]/currencyFormat[@type="standard"]/pattern[@type="1000"][@count="one"]
+                 * TODO: something? At least don't throw NullPointerException, as happened when the code
+                 * was "... pluralExamples.get(thisCount).size() ..."; never assume get() returns non-null
+                 */
                 return;
             }
+            if (!value.contains("0")) {
+                switch (pe.size()) {
+                case 0:  // do nothing, shouldn't ever happen
+                    break;
+                case 1:
+                    // If a plural case corresponds to a single double value, the format is
+                    // allowed to not include a numeric value and in this way be inconsistent
+                    // with the numeric formats used for other plural cases.
+                    return;
+                default: // we have too many digits
+                    result.add(new CheckStatus().setCause(this)
+                        .setMainType(CheckStatus.errorType)
+                        .setSubtype(Subtype.missingZeros)
+                        .setMessage("Values without a zero must only be used where there is only one possible numeric form, but this has multiple: {0} ",
+                            pe.toString()));
+                }
+            }
             otherCounts.remove(thisCount);
         }
         for (Count count : otherCounts) {
@@ -537,6 +563,7 @@
 
     /**
      * Produce a canonical pattern, which will vary according to type and whether it is posix or not.
+     * @param count
      *
      * @param path
      */
@@ -552,7 +579,10 @@
             df.setMaximumFractionDigits(digits[2]);
             pattern = df.toPattern();
         } else { // of form 1000. Result must be 0+(.0+)?
-            if (type == NumericType.CURRENCY_ABBREVIATED) {
+            if (type == NumericType.CURRENCY_ABBREVIATED || type == NumericType.DECIMAL_ABBREVIATED) {
+                if (!inpattern.contains("0")) {
+                    return inpattern; // we check in checkDecimalFormatConsistency to make sure that the "no number" case is allowed.
+                }
                 if (!inpattern.contains("0.0")) {
                     df.setMinimumFractionDigits(0); // correct the current rewrite
                 }
@@ -582,6 +612,7 @@
             return this;
         }
 
+        @Override
         public SimpleDemo getDemo() {
             return new MyDemo().setFormat(df);
         }
@@ -594,10 +625,12 @@
     static class MyDemo extends FormatDemo {
         private DecimalFormat df;
 
+        @Override
         protected String getPattern() {
             return df.toPattern();
         }
 
+        @Override
         protected String getSampleInput() {
             return String.valueOf(ExampleGenerator.NUMBER_SAMPLE);
         }
@@ -607,6 +640,7 @@
             return this;
         }
 
+        @Override
         protected void getArguments(Map<String, String> inout) {
             currentPattern = currentInput = currentFormatted = currentReparsed = "?";
             double d;
diff --git a/tools/java/org/unicode/cldr/test/CheckUnits.java b/tools/java/org/unicode/cldr/test/CheckUnits.java
index d3f728e..e32da4e 100644
--- a/tools/java/org/unicode/cldr/test/CheckUnits.java
+++ b/tools/java/org/unicode/cldr/test/CheckUnits.java
@@ -1,45 +1,90 @@
 package org.unicode.cldr.test;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.regex.Pattern;
 
 import org.unicode.cldr.test.CheckCLDR.CheckStatus.Subtype;
+import org.unicode.cldr.util.CLDRConfig;
+import org.unicode.cldr.util.CLDRFile;
+import org.unicode.cldr.util.GrammarInfo;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalFeature;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalScope;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalTarget;
 import org.unicode.cldr.util.PatternCache;
+import org.unicode.cldr.util.UnitConverter;
+import org.unicode.cldr.util.UnitConverter.UnitId;
+import org.unicode.cldr.util.UnitPathType;
 import org.unicode.cldr.util.XPathParts;
 
 import com.ibm.icu.text.SimpleFormatter;
+import com.ibm.icu.text.UnicodeSet;
 
 public class CheckUnits extends CheckCLDR {
     private static final Pattern HOUR_SYMBOL = PatternCache.get("h{1,2}");
     private static final Pattern MINUTE_SYMBOL = PatternCache.get("m{1,2}");
     private static final Pattern SECONDS_SYMBOL = PatternCache.get("ss");
+    private static final UnicodeSet DISALLOW_LONG_POWER = new UnicodeSet("[²³]").freeze();
+
+    static final UnitConverter unitConverter = CLDRConfig.getInstance().getSupplementalDataInfo().getUnitConverter();
+
+    private Collection<String> genders = null;
+
+    @Override
+    public CheckCLDR setCldrFileToCheck(CLDRFile cldrFileToCheck, Options options, List<CheckStatus> possibleErrors) {
+        super.setCldrFileToCheck(cldrFileToCheck, options, possibleErrors);
+
+        GrammarInfo grammarInfo = CLDRConfig.getInstance().getSupplementalDataInfo().getGrammarInfo(cldrFileToCheck.getLocaleID());
+        genders = grammarInfo == null ? null : grammarInfo.get(GrammaticalTarget.nominal, GrammaticalFeature.grammaticalGender, GrammaticalScope.units);
+
+        return this;
+    }
 
     @Override
     public CheckCLDR handleCheck(String path, String fullPath, String value, Options options,
         List<CheckStatus> result) {
 
-        if (!path.startsWith("//ldml/units")) {
+        if (value == null || !path.startsWith("//ldml/units")) {
             return this;
         }
+        final XPathParts parts = XPathParts.getFrozenInstance(path);
+        String finalElement = parts.getElement(-1);
+
+        if (genders != null && !genders.isEmpty() && finalElement.equals("gender")) {
+            if (!genders.contains(value)) {
+                result.add(new CheckStatus().setCause(this)
+                    .setMainType(CheckStatus.errorType)
+                    .setSubtype(Subtype.invalidGenderCode)
+                    .setMessage("The gender value for this locale must be one of: {0}", genders));
+            }
+        }
+
         // Note, the following test has some overlaps with the checkAndReplacePlaceholders
         // test in CheckForExamplars (why there?). That is probably OK, they check in
         // different ways, but some errors will produce two somewhat different error messages.
-        if (path.startsWith("//ldml/units/unitLength")) {
+        UnitPathType pathType = UnitPathType.getPathType(parts);
+        if (pathType != null) {
             int min = 0;
             int max = 0;
-            if (path.contains("/compoundUnitPattern1") || path.contains("/unitPrefixPattern")) {
+            switch(pathType) {
+            case power: case prefix:
                 min = 1;
                 max = 1;
-            } else if (path.contains("/compoundUnitPattern")) {
+                break;
+            case times: case per:
                 min = 2;
                 max = 2;
-            } else if (path.contains("/perUnitPattern") || path.contains("/coordinateUnitPattern")) {
+                break;
+            case perUnit: case coordinate: // coordinateUnitPattern
                 min = 1;
                 max = 1;
-            } else if (path.contains("/unitPattern")) {
+                break;
+            case unit:
                 min = 0;
                 max = 1;
-            } // else we have displayName, with min/max = 0
+                break;
+            default: // 0, 0
+            }
             if (max > 0) {
                 try {
                     SimpleFormatter sf = SimpleFormatter.compileMinMaxArguments(value, min, max);
@@ -49,37 +94,77 @@
                         .setMessage("Invalid unit pattern, must have min " + min + " and max " + max + " distinct placeholders of the form {n}"));
                 }
             }
+            String idType;
+            switch(pathType) {
+            case power: {
+                final String width = parts.getAttributeValue(-3, "type");
+                if (value != null && "long".contentEquals(width)) {
+                    if (DISALLOW_LONG_POWER.containsSome(fixedValueIfInherited(value, path))) {
+                        String unresolvedValue = getCldrFileToCheck().getUnresolved().getStringValue(path);
+                        if (unresolvedValue != null) {
+                            final String message = genders == null
+                                ? "Long value for power can’t use superscripts; it must be spelled out."
+                                    : "Long value for power can’t use superscripts; it must be spelled out. [NOTE: values can vary by gender.]";
+                            result.add(new CheckStatus().setCause(this).setMainType(CheckStatus.errorType)
+                                .setSubtype(Subtype.longPowerWithSubscripts)
+                                .setMessage(message));
+                        }
+                    }
+                }
+            }
+            // fall through
+            case prefix:
+                idType = parts.getAttributeValue(-2, "type");
+                for (String shortUnitId : pathType.sampleComposedShortUnitIds.get(idType)) {
+                    final UnitId unitId = unitConverter.createUnitId(shortUnitId);
+                    final String width = parts.getAttributeValue(-3, "type");
+                    String count = parts.getAttributeValue(-1, "count");
+                    String caseVariant = parts.getAttributeValue(-1, "case");
+                    final CLDRFile cldrFile = getCldrFileToCheck();
+                    String explicitPattern = UnitPathType.unit.getTrans(cldrFile, width, shortUnitId, count, caseVariant, null, null);
+                    if (explicitPattern != null) {
+                        String composedPattern = unitId.toString(cldrFile, width, count, caseVariant, null, false);
+                        if (composedPattern != null && !explicitPattern.equals(composedPattern)) {
+                            unitId.toString(cldrFile, width, count, caseVariant, null, false); // for debugging
+                            result.add(new CheckStatus().setCause(this).setMainType(CheckStatus.warningType)
+                                .setSubtype(Subtype.mismatchedUnitComponent)
+                                .setMessage("Mismatched component: «{0}» produces «{1}», but the explicit translation is «{2}». See http://cldr.unicode.org/translation/units-1/units#TOC-Compound-Units", value, composedPattern, explicitPattern));
+                        }
+                    }
+                }
+                break;
+            default:
+                break;
+            }
         }
 
-        if (!path.contains("durationUnitPattern")) {
-            return this;
-        }
+        if (pathType == UnitPathType.duration) {
+            XPathParts xpp = parts;
+            String durationUnitType = xpp.findAttributeValue("durationUnit", "type");
+            boolean hasHourSymbol = HOUR_SYMBOL.matcher(value).find();
+            boolean hasMinuteSymbol = MINUTE_SYMBOL.matcher(value).find();
+            boolean hasSecondsSymbol = SECONDS_SYMBOL.matcher(value).find();
 
-        XPathParts xpp = XPathParts.getFrozenInstance(path);
-        String durationUnitType = xpp.findAttributeValue("durationUnit", "type");
-        boolean hasHourSymbol = HOUR_SYMBOL.matcher(value).find();
-        boolean hasMinuteSymbol = MINUTE_SYMBOL.matcher(value).find();
-        boolean hasSecondsSymbol = SECONDS_SYMBOL.matcher(value).find();
-
-        if (durationUnitType.contains("h") && !hasHourSymbol) {
-            /* Changed message from "The hour symbol (h or hh) is missing"
-             *  to "The hour indicator should be either h or hh for duration"
-             *  per http://unicode.org/cldr/trac/ticket/10999
-             */
-            result.add(new CheckStatus().setCause(this)
-                .setMainType(CheckStatus.errorType)
-                .setSubtype(Subtype.invalidDurationUnitPattern)
-                .setMessage("The hour indicator should be either h or hh for duration."));
-        } else if (durationUnitType.contains("m") && !hasMinuteSymbol) {
-            result.add(new CheckStatus().setCause(this)
-                .setMainType(CheckStatus.errorType)
-                .setSubtype(Subtype.invalidDurationUnitPattern)
-                .setMessage("The minutes symbol (m or mm) is missing."));
-        } else if (durationUnitType.contains("s") && !hasSecondsSymbol) {
-            result.add(new CheckStatus().setCause(this)
-                .setMainType(CheckStatus.errorType)
-                .setSubtype(Subtype.invalidDurationUnitPattern)
-                .setMessage("The seconds symbol (ss) is missing."));
+            if (durationUnitType.contains("h") && !hasHourSymbol) {
+                /* Changed message from "The hour symbol (h or hh) is missing"
+                 *  to "The hour indicator should be either h or hh for duration"
+                 *  per http://unicode.org/cldr/trac/ticket/10999
+                 */
+                result.add(new CheckStatus().setCause(this)
+                    .setMainType(CheckStatus.errorType)
+                    .setSubtype(Subtype.invalidDurationUnitPattern)
+                    .setMessage("The hour indicator should be either h or hh for duration."));
+            } else if (durationUnitType.contains("m") && !hasMinuteSymbol) {
+                result.add(new CheckStatus().setCause(this)
+                    .setMainType(CheckStatus.errorType)
+                    .setSubtype(Subtype.invalidDurationUnitPattern)
+                    .setMessage("The minutes symbol (m or mm) is missing."));
+            } else if (durationUnitType.contains("s") && !hasSecondsSymbol) {
+                result.add(new CheckStatus().setCause(this)
+                    .setMainType(CheckStatus.errorType)
+                    .setSubtype(Subtype.invalidDurationUnitPattern)
+                    .setMessage("The seconds symbol (ss) is missing."));
+            }
         }
         return this;
     }
diff --git a/tools/java/org/unicode/cldr/test/CheckWidths.java b/tools/java/org/unicode/cldr/test/CheckWidths.java
index 76a0a94..d508d52 100644
--- a/tools/java/org/unicode/cldr/test/CheckWidths.java
+++ b/tools/java/org/unicode/cldr/test/CheckWidths.java
@@ -20,11 +20,11 @@
     private Level requiredLevel;
 
     /**
-     * Controls for the warning about too many components, and for when to cause error. 
+     * Controls for the warning about too many components, and for when to cause error.
      */
     public static final int WARN_COMPONENTS_PER_ANNOTATION = 7;
     public static final int MAX_COMPONENTS_PER_ANNOTATION = 16;
-    
+
     SupplementalDataInfo supplementalData;
 
     private static final double EM = ApproximateWidth.getWidth("月");
@@ -86,7 +86,7 @@
                     this.message = "Too wide by about {2}% (with common fonts).";
                     this.subtype = Subtype.valueTooWide;
                     break;
-                case SET_ELEMENTS: 
+                case SET_ELEMENTS:
                     this.message = "Expected no more than {0} items(s), but was {1}.";
                     this.subtype = Subtype.tooManyValues;
                     break;
@@ -321,7 +321,7 @@
         System.out.println("EMs: " + ApproximateWidth.getWidth("grinning cat face with smiling eyes"));
     }
 
-    Set<Limit> found = new LinkedHashSet<Limit>();
+    Set<Limit> found = new LinkedHashSet<>();
 
     @Override
     public CheckCLDR handleCheck(String path, String fullPath, String value, Options options, List<CheckStatus> result) {
@@ -358,6 +358,7 @@
         return this;
     }
 
+    @Override
     public CheckCLDR setCldrFileToCheck(CLDRFile cldrFileToCheck, Options options,
         List<CheckStatus> possibleErrors) {
         final String localeID = cldrFileToCheck.getLocaleID();
diff --git a/tools/java/org/unicode/cldr/test/CheckZones.java b/tools/java/org/unicode/cldr/test/CheckZones.java
index f697fe7..1f5d7f6 100644
--- a/tools/java/org/unicode/cldr/test/CheckZones.java
+++ b/tools/java/org/unicode/cldr/test/CheckZones.java
@@ -52,6 +52,7 @@
     String previousFrom = new String("1970-01-01");
     String previousTo = new String("present");
 
+    @Override
     public CheckCLDR handleCheck(String path, String fullPath, String value,
         Options options, List<CheckStatus> result) {
         if (fullPath == null) return this; // skip paths that we don't have
@@ -114,7 +115,7 @@
     public static String exampleTextForXpath(TimezoneFormatter timezoneFormatter, String path) {
         XPathParts parts = XPathParts.getFrozenInstance(path);
         if (parts.containsElement("zone")) {
-            String id = (String) parts.getAttributeValue(3, "type");
+            String id = parts.getAttributeValue(3, "type");
             TimeZone tz = TimeZone.getTimeZone(id);
             String pat = "vvvv";
             if (parts.containsElement("exemplarCity")) {
diff --git a/tools/java/org/unicode/cldr/test/ConsoleCheckCLDR.java b/tools/java/org/unicode/cldr/test/ConsoleCheckCLDR.java
index 677ba9e..8465b76 100644
--- a/tools/java/org/unicode/cldr/test/ConsoleCheckCLDR.java
+++ b/tools/java/org/unicode/cldr/test/ConsoleCheckCLDR.java
@@ -49,6 +49,7 @@
 import org.unicode.cldr.util.Pair;
 import org.unicode.cldr.util.PathDescription;
 import org.unicode.cldr.util.PathHeader;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.PatternCache;
 import org.unicode.cldr.util.SimpleFactory;
 import org.unicode.cldr.util.StandardCodes;
@@ -84,8 +85,10 @@
  *
  */
 @CLDRTool(alias = "check",
-    description = "Run CheckCLDR against CLDR data")
+description = "Run CheckCLDR against CLDR data")
 public class ConsoleCheckCLDR {
+    private static final CLDRConfig CLDR_CONFIG = CLDRConfig.getInstance();
+    private static final PathHeader.Factory PATH_HEADER_FACTORY = PathHeader.getFactory();
     public static boolean showStackTrace = false;
     public static boolean errorsOnly = false;
     static boolean SHOW_LOCALE = true;
@@ -114,8 +117,8 @@
         SUBTYPE_FILTER = 19,
         SOURCE_ALL = 20,
         BAILEY = 21
-    // VOTE_RESOLVE2 = 21
-    ;
+        // VOTE_RESOLVE2 = 21
+        ;
 
     static final String SOURCE_DIRS = CLDRPaths.MAIN_DIRECTORY + "," + CLDRPaths.ANNOTATIONS_DIRECTORY + "," + CLDRPaths.SEED_DIRECTORY;
 
@@ -208,6 +211,7 @@
         LanguageTagParser languageTagParser1 = new LanguageTagParser();
         LanguageTagParser languageTagParser2 = new LanguageTagParser();
 
+        @Override
         public int compare(String o1, String o2) {
             String ls1 = languageTagParser1.set(o1).getLanguageScript();
             String ls2 = languageTagParser2.set(o2).getLanguageScript();
@@ -240,8 +244,8 @@
         "-b \t check bailey values (" + CldrUtility.INHERITANCE_MARKER + ")",
     };
 
-    static Counter<ErrorType> subtotalCount = new Counter<ErrorType>(true); // new ErrorCount();
-    static Counter<ErrorType> totalCount = new Counter<ErrorType>(true);
+    static Counter<ErrorType> subtotalCount = new Counter<>(true); // new ErrorCount();
+    static Counter<ErrorType> totalCount = new Counter<>(true);
 
     /**
      * This will be the test framework way of using these tests. It is preliminary for now.
@@ -319,7 +323,7 @@
                     + organizations);
             }
         }
-        final CLDRConfig cldrConf = CLDRConfig.getInstance();
+        final CLDRConfig cldrConf = CLDR_CONFIG;
         // set the envronment to UNITTEST as suggested
         cldrConf.setEnvironment(Environment.UNITTEST);
         // get the Phase from CLDRConfig object
@@ -396,7 +400,7 @@
                 true, null);
             VoteResolver.setVoterToInfo(CldrUtility.checkValidFile(CLDRPaths.BASE_DIRECTORY
                 + "incoming/vetted/usersa/usersa.xml", false, null));
-            voteResolver = new VoteResolver<String>();
+            voteResolver = new VoteResolver<>();
         }
 
         // check stuff
@@ -409,7 +413,7 @@
         System.out.println("Source directories:\n");
         for (File f : sourceDirectories) {
             System.out.println("    " + f.getPath() + "\t("
-                + f.getCanonicalPath() + ")");
+                + PathUtilities.getNormalizedPathString(f) + ")");
         }
 //        System.out.println("factoryFilter: " + factoryFilter);
 //        System.out.println("test filter: " + checkFilter);
@@ -441,24 +445,24 @@
             .setSupplementalDirectory(new File(CLDRPaths.SUPPLEMENTAL_DIRECTORY));
         english = backCldrFactory.make("en", true);
 
-        checkCldr.setDisplayInformation(english);
+        CheckCLDR.setDisplayInformation(english);
         checkCldr.setEnglishFile(english);
         setExampleGenerator(new ExampleGenerator(english, english, CLDRPaths.SUPPLEMENTAL_DIRECTORY));
         PathShower pathShower = new PathShower();
 
         // call on the files
-        Set<String> locales = new TreeSet<String>(baseFirstCollator);
+        Set<String> locales = new TreeSet<>(baseFirstCollator);
         locales.addAll(cldrFactory.getAvailable());
 
-        List<CheckStatus> result = new ArrayList<CheckStatus>();
-        Set<PathHeader> paths = new TreeSet<PathHeader>(); // CLDRFile.ldmlComparator);
+        List<CheckStatus> result = new ArrayList<>();
+        Set<PathHeader> paths = new TreeSet<>(); // CLDRFile.ldmlComparator);
         Map m = new TreeMap();
         // double testNumber = 0;
-        Map<String, String> options = new HashMap<String, String>();
+        Map<String, String> options = new HashMap<>();
         FlexibleDateFromCLDR fset = new FlexibleDateFromCLDR();
         Set<String> englishPaths = null;
 
-        Set<String> fatalErrors = new TreeSet<String>();
+        Set<String> fatalErrors = new TreeSet<>();
 
         showHeaderLine();
 
@@ -468,7 +472,7 @@
         String lastBaseLanguage = "";
         PathHeader.Factory pathHeaderFactory = PathHeader.getFactory(english);
 
-        final List<String> specialPurposeLocales = new ArrayList<String>(Arrays.asList("en_US_POSIX", "en_ZZ", "und", "und_ZZ"));
+        final List<String> specialPurposeLocales = new ArrayList<>(Arrays.asList("en_US_POSIX", "en_ZZ", "und", "und_ZZ"));
         for (String localeID : locales) {
             if (CLDRFile.isSupplementalName(localeID)) continue;
             if (supplementalDataInfo.getDefaultContentLocales().contains(localeID)) {
@@ -578,7 +582,7 @@
                 showValue(file, null, localeID, null, null, null, null, statusString, status.getSubtype());
             }
             paths.clear();
-            // CollectionUtilities.addAll(file.iterator(pathFilter), paths);
+
             CoverageInfo covInfo = cldrConf.getCoverageInfo();
             for (String path : file.fullIterable()) {
                 if (pathFilter != null && !pathFilter.reset(path).find()) {
@@ -596,10 +600,9 @@
             // addPrettyPaths(file, file.getExtraPaths(), pathFilter, prettyPathMaker, noaliases, false, paths);
 
             // also add the English paths
-            // CollectionUtilities.addAll(checkCldr.getDisplayInformation().iterator(pathFilter), paths);
             // initialize the first time in.
             if (englishPaths == null) {
-                englishPaths = new HashSet<String>();
+                englishPaths = new HashSet<>();
                 final CLDRFile displayFile = CheckCLDR.getDisplayInformation();
                 addPrettyPaths(displayFile, pathFilter, pathHeaderFactory, noaliases, true, englishPaths);
                 addPrettyPaths(displayFile, displayFile.getExtraPaths(), pathFilter, pathHeaderFactory, noaliases,
@@ -684,7 +687,25 @@
                         CheckStatus status = it3.next();
                         String statusString = status.toString(); // com.ibm.icu.impl.Utility.escape(
                         CheckStatus.Type statusType = status.getType();
-                        if (errorsOnly && !statusType.equals(CheckStatus.errorType)) continue;
+                        Object[] parameters = status.getParameters();
+
+                        if (parameters != null) {
+                            if (parameters.length >= 1 && status.getCause().getClass() == CheckForExemplars.class) {
+                                try {
+                                    UnicodeSet set = new UnicodeSet(parameters[0].toString());
+                                    if (status.getMessage().contains("currency")) {
+                                        missingCurrencyExemplars.addAll(set);
+                                    } else {
+                                        missingExemplars.addAll(set);
+                                    }
+                                } catch (RuntimeException e) {
+                                } // skip if not parseable as set
+                            }
+                        }
+
+                        if (errorsOnly && !statusType.equals(CheckStatus.errorType)) {
+                            continue;
+                        }
 
                         if (subtypeFilter != null) {
                             if (!subtypeFilter.contains(status.getSubtype())) {
@@ -692,7 +713,7 @@
                             }
                         }
                         if (checkOnSubmit) {
-                            if (!status.isCheckOnSubmit() || !statusType.equals(status.errorType)) continue;
+                            if (!status.isCheckOnSubmit() || !statusType.equals(CheckStatus.errorType)) continue;
                         }
 
                         // System.out.print("Locale:\t" + getLocaleAndName(localeID) + "\t");
@@ -707,29 +728,19 @@
                             }
                             continue;
                         }
-                        showValue(file, prettyPath, localeID, example, path, value, fullPath, statusString,
-                            status.getSubtype());
-                        showedOne = true;
 
-                        Object[] parameters = status.getParameters();
                         if (parameters != null) {
-                            if (parameters.length >= 1 && status.getCause().getClass() == CheckForExemplars.class) {
-                                try {
-                                    UnicodeSet set = new UnicodeSet(parameters[0].toString());
-                                    if (status.getMessage().contains("currency")) {
-                                        missingCurrencyExemplars.addAll(set);
-                                    } else {
-                                        missingExemplars.addAll(set);
-                                    }
-                                } catch (RuntimeException e) {
-                                } // skip if not parseable as set
-                            }
                             for (int i = 0; i < parameters.length; ++i) {
                                 if (showStackTrace && parameters[i] instanceof Throwable) {
                                     ((Throwable) parameters[i]).printStackTrace();
                                 }
                             }
                         }
+
+                        showValue(file, prettyPath, localeID, example, path, value, fullPath, statusString,
+                            status.getSubtype());
+                        showedOne = true;
+
                         // survey tool will use: if (status.hasHTMLMessage())
                         // System.out.println(status.getHTMLMessage());
                     }
@@ -752,23 +763,25 @@
                 missingExemplars.removeAll(new UnicodeSet("[[:Uppercase:]-[İ]]")); // remove uppercase #4670
                 if (missingExemplars.size() != 0) {
                     Collator col = Collator.getInstance(new ULocale(localeID));
-                    showSummary(localeID, level, "Total missing from general exemplars:\t" + new UnicodeSetPrettyPrinter()
-                        .setOrdering(col != null ? col : Collator.getInstance(ULocale.ROOT))
-                        .setSpaceComparator(col != null ? col : Collator.getInstance(ULocale.ROOT)
-                            .setStrength2(Collator.PRIMARY))
-                        .setCompressRanges(true)
-                        .format(missingExemplars));
+                    showSummary(localeID, level, "Total missing from general exemplars:\t" +
+                        missingExemplars.size()
+                    + "\t" + new UnicodeSetPrettyPrinter()
+                    .setOrdering(col != null ? col : Collator.getInstance(ULocale.ROOT))
+                    .setSpaceComparator(col != null ? col : Collator.getInstance(ULocale.ROOT)
+                        .setStrength2(Collator.PRIMARY))
+                    .setCompressRanges(false)
+                    .format(missingExemplars));
                 }
             }
             if (missingCurrencyExemplars.size() != 0) {
                 Collator col = Collator.getInstance(new ULocale(localeID));
                 showSummary(localeID, level, "Total missing from currency exemplars:\t"
                     + new UnicodeSetPrettyPrinter()
-                        .setOrdering(col != null ? col : Collator.getInstance(ULocale.ROOT))
-                        .setSpaceComparator(col != null ? col : Collator.getInstance(ULocale.ROOT)
-                            .setStrength2(Collator.PRIMARY))
-                        .setCompressRanges(true)
-                        .format(missingCurrencyExemplars));
+                    .setOrdering(col != null ? col : Collator.getInstance(ULocale.ROOT))
+                    .setSpaceComparator(col != null ? col : Collator.getInstance(ULocale.ROOT)
+                        .setStrength2(Collator.PRIMARY))
+                    .setCompressRanges(true)
+                    .format(missingCurrencyExemplars));
             }
             for (ErrorType type : subtotalCount.keySet()) {
                 showSummary(localeID, level, "Subtotal " + type + ":\t" + subtotalCount.getCount(type));
@@ -839,12 +852,12 @@
 
     static class LocaleVotingData {
         private int disputedCount = 0;
-        Counter<Organization> missingOrganizationCounter = new Counter<Organization>(true);
-        Counter<Organization> goodOrganizationCounter = new Counter<Organization>(true);
-        Counter<Organization> conflictedOrganizations = new Counter<Organization>(true);
-        Counter<VoteResolver.Status> winningStatusCounter = new Counter<VoteResolver.Status>(true);
+        Counter<Organization> missingOrganizationCounter = new Counter<>(true);
+        Counter<Organization> goodOrganizationCounter = new Counter<>(true);
+        Counter<Organization> conflictedOrganizations = new Counter<>(true);
+        Counter<VoteResolver.Status> winningStatusCounter = new Counter<>(true);
 
-        static Map<String, LocaleVotingData> localeToErrors = new HashMap<String, LocaleVotingData>();
+        static Map<String, LocaleVotingData> localeToErrors = new HashMap<>();
         private static Map<Integer, String> idToPath;
 
         public static void resolveErrors(String locale) {
@@ -858,7 +871,7 @@
             Map<Integer, Map<Integer, CandidateInfo>> info = VoteResolver
                 .getBaseToAlternateToInfo(resolveVotesDirectory + locale + ".xml");
 
-            Map<String, Integer> valueToItem = new HashMap<String, Integer>();
+            Map<String, Integer> valueToItem = new HashMap<>();
 
             for (int basePath : info.keySet()) {
                 final Map<Integer, CandidateInfo> itemInfo = info.get(basePath);
@@ -936,7 +949,7 @@
             if (missingOrganizationCounter.size() > 0) {
                 System.out.println(getLocaleAndName(locale) + "\tMIA organizations:\t" + missingOrganizationCounter);
                 System.out
-                    .println(getLocaleAndName(locale) + "\tConflicted organizations:\t" + conflictedOrganizations);
+                .println(getLocaleAndName(locale) + "\tConflicted organizations:\t" + conflictedOrganizations);
                 System.out.println(getLocaleAndName(locale) + "\tCool organizations!:\t" + goodOrganizationCounter);
             }
             System.out.println(getLocaleAndName(locale) + "\tOptimal Status:\t" + winningStatusCounter);
@@ -999,7 +1012,7 @@
             }
             return shortStatus;
         }
-    };
+    }
 
     /*
      * static class ErrorCount implements Comparable<ErrorCount> {
@@ -1041,45 +1054,43 @@
             ErrorFile.errorFileTable = new TablePrinter();
             errorFileCounter.clear();
             ErrorFile.errorFileTable.setCaption("Problem Details")
-                .addColumn("Problem").setCellAttributes("align=\"left\" class=\"{0}\"").setSortPriority(0)
-                .setSpanRows(true)
-                .setBreakSpans(true).setRepeatHeader(true).setHeaderCell(true)
-                .addColumn("Subtype").setCellAttributes("align=\"left\" class=\"{1}\"").setSortPriority(1)
-                .setSpanRows(true)
-                .setBreakSpans(true).setRepeatHeader(true).setHeaderCell(true)
-                .addColumn("Locale").setCellAttributes("class=\"{1}\"")
-                .setCellPattern("<a href=\"http://unicode.org/cldr/apps/survey?_={0}\">{0}</a>").setSortPriority(2)
-                .setSpanRows(true).setBreakSpans(true)//.setRepeatDivider(true)
-                .addColumn("Name").setCellAttributes("class=\"{1}\"").setSpanRows(true)
-                .setBreakSpans(true)
-                .addColumn("Section").setCellAttributes("class=\"{1}\"").setSortPriority(3)
-                .setCellPattern("<a href=\"http://unicode.org/cldr/apps/survey?_={3}&x={0}\">{0}</a>")
-                .setSpanRows(true)
-                .addColumn("Count").setCellAttributes("class=\"{1}\" align=\"right\"");
+            .addColumn("Problem").setCellAttributes("align=\"left\" class=\"{0}\"").setSortPriority(0)
+            .setSpanRows(true)
+            .setBreakSpans(true).setRepeatHeader(true).setHeaderCell(true)
+            .addColumn("Subtype").setCellAttributes("align=\"left\" class=\"{1}\"").setSortPriority(1)
+            .setSpanRows(true)
+            .setBreakSpans(true).setRepeatHeader(true).setHeaderCell(true)
+            .addColumn("Locale").setCellAttributes("class=\"{1}\"")
+            .setCellPattern("<a href=\"http://unicode.org/cldr/apps/survey?_={0}\">{0}</a>").setSortPriority(2)
+            .setSpanRows(true).setBreakSpans(true)//.setRepeatDivider(true)
+            .addColumn("Name").setCellAttributes("class=\"{1}\"").setSpanRows(true)
+            .setBreakSpans(true)
+            .addColumn("Section").setCellAttributes("class=\"{1}\"").setSortPriority(3)
+            .setCellPattern("<a href=\"http://unicode.org/cldr/apps/survey?_={3}&x={0}\">{0}</a>")
+            .setSpanRows(true)
+            .addColumn("Count").setCellAttributes("class=\"{1}\" align=\"right\"");
 
             showIndexHead("", localeID, ErrorFile.errorFileWriter);
         }
 
         static TablePrinter errorFileTable = new TablePrinter();
-        static Counter<Row.R4<String, String, ErrorType, Subtype>> errorFileCounter = new Counter<Row.R4<String, String, ErrorType, Subtype>>(
+        static Counter<Row.R4<String, String, ErrorType, Subtype>> errorFileCounter = new Counter<>(
             true);
 
         private static void addDataToErrorFile(String localeID, String path, ErrorType shortStatus,
             Subtype subType) {
-            String section = path == null
-                ? null
-                : org.unicode.cldr.util.PathUtilities.xpathToMenu(path);
+            String section = path == null ? null : XPathToMenu.xpathToMenu(path);
             if (section == null) {
                 section = "general";
             }
             errorFileCounter.add(
-                new Row.R4<String, String, ErrorType, Subtype>(localeID, section, shortStatus, subType), 1);
+                new Row.R4<>(localeID, section, shortStatus, subType), 1);
             ErrorFile.sectionToProblemsToLocaleToCount.add(
-                new Row.R4<String, ErrorType, Subtype, String>(section, shortStatus, subType, localeID), 1);
+                new Row.R4<>(section, shortStatus, subType, localeID), 1);
         }
 
         private static void closeErrorFile() {
-            Set<String> locales = new TreeSet<String>();
+            Set<String> locales = new TreeSet<>();
             for (Row.R4<String, String, ErrorType, Subtype> item : errorFileCounter.keySet()) {
                 String localeID = item.get0();
                 locales.add(localeID);
@@ -1089,17 +1100,17 @@
                 // final String prettyPath = path == null ? "general" : prettyPathMaker.getPrettyPath(path, true);
                 // final String outputForm = path == null ? "general" : prettyPathMaker.getOutputForm(prettyPath);
                 errorFileTable.addRow()
-                    .addCell(shortStatus)
-                    .addCell(subtype)
-                    .addCell(localeID)
-                    .addCell(ConsoleCheckCLDR.getLocaleName(localeID))
-                    // .addCell(prettyPath) // menuPath == null ? "" : "<a href='" + link + "'>" + menuPath + "</a>"
-                    .addCell(section) // menuPath == null ? "" : "<a href='" + link + "'>" + menuPath + "</a>"
-                    .addCell(errorFileCounter.getCount(item))
-                    // .addCell(ConsoleCheckCLDR.safeForHtml(path == null ? null :
-                    // ConsoleCheckCLDR.getEnglishPathValue(path)))
-                    // .addCell(ConsoleCheckCLDR.safeForHtml(value))
-                    .finishRow();
+                .addCell(shortStatus)
+                .addCell(subtype)
+                .addCell(localeID)
+                .addCell(ConsoleCheckCLDR.getLocaleName(localeID))
+                // .addCell(prettyPath) // menuPath == null ? "" : "<a href='" + link + "'>" + menuPath + "</a>"
+                .addCell(section) // menuPath == null ? "" : "<a href='" + link + "'>" + menuPath + "</a>"
+                .addCell(errorFileCounter.getCount(item))
+                // .addCell(ConsoleCheckCLDR.safeForHtml(path == null ? null :
+                // ConsoleCheckCLDR.getEnglishPathValue(path)))
+                // .addCell(ConsoleCheckCLDR.safeForHtml(value))
+                .finishRow();
             }
 
             if (SHOW_VOTING_INFO) {
@@ -1109,8 +1120,8 @@
                     .addColumn("Organization")
                     .addColumn("Missing")
                     .addColumn("Conflicted")
-                // .addColumn("Good")
-                ;
+                    // .addColumn("Good")
+                    ;
                 for (String localeID : locales) {
                     // now the voting info
                     LocaleVotingData localeVotingData = LocaleVotingData.localeToErrors.get(localeID);
@@ -1122,13 +1133,13 @@
                         orgs.addAll(localeVotingData.goodOrganizationCounter.keySet());
                         for (Organization org : orgs) {
                             data.addRow()
-                                .addCell(ConsoleCheckCLDR.getLinkedLocale(localeID))
-                                .addCell(ConsoleCheckCLDR.getLocaleName(localeID))
-                                .addCell(org)
-                                .addCell(localeVotingData.missingOrganizationCounter.getCount(org))
-                                .addCell(localeVotingData.conflictedOrganizations.getCount(org))
-                                // .addCell(localeVotingData.goodOrganizationCounter.getCount(org))
-                                .finishRow();
+                            .addCell(ConsoleCheckCLDR.getLinkedLocale(localeID))
+                            .addCell(ConsoleCheckCLDR.getLocaleName(localeID))
+                            .addCell(org)
+                            .addCell(localeVotingData.missingOrganizationCounter.getCount(org))
+                            .addCell(localeVotingData.conflictedOrganizations.getCount(org))
+                            // .addCell(localeVotingData.goodOrganizationCounter.getCount(org))
+                            .finishRow();
                         }
                     }
                 }
@@ -1163,15 +1174,15 @@
                 .addColumn("Name");
             if (SHOW_VOTING_INFO) {
                 indexTablePrinter.addColumn("Summary")
-                    .addColumn("Missing");
+                .addColumn("Missing");
             }
             for (Organization org : orgToLocales.keySet()) {
                 indexTablePrinter.addColumn(org.toString().substring(0, 2));
             }
             indexTablePrinter
-                .addColumn("Disputed").setHeaderAttributes("class='disputed'").setCellAttributes("class='disputed'")
-                .addColumn("Conflicted").setHeaderAttributes("class='conflicted'")
-                .setCellAttributes("class='conflicted'");
+            .addColumn("Disputed").setHeaderAttributes("class='disputed'").setCellAttributes("class='disputed'")
+            .addColumn("Conflicted").setHeaderAttributes("class='conflicted'")
+            .setCellAttributes("class='conflicted'");
 
             for (ConsoleCheckCLDR.ErrorType type : ConsoleCheckCLDR.ErrorType.showInSummary) {
                 String columnTitle = UCharacter.toTitleCase(type.toString(), null);
@@ -1182,7 +1193,7 @@
                     columnTitle = "MV: " + columnTitle;
                 }
                 indexTablePrinter.addColumn(columnTitle).setHeaderAttributes("class='" + type + "'")
-                    .setCellAttributes("class='" + type + "'");
+                .setCellAttributes("class='" + type + "'");
             }
 
             // now fill in the data
@@ -1197,20 +1208,20 @@
                 }
                 final String baseLanguage = ltp.set(htmlOpenedFileLanguage).getLanguage();
                 indexTablePrinter.addRow()
-                    .addCell(baseLanguage)
-                    .addCell(htmlOpenedFileLanguage)
-                    .addCell(ConsoleCheckCLDR.getLocaleName(htmlOpenedFileLanguage));
+                .addCell(baseLanguage)
+                .addCell(htmlOpenedFileLanguage)
+                .addCell(ConsoleCheckCLDR.getLocaleName(htmlOpenedFileLanguage));
                 if (SHOW_VOTING_INFO) {
                     indexTablePrinter.addCell(votingData == null ? "" : votingData.winningStatusCounter.toString())
-                        .addCell(votingData == null ? "" : votingData.missingOrganizationCounter.toString());
+                    .addCell(votingData == null ? "" : votingData.missingOrganizationCounter.toString());
                 }
                 for (Organization org : orgToLocales.keySet()) {
                     indexTablePrinter.addCell(orgToLocales.getAll(org).contains(htmlOpenedFileLanguage) ? org.toString()
                         .substring(0, 2) : "");
                 }
                 indexTablePrinter
-                    .addCell(votingData == null ? "" : formatSkippingZero(votingData.getDisputedCount()))
-                    .addCell(votingData == null ? "" : votingData.getConflictedHTML());
+                .addCell(votingData == null ? "" : formatSkippingZero(votingData.getDisputedCount()))
+                .addCell(votingData == null ? "" : votingData.getConflictedHTML());
                 for (ConsoleCheckCLDR.ErrorType type : ConsoleCheckCLDR.ErrorType.showInSummary) {
                     indexTablePrinter.addCell(formatSkippingZero(counts.getCount(type)));
                 }
@@ -1269,12 +1280,12 @@
                 long count = ErrorFile.sectionToProblemsToLocaleToCount.getCount(sectionAndProblemsAndLocale);
                 final String section = sectionAndProblemsAndLocale.get0();
                 indexTablePrinter.addRow()
-                    .addCell(section)
-                    .addCell(problem)
-                    .addCell(subtype)
-                    .addCell(ConsoleCheckCLDR.getLocaleName(locale))
-                    .addCell(locale)
-                    .addCell(count);
+                .addCell(section)
+                .addCell(problem)
+                .addCell(subtype)
+                .addCell(ConsoleCheckCLDR.getLocaleName(locale))
+                .addCell(locale)
+                .addCell(count);
                 for (Organization org : orgToLocales.keySet()) {
                     indexTablePrinter.addCell(orgToLocales.getAll(org).contains(locale) ? org.toString().substring(0, 2) : "");
                 }
@@ -1302,53 +1313,53 @@
                 title = "Errors in " + ConsoleCheckCLDR.getNameAndLocale(localeID, false);
             }
             generated_html_index
-                .println("<html>" +
-                    "<head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>"
-                    + CldrUtility.LINE_SEPARATOR
-                    +
-                    "<title>"
-                    + title
-                    + "</title>"
-                    + CldrUtility.LINE_SEPARATOR
-                    +
-                    "<link rel='stylesheet' href='errors.css' type='text/css'>"
-                    + CldrUtility.LINE_SEPARATOR
-                    +
-                    "<base target='_blank'>"
-                    + CldrUtility.LINE_SEPARATOR
-                    +
-                    "</head><body>"
-                    + CldrUtility.LINE_SEPARATOR
-                    +
-                    "<h1>"
-                    + title
-                    + "</h1>"
-                    + CldrUtility.LINE_SEPARATOR
-                    +
-                    "<p>"
-                    +
-                    "<a href='index.html"
-                    + (notLocaleSpecific ? "" : "#" + localeID)
-                    + "'>Index</a>"
-                    +
-                    " | "
-                    +
-                    "<a href='sections.html"
-                    + (notLocaleSpecific ? "" : "#" + localeID)
-                    + "'>Index by Section</a>"
-                    +
-                    " | "
-                    +
-                    "<a href='http://unicode.org/cldr/data/docs/survey/vetting.html'><b style='background-color: yellow;'><i>Help: How to Vet</i></b></a>"
-                    +
-                    "</p>"
-                    +
-                    "<p>The following errors have been detected in the locale"
-                    +
-                    (notLocaleSpecific
-                        ? "s. " + org.unicode.cldr.test.HelpMessages.getChartMessages("error_index_header")
-                        : " " + ConsoleCheckCLDR.getNameAndLocale(localeID, false) + ". "
-                            + ErrorFile.ERROR_CHART_HEADER));
+            .println("<html>" +
+                "<head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>"
+                + CldrUtility.LINE_SEPARATOR
+                +
+                "<title>"
+                + title
+                + "</title>"
+                + CldrUtility.LINE_SEPARATOR
+                +
+                "<link rel='stylesheet' href='errors.css' type='text/css'>"
+                + CldrUtility.LINE_SEPARATOR
+                +
+                "<base target='_blank'>"
+                + CldrUtility.LINE_SEPARATOR
+                +
+                "</head><body>"
+                + CldrUtility.LINE_SEPARATOR
+                +
+                "<h1>"
+                + title
+                + "</h1>"
+                + CldrUtility.LINE_SEPARATOR
+                +
+                "<p>"
+                +
+                "<a href='index.html"
+                + (notLocaleSpecific ? "" : "#" + localeID)
+                + "'>Index</a>"
+                +
+                " | "
+                +
+                "<a href='sections.html"
+                + (notLocaleSpecific ? "" : "#" + localeID)
+                + "'>Index by Section</a>"
+                +
+                " | "
+                +
+                "<a href='http://unicode.org/cldr/data/docs/survey/vetting.html'><b style='background-color: yellow;'><i>Help: How to Vet</i></b></a>"
+                +
+                "</p>"
+                +
+                "<p>The following errors have been detected in the locale"
+                +
+                (notLocaleSpecific
+                    ? "s. " + org.unicode.cldr.test.HelpMessages.getChartMessages("error_index_header")
+                    : " " + ConsoleCheckCLDR.getNameAndLocale(localeID, false) + ". "
+                    + ErrorFile.ERROR_CHART_HEADER));
         }
 
         private static void writeErrorFileIndex() throws IOException {
@@ -1372,8 +1383,8 @@
 
             // now store the data for the index
             ErrorFile.errorFileIndexData.put(ConsoleCheckCLDR.lastHtmlLocaleID,
-                new Pair<String, Counter<ErrorType>>(ConsoleCheckCLDR.lastHtmlLocaleID, ErrorFile.htmlErrorsPerLocale));
-            ErrorFile.htmlErrorsPerLocale = new Counter<ErrorType>();
+                new Pair<>(ConsoleCheckCLDR.lastHtmlLocaleID, ErrorFile.htmlErrorsPerLocale));
+            ErrorFile.htmlErrorsPerLocale = new Counter<>();
             // }
         }
 
@@ -1384,9 +1395,9 @@
          * static Counter<VoteResolver.Status> winningStatusCounter = new Counter<VoteResolver.Status>(true);
          */
 
-        static Counter<ErrorType> htmlErrorsPerLocale = new Counter<ErrorType>(); // ConsoleCheckCLDR.ErrorCount();
+        static Counter<ErrorType> htmlErrorsPerLocale = new Counter<>(); // ConsoleCheckCLDR.ErrorCount();
         static PrintWriter generated_html_count = null;
-        private static TreeMap<String, Pair<String, Counter<ErrorType>>> errorFileIndexData = new TreeMap<String, Pair<String, Counter<ErrorType>>>();
+        private static TreeMap<String, Pair<String, Counter<ErrorType>>> errorFileIndexData = new TreeMap<>();
 
         // private static ConsoleCheckCLDR.ErrorCount htmlErrorsPerBaseLanguage = new ConsoleCheckCLDR.ErrorCount();
         static PrintWriter errorFileWriter = null;
@@ -1401,7 +1412,7 @@
         // "<p>Coverage depends on your organizations goals: the highest tier languages should include up through all Modern values.</p>"
         // + Utility.LINE_SEPARATOR;
         static String generated_html_directory = null;
-        public static Counter<Row.R4<String, ErrorType, Subtype, String>> sectionToProblemsToLocaleToCount = new Counter<Row.R4<String, ErrorType, Subtype, String>>();
+        public static Counter<Row.R4<String, ErrorType, Subtype, String>> sectionToProblemsToLocaleToCount = new Counter<>();
     }
 
     private static void showSummary(String localeID, Level level, String value) {
@@ -1484,11 +1495,11 @@
         if (SHOW_LOCALE) {
             if (idView) {
                 System.out
-                    .println("Locale\tID\tDesc.\t〈Eng.Value〉\t【Eng.Ex.】\t〈Loc.Value〉\t【Loc.Ex】\t⁅error/warning type⁆\t❮Error/Warning Msg❯");
+                .println("Locale\tID\tDesc.\t〈Eng.Value〉\t【Eng.Ex.】\t〈Loc.Value〉\t【Loc.Ex】\t⁅error/warning type⁆\t❮Error/Warning Msg❯");
             } else {
                 System.out
-                    .println(
-                        "Locale\tStatus\t▸PPath◂\t〈Eng.Value〉\t【Eng.Ex.】\t〈Loc.Value〉\t«fill-in»\t【Loc.Ex】\t⁅error/warning type⁆\t❮Error/Warning Msg❯\tFull Path\tAliasedSource/Path?");
+                .println(
+                    "Locale\tStatus\t▸PPath◂\t〈Eng.Value〉\t【Eng.Ex.】\t〈Loc.Value〉\t«fill-in»\t【Loc.Ex】\t⁅error/warning type⁆\t❮Error/Warning Msg❯\tFull Path\tAliasedSource/Path?");
             }
         }
     }
@@ -1527,6 +1538,8 @@
             String fillinValue = path == null ? null : cldrFile.getFillInValue(path);
             fillinValue = fillinValue == null ? "" : fillinValue.equals(value) ? "=" : fillinValue;
 
+            String pathLink = CLDR_CONFIG.urls().forXpath(localeID, path);
+
             final String otherSource = path == null ? null
                 : (sourceLocaleID.equals(localeID) ? ""
                     : "\t" + sourceLocaleID);
@@ -1537,27 +1550,27 @@
             String idViewString = idView ? (path == null ? "\tNO_ID" : getIdString(path, value)) : "";
             System.out.println(
                 getLocaleAndName(localeID)
-                    + (idViewString.isEmpty() ?
+                + (idViewString.isEmpty() ?
                     // + "\t" + subtotalCount.getCount(shortStatus)
-                        "\t" + shortStatus
-                            + "\t▸" + cleanPrettyPath + "◂"
-                            + "\t〈" + englishPathValue + "〉"
-                            + "\t【" + englishExample + "】"
-                            + "\t〈" + value + "〉"
-                            + "\t«" + fillinValue + "»"
-                            + "\t【" + example + "】"
-                            + "\t⁅" + subType + "⁆"
-                            + "\t❮" + statusString + "❯"
-                            + "\t" + fullPath
-                            + otherSource
-                            + otherPath
-                        : idViewString
-                            + "\t〈" + englishPathValue + "〉"
-                            + "\t【" + englishExample + "】"
-                            + "\t" + value + "〉"
-                            + "\t【" + example + "】"
-                            + "\t⁅" + subType + "⁆"
-                            + "\t❮" + statusString + "❯"));
+                    "\t" + shortStatus
+                    + "\t▸" + cleanPrettyPath + "◂"
+                    + "\t〈" + englishPathValue + "〉"
+                    + "\t【" + englishExample + "】"
+                    + "\t〈" + value + "〉"
+                    + "\t«" + fillinValue + "»"
+                    + "\t【" + example + "】"
+                    + "\t⁅" + subType + "⁆"
+                    + "\t❮" + statusString + "❯"
+                    + "\t" + pathLink
+                    + otherSource
+                    + otherPath
+                    : idViewString
+                    + "\t〈" + englishPathValue + "〉"
+                    + "\t【" + englishExample + "】"
+                    + "\t" + value + "〉"
+                    + "\t【" + example + "】"
+                    + "\t⁅" + subType + "⁆"
+                    + "\t❮" + statusString + "❯"));
         } else if (ErrorFile.errorFileWriter != null) {
             if (shortStatus == ErrorType.contributed) {
                 return;
@@ -1673,4 +1686,6 @@
     public static String getLinkedLocale(String locale) {
         return "<a href='http://unicode.org/cldr/apps/survey?_=" + locale + "'>" + locale + "</a>";
     }
+
+
 }
diff --git a/tools/java/org/unicode/cldr/test/CoverageLevel2.java b/tools/java/org/unicode/cldr/test/CoverageLevel2.java
index d1072f9..dae3262 100644
--- a/tools/java/org/unicode/cldr/test/CoverageLevel2.java
+++ b/tools/java/org/unicode/cldr/test/CoverageLevel2.java
@@ -1,5 +1,7 @@
 package org.unicode.cldr.test;
 
+import static java.util.Collections.disjoint;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
@@ -20,7 +22,6 @@
 import org.unicode.cldr.util.SupplementalDataInfo.CoverageVariableInfo;
 import org.unicode.cldr.util.Timer;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.util.Output;
 import com.ibm.icu.util.ULocale;
 
@@ -61,8 +62,10 @@
         public MyRegexFinder(String pattern, String additionalMatch, CoverageLevelInfo ci) {
             super(pattern);
             // remove the ${ and the }, and change - to _.
-            this.additionalMatch = additionalMatch == null ? null : SetMatchType.valueOf(additionalMatch.substring(2,
-                additionalMatch.length() - 1).replace('-', '_'));
+            this.additionalMatch = additionalMatch == null
+                ? null
+                : SetMatchType.valueOf(
+                    additionalMatch.substring(2, additionalMatch.length() - 1).replace('-', '_'));
             this.ci = ci;
         }
 
@@ -78,10 +81,10 @@
                 && ci.inLanguage.matcher(localeSpecificInfo.targetLanguage).matches()) {
                 lstOK = true;
             } else if (ci.inScriptSet != null
-                && CollectionUtilities.containsSome(ci.inScriptSet, localeSpecificInfo.cvi.targetScripts)) {
+                && !disjoint(ci.inScriptSet, localeSpecificInfo.cvi.targetScripts)) {
                 lstOK = true;
             } else if (ci.inTerritorySet != null
-                && CollectionUtilities.containsSome(ci.inTerritorySet, localeSpecificInfo.cvi.targetTerritories)) {
+                && !disjoint(ci.inTerritorySet, localeSpecificInfo.cvi.targetTerritories)) {
                 lstOK = true;
             }
 
@@ -142,6 +145,7 @@
      * @see #getInstance(SupplementalDataInfo, String)
      * @see CLDRPaths#SUPPLEMENTAL_DIRECTORY
      */
+    @Deprecated
     public static CoverageLevel2 getInstance(String locale) {
         return new CoverageLevel2(SupplementalDataInfo.getInstance(), locale);
     }
@@ -157,9 +161,9 @@
         synchronized (lookup) { // synchronize on the class, since the Matchers are changed during the matching process
             Level result;
             if (DEBUG_LOOKUP) { // for testing
-                Output<String[]> checkItems = new Output<String[]>();
-                Output<Finder> matcherFound = new Output<Finder>();
-                List<String> failures = new ArrayList<String>();
+                Output<String[]> checkItems = new Output<>();
+                Output<Finder> matcherFound = new Output<>();
+                List<String> failures = new ArrayList<>();
                 result = lookup.get(path, myInfo, checkItems, matcherFound, failures);
                 for (String s : failures) {
                     System.out.println(s);
diff --git a/tools/java/org/unicode/cldr/test/DateOrder.java b/tools/java/org/unicode/cldr/test/DateOrder.java
index 30275d2..5d8398c 100644
--- a/tools/java/org/unicode/cldr/test/DateOrder.java
+++ b/tools/java/org/unicode/cldr/test/DateOrder.java
@@ -65,10 +65,10 @@
 
     public static Map<String, Map<DateOrder, String>> getOrderingInfo(CLDRFile plain, CLDRFile resolved,
         DateTimePatternGenerator.FormatParser fp) {
-        Map<String, Map<DateOrder, String>> pathsWithConflictingOrder2sample = new HashMap<String, Map<DateOrder, String>>();
+        Map<String, Map<DateOrder, String>> pathsWithConflictingOrder2sample = new HashMap<>();
         Status status = new Status();
         try {
-            Map<String, Map<DateOrder, Set<String>>> type2order2set = new HashMap<String, Map<DateOrder, Set<String>>>();
+            Map<String, Map<DateOrder, Set<String>>> type2order2set = new HashMap<>();
             Matcher typeMatcher = PatternCache.get("\\[@type=\"([^\"]*)\"]").matcher("");
             int[] soFar = new int[50];
             int lenSoFar = 0;
@@ -84,7 +84,7 @@
                     String type = typeMatcher.group(1);
                     Map<DateOrder, Set<String>> pairCount = type2order2set.get(type);
                     if (pairCount == null) {
-                        type2order2set.put(type, pairCount = new HashMap<DateOrder, Set<String>>());
+                        type2order2set.put(type, pairCount = new HashMap<>());
                     }
                     boolean isInterval = path.contains("intervalFormatItem");
                     lenSoFar = 0;
@@ -103,7 +103,7 @@
                                 DateOrder order = new DateOrder(soFar[i], eType);
                                 Set<String> paths = pairCount.get(order);
                                 if (paths == null) {
-                                    pairCount.put(order, paths = new HashSet<String>());
+                                    pairCount.put(order, paths = new HashSet<>());
                                 }
                                 paths.add(path);
                             }
@@ -115,7 +115,7 @@
             // determine conflicts, and mark
             for (Entry<String, Map<DateOrder, Set<String>>> typeAndOrder2set : type2order2set.entrySet()) {
                 Map<DateOrder, Set<String>> pairCount = typeAndOrder2set.getValue();
-                HashSet<DateOrder> alreadySeen = new HashSet<DateOrder>();
+                HashSet<DateOrder> alreadySeen = new HashSet<>();
                 for (Entry<DateOrder, Set<String>> entry : pairCount.entrySet()) {
                     DateOrder thisOrder = entry.getKey();
                     if (alreadySeen.contains(thisOrder)) {
@@ -200,7 +200,7 @@
         }
         Map<DateOrder, String> order2path = pathsWithConflictingOrder2sample.get(path);
         if (order2path == null) {
-            pathsWithConflictingOrder2sample.put(path, order2path = new TreeMap<DateOrder, String>());
+            pathsWithConflictingOrder2sample.put(path, order2path = new TreeMap<>());
         }
         order2path.put(sample, conflictingPath);
     }
diff --git a/tools/java/org/unicode/cldr/test/DisplayAndInputProcessor.java b/tools/java/org/unicode/cldr/test/DisplayAndInputProcessor.java
index 2a70024..e35bac4 100644
--- a/tools/java/org/unicode/cldr/test/DisplayAndInputProcessor.java
+++ b/tools/java/org/unicode/cldr/test/DisplayAndInputProcessor.java
@@ -56,7 +56,7 @@
     public static final UnicodeSet RTL = new UnicodeSet("[[:Bidi_Class=Arabic_Letter:][:Bidi_Class=Right_To_Left:]]")
         .freeze();
 
-    public static final UnicodeSet TO_QUOTE = (UnicodeSet) new UnicodeSet(
+    public static final UnicodeSet TO_QUOTE = new UnicodeSet(
         "[[:Cn:]" +
             "[:Default_Ignorable_Code_Point:]" +
             "[:patternwhitespace:]" +
@@ -105,7 +105,7 @@
     private static final CLDRLocale GERMAN_SWITZERLAND = CLDRLocale.getInstance("de_CH");
     private static final CLDRLocale SWISS_GERMAN = CLDRLocale.getInstance("gsw");
     private static final CLDRLocale FF_ADLAM = CLDRLocale.getInstance("ff_Adlm");
-    public static final Set<String> LANGUAGES_USING_MODIFIER_APOSTROPHE = new HashSet<String>(
+    public static final Set<String> LANGUAGES_USING_MODIFIER_APOSTROPHE = new HashSet<>(
         Arrays.asList("br", "bss", "cad", "cic", "cch", "gn", "ha", "ha_Latn", "lkt", "mgo", "moh", "mus", "nnh", "qu", "quc", "uk", "uz", "uz_Latn"));
 
     // Ş ş Ţ ţ  =>  Ș ș Ț ț
@@ -314,6 +314,7 @@
      */
     public synchronized String processInput(String path, String value, Exception[] internalException) {
         String original = value;
+        value = stripProblematicControlCharacters(value);
         value = Normalizer.compose(value, false); // Always normalize all input to NFC.
         if (internalException != null) {
             internalException[0] = null;
@@ -473,11 +474,28 @@
         }
     }
 
+    /**
+     * Strip out all code points less than U+0020 except for U+0009 tab,
+     * U+000A line feed, and U+000D carriage return.
+     *
+     * @param s the string
+     * @return the resulting string
+     */
+    private String stripProblematicControlCharacters(String s) {
+        if (s == null || s.isEmpty()) {
+            return s;
+        }
+        return s.codePoints()
+            .filter(c -> (c >= 0x20 || c == 9 || c == 0xA || c == 0xD))
+            .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
+            .toString();
+    }
+
     private static final boolean REMOVE_COVERED_KEYWORDS = true;
 
     /**
      * Produce a modification of the given annotation by sorting its components and filtering covered keywords.
-     * 
+     *
      * Examples: Given "b | a", return "a | b". Given "bear | panda | panda bear", return "bear | panda".
      *
      * @param value the string
@@ -496,7 +514,7 @@
     /**
      * Filter from the given set some keywords that include spaces, if they duplicate,
      * or are "covered by", other keywords in the set.
-     * 
+     *
      * For example, if the set is {"bear", "panda", "panda bear"} (annotation was "bear | panda | panda bear"),
      * then remove "panda bear", treating it as "covered" since the set already includes "panda" and "bear".
      *
@@ -862,10 +880,10 @@
             switch (string) {
             case "\u2011": toAdd.add("-"); break; // nobreak hyphen
             case "-": toAdd.add("\u2011"); break; // nobreak hyphen
-            
+
             case " ": toAdd.add("\u00a0"); break; // nobreak space
             case "\u00a0": toAdd.add(" "); break; // nobreak space
-            
+
             case "\u202F": toAdd.add("\u2009"); break; // nobreak narrow space
             case "\u2009": toAdd.add("\u202F"); break; // nobreak narrow space
             }
@@ -952,7 +970,7 @@
         private int[] posixDigitCount;
 
         private NumericType() {
-        };
+        }
 
         private NumericType(int[] digitCount, int[] posixDigitCount) {
             this.digitCount = digitCount;
@@ -994,5 +1012,5 @@
         public int[] getPosixDigitCount() {
             return posixDigitCount;
         }
-    };
+    }
 }
diff --git a/tools/java/org/unicode/cldr/test/EmojiSubdivisionNames.java b/tools/java/org/unicode/cldr/test/EmojiSubdivisionNames.java
index b678c85..5060bbb 100644
--- a/tools/java/org/unicode/cldr/test/EmojiSubdivisionNames.java
+++ b/tools/java/org/unicode/cldr/test/EmojiSubdivisionNames.java
@@ -82,18 +82,31 @@
                         _subdivisionIdToName.put(m.group(1), m.group(2));
                     }
                 }
-                _nameToSubdivisionId = _nameToSubdivisionId.isEmpty() ? Collections.emptyMap() 
+                _nameToSubdivisionId = _nameToSubdivisionId.isEmpty() ? Collections.emptyMap()
                     : ImmutableMap.copyOf(_nameToSubdivisionId);
-                _subdivisionIdToName = _subdivisionIdToName.isEmpty() ? Collections.emptyMap() 
+                _subdivisionIdToName = _subdivisionIdToName.isEmpty() ? Collections.emptyMap()
                     : ImmutableMap.copyOf(_subdivisionIdToName);
             } else {
                 String parentLocaleId = LocaleIDParser.getParent(localeID);
                 _nameToSubdivisionId = getNameToSubdivisionPath(parentLocaleId);
                 _subdivisionIdToName = localeToSubdivisionIdToName.get(parentLocaleId);
             }
-            localeToNameToSubdivisionId.put(localeID, _nameToSubdivisionId);
-            localeToSubdivisionIdToName.put(localeID, _subdivisionIdToName);
-        } catch (Exception e) {}
+            /*
+             * In practice _subdivisionIdToName == null actually happens here.
+             * Check for null rather than triggering NullPointerException.
+             */
+            if (_nameToSubdivisionId != null) {
+                localeToNameToSubdivisionId.put(localeID, _nameToSubdivisionId);
+            }
+            if (_subdivisionIdToName != null) {
+                localeToSubdivisionIdToName.put(localeID, _subdivisionIdToName);
+            }
+        } catch (Exception e) {
+            /*
+             * TODO: If there is a valid rationale for catching and ignoring all exceptions here,
+             * document it. Otherwise it should be avoided since it tends to hide programming errors.
+             */
+        }
     }
 
     static Set<String> SUBDIVISIONS = ImmutableSet.of("gbeng", "gbsct", "gbwls");
diff --git a/tools/java/org/unicode/cldr/test/ExampleCache.java b/tools/java/org/unicode/cldr/test/ExampleCache.java
new file mode 100644
index 0000000..5af14fb
--- /dev/null
+++ b/tools/java/org/unicode/cldr/test/ExampleCache.java
@@ -0,0 +1,187 @@
+package org.unicode.cldr.test;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.unicode.cldr.util.PathStarrer;
+
+/**
+ * Cache example html strings for ExampleGenerator.
+ *
+ * Essentially, the cache simply maps from xpath+value to html.
+ *
+ * The complexity of this class is mostly for the sake of handling dependencies where the
+ * example for pathB+valueB depends not only on pathB and valueB, but also on the current
+ * <em>winning</em> values of pathA1, pathA2, ...
+ *
+ * Some examples in the cache must get cleared when a changed winning value for a path makes
+ * the cached examples for other paths possibly no longer correct.
+
+ * For example, let pathA = "//ldml/localeDisplayNames/languages/language[@type=\"aa\"]"
+ * and pathB = "//ldml/localeDisplayNames/territories/territory[@type=\"DJ\"]". The values,
+ * in locale fr, might be "afar" for pathA and "Djibouti" for pathB. The example for pathB
+ * might include "afar (Djibouti)", which depends on the values of both pathA and pathB.
+ *
+ * Each ExampleGenerator object, which is for one locale, has its own ExampleCache object.
+ *
+ * This cache is internal to each ExampleGenerator. Compare TestCache.exampleGeneratorCache,
+ * which is at a higher level, caching entire ExampleGenerator objects, one for each locale.
+ *
+ * Unlike TestCache.exampleGeneratorCache, this cache doesn't get cleared to conserve memory,
+ * only to adapt to changed winning values.
+ */
+class ExampleCache {
+    /**
+     * An ExampleCacheItem is a temporary container for the info
+     * needed to get and/or put one item in the cache.
+     */
+    class ExampleCacheItem {
+        private String xpath;
+        private String value;
+
+        /**
+         * starredPath, the "starred" version of xpath, is the key for the highest level
+         * of the cache, which is nested.
+         *
+         * Compare starred "//ldml/localeDisplayNames/languages/language[@type=\"*\"]"
+         * with starless "//ldml/localeDisplayNames/languages/language[@type=\"aa\"]".
+         * There are fewer starred paths than starless paths.
+         * ExampleDependencies.dependencies has starred paths for that reason.
+         */
+        private String starredPath = null;
+
+        /**
+         * The cache maps each starredPath to a pathMap, which in turn maps each starless path
+         * to a valueMap.
+         */
+        private Map<String, Map<String, String>> pathMap = null;
+
+        /**
+         * Finally the valueMap maps the value to the example html.
+         */
+        private Map<String, String> valueMap = null;
+
+        ExampleCacheItem(String xpath, String value) {
+            this.xpath = xpath;
+            this.value = value;
+        }
+
+        /**
+         * Get the cached example html for this item, based on its xpath and value
+         *
+         * The HTML string shows example(s) using that value for that path, for the locale
+         * of the ExampleGenerator we're connected to.
+         *
+         * @return the example html or null
+         */
+        String getExample() {
+            if (!cachingIsEnabled) {
+                return null;
+            }
+            String result = null;
+            starredPath = pathStarrer.set(xpath);
+            pathMap = cache.get(starredPath);
+            if (pathMap != null) {
+                valueMap = pathMap.get(xpath);
+                if (valueMap != null) {
+                    result = valueMap.get(value);
+                }
+            }
+            if (cacheOnly && result == NONE) {
+                throw new InternalError("getExampleHtml cacheOnly not found: " + xpath + ", " + value);
+            }
+            return (result == NONE) ? null : result;
+        }
+
+        void putExample(String result) {
+            if (cachingIsEnabled) {
+                if (pathMap == null) {
+                    pathMap = new ConcurrentHashMap<>();
+                    cache.put(starredPath, pathMap);
+                }
+                if (valueMap == null) {
+                    valueMap = new ConcurrentHashMap<>();
+                    pathMap.put(xpath, valueMap);
+                }
+                valueMap.put(value, (result == null) ? NONE : result);
+            }
+        }
+    }
+
+    /**
+     * AVOID_CLEARING_CACHE: a performance optimization. Should be true except for testing.
+     * Only remove keys for which the examples may be affected by this change.
+     *
+     * All paths of type “A” (i.e., all that have dependencies) have keys in ExampleDependencies.dependencies.
+     * For any other path given as the argument to this function, there should be no need to clear the cache.
+     * When there are dependencies, only remove the keys for paths that are dependent on this path.
+     *
+     * Reference: https://unicode-org.atlassian.net/browse/CLDR-13636
+     */
+    private static final boolean AVOID_CLEARING_CACHE = true;
+
+    /**
+     * Avoid storing null in the cache, but do store NONE as a way to remember
+     * there is no example html for the given xpath and value. This is probably
+     * faster than calling constructExampleHtml again and again to get null every
+     * time, if nothing at all were stored in the cache.
+     */
+    private static final String NONE = "\uFFFF";
+
+    /**
+     * The nested cache mapping is: starredPath → (starlessPath → (value → html)).
+     */
+    private final Map<String, Map<String, Map<String, String>>> cache = new ConcurrentHashMap<>();
+
+    /**
+     * The PathStarrer is for getting starredPath from an ordinary (starless) path.
+     * Inclusion of starred paths enables performance improvement with AVOID_CLEARING_CACHE.
+     */
+    private final PathStarrer pathStarrer = new PathStarrer().setSubstitutionPattern("*");
+
+    /**
+     * For testing, caching can be disabled for some ExampleCaches while still
+     * enabled for others.
+     */
+    private boolean cachingIsEnabled = true;
+
+    void setCachingEnabled(boolean enabled) {
+        cachingIsEnabled = enabled;
+    }
+
+    /**
+     * For testing, we can switch some ExampleCaches into a special "cache only"
+     * mode, where they will throw an exception if queried for a path+value that isn't
+     * already in the cache. See TestExampleGeneratorDependencies.
+     */
+    private boolean cacheOnly = false;
+
+    void setCacheOnly(boolean only) {
+        this.cacheOnly = only;
+    }
+
+    /**
+     * Clear the cached examples for any paths whose examples might depend on the
+     * winning value of the given path, since the winning value of the given path has changed.
+     *
+     * There is no need to update the example(s) for the given path itself, since
+     * the cache key includes path+value and therefore each path+value has its own
+     * example, regardless of which value is winning. There is a need to update
+     * the examples for OTHER paths whose examples depend on the winning value
+     * of the given path.
+     *
+     * @param xpath the path whose winning value has changed
+     *
+     * Called by ExampleGenerator.updateCache
+     */
+    void update(String xpath) {
+        if (AVOID_CLEARING_CACHE) {
+            String starredA = pathStarrer.set(xpath);
+            for (String starredB : ExampleDependencies.dependencies.get(starredA)) {
+                cache.remove(starredB);
+            }
+        } else {
+            cache.clear();
+        }
+    }
+}
diff --git a/tools/java/org/unicode/cldr/test/ExampleDependencies.java b/tools/java/org/unicode/cldr/test/ExampleDependencies.java
new file mode 100644
index 0000000..529b35b
--- /dev/null
+++ b/tools/java/org/unicode/cldr/test/ExampleDependencies.java
@@ -0,0 +1,265 @@
+package org.unicode.cldr.test;
+import com.google.common.collect.ImmutableSetMultimap;
+public class ExampleDependencies {
+    public static ImmutableSetMultimap<String, String> dependencies
+        = new ImmutableSetMultimap.Builder<String, String>()
+    .put("//ldml/characterLabels/characterLabelPattern[@type=\"*\"]", "//ldml/characterLabels/characterLabel[@type=\"*\"]")
+    .put("//ldml/characterLabels/characterLabel[@type=\"*\"]", "//ldml/characterLabels/characterLabelPattern[@type=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/dateFormats/dateFormatLength[@type=\"*\"]/dateFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateTimeFormats/dateTimeFormatLength[@type=\"*\"]/dateTimeFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/dateTimeFormats/availableFormats/dateFormatItem[@id=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/dayPeriods/dayPeriodContext[@type=\"*\"]/dayPeriodWidth[@type=\"*\"]/dayPeriod[@type=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/dateTimeFormats/availableFormats/dateFormatItem[@id=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/dayPeriods/dayPeriodContext[@type=\"*\"]/dayPeriodWidth[@type=\"*\"]/dayPeriod[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/dayPeriods/dayPeriodContext[@type=\"*\"]/dayPeriodWidth[@type=\"*\"]/dayPeriod[@type=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateFormats/dateFormatLength[@type=\"*\"]/dateFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/dayPeriods/dayPeriodContext[@type=\"*\"]/dayPeriodWidth[@type=\"*\"]/dayPeriod[@type=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/dayPeriods/dayPeriodContext[@type=\"*\"]/dayPeriodWidth[@type=\"*\"]/dayPeriod[@type=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/dayPeriods/dayPeriodContext[@type=\"*\"]/dayPeriodWidth[@type=\"*\"]/dayPeriod[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/dayPeriods/dayPeriodContext[@type=\"*\"]/dayPeriodWidth[@type=\"*\"]/dayPeriod[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/dayPeriods/dayPeriodContext[@type=\"*\"]/dayPeriodWidth[@type=\"*\"]/dayPeriod[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/days/dayContext[@type=\"*\"]/dayWidth[@type=\"*\"]/day[@type=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateFormats/dateFormatLength[@type=\"*\"]/dateFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/days/dayContext[@type=\"*\"]/dayWidth[@type=\"*\"]/day[@type=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/dayPeriods/dayPeriodContext[@type=\"*\"]/dayPeriodWidth[@type=\"*\"]/dayPeriod[@type=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/days/dayContext[@type=\"*\"]/dayWidth[@type=\"*\"]/day[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/days/dayContext[@type=\"*\"]/dayWidth[@type=\"*\"]/day[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/days/dayContext[@type=\"*\"]/dayWidth[@type=\"*\"]/day[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/eras/eraAbbr/era[@type=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateFormats/dateFormatLength[@type=\"*\"]/dateFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/eras/eraAbbr/era[@type=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/dayPeriods/dayPeriodContext[@type=\"*\"]/dayPeriodWidth[@type=\"*\"]/dayPeriod[@type=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/eras/eraAbbr/era[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/eras/eraAbbr/era[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/eras/eraAbbr/era[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/eras/eraNames/era[@type=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateFormats/dateFormatLength[@type=\"*\"]/dateFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/eras/eraNames/era[@type=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/dayPeriods/dayPeriodContext[@type=\"*\"]/dayPeriodWidth[@type=\"*\"]/dayPeriod[@type=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/eras/eraNames/era[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/eras/eraNames/era[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/eras/eraNames/era[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/months/monthContext[@type=\"*\"]/monthWidth[@type=\"*\"]/month[@type=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateFormats/dateFormatLength[@type=\"*\"]/dateFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/months/monthContext[@type=\"*\"]/monthWidth[@type=\"*\"]/month[@type=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/dayPeriods/dayPeriodContext[@type=\"*\"]/dayPeriodWidth[@type=\"*\"]/dayPeriod[@type=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/months/monthContext[@type=\"*\"]/monthWidth[@type=\"*\"]/month[@type=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/monthPatterns/monthPatternContext[@type=\"*\"]/monthPatternWidth[@type=\"*\"]/monthPattern[@type=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/months/monthContext[@type=\"*\"]/monthWidth[@type=\"*\"]/month[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/months/monthContext[@type=\"*\"]/monthWidth[@type=\"*\"]/month[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/months/monthContext[@type=\"*\"]/monthWidth[@type=\"*\"]/month[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/quarters/quarterContext[@type=\"*\"]/quarterWidth[@type=\"*\"]/quarter[@type=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateFormats/dateFormatLength[@type=\"*\"]/dateFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/quarters/quarterContext[@type=\"*\"]/quarterWidth[@type=\"*\"]/quarter[@type=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/dayPeriods/dayPeriodContext[@type=\"*\"]/dayPeriodWidth[@type=\"*\"]/dayPeriod[@type=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/quarters/quarterContext[@type=\"*\"]/quarterWidth[@type=\"*\"]/quarter[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/quarters/quarterContext[@type=\"*\"]/quarterWidth[@type=\"*\"]/quarter[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/quarters/quarterContext[@type=\"*\"]/quarterWidth[@type=\"*\"]/quarter[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/timeFormats/timeFormatLength[@type=\"*\"]/timeFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateTimeFormats/appendItems/appendItem[@request=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/timeFormats/timeFormatLength[@type=\"*\"]/timeFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateTimeFormats/dateTimeFormatLength[@type=\"*\"]/dateTimeFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/timeFormats/timeFormatLength[@type=\"*\"]/timeFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/dates/timeZoneNames/metazone[@type=\"*\"]/long/daylight")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/timeFormats/timeFormatLength[@type=\"*\"]/timeFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/dates/timeZoneNames/metazone[@type=\"*\"]/long/generic")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/timeFormats/timeFormatLength[@type=\"*\"]/timeFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/dates/timeZoneNames/metazone[@type=\"*\"]/long/standard")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/timeFormats/timeFormatLength[@type=\"*\"]/timeFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/dates/timeZoneNames/metazone[@type=\"*\"]/short/daylight")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/timeFormats/timeFormatLength[@type=\"*\"]/timeFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/dates/timeZoneNames/metazone[@type=\"*\"]/short/generic")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/timeFormats/timeFormatLength[@type=\"*\"]/timeFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/dates/timeZoneNames/metazone[@type=\"*\"]/short/standard")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/timeFormats/timeFormatLength[@type=\"*\"]/timeFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/timeFormats/timeFormatLength[@type=\"*\"]/timeFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/dates/calendars/calendar[@type=\"*\"]/timeFormats/timeFormatLength[@type=\"*\"]/timeFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/dates/timeZoneNames/fallbackFormat", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/dates/timeZoneNames/fallbackFormat", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/dates/timeZoneNames/fallbackFormat", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/dates/timeZoneNames/gmtFormat", "//ldml/dates/timeZoneNames/hourFormat")
+    .put("//ldml/dates/timeZoneNames/gmtFormat", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/dates/timeZoneNames/gmtFormat", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/dates/timeZoneNames/gmtFormat", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/dates/timeZoneNames/gmtZeroFormat", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateTimeFormats/appendItems/appendItem[@request=\"*\"]")
+    .put("//ldml/dates/timeZoneNames/hourFormat", "//ldml/dates/timeZoneNames/gmtFormat")
+    .put("//ldml/dates/timeZoneNames/hourFormat", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/dates/timeZoneNames/hourFormat", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/dates/timeZoneNames/hourFormat", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/dates/timeZoneNames/metazone[@type=\"*\"]/long/generic", "//ldml/dates/timeZoneNames/fallbackFormat")
+    .put("//ldml/dates/timeZoneNames/regionFormat", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/dates/timeZoneNames/regionFormat", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/dates/timeZoneNames/regionFormat", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/dates/timeZoneNames/regionFormat[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/dates/timeZoneNames/regionFormat[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/dates/timeZoneNames/regionFormat[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/dates/timeZoneNames/zone[@type=\"*\"]/exemplarCity", "//ldml/dates/timeZoneNames/fallbackFormat")
+    .put("//ldml/dates/timeZoneNames/zone[@type=\"*\"]/exemplarCity", "//ldml/dates/timeZoneNames/regionFormat")
+    .put("//ldml/dates/timeZoneNames/zone[@type=\"*\"]/exemplarCity", "//ldml/dates/timeZoneNames/regionFormat[@type=\"*\"]")
+    .put("//ldml/delimiters/alternateQuotationEnd", "//ldml/delimiters/alternateQuotationStart")
+    .put("//ldml/delimiters/alternateQuotationEnd", "//ldml/delimiters/quotationEnd")
+    .put("//ldml/delimiters/alternateQuotationEnd", "//ldml/delimiters/quotationStart")
+    .put("//ldml/delimiters/alternateQuotationStart", "//ldml/delimiters/alternateQuotationEnd")
+    .put("//ldml/delimiters/alternateQuotationStart", "//ldml/delimiters/quotationEnd")
+    .put("//ldml/delimiters/alternateQuotationStart", "//ldml/delimiters/quotationStart")
+    .put("//ldml/delimiters/quotationEnd", "//ldml/delimiters/alternateQuotationEnd")
+    .put("//ldml/delimiters/quotationEnd", "//ldml/delimiters/alternateQuotationStart")
+    .put("//ldml/delimiters/quotationEnd", "//ldml/delimiters/quotationStart")
+    .put("//ldml/delimiters/quotationStart", "//ldml/delimiters/alternateQuotationEnd")
+    .put("//ldml/delimiters/quotationStart", "//ldml/delimiters/alternateQuotationStart")
+    .put("//ldml/delimiters/quotationStart", "//ldml/delimiters/quotationEnd")
+    .put("//ldml/listPatterns/listPattern/listPatternPart[@type=\"*\"]", "//ldml/listPatterns/listPattern/listPatternPart[@type=\"*\"]")
+    .put("//ldml/listPatterns/listPattern[@type=\"*\"]/listPatternPart[@type=\"*\"]", "//ldml/listPatterns/listPattern[@type=\"*\"]/listPatternPart[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/codePatterns/codePattern[@type=\"*\"]", "//ldml/localeDisplayNames/languages/language[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/codePatterns/codePattern[@type=\"*\"]", "//ldml/localeDisplayNames/languages/language[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/codePatterns/codePattern[@type=\"*\"]", "//ldml/localeDisplayNames/scripts/script[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/codePatterns/codePattern[@type=\"*\"]", "//ldml/localeDisplayNames/scripts/script[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/codePatterns/codePattern[@type=\"*\"]", "//ldml/localeDisplayNames/territories/territory[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/codePatterns/codePattern[@type=\"*\"]", "//ldml/localeDisplayNames/territories/territory[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/keys/key[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/localeDisplayNames/keys/key[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/localeDisplayNames/keys/key[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/localeDisplayNames/languages/language[@type=\"*\"]", "//ldml/localeDisplayNames/languages/language[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/languages/language[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/localeDisplayNames/languages/language[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/localeDisplayNames/languages/language[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/localeDisplayNames/languages/language[@type=\"*\"]", "//ldml/localeDisplayNames/scripts/script[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/languages/language[@type=\"*\"]", "//ldml/localeDisplayNames/scripts/script[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/languages/language[@type=\"*\"]", "//ldml/localeDisplayNames/territories/territory[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/languages/language[@type=\"*\"]", "//ldml/localeDisplayNames/territories/territory[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/languages/language[@type=\"*\"][@alt=\"*\"]", "//ldml/localeDisplayNames/languages/language[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/languages/language[@type=\"*\"][@alt=\"*\"]", "//ldml/localeDisplayNames/languages/language[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern", "//ldml/localeDisplayNames/languages/language[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern", "//ldml/localeDisplayNames/languages/language[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localePattern", "//ldml/localeDisplayNames/languages/language[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localePattern", "//ldml/localeDisplayNames/languages/language[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localePattern", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localePattern", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localePattern", "//ldml/localeDisplayNames/scripts/script[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localePattern", "//ldml/localeDisplayNames/scripts/script[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localePattern", "//ldml/localeDisplayNames/territories/territory[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localePattern", "//ldml/localeDisplayNames/territories/territory[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator", "//ldml/localeDisplayNames/languages/language[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator", "//ldml/localeDisplayNames/languages/language[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator", "//ldml/localeDisplayNames/scripts/script[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator", "//ldml/localeDisplayNames/scripts/script[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator", "//ldml/localeDisplayNames/territories/territory[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator", "//ldml/localeDisplayNames/territories/territory[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/scripts/script[@type=\"*\"]", "//ldml/localeDisplayNames/languages/language[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/scripts/script[@type=\"*\"]", "//ldml/localeDisplayNames/languages/language[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/scripts/script[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/localeDisplayNames/scripts/script[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/localeDisplayNames/scripts/script[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/localeDisplayNames/scripts/script[@type=\"*\"]", "//ldml/localeDisplayNames/territories/territory[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/scripts/script[@type=\"*\"]", "//ldml/localeDisplayNames/territories/territory[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/scripts/script[@type=\"*\"][@alt=\"*\"]", "//ldml/localeDisplayNames/languages/language[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/scripts/script[@type=\"*\"][@alt=\"*\"]", "//ldml/localeDisplayNames/scripts/script[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/scripts/script[@type=\"*\"][@alt=\"*\"]", "//ldml/localeDisplayNames/scripts/script[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/territories/territory[@type=\"*\"]", "//ldml/characterLabels/characterLabelPattern[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/territories/territory[@type=\"*\"]", "//ldml/characterLabels/characterLabel[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/territories/territory[@type=\"*\"]", "//ldml/characters/ellipsis[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/territories/territory[@type=\"*\"]", "//ldml/dates/timeZoneNames/regionFormat")
+    .put("//ldml/localeDisplayNames/territories/territory[@type=\"*\"]", "//ldml/dates/timeZoneNames/regionFormat[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/territories/territory[@type=\"*\"]", "//ldml/listPatterns/listPattern/listPatternPart[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/territories/territory[@type=\"*\"]", "//ldml/listPatterns/listPattern[@type=\"*\"]/listPatternPart[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/territories/territory[@type=\"*\"]", "//ldml/localeDisplayNames/languages/language[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/territories/territory[@type=\"*\"]", "//ldml/localeDisplayNames/languages/language[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/territories/territory[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/localeDisplayNames/territories/territory[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/localeDisplayNames/territories/territory[@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/localeDisplayNames/territories/territory[@type=\"*\"]", "//ldml/localeDisplayNames/scripts/script[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/territories/territory[@type=\"*\"]", "//ldml/localeDisplayNames/scripts/script[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/territories/territory[@type=\"*\"][@alt=\"*\"]", "//ldml/localeDisplayNames/languages/language[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/territories/territory[@type=\"*\"][@alt=\"*\"]", "//ldml/localeDisplayNames/territories/territory[@type=\"*\"]")
+    .put("//ldml/localeDisplayNames/territories/territory[@type=\"*\"][@alt=\"*\"]", "//ldml/localeDisplayNames/territories/territory[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/localeDisplayNames/types/type[@key=\"*\"][@type=\"*\"]", "//ldml/delimiters/alternateQuotationEnd")
+    .put("//ldml/localeDisplayNames/types/type[@key=\"*\"][@type=\"*\"]", "//ldml/delimiters/alternateQuotationStart")
+    .put("//ldml/localeDisplayNames/types/type[@key=\"*\"][@type=\"*\"]", "//ldml/delimiters/quotationEnd")
+    .put("//ldml/localeDisplayNames/types/type[@key=\"*\"][@type=\"*\"]", "//ldml/delimiters/quotationStart")
+    .put("//ldml/localeDisplayNames/types/type[@key=\"*\"][@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern")
+    .put("//ldml/localeDisplayNames/types/type[@key=\"*\"][@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localePattern")
+    .put("//ldml/localeDisplayNames/types/type[@key=\"*\"][@type=\"*\"]", "//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/decimal", "//ldml/numbers/currencies/currency[@type=\"*\"]/displayName[@count=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/decimal", "//ldml/numbers/currencies/currency[@type=\"*\"]/symbol")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/decimal", "//ldml/numbers/currencies/currency[@type=\"*\"]/symbol[@alt=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/decimal", "//ldml/numbers/currencyFormats/currencyFormatLength/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/decimal", "//ldml/numbers/currencyFormats/unitPattern[@count=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/decimal", "//ldml/numbers/currencyFormats[@numberSystem=\"*\"]/currencyFormatLength/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/displayName", "//ldml/numbers/currencies/currency[@type=\"*\"]/displayName[@count=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/displayName", "//ldml/numbers/currencies/currency[@type=\"*\"]/symbol")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/displayName", "//ldml/numbers/currencies/currency[@type=\"*\"]/symbol[@alt=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/displayName", "//ldml/numbers/currencyFormats/currencyFormatLength/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/displayName", "//ldml/numbers/currencyFormats/unitPattern[@count=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/displayName", "//ldml/numbers/currencyFormats[@numberSystem=\"*\"]/currencyFormatLength/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/displayName[@count=\"*\"]", "//ldml/numbers/currencyFormats/unitPattern[@count=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/displayName[@count=\"*\"]", "//ldml/numbers/currencyFormats[@numberSystem=\"*\"]/unitPattern[@count=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/grouping", "//ldml/numbers/currencies/currency[@type=\"*\"]/displayName[@count=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/grouping", "//ldml/numbers/currencies/currency[@type=\"*\"]/symbol")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/grouping", "//ldml/numbers/currencies/currency[@type=\"*\"]/symbol[@alt=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/grouping", "//ldml/numbers/currencyFormats/currencyFormatLength/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/grouping", "//ldml/numbers/currencyFormats/unitPattern[@count=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/grouping", "//ldml/numbers/currencyFormats[@numberSystem=\"*\"]/currencyFormatLength/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/pattern", "//ldml/numbers/currencies/currency[@type=\"*\"]/displayName[@count=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/pattern", "//ldml/numbers/currencies/currency[@type=\"*\"]/symbol")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/pattern", "//ldml/numbers/currencies/currency[@type=\"*\"]/symbol[@alt=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/pattern", "//ldml/numbers/currencyFormats/currencyFormatLength/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/pattern", "//ldml/numbers/currencyFormats/unitPattern[@count=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/pattern", "//ldml/numbers/currencyFormats[@numberSystem=\"*\"]/currencyFormatLength/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/symbol", "//ldml/numbers/currencies/currency[@type=\"*\"]/displayName[@count=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/symbol", "//ldml/numbers/currencyFormats/currencyFormatLength/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/symbol", "//ldml/numbers/currencyFormats/currencyFormatLength[@type=\"*\"]/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"][@count=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/symbol", "//ldml/numbers/currencyFormats/unitPattern[@count=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/symbol", "//ldml/numbers/currencyFormats[@numberSystem=\"*\"]/currencyFormatLength/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/numbers/currencies/currency[@type=\"*\"]/symbol", "//ldml/numbers/currencyFormats[@numberSystem=\"*\"]/currencyFormatLength[@type=\"*\"]/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"][@count=\"*\"]")
+    .put("//ldml/numbers/currencyFormats/currencyFormatLength/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/numbers/currencies/currency[@type=\"*\"]/displayName[@count=\"*\"]")
+    .put("//ldml/numbers/currencyFormats/currencyFormatLength/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/numbers/currencies/currency[@type=\"*\"]/symbol")
+    .put("//ldml/numbers/currencyFormats/currencyFormatLength/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/numbers/currencies/currency[@type=\"*\"]/symbol[@alt=\"*\"]")
+    .put("//ldml/numbers/currencyFormats/currencyFormatLength/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/numbers/currencyFormats/unitPattern[@count=\"*\"]")
+    .put("//ldml/numbers/currencyFormats/currencyFormatLength/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/numbers/currencyFormats[@numberSystem=\"*\"]/currencyFormatLength/currencyFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/numbers/currencyFormats/currencySpacing/afterCurrency/currencyMatch", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/currencyFormats/currencySpacing/afterCurrency/currencyMatch", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/currencyFormats/currencySpacing/afterCurrency/insertBetween", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/currencyFormats/currencySpacing/afterCurrency/insertBetween", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/currencyFormats/currencySpacing/afterCurrency/surroundingMatch", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/currencyFormats/currencySpacing/afterCurrency/surroundingMatch", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/currencyFormats/currencySpacing/beforeCurrency/currencyMatch", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/currencyFormats/currencySpacing/beforeCurrency/currencyMatch", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/currencyFormats/currencySpacing/beforeCurrency/insertBetween", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/currencyFormats/currencySpacing/beforeCurrency/insertBetween", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/currencyFormats/currencySpacing/beforeCurrency/surroundingMatch", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/currencyFormats/currencySpacing/beforeCurrency/surroundingMatch", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/currencyFormats/unitPattern[@count=\"*\"]", "//ldml/numbers/currencies/currency[@type=\"*\"]/displayName[@count=\"*\"]")
+    .put("//ldml/numbers/decimalFormats/decimalFormatLength/decimalFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/numbers/miscPatterns[@numberSystem=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/numbers/decimalFormats/decimalFormatLength/decimalFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/decimalFormats/decimalFormatLength/decimalFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/defaultNumberingSystem", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateFormats/dateFormatLength[@type=\"*\"]/dateFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/numbers/defaultNumberingSystem", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateFormats/dateFormatLength[@type=\"*\"]/dateFormat[@type=\"*\"]/pattern[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/numbers/defaultNumberingSystem", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateTimeFormats/availableFormats/dateFormatItem[@id=\"*\"]")
+    .put("//ldml/numbers/defaultNumberingSystem", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateTimeFormats/availableFormats/dateFormatItem[@id=\"*\"][@alt=\"*\"]")
+    .put("//ldml/numbers/defaultNumberingSystem", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateTimeFormats/availableFormats/dateFormatItem[@id=\"*\"][@count=\"*\"]")
+    .put("//ldml/numbers/defaultNumberingSystem", "//ldml/dates/calendars/calendar[@type=\"*\"]/timeFormats/timeFormatLength[@type=\"*\"]/timeFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/numbers/defaultNumberingSystem", "//ldml/dates/calendars/calendar[@type=\"*\"]/timeFormats/timeFormatLength[@type=\"*\"]/timeFormat[@type=\"*\"]/pattern[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/numbers/defaultNumberingSystem", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/percentFormats/percentFormatLength/percentFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/numbers/symbols/percentSign")
+    .put("//ldml/numbers/percentFormats/percentFormatLength/percentFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/numbers/symbols[@numberSystem=\"*\"]/percentSign")
+    .put("//ldml/numbers/scientificFormats/scientificFormatLength/scientificFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/numbers/symbols/plusSign")
+    .put("//ldml/numbers/scientificFormats/scientificFormatLength/scientificFormat[@type=\"*\"]/pattern[@type=\"*\"]", "//ldml/numbers/symbols[@numberSystem=\"*\"]/plusSign")
+    .put("//ldml/numbers/symbols/percentSign", "//ldml/numbers/symbols/perMille")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/currencyDecimal", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/currencyDecimal", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/currencyGroup", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/currencyGroup", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/exponential", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/exponential", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/group", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/group", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/infinity", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/infinity", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/list", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/list", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/minusSign", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/minusSign", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/nan", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/nan", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/perMille", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/perMille", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/percentSign", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/percentSign", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/percentSign", "//ldml/numbers/symbols[@numberSystem=\"*\"]/perMille")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/plusSign", "//ldml/numbers/symbols/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/plusSign", "//ldml/numbers/symbols[@numberSystem=\"*\"]/decimal")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/timeSeparator", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateFormats/dateFormatLength[@type=\"*\"]/dateFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/timeSeparator", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateFormats/dateFormatLength[@type=\"*\"]/dateFormat[@type=\"*\"]/pattern[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/timeSeparator", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateTimeFormats/availableFormats/dateFormatItem[@id=\"*\"]")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/timeSeparator", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateTimeFormats/availableFormats/dateFormatItem[@id=\"*\"][@alt=\"*\"]")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/timeSeparator", "//ldml/dates/calendars/calendar[@type=\"*\"]/dateTimeFormats/availableFormats/dateFormatItem[@id=\"*\"][@count=\"*\"]")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/timeSeparator", "//ldml/dates/calendars/calendar[@type=\"*\"]/timeFormats/timeFormatLength[@type=\"*\"]/timeFormat[@type=\"*\"]/pattern[@type=\"*\"]")
+    .put("//ldml/numbers/symbols[@numberSystem=\"*\"]/timeSeparator", "//ldml/dates/calendars/calendar[@type=\"*\"]/timeFormats/timeFormatLength[@type=\"*\"]/timeFormat[@type=\"*\"]/pattern[@type=\"*\"][@alt=\"*\"]")
+    .put("//ldml/units/unitLength[@type=\"*\"]/unit[@type=\"*\"]/displayName", "//ldml/units/unitLength[@type=\"*\"]/compoundUnit[@type=\"*\"]/compoundUnitPattern1")
+    .put("//ldml/units/unitLength[@type=\"*\"]/unit[@type=\"*\"]/displayName", "//ldml/units/unitLength[@type=\"*\"]/compoundUnit[@type=\"*\"]/unitPrefixPattern")
+    .put("//ldml/units/unitLength[@type=\"*\"]/unit[@type=\"*\"]/unitPattern[@count=\"*\"]", "//ldml/listPatterns/listPattern[@type=\"*\"]/listPatternPart[@type=\"*\"]")
+    .put("//ldml/units/unitLength[@type=\"*\"]/unit[@type=\"*\"]/unitPattern[@count=\"*\"]", "//ldml/units/unitLength[@type=\"*\"]/compoundUnit[@type=\"*\"]/compoundUnitPattern")
+    .put("//ldml/units/unitLength[@type=\"*\"]/unit[@type=\"*\"]/unitPattern[@count=\"*\"]", "//ldml/units/unitLength[@type=\"*\"]/compoundUnit[@type=\"*\"]/compoundUnitPattern1[@count=\"*\"]")
+    .build();
+}
diff --git a/tools/java/org/unicode/cldr/test/ExampleGenerator.java b/tools/java/org/unicode/cldr/test/ExampleGenerator.java
index ba62b29..50db46b 100644
--- a/tools/java/org/unicode/cldr/test/ExampleGenerator.java
+++ b/tools/java/org/unicode/cldr/test/ExampleGenerator.java
@@ -15,7 +15,6 @@
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -43,6 +42,8 @@
 import org.unicode.cldr.util.SupplementalDataInfo.PluralType;
 import org.unicode.cldr.util.TimezoneFormatter;
 import org.unicode.cldr.util.TransliteratorUtilities;
+import org.unicode.cldr.util.UnitConverter;
+import org.unicode.cldr.util.UnitConverter.UnitId;
 import org.unicode.cldr.util.Units;
 import org.unicode.cldr.util.XListFormatter.ListTypeLength;
 import org.unicode.cldr.util.XPathParts;
@@ -84,8 +85,6 @@
 
     private static final String EXEMPLAR_CITY_LOS_ANGELES = "//ldml/dates/timeZoneNames/zone[@type=\"America/Los_Angeles\"]/exemplarCity";
 
-    private static final boolean SHOW_ERROR = false;
-
     private static final Pattern URL_PATTERN = Pattern
         .compile("http://[\\-a-zA-Z0-9]+(\\.[\\-a-zA-Z0-9]+)*([/#][\\-a-zA-Z0-9]+)*");
 
@@ -94,25 +93,12 @@
     private static SupplementalDataInfo supplementalDataInfo;
     private PathDescription pathDescription;
 
-    /*
-     * For testing, caching can be disabled for some ExampleGenerators while still
-     * enabled for others.
-     */
-    private boolean cachingIsEnabled = true;
-
-    public void disableCaching() {
-        cachingIsEnabled = false;
+    public void setCachingEnabled(boolean enabled) {
+        exCache.setCachingEnabled(enabled);
     }
 
-    /*
-     * For testing, we can switch some ExampleGenerators into a special "cache only"
-     * mode, where they will throw an exception if queried for a path+value that isn't
-     * already in the cache. See TestExampleGeneratorDependencies.
-     */
-    private boolean cacheOnly = false;
-
-    public void makeCacheOnly() {
-        cacheOnly = true;
+    public void setCacheOnly(boolean cacheOnly) {
+        exCache.setCacheOnly(cacheOnly);
     }
 
     public final static double NUMBER_SAMPLE = 123456.789;
@@ -178,159 +164,21 @@
     private CLDRFile englishFile;
     Matcher URLMatcher = URL_PATTERN.matcher("");
 
-    /**
-     * The cache is accessed only by getExampleHtml and updateCache.
-     * Its key is built from an xpath, and a value for that xpath.
-     * Its value is an HTML string showing example(s) using that value for that path, for the locale of this ExampleGenerator.
-     *
-     * Note that this cache is internal to each ExampleGenerator. Compare TestCache.exampleGeneratorCache,
-     * which is at a higher level, caching entire ExampleGenerator objects, one for each locale.
-     */
-    private Map<String, String> cache = new ConcurrentHashMap<String, String>();
-
-    /**
-     * AVOID_CLEARING_CACHE: work in progress, keep false until it becomes beneficial and reliable.
-     * Reference: https://unicode-org.atlassian.net/browse/CLDR-13331
-     */
-    private static final boolean AVOID_CLEARING_CACHE = false;
+    private ExampleCache exCache = new ExampleCache();
 
     /**
      * For this (locale-specific) ExampleGenerator, clear the cached examples for
      * any paths whose examples might depend on the winning value of the given path,
-     * since the winning value of the given path has (or may have?) changed.
+     * since the winning value of the given path has changed.
      *
-     * There is no need to update the example(s) for the given path itself, since
-     * the cache key includes path+value and therefore each path+value has its own
-     * example, regardless of which value is winning. There is a need to update
-     * the examples for OTHER paths whose examples depend on the winning value
-     * of the given path.
-     *
-     * For example, let pathA = "//ldml/localeDisplayNames/languages/language[@type=\"aa\"]"
-     * and pathB = "//ldml/localeDisplayNames/territories/territory[@type=\"DJ\"]". The values,
-     * in locale fr, might be "afar" for pathA and "Djibouti" for pathB. The example for pathB
-     * might include "afar (Djibouti)", which depends on the values of both pathA and pathB.
-     *
-     * @param xpath the path whose winning value has (may have?) changed
-     *
-     * TODO: make sure we're only called if the winning value really HAS changed.
-     * Looking at the callers, it's not obvious if that's the case, or if this
-     * function may sometimes be called when a vote has been made without actually
-     * changing the winning value.
+     * @param xpath the path whose winning value has changed
      *
      * Called by TestCache.updateExampleGeneratorCache
      */
-    public void updateCache(@SuppressWarnings("unused") String xpath) {
-        /*
-         * TODO: instead of removing ALL keys, only remove keys for which the examples
-         * may be affected by this change.
-         *
-         * It appears (based on incomplete evidence), that all paths of type “A”
-         * (i.e., all that have dependencies) start with one of these seven strings:
-         * //ldml/characterLabels
-         * //ldml/dates
-         * //ldml/delimiters
-         * //ldml/listPatterns
-         * //ldml/localeDisplayNames
-         * //ldml/numbers
-         * //ldml/units
-         *
-         * Problem: that's something like 98% of all paths! Need to narrow it down much further.
-         *
-         * For any other path given as the argument to this function, there should be no need to clear the cache.
-         * Also, when there are dependencies, ideally only the keys for paths that are dependent on this path
-         * should be removed. It might be slow to loop through the cache testing each path to see if it's affected.
-         * Ideally we might maintain a complete mapping of dependencies, so given pathA we could quickly loop
-         * through the pre-existing set of paths B that depend on pathA.
-         *
-         * Reference: https://unicode-org.atlassian.net/browse/CLDR-13331
-         */
-        if (AVOID_CLEARING_CACHE) {
-            if (!pathMightBeTypeA(xpath)) {
-                return;
-            }
-        }
-        cache.clear();
+    public void updateCache(String xpath) {
+        exCache.update(xpath);
     }
 
-    static long typeACount = 0, notTypeACount = 0;
-
-    /**
-     * Does changing the winning value for the given path potentially have side-effect of changing the example
-     * html for other paths? In other words, might this be a path of type "A"?
-     *
-     * We say "might be", since this function is meant to be fast rather than exact. It should never return
-     * false for a path that really is type "A", but it may return true for some paths that aren't really type "A".
-     *
-     * @param xpath
-     * @return true or false
-     *
-     * Called locally (only if AVOID_CLEARING_CACHE is true), and also by TestExampleGeneratorDependencies.
-     */
-    static public boolean pathMightBeTypeA(String xpath) {
-        final String pathAStarts[] = {
-            "//ldml/characterLabels/characterLabelPattern",
-            "//ldml/characterLabels/characterLabel",
-            "//ldml/dates/calendars",
-            "//ldml/dates/fields",
-            "//ldml/dates/timeZoneNames",
-            "//ldml/delimiters/alternateQuotationEnd",
-            "//ldml/delimiters/alternateQuotationStart",
-            "//ldml/delimiters/quotationEnd",
-            "//ldml/delimiters/quotationStart",
-            "//ldml/listPatterns/listPattern",
-            "//ldml/localeDisplayNames/codePatterns",
-            "//ldml/localeDisplayNames/keys",
-            "//ldml/localeDisplayNames/languages",
-            "//ldml/localeDisplayNames/localeDisplayPattern",
-            "//ldml/localeDisplayNames/scripts",
-            "//ldml/localeDisplayNames/territories",
-            "//ldml/localeDisplayNames/types",
-            "//ldml/numbers/currencies",
-            "//ldml/numbers/currencyFormats",
-            "//ldml/numbers/decimalFormats",
-            "//ldml/numbers/defaultNumberingSystem",
-            "//ldml/numbers/minimalPairs",
-            "//ldml/numbers/minimumGroupingDigits",
-            "//ldml/numbers/miscPatterns",
-            "//ldml/numbers/otherNumberingSystems",
-            "//ldml/numbers/percentFormats",
-            "//ldml/numbers/scientificFormats",
-            "//ldml/numbers/symbols",
-            "//ldml/posix/messages",
-            "//ldml/typographicNames",
-            "//ldml/units/durationUnit",
-            "//ldml/units/unitLength",
-        };
-        /***
-        final String pathAStartsShorter[] = {
-            "//ldml/characterLabels",
-            "//ldml/dates",
-            "//ldml/delimiters",
-            "//ldml/listPatterns",
-            "//ldml/localeDisplayNames",
-            "//ldml/numbers",
-            "//ldml/units"
-        };
-        ***/
-        boolean maybeTypeA = false;
-        for (String s : pathAStarts) {
-            if (xpath.startsWith(s)) {
-                maybeTypeA = true;
-                break;
-            }
-        }
-        if (maybeTypeA) {
-             ++typeACount;
-        } else {
-             ++notTypeACount; // e.g., //ldml/localeDisplayNames/subdivisions/subdivision[@type="gbeng"] or //ldml/localeDisplayNames/variants/variant[@type="1901"] or //ldml/localeDisplayNames/measurementSystemNames/measurementSystemName[@type="US"]
-        }
-        // System.out.println("type A percent = " + ((100 * typeACount) / (typeACount + notTypeACount))
-        //    + " [" + typeACount + ", " + notTypeACount + "]");
-        return maybeTypeA;
-    }
-
-    private static final String NONE = "\uFFFF";
-
     private ICUServiceBuilder icuServiceBuilder = new ICUServiceBuilder();
 
     private PluralInfo pluralInfo;
@@ -442,127 +290,123 @@
      * example. <br>
      * The result is valid HTML.
      *
+     * If generating examples for an inheritance marker, use the "real" inherited value
+     * to generate from. Do this BEFORE accessing the cache, which doesn't use INHERITANCE_MARKER.
+     *
      * @param xpath the path; e.g., "//ldml/dates/timeZoneNames/fallbackFormat"
      * @param value the value; e.g., "{1} [{0}]"; not necessarily the winning value
      * @return the example HTML, or null
      */
     public String getExampleHtml(String xpath, String value) {
-        if (value == null) {
+        if (value == null || xpath == null || xpath.endsWith("/alias")) {
             return null;
         }
-        String cacheKey = null;
         String result = null;
         try {
-            if (cachingIsEnabled) {
-                cacheKey = xpath + "," + value;
-                result = cache.get(cacheKey);
-                if (result != null) {
-                    if (result == NONE) {
-                        return null;
-                    }
-                    return result;
-                }
-            } else if (cacheOnly ) {
-                throw new InternalError("getExampleHtml cacheOnly not found: " + cacheKey);
-            }
-            // If generating examples for an inheritance marker, then we need to find the
-            // "real" value to generate from.
             if (CldrUtility.INHERITANCE_MARKER.equals(value)) {
                 value = cldrFile.getConstructedBaileyValue(xpath, null, null);
-            }
-
-            /*
-             * result is null at this point. Get the real value if we can.
-             *
-             * Need getInstance, not getFrozenInstance here: some functions such as handleNumberSymbol
-             * expect to call functions like parts.addRelative which throw exceptions if parts is frozen.
-             */
-            XPathParts parts = XPathParts.getInstance(xpath);
-            if (parts.contains("dateRangePattern")) { // {0} - {1}
-                result = handleDateRangePattern(value);
-            } else if (parts.contains("timeZoneNames")) {
-                result = handleTimeZoneName(parts, value);
-            } else if (parts.contains("localeDisplayNames")) {
-                result = handleDisplayNames(xpath, parts, value);
-            } else if (parts.contains("currency")) {
-                result = handleCurrency(xpath, parts, value);
-            } else if (parts.contains("dayPeriods")) {
-                result = handleDayPeriod(parts, value);
-            } else if (parts.contains("pattern") || parts.contains("dateFormatItem")) {
-                if (parts.contains("calendar")) {
-                    result = handleDateFormatItem(xpath, value);
-                } else if (parts.contains("miscPatterns")) {
-                    result = handleMiscPatterns(parts, value);
-                } else if (parts.contains("numbers")) {
-                    if (parts.contains("currencyFormat")) {
-                        result = handleCurrencyFormat(parts, value);
-                    } else {
-                        result = handleDecimalFormat(parts, value);
-                    }
+                if (value == null) {
+                    /*
+                     * This can happen for some paths, such as
+                     * //ldml/dates/timeZoneNames/metazone[@type="Mawson"]/short/daylight
+                     */
+                    return null;
                 }
-            } else if (parts.getElement(2).contains("symbols")) {
-                result = handleNumberSymbol(parts, value);
-            } else if (parts.contains("defaultNumberingSystem") || parts.contains("otherNumberingSystems")) {
-                result = handleNumberingSystem(value);
-            } else if (parts.contains("currencyFormats") && parts.contains("unitPattern")) {
-                result = formatCountValue(xpath, parts, value);
-            } else if (parts.getElement(-1).equals("compoundUnitPattern")) {
-                result = handleCompoundUnit(parts);
-            } else if (parts.getElement(-1).equals("compoundUnitPattern1") 
-                || parts.getElement(-1).equals("unitPrefixPattern")) {
-                result = handleCompoundUnit1(parts, value);
-            } else if (parts.getElement(-1).equals("unitPattern")) {
-                String count = parts.getAttributeValue(-1, "count");
-                result = handleFormatUnit(Count.valueOf(count), value);
-            } else if (parts.getElement(-1).equals("durationUnitPattern")) {
-                result = handleDurationUnit(value);
-            } else if (parts.contains("intervalFormats")) {
-                result = handleIntervalFormats(parts, value);
-            } else if (parts.getElement(1).equals("delimiters")) {
-                result = handleDelimiters(parts, xpath, value);
-            } else if (parts.getElement(1).equals("listPatterns")) {
-                result = handleListPatterns(parts, value);
-            } else if (parts.getElement(2).equals("ellipsis")) {
-                result = handleEllipsis(parts.getAttributeValue(-1, "type"), value);
-            } else if (parts.getElement(-1).equals("monthPattern")) {
-                result = handleMonthPatterns(parts, value);
-            } else if (parts.getElement(-1).equals("appendItem")) {
-                result = handleAppendItems(parts, value);
-            } else if (parts.getElement(-1).equals("annotation")) {
-                result = handleAnnotationName(parts, value);
-            } else if (parts.getElement(-1).equals("characterLabel")) {
-                result = handleLabel(parts, value);
-            } else if (parts.getElement(-1).equals("characterLabelPattern")) {
-                result = handleLabelPattern(parts, value);
-            } else {
-                // didn't detect anything
-                result = null;
             }
-        } catch (NullPointerException e) {
-            if (SHOW_ERROR) {
-                e.printStackTrace();
+            ExampleCache.ExampleCacheItem cacheItem = exCache.new ExampleCacheItem(xpath, value);
+            result = cacheItem.getExample();
+            if (result != null) {
+                return result;
             }
-            result = null;
+            result = constructExampleHtml(xpath, value);
+            cacheItem.putExample(result);
         } catch (RuntimeException e) {
+            e.printStackTrace();
             String unchained = verboseErrors ? ("<br>" + finalizeBackground(unchainException(e))) : "";
             result = "<i>Parsing error. " + finalizeBackground(e.getMessage()) + "</i>" + unchained;
         }
+        return result;
+    }
 
+    /**
+     * Do the main work of getExampleHtml given that the result was not
+     * found in the cache.
+     *
+     * @param xpath the path; e.g., "//ldml/dates/timeZoneNames/fallbackFormat"
+     * @param value the value; e.g., "{1} [{0}]"; not necessarily the winning value
+     * @return the example HTML, or null
+     */
+    private String constructExampleHtml(String xpath, String value) {
+        String result = null;
+        /*
+         * Need getInstance, not getFrozenInstance here: some functions such as handleNumberSymbol
+         * expect to call functions like parts.addRelative which throw exceptions if parts is frozen.
+         */
+        XPathParts parts = XPathParts.getFrozenInstance(xpath).cloneAsThawed();
+        if (parts.contains("dateRangePattern")) { // {0} - {1}
+            result = handleDateRangePattern(value);
+        } else if (parts.contains("timeZoneNames")) {
+            result = handleTimeZoneName(parts, value);
+        } else if (parts.contains("localeDisplayNames")) {
+            result = handleDisplayNames(xpath, parts, value);
+        } else if (parts.contains("currency")) {
+            result = handleCurrency(xpath, parts, value);
+        } else if (parts.contains("dayPeriods")) {
+            result = handleDayPeriod(parts, value);
+        } else if (parts.contains("pattern") || parts.contains("dateFormatItem")) {
+            if (parts.contains("calendar")) {
+                result = handleDateFormatItem(xpath, value);
+            } else if (parts.contains("miscPatterns")) {
+                result = handleMiscPatterns(parts, value);
+            } else if (parts.contains("numbers")) {
+                if (parts.contains("currencyFormat")) {
+                    result = handleCurrencyFormat(parts, value);
+                } else {
+                    result = handleDecimalFormat(parts, value);
+                }
+            }
+        } else if (parts.getElement(2).contains("symbols")) {
+            result = handleNumberSymbol(parts, value);
+        } else if (parts.contains("defaultNumberingSystem") || parts.contains("otherNumberingSystems")) {
+            result = handleNumberingSystem(value);
+        } else if (parts.contains("currencyFormats") && parts.contains("unitPattern")) {
+            result = formatCountValue(xpath, parts, value);
+        } else if (parts.getElement(-1).equals("compoundUnitPattern")) {
+            result = handleCompoundUnit(parts);
+        } else if (parts.getElement(-1).equals("compoundUnitPattern1")
+            || parts.getElement(-1).equals("unitPrefixPattern")) {
+            result = handleCompoundUnit1(parts, value);
+        } else if (parts.getElement(-1).equals("unitPattern")) {
+            result = handleFormatUnit(parts, value);
+        } else if (parts.getElement(-1).equals("perUnitPattern")) {
+            result = handleFormatPerUnit(parts, value);
+        } else if (parts.getElement(-1).equals("durationUnitPattern")) {
+            result = handleDurationUnit(value);
+        } else if (parts.contains("intervalFormats")) {
+            result = handleIntervalFormats(parts, value);
+        } else if (parts.getElement(1).equals("delimiters")) {
+            result = handleDelimiters(parts, xpath, value);
+        } else if (parts.getElement(1).equals("listPatterns")) {
+            result = handleListPatterns(parts, value);
+        } else if (parts.getElement(2).equals("ellipsis")) {
+            result = handleEllipsis(parts.getAttributeValue(-1, "type"), value);
+        } else if (parts.getElement(-1).equals("monthPattern")) {
+            result = handleMonthPatterns(parts, value);
+        } else if (parts.getElement(-1).equals("appendItem")) {
+            result = handleAppendItems(parts, value);
+        } else if (parts.getElement(-1).equals("annotation")) {
+            result = handleAnnotationName(parts, value);
+        } else if (parts.getElement(-1).equals("characterLabel")) {
+            result = handleLabel(parts, value);
+        } else if (parts.getElement(-1).equals("characterLabelPattern")) {
+            result = handleLabelPattern(parts, value);
+        }
         if (result != null) {
-            // add transliteration if one exists
             if (!typeIsEnglish) {
                 result = addTransliteration(result, value);
             }
             result = finalizeBackground(result);
         }
-
-        if (cachingIsEnabled) {
-            if (result == null) {
-                cache.put(cacheKey, NONE);
-            } else {
-                cache.put(cacheKey, result);
-            }
-        }
         return result;
     }
 
@@ -721,10 +565,15 @@
         //ldml/dates/calendars/calendar[@type="gregorian"]/dayPeriods/dayPeriodContext[@type="stand-alone"]/dayPeriodWidth[@type="wide"]/dayPeriod[@type="morning1"]
         List<String> examples = new ArrayList<>();
         final String dayPeriodType = parts.getAttributeValue(5, "type");
+        if (dayPeriodType == null) {
+            return null; // formerly happened for some "/alias" paths
+        }
         org.unicode.cldr.util.DayPeriodInfo.Type aType = dayPeriodType.equals("format") ? DayPeriodInfo.Type.format : DayPeriodInfo.Type.selection;
         DayPeriodInfo dayPeriodInfo = supplementalDataInfo.getDayPeriods(aType, cldrFile.getLocaleID());
         String periodString = parts.getAttributeValue(-1, "type");
-
+        if (periodString == null) {
+            return null; // formerly happened for some "/alias" paths
+        }
         DayPeriod dayPeriod = DayPeriod.valueOf(periodString);
         String periods = dayPeriodInfo.toString(dayPeriod);
         examples.add(periods);
@@ -733,10 +582,11 @@
                 value = "�";
             }
             R3<Integer, Integer, Boolean> info = dayPeriodInfo.getFirstDayPeriodInfo(dayPeriod);
-            int time = (((info.get0() + info.get1()) % DayPeriodInfo.DAY_LIMIT) / 2);
-            //String calendar = parts.getAttributeValue(3, "type");
-            String timeFormatString = icuServiceBuilder.formatDayPeriod(time, backgroundStartSymbol + value + backgroundEndSymbol);
-            examples.add(invertBackground(timeFormatString));
+            if (info != null) {
+                int time = (((info.get0() + info.get1()) % DayPeriodInfo.DAY_LIMIT) / 2);
+                String timeFormatString = icuServiceBuilder.formatDayPeriod(time, backgroundStartSymbol + value + backgroundEndSymbol);
+                examples.add(invertBackground(timeFormatString));
+            }
         }
         return formatExampleList(examples.toArray(new String[examples.size()]));
     }
@@ -745,13 +595,39 @@
         return UnitLength.valueOf(parts.getAttributeValue(-3, "type").toUpperCase(Locale.ENGLISH));
     }
 
-    private String handleFormatUnit(Count count, String value) {
-        FixedDecimal amount = getBest(count);
-        if (amount == null) {
-            return "n/a";
+    private String handleFormatUnit(XPathParts parts, String value) {
+        String count = parts.getAttributeValue(-1, "count");
+        List<String> examples = new ArrayList<>();
+        /*
+         * PluralRules.FixedDecimal is deprecated, but deprecated in ICU is
+         * also used to mark internal methods (which are OK for us to use in CLDR).
+         */
+        @SuppressWarnings("deprecation")
+        FixedDecimal amount = getBest(Count.valueOf(count));
+        if (amount != null) {
+            DecimalFormat numberFormat = icuServiceBuilder.getNumberFormat(1);
+            examples.add(format(value, backgroundStartSymbol + numberFormat.format(amount) + backgroundEndSymbol));
         }
+        if (parts.getElement(-2).equals("unit")) {
+            String longUnitId = parts.getAttributeValue(-2, "type");
+            UnitConverter uc = supplementalDataInfo.getUnitConverter();
+            final String shortUnitId = uc.getShortId(longUnitId);
+            if (UnitConverter.HACK_SKIP_UNIT_NAMES.contains(shortUnitId)) {
+                return null;
+            }
+            final UnitId unitId = uc.createUnitId(shortUnitId);
+            String width = parts.getAttributeValue(2, "type");
+            String pattern = unitId.toString(getCldrFile(), width, count, "nominative", null, false);
+            if (pattern != null && !value.contentEquals(pattern)) {
+                examples.add(pattern);
+            }
+        }
+        return formatExampleList(examples);
+    }
+
+    private String handleFormatPerUnit(XPathParts parts, String value) {
         DecimalFormat numberFormat = icuServiceBuilder.getNumberFormat(1);
-        return format(value, backgroundStartSymbol + numberFormat.format(amount) + backgroundEndSymbol);
+        return format(value, backgroundStartSymbol + numberFormat.format(1) + backgroundEndSymbol);
     }
 
     public String handleCompoundUnit(XPathParts parts) {
@@ -761,6 +637,7 @@
         return handleCompoundUnit(unitLength, compoundType, count);
     }
 
+    @SuppressWarnings("deprecation")
     public String handleCompoundUnit(UnitLength unitLength, String compoundType, Count count) {
         /**
          *  <units>
@@ -807,13 +684,12 @@
         String unit1 = backgroundStartSymbol + unit1mid.trim() + backgroundEndSymbol;
         String unit2 = backgroundStartSymbol + unit2mid.trim() + backgroundEndSymbol;
 
-        // TODO fix hack
         String form = this.pluralInfo.getPluralRules().select(amount);
         // we rebuild a path, because we may have changed it.
         String perPath = makeCompoundUnitPath(unitLength, compoundType, "compoundUnitPattern");
         return format(getValueFromFormat(perPath, form), unit1, unit2);
     }
-    
+
     public String handleCompoundUnit1(XPathParts parts, String compoundPattern) {
         UnitLength unitLength = getUnitLength(parts);
         String pathCount = parts.getAttributeValue(-1, "count");
@@ -828,7 +704,7 @@
         String pathFormat = "//ldml/units/unitLength" + unitLength.typeString + "/unit[@type=\"{0}\"]/displayName";
 
         String meterFormat = getValueFromFormat(pathFormat, "length-meter");
-        
+
         String modFormat = combinePrefix(meterFormat, compoundPattern, unitLength == UnitLength.LONG);
 
         return removeEmptyRuns(modFormat);
@@ -837,21 +713,23 @@
     public String handleCompoundUnit1(UnitLength unitLength, Count count, String compoundPattern) {
 
         // we want to get a number that works for the count passed in.
+        @SuppressWarnings("deprecation")
         FixedDecimal amount = getBest(count);
         if (amount == null) {
             return "n/a";
         }
-        FixedDecimal oneValue = new FixedDecimal(1d, 0);
         DecimalFormat numberFormat = icuServiceBuilder.getNumberFormat(1);
+
+        @SuppressWarnings("deprecation")
         String form1 = this.pluralInfo.getPluralRules().select(amount);
-        
+
         String pathFormat = "//ldml/units/unitLength" + unitLength.typeString
             + "/unit[@type=\"{0}\"]/unitPattern[@count=\"{1}\"]";
-        
+
         // now pick up the meter pattern
 
         String meterFormat = getValueFromFormat(pathFormat, "length-meter", form1);
-        
+
         // now combine them
 
         String modFormat = combinePrefix(meterFormat, compoundPattern, unitLength == UnitLength.LONG);
@@ -860,7 +738,7 @@
     }
 
     // TODO, pass in unitLength instead of last parameter, and do work in Units.combinePattern.
-    
+
     public String combinePrefix(String unitFormat, String inCompoundPattern, boolean lowercaseUnitIfNoSpaceInCompound) {
         // mark the part except for the {0} as foreground
         String compoundPattern =  backgroundEndSymbol
@@ -868,7 +746,7 @@
             +   backgroundStartSymbol;
 
         String modFormat = Units.combinePattern(unitFormat, compoundPattern, lowercaseUnitIfNoSpaceInCompound);
-        
+
         return backgroundStartSymbol + modFormat + backgroundEndSymbol;
     }
 
@@ -879,6 +757,7 @@
             + "/" + patternType;
     }
 
+    @SuppressWarnings("deprecation")
     private FixedDecimal getBest(Count count) {
         FixedDecimalSamples samples = pluralInfo.getPluralRules().getDecimalSamples(count.name(), SampleType.DECIMAL);
         if (samples == null) {
@@ -903,9 +782,9 @@
         }
     }
 
-    IntervalFormat intervalFormat = new IntervalFormat();
+    private IntervalFormat intervalFormat = new IntervalFormat();
 
-    static Calendar generatingCalendar = Calendar.getInstance(ULocale.US);
+    private static Calendar generatingCalendar = Calendar.getInstance(ULocale.US);
 
     private static Date getDate(int year, int month, int date, int hour, int minute, int second) {
         synchronized (generatingCalendar) {
@@ -915,8 +794,9 @@
         }
     }
 
-    static Date FIRST_INTERVAL = getDate(2008, 1, 13, 5, 7, 9);
-    static Map<String, Date> SECOND_INTERVAL = CldrUtility.asMap(new Object[][] {
+    private static Date FIRST_INTERVAL = getDate(2008, 1, 13, 5, 7, 9);
+    private static Map<String, Date> SECOND_INTERVAL = CldrUtility.asMap(new Object[][] {
+        { "G", getDate(1009, 2, 14, 17, 8, 10) }, // "G" mostly useful for calendars that have short eras, like Japanese
         { "y", getDate(2009, 2, 14, 17, 8, 10) },
         { "M", getDate(2008, 2, 14, 17, 8, 10) },
         { "d", getDate(2008, 1, 14, 17, 8, 10) },
@@ -936,12 +816,32 @@
                 dateFormat.format(SECOND_INTERVAL.get("y")));
         }
         String greatestDifference = parts.getAttributeValue(-1, "id");
-        if (greatestDifference.equals("H")) greatestDifference = "h";
+        /*
+         * Choose an example interval suitable for the symbol. If testing years, use an interval
+         * of more than one year, and so forth. For the purpose of choosing the interval,
+         * "H" is equivalent to "h", and so forth; map to a symbol that occurs in SECOND_INTERVAL.
+         */
+        if (greatestDifference.equals("H")) { // Hour [0-23]
+            greatestDifference = "h"; // Hour [1-12]
+        } else if (greatestDifference.equals("B") // flexible day periods
+                || greatestDifference.equals("b")) { // am, pm, noon, midnight
+            greatestDifference = "a"; // AM, PM
+        }
         // intervalFormatFallback
         // //ldml/dates/calendars/calendar[@type="gregorian"]/dateTimeFormats/intervalFormats/intervalFormatItem[@id="yMd"]/greatestDifference[@id="y"]
         // find where to split the value
         intervalFormat.setPattern(parts, value);
-        return intervalFormat.format(FIRST_INTERVAL, SECOND_INTERVAL.get(greatestDifference));
+        Date later = SECOND_INTERVAL.get(greatestDifference);
+        if (later == null) {
+            /*
+             * This may still happen for some less-frequently used symbols such as "Q" (Quarter),
+             * if they ever occur in the data.
+             * Reference: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
+             * For now, such paths do not get examples.
+             */
+            return null;
+        }
+        return intervalFormat.format(FIRST_INTERVAL, later);
     }
 
     private String handleDelimiters(XPathParts parts, String xpath, String value) {
@@ -978,6 +878,9 @@
 
     private String handleRegularListPatterns(XPathParts parts, String value, ListTypeLength listTypeLength) {
         String patternType = parts.getAttributeValue(-1, "type");
+        if (patternType == null) {
+            return null; // formerly happened for some "/alias" paths
+        }
         String pathFormat = "//ldml/localeDisplayNames/territories/territory[@type=\"{0}\"]";
         String territory1 = getValueFromFormat(pathFormat, "CH");
         String territory2 = getValueFromFormat(pathFormat, "JP");
@@ -992,6 +895,9 @@
 
     private String handleDurationListPatterns(XPathParts parts, String value, UnitLength unitWidth) {
         String patternType = parts.getAttributeValue(-1, "type");
+        if (patternType == null) {
+            return null; // formerly happened for some "/alias" paths
+        }
         String duration1 = getFormattedUnit("duration-day", unitWidth, 4);
         String duration2 = getFormattedUnit("duration-hour", unitWidth, 2);
         if (patternType.equals("2")) {
@@ -1026,15 +932,18 @@
         }
     }
 
+    @SuppressWarnings("deprecation")
     private String getFormattedUnit(String unitType, UnitLength unitWidth, FixedDecimal unitAmount) {
         DecimalFormat numberFormat = icuServiceBuilder.getNumberFormat(1);
         return getFormattedUnit(unitType, unitWidth, unitAmount, numberFormat.format(unitAmount));
     }
 
+    @SuppressWarnings("deprecation")
     private String getFormattedUnit(String unitType, UnitLength unitWidth, double unitAmount) {
         return getFormattedUnit(unitType, unitWidth, new FixedDecimal(unitAmount));
     }
 
+    @SuppressWarnings("deprecation")
     private String getFormattedUnit(String unitType, UnitLength unitWidth, FixedDecimal unitAmount, String formattedUnitAmount) {
         String form = this.pluralInfo.getPluralRules().select(unitAmount);
         String pathFormat = "//ldml/units/unitLength" + unitWidth.typeString
@@ -1054,12 +963,16 @@
         String startPattern = getPattern(listPathFormat, "start", patternType, value);
         String middlePattern = getPattern(listPathFormat, "middle", patternType, value);
         String endPattern = getPattern(listPathFormat, "end", patternType, value);
+        /*
+         * DateTimePatternGenerator.FormatParser is deprecated, but deprecated in ICU is
+         * also used to mark internal methods (which are OK for us to use in CLDR).
+         */
+        @SuppressWarnings("deprecation")
         ListFormatter listFormatter = new ListFormatter(doublePattern, startPattern, middlePattern, endPattern);
-        String example = listFormatter.format(items);
+        String example = listFormatter.format((Object[]) items);
         return invertBackground(example);
     }
 
-
     /**
      * Helper method for handleListPatterns. Returns the pattern to be used for
      * a specified pattern type.
@@ -1143,7 +1056,8 @@
         return result;
     }
 
-    class IntervalFormat {
+    private class IntervalFormat {
+        @SuppressWarnings("deprecation")
         DateTimePatternGenerator.FormatParser formatParser = new DateTimePatternGenerator.FormatParser();
         SimpleDateFormat firstFormat = new SimpleDateFormat();
         SimpleDateFormat secondFormat = new SimpleDateFormat();
@@ -1152,11 +1066,36 @@
         BitSet letters = new BitSet();
 
         public String format(Date earlier, Date later) {
+            if (earlier == null || later == null) {
+                return null;
+            }
+            if (later.compareTo(earlier) < 0) {
+                /*
+                 * Swap so earlier is earlier than later.
+                 * This is necessary for "G" (Era) given the current FIRST_INTERVAL, SECOND_INTERVAL
+                 */
+                Date tmp = earlier;
+                earlier = later;
+                later = tmp;
+            }
             return firstFormat.format(earlier) + secondFormat.format(later);
         }
 
+        @SuppressWarnings("deprecation")
         public IntervalFormat setPattern(XPathParts parts, String pattern) {
-            formatParser.set(pattern);
+            if (formatParser == null || pattern == null) {
+                return this;
+            }
+            try {
+                formatParser.set(pattern);
+            } catch (NullPointerException e) {
+                /*
+                 * This has been observed to occur, within ICU, for unknown reasons.
+                 */
+                System.err.println("Caught NullPointerException in IntervalFormat.setPattern, pattern = " + pattern);
+                e.printStackTrace();
+                return null;
+            }
             first.setLength(0);
             second.setLength(0);
             boolean doFirst = true;
@@ -1194,14 +1133,18 @@
     }
 
     private String handleDurationUnit(String value) {
-        //            ULocale locale = new ULocale(this.icuServiceBuilder.getCldrFile().getLocaleID());
-        //            SimpleDateFormat df = new SimpleDateFormat(value.replace('h', 'H'), locale);
         DateFormat df = this.icuServiceBuilder.getDateFormat("gregorian", value.replace('h', 'H'));
         df.setTimeZone(TimeZone.GMT_ZONE);
         long time = ((5 * 60 + 37) * 60 + 23) * 1000;
-        return df.format(new Date(time));
+        try {
+            return df.format(new Date(time));
+        } catch (IllegalArgumentException e) {
+            // e.g., Illegal pattern character 'o' in "aɖabaƒoƒo m:ss"
+            return null;
+        }
     }
 
+    @SuppressWarnings("deprecation")
     static final List<FixedDecimal> CURRENCY_SAMPLES = Arrays.asList(
         new FixedDecimal(1.23),
         new FixedDecimal(0),
@@ -1210,6 +1153,7 @@
         new FixedDecimal(5.67),
         new FixedDecimal(1));
 
+    @SuppressWarnings("deprecation")
     private String formatCountValue(String xpath, XPathParts parts, String value) {
         if (!parts.containsAttribute("count")) { // no examples for items that don't format
             return null;
@@ -1225,7 +1169,7 @@
         final boolean isCurrency = !parts.contains("units");
 
         Count count = null;
-        final LinkedHashSet<FixedDecimal> exampleCount = new LinkedHashSet();
+        final LinkedHashSet<FixedDecimal> exampleCount = new LinkedHashSet<>();
         exampleCount.addAll(CURRENCY_SAMPLES);
         String countString = parts.getAttributeValue(-1, "count");
         if (countString == null) {
@@ -1248,7 +1192,7 @@
         int decimalCount = currencyFormat.getMinimumFractionDigits();
 
         // we will cycle until we have (at most) two examples.
-        Set<FixedDecimal> examplesSeen = new HashSet<FixedDecimal>();
+        Set<FixedDecimal> examplesSeen = new HashSet<>();
         int maxCount = 2;
         main:
             // If we are a currency, we will try to see if we can set the decimals to match.
@@ -1301,6 +1245,7 @@
         return result.isEmpty() ? null : result;
     }
 
+    @SuppressWarnings("deprecation")
     static public void getStartEndSamples(PluralRules.FixedDecimalSamples samples, Set<FixedDecimal> target) {
         if (samples != null) {
             for (FixedDecimalRange item : samples.getSamples()) {
@@ -1310,6 +1255,7 @@
         }
     }
 
+    @SuppressWarnings("deprecation")
     private String formatCurrency(String value, String unitType, final boolean isPattern, final boolean isCurrency, Count count,
         FixedDecimal example) {
         String resultItem;
@@ -1363,21 +1309,19 @@
     }
 
     private String getUnitPattern(String unitType, final boolean isCurrency, Count count) {
-        String unitPattern;
-        String unitPatternPath = cldrFile.getCountPathWithFallback(isCurrency
-            ? "//ldml/numbers/currencyFormats/unitPattern"
-                : "//ldml/units/unit[@type=\"" + unitType + "\"]/unitPattern",
-                count, true);
-        unitPattern = cldrFile.getWinningValue(unitPatternPath);
-        return unitPattern;
+        return cldrFile.getStringValue(isCurrency
+            ? "//ldml/numbers/currencyFormats/unitPattern"  + countAttribute(count)
+                : "//ldml/units/unit[@type=\"" + unitType + "\"]/unitPattern" + countAttribute(count));
     }
 
     private String getUnitName(String unitType, final boolean isCurrency, Count count) {
-        String unitNamePath = cldrFile.getCountPathWithFallback(isCurrency
-            ? "//ldml/numbers/currencies/currency[@type=\"" + unitType + "\"]/displayName"
-                : "//ldml/units/unit[@type=\"" + unitType + "\"]/unitPattern",
-                count, true);
-        return unitNamePath == null ? unitType : cldrFile.getWinningValue(unitNamePath);
+        return cldrFile.getStringValue(isCurrency
+            ? "//ldml/numbers/currencies/currency[@type=\"" + unitType + "\"]/displayName" + countAttribute(count)
+                : "//ldml/units/unit[@type=\"" + unitType + "\"]/unitPattern" + countAttribute(count));
+    }
+
+    public String countAttribute(Count count) {
+        return "[@count=\"" + count + "\"]";
     }
 
     private String handleNumberSymbol(XPathParts parts, String value) {
@@ -1401,6 +1345,11 @@
             index = 2;
             numberSample = 0.023;
             originalValue = cldrFile.getWinningValue(parts.addRelative("../percentSign").toString());
+        } else if (symbolType.equals("approximatelySign")) {
+            // Substitute the approximately symbol in for the minus sign.
+            index = 1;
+            numberSample = -numberSample;
+            originalValue = cldrFile.getWinningValue(parts.addRelative("../minusSign").toString());
         } else if (symbolType.equals("exponential") || symbolType.equals("plusSign")) {
             index = 3;
         } else if (symbolType.equals("superscriptingExponent")) {
@@ -1551,6 +1500,7 @@
         return result;
     }
 
+    @SuppressWarnings("deprecation")
     private String handleDateFormatItem(String xpath, String value) {
 
         String fullpath = cldrFile.getFullXPath(xpath);
@@ -1591,7 +1541,7 @@
                 if (id == null || id.indexOf('B') < 0) {
                     return sdf.format(DATE_SAMPLE);
                 } else {
-                    List<String> examples = new ArrayList<String>();
+                    List<String> examples = new ArrayList<>();
                     examples.add(sdf.format(DATE_SAMPLE3));
                     examples.add(sdf.format(DATE_SAMPLE));
                     examples.add(sdf.format(DATE_SAMPLE4));
@@ -1639,9 +1589,11 @@
             territory = loc.getCountry();
             if (territory == null || territory.length() == 0) {
                 loc = supplementalDataInfo.getDefaultContentFromBase(loc);
-                territory = loc.getCountry();
-                if (territory.equals("001") && loc.getLanguage().equals("ar")) {
-                    territory = "EG"; // Use Egypt as territory for examples in ar locale, since its default content is ar_001.
+                if (loc != null) {
+                    territory = loc.getCountry();
+                    if (territory.equals("001") && loc.getLanguage().equals("ar")) {
+                        territory = "EG"; // Use Egypt as territory for examples in ar locale, since its default content is ar_001.
+                    }
                 }
             }
             if (territory == null || territory.length() == 0) {
@@ -1678,7 +1630,14 @@
     }
 
     private String formatCountDecimal(DecimalFormat numberFormat, String countValue) {
-        Count count = Count.valueOf(countValue);
+        Count count;
+        try {
+            count = Count.valueOf(countValue);
+        } catch (Exception e) {
+            String locale = getCldrFile().getLocaleID();
+            PluralInfo pluralInfo = supplementalDataInfo.getPlurals(locale);
+            count = pluralInfo.getCount(new FixedDecimal(countValue));
+        }
         Double numberSample = getExampleForPattern(numberFormat, count);
         if (numberSample == null) {
             // Ideally, we would suppress the value in the survey tool.
@@ -1704,7 +1663,7 @@
 
     /**
      * Calculates a numerical example to use for the specified pattern using
-     * brute force (TODO: there should be a more elegant way to do this).
+     * brute force (there should be a more elegant way to do this).
      *
      * @param format
      * @param count
@@ -1716,26 +1675,9 @@
         }
         int numDigits = format.getMinimumIntegerDigits();
         Map<Count, Double> samples = patternExamples.getSamples(numDigits);
-        //        int min = (int) Math.pow(10, numDigits - 1);
-        //        int max = min * 10;
-        //        Map<Count, Integer> examples = patternExamples.get(numDigits);
-        //        if (examples == null) {
-        //            patternExamples.put(numDigits, examples = new HashMap<Count, Integer>());
-        //            Set<Count> typesLeft = new HashSet<Count>(pluralInfo.getCountToExamplesMap().keySet());
-        //            // Add at most one example of each type.
-        //            for (int i = min; i < max; ++i) {
-        //                if (typesLeft.isEmpty()) break;
-        //                Count type = Count.valueOf(pluralInfo.getPluralRules().select(i));
-        //                if (!typesLeft.contains(type)) continue;
-        //                examples.put(type, i);
-        //                typesLeft.remove(type);
-        //            }
-        //            // Add zero as an example only if there is no other option.
-        //            if (min == 1) {
-        //                Count type = Count.valueOf(pluralInfo.getPluralRules().select(0));
-        //                if (!examples.containsKey(type)) examples.put(type, 0);
-        //            }
-        //        }
+        if (samples == null) {
+            return null;
+        }
         return samples.get(count);
     }
 
@@ -1802,7 +1744,7 @@
             String localePattern = getLocaleDisplayPattern("localePattern", element, value);
             String localeSeparator = getLocaleDisplayPattern("localeSeparator", element, value);
 
-            List<String> locales = new ArrayList<String>();
+            List<String> locales = new ArrayList<>();
             if (element.equals("localePattern")) {
                 locales.add("uz-AF");
             }
@@ -1827,7 +1769,7 @@
                 }
             } else {
                 value = setBackground(value);
-                List<String> examples = new ArrayList<String>();
+                List<String> examples = new ArrayList<>();
                 String nameType = parts.getElement(3);
 
                 Map<String, String> likely = supplementalDataInfo.getLikelySubtags();
@@ -1894,7 +1836,7 @@
                     examples.add(invertBackground(format(localePattern, languageName, scriptTerritory)));
                 }
                 Output<String> pathWhereFound = null;
-                if (isStandAloneValue 
+                if (isStandAloneValue
                     || cldrFile.getStringValueWithBailey(xpath + ALT_STAND_ALONE, pathWhereFound = new Output<>(), null) == null
                     || !pathWhereFound.value.contains(ALT_STAND_ALONE)) {
                     // only do this if either it is a stand-alone form,
@@ -1962,6 +1904,9 @@
      * @return
      */
     private String setBackground(String inputPattern) {
+        if (inputPattern == null) {
+            return "?";
+        }
         Matcher m = PARAMETER.matcher(inputPattern);
         return backgroundStartSymbol + m.replaceAll(backgroundEndSymbol + "$1" + backgroundStartSymbol)
         + backgroundEndSymbol;
@@ -1970,9 +1915,7 @@
     /**
      * Put a background on an item, skipping enclosed patterns, except for {0}
      * @param patternToEmbed
-     *            TODO
      * @param sampleTerritory
-     *
      * @return
      */
     private String setBackgroundExceptMatch(String input, Pattern patternToEmbed) {
@@ -2030,10 +1973,8 @@
     /**
      * This is called just before we return a result. It fixes the special characters that were added by setBackground.
      *
-     * @param input
-     *            string with special characters from setBackground.
+     * @param input string with special characters from setBackground.
      * @param invert
-     *            TODO
      * @return string with HTML for the background.
      */
     private String finalizeBackground(String input) {
@@ -2056,11 +1997,11 @@
     }
 
     private String invertBackground(String input) {
-        return input == null ? null 
-            : backgroundStartSymbol 
+        return input == null ? null
+            : backgroundStartSymbol
             + input.replace(backgroundStartSymbol, backgroundTempSymbol)
             .replace(backgroundEndSymbol, backgroundStartSymbol)
-            .replace(backgroundTempSymbol, backgroundEndSymbol) 
+            .replace(backgroundTempSymbol, backgroundEndSymbol)
             + backgroundEndSymbol;
     }
 
@@ -2069,8 +2010,8 @@
             .replace(backgroundEndSymbol + backgroundStartSymbol, "");
     }
 
-    public static final Pattern PARAMETER = PatternCache.get("(\\{[0-9]\\})");
-    public static final Pattern PARAMETER_SKIP0 = PatternCache.get("(\\{[1-9]\\})");
+    public static final Pattern PARAMETER = PatternCache.get("(\\{(?:0|[1-9][0-9]*)\\})");
+    public static final Pattern PARAMETER_SKIP0 = PatternCache.get("(\\{[1-9][0-9]*\\})");
     public static final Pattern ALL_DIGITS = PatternCache.get("(\\p{Nd}+(.\\p{Nd}+)?)");
 
     /**
@@ -2146,14 +2087,12 @@
         // lazy initialization
 
         if (pathDescription == null) {
-            Map<String, List<Set<String>>> starredPaths = new HashMap<String, List<Set<String>>>();
-            Map<String, String> extras = new HashMap<String, String>();
+            Map<String, List<Set<String>>> starredPaths = new HashMap<>();
+            Map<String, String> extras = new HashMap<>();
 
             this.pathDescription = new PathDescription(supplementalDataInfo, englishFile, extras, starredPaths,
                 PathDescription.ErrorHandling.CONTINUE);
 
-            this.pathDescription = new PathDescription(supplementalDataInfo, englishFile, extras, starredPaths,
-                PathDescription.ErrorHandling.CONTINUE);
             if (helpMessages == null) {
                 helpMessages = new HelpMessages("test_help_messages.html");
             }
@@ -2193,13 +2132,6 @@
         }
 
         return buffer.toString();
-        // return helpMessages.find(xpath);
-        // if (xpath.contains("/exemplarCharacters")) {
-        // result = "The standard exemplar characters are those used in customary writing ([a-z] for English; "
-        // + "the auxiliary characters are used in foreign words found in typical magazines, newspapers, &c.; "
-        // + "currency auxilliary characters are those used in currency symbols, like 'US$ 1,234'. ";
-        // }
-        // return result == null ? null : TransliteratorUtilities.toHTML.transliterate(result);
     }
 
     public synchronized String getHelpHtml(String xpath, String value) {
diff --git a/tools/java/org/unicode/cldr/test/FactoryCheckCLDR.java b/tools/java/org/unicode/cldr/test/FactoryCheckCLDR.java
index 205e752..5159db4 100644
--- a/tools/java/org/unicode/cldr/test/FactoryCheckCLDR.java
+++ b/tools/java/org/unicode/cldr/test/FactoryCheckCLDR.java
@@ -17,6 +17,7 @@
     private CLDRFile resolvedCldrFileToCheck;
     private PathHeader.Factory pathHeaderFactory;
 
+    @Override
     public synchronized CLDRFile getEnglishFile() {
         if (super.getEnglishFile() != null) {
             return super.getEnglishFile();
@@ -58,7 +59,7 @@
     public Factory getFactory() {
         return factory;
     }
-    
+
     public String getPathReferenceForMessage(String path, boolean codeOnly) {
         PathHeader pathHeader = getPathHeaderFactory().fromPath(path);
         String referenceToOther;
diff --git a/tools/java/org/unicode/cldr/test/FlexibleDateFromCLDR.java b/tools/java/org/unicode/cldr/test/FlexibleDateFromCLDR.java
index 4cbc15d..09e749c 100644
--- a/tools/java/org/unicode/cldr/test/FlexibleDateFromCLDR.java
+++ b/tools/java/org/unicode/cldr/test/FlexibleDateFromCLDR.java
@@ -130,7 +130,7 @@
         System.out.println("END");
     }
 
-    Map<String, String> failureMap = new TreeMap<String, String>();
+    Map<String, String> failureMap = new TreeMap<>();
 
     /**
      * @param path
diff --git a/tools/java/org/unicode/cldr/test/FlexibleDateTime.java b/tools/java/org/unicode/cldr/test/FlexibleDateTime.java
index 8b65c23..620bf13 100644
--- a/tools/java/org/unicode/cldr/test/FlexibleDateTime.java
+++ b/tools/java/org/unicode/cldr/test/FlexibleDateTime.java
@@ -81,20 +81,20 @@
 
     static class LocaleIDFixer {
         LocaleIDParser lip = new LocaleIDParser();
-        static final Set<String> mainLocales = new HashSet<String>(
+        static final Set<String> mainLocales = new HashSet<>(
             Arrays.asList(new String[] { "ar_EG", "bn_IN", "de_DE", "en_US", "es_ES", "fr_FR", "it_IT", "nl_NL", "pt_BR", "sv_SE", "zh_TW" }));
         DeprecatedCodeFixer dcf = new DeprecatedCodeFixer();
 
         Map<String, String> fixLocales(Collection<String> available, Map<String, String> result) {
             // find the multi-country locales
-            Map<String, Set<String>> language_locales = new HashMap<String, Set<String>>();
+            Map<String, Set<String>> language_locales = new HashMap<>();
             for (String locale : available) {
                 String fixedLocale = dcf.fixLocale(locale);
                 result.put(locale, fixedLocale);
                 String language = lip.set(fixedLocale).getLanguageScript();
                 Set<String> locales = language_locales.get(language);
                 if (locales == null) {
-                    language_locales.put(language, locales = new HashSet<String>());
+                    language_locales.put(language, locales = new HashSet<>());
                 }
                 locales.add(locale);
             }
@@ -106,7 +106,7 @@
                     result.put(locales.iterator().next(), language);
                     continue;
                 }
-                Set<String> intersect = new HashSet<String>(mainLocales);
+                Set<String> intersect = new HashSet<>(mainLocales);
                 intersect.retainAll(locales);
                 if (intersect.size() == 1) {
                     // the intersection is the parent, so overwrite it
@@ -124,8 +124,8 @@
     }
 
     static class DeprecatedCodeFixer {
-        Map<String, String> languageAlias = new HashMap<String, String>();
-        Map<String, String> territoryAlias = new HashMap<String, String>();
+        Map<String, String> languageAlias = new HashMap<>();
+        Map<String, String> territoryAlias = new HashMap<>();
         {
             Factory cldrFactory = Factory.make(CLDRPaths.MAIN_DIRECTORY, ".*");
             CLDRFile supp = cldrFactory.make(CLDRFile.SUPPLEMENTAL_NAME, false);
@@ -139,7 +139,7 @@
                 } else if (parts.getElement(3).equals("territoryAlias")) {
                     territoryAlias.put(type, replacement);
                 } else {
-                    throw new IllegalArgumentException("Unexpected type: " + path);                    
+                    throw new IllegalArgumentException("Unexpected type: " + path);
                 }
             }
             // special hack for OpenOffice
@@ -151,7 +151,7 @@
         String fixLocale(String locale) {
             lip.set(locale);
             String territory = lip.getRegion();
-            String replacement = (String) territoryAlias.get(territory);
+            String replacement = territoryAlias.get(territory);
             if (replacement != null) {
                 lip.setRegion(replacement);
             }
@@ -349,6 +349,7 @@
     static Date TEST_DATE = new Date(104, 8, 13, 23, 58, 59);
 
     static Comparator<Collection<String>> VariableFieldComparator = new Comparator<Collection<String>>() {
+        @Override
         public int compare(Collection<String> a, Collection<String> b) {
             if (a.size() != b.size()) {
                 if (a.size() < b.size()) return 1;
@@ -369,7 +370,7 @@
         "[A a c D d E e F G g h H K k L m M q Q s S u v W w Y y z Z]");
 
     static Collection<String> getOOData(Factory cldrFactory, String locale) {
-        List<String> result = new ArrayList<String>();
+        List<String> result = new ArrayList<>();
         OOConverter ooConverter = new OOConverter();
         {
             if (SHOW_OO) {
diff --git a/tools/java/org/unicode/cldr/test/HelpMessages.java b/tools/java/org/unicode/cldr/test/HelpMessages.java
index 735e2ee..adca8ed 100644
--- a/tools/java/org/unicode/cldr/test/HelpMessages.java
+++ b/tools/java/org/unicode/cldr/test/HelpMessages.java
@@ -26,13 +26,13 @@
 
     private static final Matcher HEADER_HTML = PatternCache.get("<h[0-9]>(.*)</h[0-9]>").matcher("");
 
-    List<Matcher> keys = new ArrayList<Matcher>();
+    List<Matcher> keys = new ArrayList<>();
 
-    List<String> values = new ArrayList<String>();
+    List<String> values = new ArrayList<>();
 
     enum Status {
         BASE, BEFORE_CELL, IN_CELL, IN_INSIDE_TABLE
-    };
+    }
 
     StringBuilder[] currentColumn = new StringBuilder[2];
 
diff --git a/tools/java/org/unicode/cldr/test/OutdatedPaths.java b/tools/java/org/unicode/cldr/test/OutdatedPaths.java
index 1a63d42..065e238 100644
--- a/tools/java/org/unicode/cldr/test/OutdatedPaths.java
+++ b/tools/java/org/unicode/cldr/test/OutdatedPaths.java
@@ -70,8 +70,8 @@
      * @param directory
      */
     public OutdatedPaths(String directory) {
-        Map<Long, PathHeader> id2header = new HashMap<Long, PathHeader>(); // for debugging
-        
+        Map<Long, PathHeader> id2header = new HashMap<>(); // for debugging
+
         readLocaleToPaths(directory, id2header);
 
         // now previous English
@@ -98,7 +98,7 @@
                 if (DEBUG) {
                     System.out.println("OutdatedPaths: Locale: " + locale);
                 }
-                final HashSet<Long> data = new HashSet<Long>();
+                final HashSet<Long> data = new HashSet<>();
                 int size = dataIn.readInt();
                 for (int i = 0; i < size; ++i) {
                     long item = dataIn.readLong();
@@ -115,7 +115,7 @@
         }
     }
 
-    public static void readBirthValues(String outdatedDirectory, Map<Long, PathHeader> id2header, 
+    public static void readBirthValues(String outdatedDirectory, Map<Long, PathHeader> id2header,
         Map<Long, Pair<CldrVersion, String>> pathToBirthNPrevious2) {
         try {
             DataInputStream dataIn = openDataInput(outdatedDirectory, OUTDATED_ENGLISH_DATA);
@@ -134,7 +134,7 @@
                 CldrVersion birth = CldrVersion.from(dataIn.readUTF());
 
                 if (DEBUG) {
-                    System.out.println("en\t(" + previous + ")" 
+                    System.out.println("en\t(" + previous + ")"
                         + (id2header == null ? "" : "\t" + id2header.get(pathId)));
                 }
                 pathToBirthNPrevious2.put(pathId, Pair.of(birth,previous).freeze());
@@ -150,7 +150,7 @@
     }
 
     public Map<Long, PathHeader> getIdToPath(Factory factory) {
-        Map<Long, PathHeader> result = new HashMap<Long, PathHeader>();
+        Map<Long, PathHeader> result = new HashMap<>();
         CLDRFile english = factory.make("en", true);
         PathHeader.Factory pathHeaders = PathHeader.getFactory(english);
         for (String s : english) {
@@ -268,10 +268,10 @@
         OutdatedPaths outdatedPaths = SINGLETON.get();
         if (outdatedPaths == null) {
             outdatedPaths = new OutdatedPaths();
-            SINGLETON = new SoftReference<OutdatedPaths>(outdatedPaths);
+            SINGLETON = new SoftReference<>(outdatedPaths);
         }
         return outdatedPaths;
     }
 
-    private static Reference<OutdatedPaths> SINGLETON = new SoftReference<OutdatedPaths>(null);
+    private static Reference<OutdatedPaths> SINGLETON = new SoftReference<>(null);
 }
diff --git a/tools/java/org/unicode/cldr/test/QuickCheck.java b/tools/java/org/unicode/cldr/test/QuickCheck.java
index e83fc20..002ff3f 100644
--- a/tools/java/org/unicode/cldr/test/QuickCheck.java
+++ b/tools/java/org/unicode/cldr/test/QuickCheck.java
@@ -26,6 +26,7 @@
 import org.unicode.cldr.util.LanguageTagParser;
 import org.unicode.cldr.util.Level;
 import org.unicode.cldr.util.Organization;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.PatternCache;
 import org.unicode.cldr.util.PrettyPath;
 import org.unicode.cldr.util.StandardCodes;
@@ -49,7 +50,7 @@
  * @author markdavis
  */
 public class QuickCheck {
-    private static final Set<String> skipAttributes = new HashSet<String>(Arrays.asList(new String[] {
+    private static final Set<String> skipAttributes = new HashSet<>(Arrays.asList(new String[] {
         "alt", "draft", "references" }));
 
     private static String localeRegex;
@@ -117,11 +118,11 @@
     private static void checkDtds(String directory) throws IOException {
         File directoryFile = new File(directory);
         File[] listFiles = directoryFile.listFiles();
-        String canonicalPath = directoryFile.getCanonicalPath();
+        String normalizedPath = PathUtilities.getNormalizedPathString(directoryFile);
         if (listFiles == null) {
-            throw new IllegalArgumentException("Empty directory: " + canonicalPath);
+            throw new IllegalArgumentException("Empty directory: " + normalizedPath);
         }
-        System.out.println("Checking files for DTD errors in: " + canonicalPath);
+        System.out.println("Checking files for DTD errors in: " + normalizedPath);
         for (File fileName : listFiles) {
             if (!fileName.toString().endsWith(".xml")) {
                 continue;
@@ -131,16 +132,19 @@
     }
 
     static class MyErrorHandler implements ErrorHandler {
+        @Override
         public void error(SAXParseException exception) throws SAXException {
             System.out.println("\nerror: " + XMLFileReader.showSAX(exception));
             throw exception;
         }
 
+        @Override
         public void fatalError(SAXParseException exception) throws SAXException {
             System.out.println("\nfatalError: " + XMLFileReader.showSAX(exception));
             throw exception;
         }
 
+        @Override
         public void warning(SAXParseException exception) throws SAXException {
             System.out.println("\nwarning: " + XMLFileReader.showSAX(exception));
             throw exception;
@@ -276,7 +280,7 @@
                     + CldrUtility.LINE_SEPARATOR);
             }
             PrettyPath prettyPath = new PrettyPath().setShowErrors(true);
-            Set<String> badPaths = new TreeSet<String>();
+            Set<String> badPaths = new TreeSet<>();
             for (String path : pathToLocale.keySet()) {
                 String prettied = prettyPath.getPrettyPath(path, false);
                 if (showInfo) System.out.println(prettied + "\t\t" + path);
@@ -368,4 +372,4 @@
         return areSame ? 0 : 1;
     }
 
-}
\ No newline at end of file
+}
diff --git a/tools/java/org/unicode/cldr/test/SubmissionLocales.java b/tools/java/org/unicode/cldr/test/SubmissionLocales.java
index c0256df..a4f991a 100644
--- a/tools/java/org/unicode/cldr/test/SubmissionLocales.java
+++ b/tools/java/org/unicode/cldr/test/SubmissionLocales.java
@@ -17,21 +17,21 @@
         "mni",  // Manipuri (Bengali script)-Apple as well
         "sat",  // Santali -(Apple use Olck script)
         "kok",  // Konkani -(Note: this is already covered by a MS vetter at Modern level)
-        "sd_Deva",   // Sindhi (Devanagari) 
+        "sd_Deva",   // Sindhi (Devanagari)
         "su",   // Sundanese (script TBD)
-        "cad",  // Caddo
-        "pcm",  // Nigerian Pidgin
-        "gn"    // Guarani
+        "pcm"  // Nigerian Pidgin
+//        "cad",  // Caddo
+//        "gn"    // Guarani
         );
-    
+
     public static Set<String> HIGH_LEVEL_LOCALES = ImmutableSet.of(
         "chr",  // Cherokee
         "gd",   // Scottish Gaelic, Gaelic
         "fo"    // Faroese
         );
-    
+
     // have to have a lazy eval because otherwise CLDRConfig is called too early in the boot process
-    static Set<String> CLDR_LOCALES = ImmutableSet.<String>builder()
+    public static Set<String> CLDR_LOCALES = ImmutableSet.<String>builder()
         .addAll(HIGH_LEVEL_LOCALES)
         .addAll(NEW_CLDR_LOCALES)
         .addAll(StandardCodes.make().getLocaleToLevel(Organization.cldr).keySet()).build();
@@ -44,10 +44,10 @@
 //                }
 //            }
 
-    public static final Pattern ALLOWED_IN_LIMITED_PATHS = 
+    public static final Pattern ALLOWED_IN_LIMITED_PATHS =
     Pattern.compile("//ldml/annotations/annotation.*[🤵👰⬆➡⬇⬅♾✖➕➖➗]");
 
-    
+
     /* Example of special paths
      * Pattern.compile(
         "//ldml/"
@@ -64,7 +64,7 @@
             + ")"
             );
             */
-    
+
 //ldml/dates/timeZoneNames/metazone[@type="Macau"]/long/daylight, old: Macau Summer Time, new: Macao Summer Time
 //ldml/dates/timeZoneNames/metazone[@type="Macau"]/long/standard, old: Macau Standard Time, new: Macao Standard Time
 //ldml/localeDisplayNames/territories/territory[@type="SZ"][@alt="variant"], old: SZ, new: Swaziland
@@ -86,7 +86,7 @@
         // don't limit new locales or errors
 
         if (SubmissionLocales.NEW_CLDR_LOCALES.contains(localeString) || isError) {
-            return true; 
+            return true;
         } else {
             int debug = 0; // for debugging
         }
diff --git a/tools/java/org/unicode/cldr/test/TestCLDRTests.java b/tools/java/org/unicode/cldr/test/TestCLDRTests.java
index e3d1268..c03ac10 100644
--- a/tools/java/org/unicode/cldr/test/TestCLDRTests.java
+++ b/tools/java/org/unicode/cldr/test/TestCLDRTests.java
@@ -53,7 +53,7 @@
     Locale oLocale = Locale.ENGLISH; // TODO Drop once ICU4J has ULocale everywhere
     PrintWriter log;
     SAXParser SAX;
-    TreeMap<String, MutableInteger> results = new TreeMap<String, MutableInteger>();
+    TreeMap<String, MutableInteger> results = new TreeMap<>();
 
     public static void main(String[] args) throws Exception {
         double deltaTime = System.currentTimeMillis();
@@ -84,6 +84,7 @@
         languagesToTest = (Set<String>) new CldrUtility.CollectionTransform() {
             LocaleIDParser lip = new LocaleIDParser();
 
+            @Override
             public Object transform(Object source) {
                 return lip.set(source.toString()).getLanguageScript();
             }
@@ -118,7 +119,7 @@
     // ============ SAX Handler Infrastructure ============
 
     abstract public class Handler {
-        Map<String, String> settings = new TreeMap<String, String>();
+        Map<String, String> settings = new TreeMap<>();
         String name;
         String attributes;
 
@@ -169,6 +170,7 @@
     static class MutableInteger {
         int value;
 
+        @Override
         public String toString() {
             return String.valueOf(value);
         }
@@ -194,7 +196,7 @@
         RegisteredHandlers.put(name, handler);
     }
 
-    Map<String, Handler> RegisteredHandlers = new HashMap<String, Handler>();
+    Map<String, Handler> RegisteredHandlers = new HashMap<>();
 
     // ============ Statics for Date/Number Support ============
 
@@ -211,6 +213,7 @@
     // ============ Handler for Collation ============
     {
         addHandler("collation", new Handler() {
+            @Override
             public void handleResult(String value) {
                 Collator col = Collator.getInstance(uLocale.toLocale());
                 boolean showedAttributes = false;
@@ -239,6 +242,7 @@
 
         // ============ Handler for Numbers ============
         addHandler("number", new Handler() {
+            @Override
             public void handleResult(String result) {
                 NumberFormat nf = null;
                 double v = Double.NaN;
@@ -281,6 +285,7 @@
 
         // ============ Handler for Dates ============
         addHandler("date", new Handler() {
+            @Override
             public void handleResult(String result) throws ParseException {
                 int dateFormat = DateFormat.DEFAULT;
                 int timeFormat = DateFormat.DEFAULT;
@@ -333,6 +338,7 @@
         StringBuffer lastChars = new StringBuffer();
         Handler handler;
 
+        @Override
         public void startElement(
             String uri,
             String localName,
@@ -360,6 +366,7 @@
             }
         }
 
+        @Override
         public void endElement(String uri, String localName, String qName)
             throws SAXException {
             try {
@@ -377,6 +384,7 @@
         }
 
         // Have to hack around the fact that the character data might be in pieces
+        @Override
         public void characters(char[] ch, int start, int length)
             throws SAXException {
             try {
@@ -391,6 +399,7 @@
 
         // just for debugging
 
+        @Override
         public void notationDecl(String name, String publicId, String systemId)
             throws SAXException {
             System.out.println("notationDecl: " + name
@@ -398,16 +407,19 @@
                 + ", " + systemId);
         }
 
+        @Override
         public void processingInstruction(String target, String data)
             throws SAXException {
             System.out.println("processingInstruction: " + target + ", " + data);
         }
 
+        @Override
         public void skippedEntity(String name)
             throws SAXException {
             System.out.println("skippedEntity: " + name);
         }
 
+        @Override
         public void unparsedEntityDecl(String name, String publicId,
             String systemId, String notationName)
             throws SAXException {
diff --git a/tools/java/org/unicode/cldr/test/TestCache.java b/tools/java/org/unicode/cldr/test/TestCache.java
index c4cbe5d..3f874de 100644
--- a/tools/java/org/unicode/cldr/test/TestCache.java
+++ b/tools/java/org/unicode/cldr/test/TestCache.java
@@ -32,11 +32,11 @@
         final CLDRFile file;
         final private CheckCLDR.Options options;
         final private ConcurrentHashMap<Pair<String, String>, List<CheckStatus>> pathCache;
-        final protected List<CheckStatus> possibleProblems = new ArrayList<CheckStatus>();
-        
+        final protected List<CheckStatus> possibleProblems = new ArrayList<>();
+
         protected TestResultBundle(CheckCLDR.Options cldrOptions) {
             options = cldrOptions;
-            pathCache = new ConcurrentHashMap<Pair<String, String>, List<CheckStatus>>();
+            pathCache = new ConcurrentHashMap<>();
             file = getFactory().make(options.getLocale().getBaseName(), true);
             cc.setCldrFileToCheck(file, options, possibleProblems);
         }
@@ -44,7 +44,7 @@
         /**
          * Check the given value for the given path, using this TestResultBundle for
          * options, pathCache and cc (CheckCLDR).
-         * 
+         *
          * @param path the path
          * @param result the list to which CheckStatus objects may be added; this function
          *               clears any objects that might already be in it
@@ -58,7 +58,7 @@
               * currently redundant here. Clear it here unconditionally to be sure.
               */
              result.clear();
-             Pair<String, String> key = new Pair<String, String>(path, value);
+             Pair<String, String> key = new Pair<>(path, value);
              List<CheckStatus> cachedResult = pathCache.get(key);
              if (cachedResult != null) {
                  result.addAll(cachedResult);
@@ -133,7 +133,7 @@
 
     /**
      * Convert this TestCache to a string
-     * 
+     *
      * Used only for debugging?
      */
     @Override
@@ -171,18 +171,12 @@
 
     /**
      * Update the caches as needed, given that the value has changed for this xpath and locale.
-     * 
+     *
      * Called by valueChanged(String xpath, XMLSource source),
      * and also calls itself recursively for sublocales
      *
      * @param xpath the xpath
      * @param locale the CLDRLocale
-     *
-     * There is room for improvement of performance. Currently we invalidate all paths for any affected locale.
-     * Ideally, cache invalidation should only be done for each locale+path whose test results or examples potentially
-     * depend on the given locale+path, due to inheritance, aliasing, logical groups, etc. That could be done using a mapping
-     * between paths that are related by such dependencies; that mapping would be constant for as long as the paths and tests
-     * (or example-generation methods) don't change.
      */
     private void valueChangedInvalidateRecursively(String xpath, final CLDRLocale locale) {
         if (DEBUG) {
diff --git a/tools/java/org/unicode/cldr/test/TestMetadata.java b/tools/java/org/unicode/cldr/test/TestMetadata.java
index fdaa260..7353bba 100644
--- a/tools/java/org/unicode/cldr/test/TestMetadata.java
+++ b/tools/java/org/unicode/cldr/test/TestMetadata.java
@@ -22,8 +22,7 @@
     public static void main(String[] args) {
         Factory cldrFactory = Factory.make(CLDRPaths.MAIN_DIRECTORY, ".*");
         CLDRFile metadata = cldrFactory.make("supplementalMetadata", false);
-        // Set allKeys = new TreeSet();
-        // CollectionUtilities.addAll(metadata.iterator(), allKeys);
+        // Set allKeys = new TreeSet(metadata);
         // System.out.println("Keys: " + allKeys);
         // attribute order
 
@@ -94,7 +93,7 @@
 
     private static void sublistCheck(Set<LinkedHashSet<String>> elementOrderingLists, List<String> elementOrder) {
         for (Iterator<LinkedHashSet<String>> it = elementOrderingLists.iterator(); it.hasNext();) {
-            LinkedHashSet<String> sublist = (LinkedHashSet<String>) it.next();
+            LinkedHashSet<String> sublist = it.next();
             // verify that the elements are in the list in the right order.
             int lastPosition = -1;
             for (Iterator<String> it2 = sublist.iterator(); it2.hasNext();) {
@@ -111,7 +110,7 @@
 
     private static boolean showSetDifferences(String name1, Collection<String> set1, String name2, Collection<String> set2) {
         boolean hasDifference = false;
-        TreeSet<String> temp = new TreeSet<String>();
+        TreeSet<String> temp = new TreeSet<>();
         temp.addAll(set1);
         temp.removeAll(set2);
         if (temp.size() != 0) {
@@ -148,7 +147,7 @@
     public static <T> String showDifference(Iterable<T> a, Iterable<T> b, String separator,
         Transform<T, String> aDisplay,
         Transform<T, String> bDisplay) {
-        Differ<T> differ = new Differ<T>(300, 10);
+        Differ<T> differ = new Differ<>(300, 10);
         StringBuilder out = new StringBuilder();
         Iterator<T> ai = a.iterator();
         Iterator<T> bi = b.iterator();
@@ -203,18 +202,18 @@
         }
 
         String[] zones = zoneList.split("\\s+");
-        Set<String> metaZoneSet = new TreeSet<String>();
+        Set<String> metaZoneSet = new TreeSet<>();
         metaZoneSet.addAll(Arrays.asList(zones));
 
         StandardCodes sc = StandardCodes.make();
         Map<String, List<String>> new_oldZones = sc.getZoneData();
-        Set<String> stdZoneSet = new TreeSet<String>();
+        Set<String> stdZoneSet = new TreeSet<>();
         stdZoneSet.addAll(new_oldZones.keySet());
 
         if (metaZoneSet.equals(stdZoneSet)) {
             System.out.println("Zone Set is up-to-date");
         } else {
-            Set<String> diff = new TreeSet<String>();
+            Set<String> diff = new TreeSet<>();
             diff.addAll(metaZoneSet);
             diff.removeAll(stdZoneSet);
             System.out.println("Meta Zones - Std Zones: " + diff);
@@ -240,6 +239,7 @@
             this.elementOrderingLists = elementOrderingLists;
         }
 
+        @Override
         public void handleAttributeDecl(String eName, String aName, String type, String mode, String value) {
             attributes.add(aName);
             // System.out.println(
@@ -251,9 +251,10 @@
             // );
         }
 
+        @Override
         public void handleElementDecl(String name, String model) {
             elements.add(name);
-            LinkedHashSet<String> ordering = new LinkedHashSet<String>(Arrays.asList(model.split("[^-_a-zA-Z0-9]+")));
+            LinkedHashSet<String> ordering = new LinkedHashSet<>(Arrays.asList(model.split("[^-_a-zA-Z0-9]+")));
             ordering.remove("");
             ordering.remove("PCDATA");
             ordering.remove("EMPTY");
diff --git a/tools/java/org/unicode/cldr/test/TestMetazones.java b/tools/java/org/unicode/cldr/test/TestMetazones.java
index 8ac40fe..de8eb1a 100644
--- a/tools/java/org/unicode/cldr/test/TestMetazones.java
+++ b/tools/java/org/unicode/cldr/test/TestMetazones.java
@@ -272,12 +272,12 @@
      * @return
      */
     private List<Pair<Long, Long>> getDifferencesOverRange(OlsonTimeZone zone1, OlsonTimeZone zone2, DateRange overlap) {
-        Set<Long> list1 = new TreeSet<Long>();
+        Set<Long> list1 = new TreeSet<>();
         addTransitions(zone1, overlap, list1);
         addTransitions(zone2, overlap, list1);
 
         // Remove any transition points that keep the same delta relationship
-        List<Long> list = new ArrayList<Long>();
+        List<Long> list = new ArrayList<>();
         int lastDelta = 0;
         for (long point : list1) {
             int offset1 = getOffset(zone1, point);
@@ -290,7 +290,7 @@
         }
 
         // now combine into a list of start/end pairs
-        List<Pair<Long, Long>> result = new ArrayList<Pair<Long, Long>>();
+        List<Pair<Long, Long>> result = new ArrayList<>();
         long lastPoint = Long.MIN_VALUE;
         for (long point : list) {
             if (lastPoint != Long.MIN_VALUE) {
@@ -318,7 +318,7 @@
                     if (skipPartialDays && end - start < DAY) {
                         // do nothing
                     } else {
-                        result.add(new Pair<Long, Long>(start, end)); // back up 1 minute
+                        result.add(new Pair<>(start, end)); // back up 1 minute
                     }
                 }
             }
@@ -419,7 +419,7 @@
             }
             Set<DateRangeAndZone> values = mzoneToData.getAll(mzone);
 
-            Map<String, DateRanges> zoneToRanges = new TreeMap<String, DateRanges>();
+            Map<String, DateRanges> zoneToRanges = new TreeMap<>();
             DateRanges mzoneRanges = new DateRanges();
             // first determine what the max and min dates are
 
@@ -482,7 +482,7 @@
         errorLog.println("*** Verify coverage of canonical zones");
         errorLog.println();
         Set<String> canonicalZones = supplementalData.getCanonicalZones();
-        Set<String> missing = new TreeSet<String>(canonicalZones);
+        Set<String> missing = new TreeSet<>(canonicalZones);
         missing.removeAll(zoneToDateRanges.keySet());
         for (Iterator<String> it = missing.iterator(); it.hasNext();) {
             String value = it.next();
@@ -493,7 +493,7 @@
         if (missing.size() != 0) {
             errln("Missing canonical zones: " + missing);
         }
-        Set<String> extras = new TreeSet<String>(zoneToDateRanges.keySet());
+        Set<String> extras = new TreeSet<>(zoneToDateRanges.keySet());
         extras.removeAll(canonicalZones);
         if (extras.size() != 0) {
             errln("Superfluous  zones (not canonical): " + extras);
@@ -542,6 +542,7 @@
             this.zone = zone;
         }
 
+        @Override
         public int compareTo(DateRangeAndZone other) {
             int result = range.compareTo(other.range);
             if (result != 0)
@@ -549,13 +550,14 @@
             return zone.compareTo(other.zone);
         }
 
+        @Override
         public String toString() {
             return "{" + range + " => " + zone + "}";
         }
     }
 
     static class DateRanges {
-        Set<DateRange> contents = new TreeSet<DateRange>();
+        Set<DateRange> contents = new TreeSet<>();
 
         public void add(DateRange o) {
             contents.add(o);
@@ -596,14 +598,17 @@
             return true;
         }
 
+        @Override
         public boolean equals(Object other) {
             return contents.equals(((DateRanges) other).contents);
         }
 
+        @Override
         public int hashCode() {
             return contents.hashCode();
         }
 
+        @Override
         public String toString() {
             return contents.toString();
         }
@@ -701,6 +706,7 @@
 
         static DateFormat iso2 = new SimpleDateFormat("yyyy-MM-dd");
 
+        @Override
         public int compareTo(DateRange other) {
             if (startDate < other.startDate)
                 return -1;
@@ -724,6 +730,7 @@
 
         static long MAX_DATE = getDateTimeinMillis(110, 0, 1, 0, 0, 0);
 
+        @Override
         public String toString() {
             return "{" + format(startDate) + " to " + format(endDate) + "}";
         }
diff --git a/tools/java/org/unicode/cldr/test/TestMisc.java b/tools/java/org/unicode/cldr/test/TestMisc.java
index 55ba623..391e66b 100644
--- a/tools/java/org/unicode/cldr/test/TestMisc.java
+++ b/tools/java/org/unicode/cldr/test/TestMisc.java
@@ -8,7 +8,6 @@
 import java.util.BitSet;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -58,7 +57,7 @@
 
     static class Lists {
         public static <E extends Comparable> List<E> sortedCopy(Collection<E> iterable) {
-            List<E> list = new ArrayList<E>();
+            List<E> list = new ArrayList<>();
             list.addAll(iterable);
             Collections.sort(list);
             return list;
@@ -67,7 +66,7 @@
 
     enum Foo {
         A, M, Z
-    };
+    }
 
     public static void main(String[] args) {
 
@@ -178,10 +177,10 @@
         System.out.println(eg.getHelpHtml("/calendar/pattern", ""));
 
         if (true) return;
-        Set<String> s = new HashSet<String>(Arrays.asList("a", "A", "c"));
+        Set<String> s = new HashSet<>(Arrays.asList("a", "A", "c"));
         Collator caselessCompare = Collator.getInstance(Locale.ENGLISH);
         caselessCompare.setStrength(Collator.PRIMARY);
-        Set<String> t = new TreeSet<String>((Comparator) caselessCompare);
+        Set<String> t = new TreeSet<>(caselessCompare);
         t.addAll(Arrays.asList("a", "b", "c"));
         System.out.println("s equals t: " + s.equals(t));
         System.out.println("t equals s: " + t.equals(s));
@@ -190,7 +189,7 @@
         System.out.println("s==t " + (s.equals(t)));
         System.out.println("s==u " + (s.equals(u)));
         UnicodeSet x = new UnicodeSet("[a-z]");
-        UnicodeSet y = (UnicodeSet) new UnicodeSet("[a-z]").freeze();
+        UnicodeSet y = new UnicodeSet("[a-z]").freeze();
         System.out.println("x==y " + (x.equals(y)));
         // showEnglish();
         // checkPrivateUse();
@@ -226,10 +225,10 @@
     private static void testWeights() {
         Factory cldrFactory = Factory.make(CLDRPaths.MAIN_DIRECTORY, ".*");
         CLDRFile english = cldrFactory.make("en", true);
-        Set<Pair<Integer, String>> rel = new TreeSet<Pair<Integer, String>>();
+        Set<Pair<Integer, String>> rel = new TreeSet<>();
         for (String desiredLocale : cldrFactory.getAvailable()) {
             int vote = Level.getDefaultWeight("google", desiredLocale);
-            rel.add(new Pair<Integer, String>(vote, desiredLocale));
+            rel.add(new Pair<>(vote, desiredLocale));
         }
         for (Pair<Integer, String> p : rel) {
             System.out.println(p + "\t" + english.getName(p.getSecond()));
@@ -253,14 +252,14 @@
         caseFolded.freeze();
         simpleCaseFolded.freeze();
 
-        UnicodeSet functionalExceptCase = (UnicodeSet) new UnicodeSet("[" +
+        UnicodeSet functionalExceptCase = new UnicodeSet("[" +
             "[:L:][:Mc:][:Mn:][:Nd:]" +
             "&[:^NFKC_QuickCheck=No:]" +
             "&[:^default_ignorable_code_point:]]").freeze();
 
-        UnicodeSet asciiIdn = (UnicodeSet) new UnicodeSet("[-A-Z0-9]").freeze();
+        UnicodeSet asciiIdn = new UnicodeSet("[-A-Z0-9]").freeze();
 
-        UnicodeSet archaic = (UnicodeSet) new UnicodeSet("[" +
+        UnicodeSet archaic = new UnicodeSet("[" +
             "[:script=Bugi:]" +
             "[:script=Copt:]" +
             "[:script=Cprt:]" +
@@ -301,9 +300,9 @@
                 .retainAll(functionalExceptCase)
                 .removeAll(archaic).removeAll(asciiIdn)));
 
-        UnicodeSet functional = (UnicodeSet) new UnicodeSet(functionalExceptCase).retainAll(caseFolded).freeze();
+        UnicodeSet functional = new UnicodeSet(functionalExceptCase).retainAll(caseFolded).freeze();
         System.out.println("functional: " + functional.size());
-        UnicodeSet functionalAndNotArchaic = (UnicodeSet) new UnicodeSet(functional).removeAll(archaic).freeze();
+        UnicodeSet functionalAndNotArchaic = new UnicodeSet(functional).removeAll(archaic).freeze();
         System.out.println("archaic: " + archaic.size());
         System.out.println("functionalAndNotArchaic: " + functionalAndNotArchaic.size());
 
@@ -348,7 +347,7 @@
             }
             scripts.set(script);
         }
-        Set<String> toPrint = new TreeSet<String>();
+        Set<String> toPrint = new TreeSet<>();
         for (int script = 0; script < scripts.size(); ++script) {
             if (!scripts.get(script)) continue;
             String code = UScript.getShortName(script);
@@ -367,6 +366,7 @@
     private static void checkCollections() {
         System.out.println("Collections");
         new org.unicode.cldr.util.CldrUtility.Apply<String>() {
+            @Override
             public void apply(String item) {
                 if (Iso639Data.getScope(item.toString()) != Scope.Collection) return;
                 System.out.println(item + "\t" + CldrUtility.join(Iso639Data.getNames(item), ", "));
@@ -374,6 +374,7 @@
         }.applyTo(Iso639Data.getAvailable());
         System.out.println(CldrUtility.LINE_SEPARATOR + "Macrolanguages");
         new org.unicode.cldr.util.CldrUtility.Apply<String>() {
+            @Override
             public void apply(String item) {
                 if (Iso639Data.getScope(item.toString()) != Scope.Macrolanguage) return;
                 System.out.println(item + "\t" + CldrUtility.join(Iso639Data.getNames(item), ", "));
@@ -413,8 +414,8 @@
     }
 
     static void checkEastAsianWidth() {
-        UnicodeSet dontCares = (UnicodeSet) new UnicodeSet("[[:surrogate:][:unassigned:][:control:]]").freeze();
-        UnicodeSet dontCares2 = (UnicodeSet) new UnicodeSet("[:^letter:]").freeze();
+        UnicodeSet dontCares = new UnicodeSet("[[:surrogate:][:unassigned:][:control:]]").freeze();
+        UnicodeSet dontCares2 = new UnicodeSet("[:^letter:]").freeze();
 
         // UnicodeSet wide = new UnicodeSet("[[:East_Asian_Width=wide:][:East_Asian_Width=fullwidth:][:Co:]]"); //
         // remove supplementaries
@@ -429,15 +430,15 @@
         // Utility.addDontCareSpans(zeroWidth, dontCares));
 
         // P2. In each paragraph, find the first character of type L, AL, or R.
-        UnicodeSet strongL = (UnicodeSet) new UnicodeSet("[[:BidiClass=L:]-[:unassigned:]]").freeze(); //
+        UnicodeSet strongL = new UnicodeSet("[[:BidiClass=L:]-[:unassigned:]]").freeze(); //
         showSpans("Bidi L", strongL, dontCares);
         showSpans("Bidi L*", strongL, dontCares2);
 
-        UnicodeSet strongRAL = (UnicodeSet) new UnicodeSet("[[:BidiClass=R:][:BidiClass=AL:]-[:unassigned:]]").freeze();
+        UnicodeSet strongRAL = new UnicodeSet("[[:BidiClass=R:][:BidiClass=AL:]-[:unassigned:]]").freeze();
         showSpans("Bidi R,AL", strongRAL, dontCares);
         showSpans("Bidi R,AL*", strongRAL, dontCares2);
 
-        UnicodeSet strong = (UnicodeSet) new UnicodeSet(
+        UnicodeSet strong = new UnicodeSet(
             "[[:BidiClass=L:][:BidiClass=R:][:BidiClass=AL:]-[:unassigned:]]").freeze();
         showSpans("Strong", strong, dontCares);
         showSpans("Strong*", strong, dontCares2);
@@ -500,8 +501,8 @@
     private static void checkDistinguishing() {
         Factory cldrFactory = Factory.make(CLDRPaths.MAIN_DIRECTORY, ".*");
         Set<String> cldrFiles = cldrFactory.getAvailableLanguages();
-        Set<String> distinguishing = new TreeSet<String>();
-        Set<String> nondistinguishing = new TreeSet<String>();
+        Set<String> distinguishing = new TreeSet<>();
+        Set<String> nondistinguishing = new TreeSet<>();
         for (Iterator<String> it = cldrFiles.iterator(); it.hasNext();) {
             CLDRFile cldrFile = cldrFactory.make(it.next(), false);
             DtdType dtdType = null;
@@ -569,9 +570,9 @@
         String requestedLocale = "en";
         CLDRFile cldrFile = cldrFactory.make(requestedLocale, true);
         StandardCodes sc = StandardCodes.make();
-        Set<String> careAbout = new HashSet<String>(Arrays.asList(new String[] { "language", "script", "territory", "variant" }));
-        HashMap<String, Set<String>> foundItems = new HashMap<String, Set<String>>();
-        TreeSet<String> problems = new TreeSet<String>();
+        Set<String> careAbout = new HashSet<>(Arrays.asList(new String[] { "language", "script", "territory", "variant" }));
+        HashMap<String, Set<String>> foundItems = new HashMap<>();
+        TreeSet<String> problems = new TreeSet<>();
         for (Iterator<String> it = cldrFile.iterator("", new UTF16.StringComparator(true, false, 0)); it.hasNext();) {
             String requestedPath = it.next();
             XPathParts parts = XPathParts.getFrozenInstance(requestedPath);
@@ -583,9 +584,9 @@
             if (type == null) {
                 continue;
             }
-            Set<String> foundSet = (Set<String>) foundItems.get(element);
+            Set<String> foundSet = foundItems.get(element);
             if (foundSet == null) {
-                foundItems.put(element, foundSet = new TreeSet<String>());
+                foundItems.put(element, foundSet = new TreeSet<>());
             }
             foundSet.add(type);
 
@@ -605,10 +606,10 @@
             System.out.println(it.next());
         }
         for (Iterator<String> it = careAbout.iterator(); it.hasNext();) {
-            String element = (String) it.next();
+            String element = it.next();
             Set<String> real = sc.getAvailableCodes(element);
-            Set<String> notFound = new TreeSet<String>(real);
-            notFound.removeAll((Set<String>) foundItems.get(element));
+            Set<String> notFound = new TreeSet<>(real);
+            notFound.removeAll(foundItems.get(element));
             for (Iterator<String> it2 = notFound.iterator(); it2.hasNext();) {
                 String type = it2.next();
                 List<String> data = sc.getFullData(element, type);
@@ -639,10 +640,11 @@
             String path = it.next();
             String value = supp.getStringValue(path);
             String fullPath = supp.getFullXPath(path);
-            XPathParts parts = XPathParts.getInstance(fullPath); // not frozen, for putAttributeValue
+            XPathParts parts = XPathParts.getFrozenInstance(fullPath);
             String type = parts.getAttributeValue(-1, "type");
-            String pop = (String) language_territory_hack_map.get(type);
+            String pop = language_territory_hack_map.get(type);
             if (pop != null) {
+                parts = parts.cloneAsThawed();
                 parts.putAttributeValue(-1, "mostPopulousTerritory", pop);
                 fullPath = parts.toString();
             }
@@ -653,7 +655,7 @@
         pw.close();
     }
 
-    private static final Map<String, String> language_territory_hack_map = new HashMap<String, String>();
+    private static final Map<String, String> language_territory_hack_map = new HashMap<>();
     private static final String[][] language_territory_hack = {
         { "af", "ZA" },
         { "am", "ET" },
@@ -820,6 +822,7 @@
         static VariantFolder canonicalFolder = new VariantFolder(new CanonicalFolder());
         static VariantFolder compatibilityFolder = new VariantFolder(new CompatibilityFolder());
 
+        @Override
         public boolean applyPropertyAlias(String propertyName, String propertyValue, UnicodeSet result) {
             if (propertyName.equalsIgnoreCase("close")) {
                 if (propertyValue.equalsIgnoreCase("case")) {
diff --git a/tools/java/org/unicode/cldr/test/TestSupplementalData.java b/tools/java/org/unicode/cldr/test/TestSupplementalData.java
index 03d80c5..38cf1ef 100644
--- a/tools/java/org/unicode/cldr/test/TestSupplementalData.java
+++ b/tools/java/org/unicode/cldr/test/TestSupplementalData.java
@@ -61,7 +61,7 @@
         }
         // gather the data
         // this could be slightly simpler using supplementalData.get
-        Set<String> singulars = new TreeSet<String>();
+        Set<String> singulars = new TreeSet<>();
         for (String region : territoryToZones.keySet()) {
             final Set<String> zones = territoryToZones.getAll(region);
             if (zones.size() == 1 || region.equals("001")) {
@@ -92,7 +92,7 @@
 
     private static void checkPlurals() {
         Relation<PluralInfo, String> pluralsToLocale = Relation.<PluralInfo, String> of(new HashMap<PluralInfo, Set<String>>(), TreeSet.class);
-        for (String locale : new TreeSet<String>(supplementalData.getPluralLocales())) {
+        for (String locale : new TreeSet<>(supplementalData.getPluralLocales())) {
             PluralInfo pluralInfo = supplementalData.getPlurals(locale);
             System.out.println(locale + ":\t" + pluralInfo);
             pluralsToLocale.put(pluralInfo, locale);
@@ -128,7 +128,7 @@
 
     private static void checkTerritoryMapping() {
         Relation<String, String> alpha3 = supplementalData.getAlpha3TerritoryMapping();
-        Set<String> temp = new TreeSet<String>(sc.getAvailableCodes("territory"));
+        Set<String> temp = new TreeSet<>(sc.getAvailableCodes("territory"));
         for (Iterator<String> it = temp.iterator(); it.hasNext();) {
             String code = it.next();
             if (numericTerritory.reset(code).matches()) {
@@ -158,7 +158,7 @@
     }
 
     private static Set<String> getFirstMinusSecond(Set<String> name, Set<String> availableCodes) {
-        Set<String> temp = new TreeSet<String>(name);
+        Set<String> temp = new TreeSet<>(name);
         temp.removeAll(availableCodes);
         return temp;
     }
@@ -170,10 +170,10 @@
             Set<BasicLanguageData> newLanguageData = supplementalData.getBasicLanguageData(language);
             if (newLanguageData != null) {
                 for (BasicLanguageData languageData : newLanguageData) {
-                    Set<String> territories = new TreeSet<String>(languageData.getTerritories());
+                    Set<String> territories = new TreeSet<>(languageData.getTerritories());
                     territories.addAll(languageData.getTerritories());
                     if (territories != null) {
-                        Set<String> scripts = new TreeSet<String>(languageData.getScripts());
+                        Set<String> scripts = new TreeSet<>(languageData.getScripts());
                         scripts.addAll(languageData.getScripts());
                         if (scripts == null || scripts.size() < 2) {
                             otherTerritoryToLanguages.putAll(territories, language);
@@ -192,9 +192,9 @@
             Set<String> otherLanguages = otherTerritoryToLanguages.getAll(territory);
             if (otherLanguages == null) otherLanguages = Collections.emptySet();
             if (!Objects.equals(languages, otherLanguages)) {
-                Set<String> languagesLeftover = new TreeSet<String>(languages);
+                Set<String> languagesLeftover = new TreeSet<>(languages);
                 languagesLeftover.removeAll(otherLanguages);
-                Set<String> otherLanguagesLeftover = new TreeSet<String>(otherLanguages);
+                Set<String> otherLanguagesLeftover = new TreeSet<>(otherLanguages);
                 otherLanguagesLeftover.removeAll(languages);
                 String territoryString = english.getName(CLDRFile.TERRITORY_NAME, territory);
                 if (otherLanguagesLeftover.size() != 0) {
@@ -214,7 +214,7 @@
      */
     public static void genData() throws IOException {
         BufferedReader codes = CldrUtility.getUTF8Data("territory_codes.txt");
-        Set<Pair> sorted = new TreeSet<Pair>();
+        Set<Pair> sorted = new TreeSet<>();
         while (true) {
             String line = codes.readLine();
             if (line == null)
diff --git a/tools/java/org/unicode/cldr/test/XPathToMenu.java b/tools/java/org/unicode/cldr/test/XPathToMenu.java
new file mode 100644
index 0000000..594b844
--- /dev/null
+++ b/tools/java/org/unicode/cldr/test/XPathToMenu.java
@@ -0,0 +1,319 @@
+package org.unicode.cldr.test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.unicode.cldr.icu.LDMLConstants;
+import org.unicode.cldr.util.XPathParts;
+
+/**
+ * Deprecated utility class only used by ConsoleCheckCLDR.
+ *
+ * @deprecated Do not use.
+ */
+@Deprecated
+final class XPathToMenu {
+    // ===== types of data and menu names
+    private static final String LOCALEDISPLAYNAMES = "//ldml/localeDisplayNames/";
+    private static final String OTHER_CALENDARS_XPATH = "//ldml/dates/calendars/calendar";
+
+    private static final String CURRENCIES = "currencies";
+    private static final String TIMEZONES = "timezones";
+    private static final String METAZONES = "metazones";
+    private static final String MISC = "misc";
+    private static final String CODEPATTERNS = "codePatterns";
+    private static final String MEASNAMES = "measurementSystemNames";
+
+    private static final String LOCALEDISPLAYPATTERN_XPATH =
+            LOCALEDISPLAYNAMES + LDMLConstants.LOCALEDISPLAYPATTERN;
+    private static final String NUMBERSCURRENCIES =
+            LDMLConstants.NUMBERS + "/" + CURRENCIES;
+
+    /**
+     * All of the data items under LOCALEDISPLAYNAMES (menu items)
+     */
+    private static final String[] LOCALEDISPLAYNAMES_ITEMS = { LDMLConstants.LANGUAGES,
+        LDMLConstants.SCRIPTS, LDMLConstants.TERRITORIES, LDMLConstants.VARIANTS, LDMLConstants.KEYS,
+        LDMLConstants.TYPES, CURRENCIES, TIMEZONES, CODEPATTERNS, MEASNAMES };
+
+    public static String xpathToMenu(String path) {
+        String theMenu = null;
+        if (path.startsWith(LOCALEDISPLAYNAMES)) {
+            for (int i = 0; i < LOCALEDISPLAYNAMES_ITEMS.length; i++) {
+                if (path.startsWith(LOCALEDISPLAYNAMES
+                    + LOCALEDISPLAYNAMES_ITEMS[i])) {
+                    theMenu = LOCALEDISPLAYNAMES_ITEMS[i];
+                }
+            }
+            if (path.startsWith(LOCALEDISPLAYPATTERN_XPATH)) {
+                theMenu = LDMLConstants.LOCALEDISPLAYPATTERN;
+            }
+        } else if (path.startsWith(OTHER_CALENDARS_XPATH)) {
+            String items[] = getCalendarsItems();
+            for (String which : items) {
+                String CAL_XPATH = "//ldml/dates/calendars/calendar[@type=\"" + which + "\"]";
+                if (path.startsWith(CAL_XPATH)) {
+                    theMenu = which;
+                    break;
+                }
+            }
+        } else if (path.startsWith(LOCALEDISPLAYPATTERN_XPATH)) {
+            theMenu = LDMLConstants.LOCALEDISPLAYPATTERN;
+        } else if (path.startsWith("//ldml/" + NUMBERSCURRENCIES)) {
+            theMenu = CURRENCIES;
+        } else if (path.startsWith("//ldml/" + "dates/timeZoneNames/zone")) {
+            theMenu = TIMEZONES;
+        } else if (path.startsWith("//ldml/" + "units")) {
+            theMenu = "units";
+        } else if (path.startsWith("//ldml/" + "dates/timeZoneNames/metazone")) {
+            theMenu = getMetazoneContinent(path);
+            if (theMenu == null) {
+                theMenu = METAZONES;
+            }
+        } else if (path.startsWith("//ldml/" + LDMLConstants.CHARACTERS + "/" + LDMLConstants.EXEMPLAR_CHARACTERS)) {
+            theMenu = LDMLConstants.CHARACTERS;
+        } else if (path.startsWith("//ldml/" + LDMLConstants.NUMBERS)) {
+            theMenu = LDMLConstants.NUMBERS;
+        } else if (path.startsWith("//ldml/" + LDMLConstants.REFERENCES)) {
+            theMenu = LDMLConstants.REFERENCES;
+        } else {
+            theMenu = MISC;
+            // other?
+        }
+        return theMenu;
+    }
+
+    private static String[] getCalendarsItems() {
+        // TODO : Make this data driven from supplementalMetaData ;
+        // I couldn't get the xpath right....
+        // CLDRFile mySupp = getFactory().make("supplementalMetaData",false);
+        // String xpath =
+        // "//supplementalData/metadata/validity/variable[@id=\"$calendar\"][@type=\"choice\"]";
+        // String items = mySupp.getStringValue(xpath);
+        // if ( items != null ) {
+        // return (items.split(" "));
+        // }
+        // else {
+
+        String defaultCalendarsItems = "gregorian buddhist coptic ethiopic chinese hebrew indian islamic japanese persian roc";
+        return (defaultCalendarsItems.split(" "));
+
+        // }
+    }
+
+    private static String getMetazoneContinent(String xpath) {
+        XPathParts parts = XPathParts.getFrozenInstance(xpath);
+        String thisMetazone = parts.getAttributeValue(3, "type");
+        return getMetazoneToContinentMap().get(thisMetazone);
+    }
+
+    private static Map<String, String> mzToContinentMap = null;
+
+    private static Map<String, String> getMetazoneToContinentMap() {
+        if (mzToContinentMap == null) {
+            System.err
+                .println(
+                    "PathUtilities.java getMetazoneToContinentMap(): TODO: Get this data from supplemental data! http://unicode.org/cldr/trac/ticket/3761");
+            HashMap<String, String> newMap = new HashMap<>();
+            for (int i = 0; i < mzToContinentStatic.length; i += 2) {
+                newMap.put(mzToContinentStatic[i + 0], mzToContinentStatic[i + 1]);
+            }
+            mzToContinentMap = newMap;
+        }
+        return mzToContinentMap;
+    }
+
+    private static final String mzToContinentStatic[] = {
+        "Philippines", "Asia",
+        "Gambier", "Pacific",
+        "Ecuador", "America",
+        "Kuybyshev", "Europe",
+        "Europe_Western", "Atlantic",
+        "Chile", "America",
+        "Afghanistan", "Asia",
+        "Pierre_Miquelon", "America",
+        "Solomon", "Pacific",
+        "Arabian", "Asia",
+        "Krasnoyarsk", "Asia",
+        "Vladivostok", "Asia",
+        "Fiji", "Pacific",
+        "Niue", "Pacific",
+        "Marquesas", "Pacific",
+        "Karachi", "Asia",
+        "Aqtobe", "Asia",
+        "Irish", "Europe",
+        "Yakutsk", "Asia",
+        "Galapagos", "Pacific",
+        "Bangladesh", "Asia",
+        "America_Pacific", "America",
+        "Urumqi", "Asia",
+        "Tahiti", "Pacific",
+        "Samoa", "Pacific",
+        "Uzbekistan", "Asia",
+        "Turkey", "Europe",
+        "Kyrgystan", "Asia",
+        "Europe_Eastern", "Europe",
+        "Casey", "Antarctica",
+        "Lord_Howe", "Australia",
+        "Kizilorda", "Asia",
+        "Kashgar", "Asia",
+        "Africa_Western", "Africa",
+        "Macquarie", "Antarctica",
+        "Wake", "Pacific",
+        "Australia_Eastern", "Australia",
+        "Guyana", "America",
+        "Taipei", "Asia",
+        "Samarkand", "Asia",
+        "Mawson", "Antarctica",
+        "Africa_Eastern", "Africa",
+        "Guam", "Pacific",
+        "Kazakhstan_Western", "Asia",
+        "Aqtau", "Asia",
+        "Cook", "Pacific",
+        "Wallis", "Pacific",
+        "Irkutsk", "Asia",
+        "Africa_Southern", "Africa",
+        "French_Guiana", "America",
+        "Chatham", "Pacific",
+        "Oral", "Asia",
+        "Noronha", "America",
+        "Paraguay", "America",
+        "Moscow", "Europe",
+        "Hong_Kong", "Asia",
+        "Yerevan", "Asia",
+        "Vostok", "Antarctica",
+        "Rothera", "Antarctica",
+        "Colombia", "America",
+        "Newfoundland", "America",
+        "Hawaii_Aleutian", "Pacific",
+        "East_Timor", "Asia",
+        "GMT", "Atlantic",
+        "Indian_Ocean", "Indian",
+        "Reunion", "Indian",
+        "Vanuatu", "Pacific",
+        "Malaysia", "Asia",
+        "Kwajalein", "Pacific",
+        "Line_Islands", "Pacific",
+        "Shevchenko", "Asia",
+        "Azores", "Atlantic",
+        "Frunze", "Asia",
+        "Greenland_Eastern", "America",
+        "Hovd", "Asia",
+        "Lanka", "Asia",
+        "Almaty", "Asia",
+        "Macau", "Asia",
+        "Mongolia", "Asia",
+        "Easter", "Pacific",
+        "British", "Europe",
+        "Korea", "Asia",
+        "Papua_New_Guinea", "Pacific",
+        "Bering", "America",
+        "Cocos", "Indian",
+        "Mauritius", "Indian",
+        "Argentina", "America",
+        "Tokelau", "Pacific",
+        "America_Central", "America",
+        "Alaska", "America",
+        "Georgia", "Asia",
+        "Choibalsan", "Asia",
+        "Sakhalin", "Asia",
+        "Anadyr", "Asia",
+        "Dushanbe", "Asia",
+        "Indonesia_Eastern", "Asia",
+        "Japan", "Asia",
+        "Omsk", "Asia",
+        "Nauru", "Pacific",
+        "Cuba", "America",
+        "Iran", "Asia",
+        "Sverdlovsk", "Asia",
+        "Maldives", "Indian",
+        "Europe_Central", "Europe",
+        "Kamchatka", "Asia",
+        "Tajikistan", "Asia",
+        "Pitcairn", "Pacific",
+        "Gilbert_Islands", "Pacific",
+        "Novosibirsk", "Asia",
+        "Brunei", "Asia",
+        "Tonga", "Pacific",
+        "Changbai", "Asia",
+        "India", "Asia",
+        "Indonesia_Western", "Asia",
+        "Malaya", "Asia",
+        "Dacca", "Asia",
+        "Tashkent", "Asia",
+        "New_Zealand", "Pacific",
+        "Indonesia_Central", "Asia",
+        "Myanmar", "Asia",
+        "South_Georgia", "Atlantic",
+        "Truk", "Pacific",
+        "Pakistan", "Asia",
+        "Borneo", "Asia",
+        "DumontDUrville", "Antarctica",
+        "Argentina_Western", "America",
+        "Uruguay", "America",
+        "Dutch_Guiana", "America",
+        "Ponape", "Pacific",
+        "Gulf", "Asia",
+        "Aktyubinsk", "Asia",
+        "America_Mountain", "America",
+        "Dominican", "America",
+        "North_Mariana", "Pacific",
+        "Yukon", "America",
+        "Armenia", "Asia",
+        "Falkland", "Atlantic",
+        "Tbilisi", "Asia",
+        "Baku", "Asia",
+        "Venezuela", "America",
+        "Ashkhabad", "Asia",
+        "Cape_Verde", "Atlantic",
+        "Phoenix_Islands", "Pacific",
+        "Brasilia", "America",
+        "Marshall_Islands", "Pacific",
+        "Volgograd", "Europe",
+        "Yekaterinburg", "Asia",
+        "Kosrae", "Pacific",
+        "Tuvalu", "Pacific",
+        "Africa_Central", "Africa",
+        "Palau", "Pacific",
+        "Alaska_Hawaii", "America",
+        "Qyzylorda", "Asia",
+        "Bhutan", "Asia",
+        "Israel", "Asia",
+        "America_Eastern", "America",
+        "Nepal", "Asia",
+        "Azerbaijan", "Asia",
+        "Uralsk", "Asia",
+        "Bolivia", "America",
+        "Liberia", "Africa",
+        "Turkmenistan", "Asia",
+        "Davis", "Antarctica",
+        "Norfolk", "Pacific",
+        "Indochina", "Asia",
+        "Peru", "America",
+        "Acre", "America",
+        "China", "Asia",
+        "Chamorro", "Pacific",
+        "Atlantic", "America",
+        "Syowa", "Antarctica",
+        "Africa_FarWestern", "Africa",
+        "New_Caledonia", "Pacific",
+        "Greenland_Western", "America",
+        "Suriname", "America",
+        "Seychelles", "Indian",
+        "Christmas", "Indian",
+        "Australia_CentralWestern", "Australia",
+        "Greenland_Central", "America",
+        "French_Southern", "Indian",
+        "Australia_Central", "Australia",
+        "Australia_Western", "Australia",
+        "Magadan", "Asia",
+        "Kazakhstan_Eastern", "Asia",
+        "Goose_Bay", "America",
+        "Singapore", "Asia",
+        "Amazon", "America",
+        "Long_Shu", "Asia",
+        "Samara", "Europe",
+    };
+
+    private XPathToMenu() {}
+}
diff --git a/tools/java/org/unicode/cldr/tool/AddPopulationData.java b/tools/java/org/unicode/cldr/tool/AddPopulationData.java
index 80ef59d..6ca6764 100644
--- a/tools/java/org/unicode/cldr/tool/AddPopulationData.java
+++ b/tools/java/org/unicode/cldr/tool/AddPopulationData.java
@@ -25,7 +25,7 @@
     enum WBLine {
         // "Afghanistan","AFG","GNI, PPP (current international $)","NY.GNP.MKTP.PP.CD","..","..","13144920451.3325","16509662130.816","18932631964.8727","22408872945.1924","25820670505.2627","30783369469.7509","32116190092.1429","..",
 
-        Country_Name, Country_Code, Series_Name, Series_Code, YR2000, YR2001, YR2002, YR2003, YR2004, YR2005, YR2006, YR2007, YR2008, YR2009, YR2010, YR2011, YR2012, YR2013, YR2014, YR2015, YR2016, YR2017, YR2018;
+        Country_Name, Country_Code, Series_Name, Series_Code, YR2000, YR2001, YR2002, YR2003, YR2004, YR2005, YR2006, YR2007, YR2008, YR2009, YR2010, YR2011, YR2012, YR2013, YR2014, YR2015, YR2016, YR2017, YR2018, YR2019;
         String get(String[] pieces) {
             return ordinal() < pieces.length ? pieces[ordinal()] : EMPTY;
         }
@@ -48,20 +48,20 @@
     private static final String GCP = "NY.GNP.MKTP.PP.CD";
     private static final String POP = "SP.POP.TOTL";
     private static final String EMPTY = "..";
-    private static Counter2<String> worldbank_gdp = new Counter2<String>();
-    private static Counter2<String> worldbank_population = new Counter2<String>();
-    private static Counter2<String> un_literacy = new Counter2<String>();
+    private static Counter2<String> worldbank_gdp = new Counter2<>();
+    private static Counter2<String> worldbank_population = new Counter2<>();
+    private static Counter2<String> un_literacy = new Counter2<>();
 
-    private static Counter2<String> factbook_gdp = new Counter2<String>();
-    private static Counter2<String> factbook_population = new Counter2<String>();
-    private static Counter2<String> factbook_literacy = new Counter2<String>();
+    private static Counter2<String> factbook_gdp = new Counter2<>();
+    private static Counter2<String> factbook_population = new Counter2<>();
+    private static Counter2<String> factbook_literacy = new Counter2<>();
 
     private static CountryData other = new CountryData();
 
     static class CountryData {
-        private static Counter2<String> population = new Counter2<String>();
-        private static Counter2<String> gdp = new Counter2<String>();
-        private static Counter2<String> literacy = new Counter2<String>();
+        private static Counter2<String> population = new Counter2<>();
+        private static Counter2<String> gdp = new Counter2<>();
+        private static Counter2<String> literacy = new Counter2<>();
     }
 
     public static void main(String[] args) throws IOException {
@@ -75,7 +75,7 @@
         for (String country : StandardCodes.make().getGoodCountries()) {
             showCountryData(country);
         }
-        Set<String> outliers = new TreeSet<String>();
+        Set<String> outliers = new TreeSet<>();
         outliers.addAll(factbook_population.keySet());
         outliers.addAll(worldbank_population.keySet());
         outliers.addAll(factbook_gdp.keySet());
@@ -94,10 +94,10 @@
             }
             throw new IllegalArgumentException("Mistakes: data for non-country codes");
         }
-        Set<String> altNames = new TreeSet<String>();
+        Set<String> altNames = new TreeSet<>();
         String oldCode = "";
         for (String display : CountryCodeConverter.names()) {
-            String code = CountryCodeConverter.getCodeFromName(display);
+            String code = CountryCodeConverter.getCodeFromName(display, true);
             String icu = ULocale.getDisplayCountry("und-" + code, "en");
             if (!display.equalsIgnoreCase(icu)) {
                 altNames.add(code + "\t" + display + "\t" + icu);
@@ -161,7 +161,7 @@
         // each item is of the form abc...
         // or "..." (required if a comma or quote is contained)
         // " in a field is represented by ""
-        List<String> result = new ArrayList<String>();
+        List<String> result = new ArrayList<>();
         StringBuilder item = new StringBuilder();
         boolean inQuote = false;
         for (int i = 0; i < line.length(); ++i) {
@@ -195,13 +195,14 @@
 
     private static void loadFactbookInfo(String filename, final Counter2<String> factbookGdp) throws IOException {
         CldrUtility.handleFile(filename, new LineHandler() {
+            @Override
             public boolean handle(String line) {
                 if (line.length() == 0 || line.startsWith("This tab") || line.startsWith("Rank")
                     || line.startsWith(" This file")) {
                     return false;
                 }
                 String[] pieces = line.split("\\s{2,}");
-                String code = CountryCodeConverter.getCodeFromName(FBLine.Country.get(pieces));
+                String code = CountryCodeConverter.getCodeFromName(FBLine.Country.get(pieces), true);
                 if (code == null) {
                     return false;
                 }
@@ -239,6 +240,7 @@
             this.countryData = countryData;
         }
 
+        @Override
         public boolean handle(String line) throws ParseException {
             if (line.startsWith("#")) return true;
             if (line.length() == 0) {
@@ -286,14 +288,15 @@
         }
     }
 
-    static final UnicodeSet DIGITS = (UnicodeSet) new UnicodeSet("[:Nd:]").freeze();
+    static final UnicodeSet DIGITS = new UnicodeSet("[:Nd:]").freeze();
 
     private static void loadFactbookLiteracy() throws IOException {
         final String filename = "external/factbook_literacy.txt";
         CldrUtility.handleFile(filename, new LineHandler() {
+            @Override
             public boolean handle(String line) {
                 String[] pieces = line.split("\\t");
-                String code = CountryCodeConverter.getCodeFromName(FBLiteracy.Country.get(pieces));
+                String code = CountryCodeConverter.getCodeFromName(FBLiteracy.Country.get(pieces), true);
                 if (code == null) {
                     return false;
                 }
@@ -322,6 +325,7 @@
         // List<List<String>> data = SpreadSheet.convert(CldrUtility.getUTF8Data(filename));
 
         CldrUtility.handleFile(filename, new LineHandler() {
+            @Override
             public boolean handle(String line) {
                 if (line.contains("Series Code")) {
                     return false;
@@ -344,7 +348,7 @@
                 if (last == null) {
                     return false;
                 }
-                String country = CountryCodeConverter.getCodeFromName(WBLine.Country_Name.get(pieces));
+                String country = CountryCodeConverter.getCodeFromName(WBLine.Country_Name.get(pieces), true);
                 if (country == null) {
                     return false;
                 }
@@ -374,6 +378,7 @@
 
     private static void loadUnLiteracy() throws IOException {
         CldrUtility.handleFile("external/un_literacy.csv", new CldrUtility.LineHandler() {
+            @Override
             public boolean handle(String line) {
                 // Afghanistan,2000, ,28,43,13,,34,51,18
                 // "Country or area","Year",,"Adult (15+) literacy rate",,,,,,"         Youth (15-24) literacy rate",,,,
@@ -383,7 +388,7 @@
                 if (pieces.length != 14 || pieces[1].length() == 0 || !DIGITS.containsAll(pieces[1])) {
                     return false;
                 }
-                String code = CountryCodeConverter.getCodeFromName(pieces[0]);
+                String code = CountryCodeConverter.getCodeFromName(pieces[0], true);
                 if (code == null) {
                     return false;
                 }
@@ -437,7 +442,7 @@
             }
             if (myErrors.length() != 0) {
                 throw new IllegalArgumentException(
-                    "Missing Country values, the following and add to external/other_country_data to fix:"
+                    "Missing Country values, the following and add to external/other_country_data to fix, chaning the 0 to the real value:"
                         + myErrors);
             }
         } catch (IOException e) {
diff --git a/tools/java/org/unicode/cldr/tool/CLDRCompare.java b/tools/java/org/unicode/cldr/tool/CLDRCompare.java
index 85b22cf..d0d8524 100644
--- a/tools/java/org/unicode/cldr/tool/CLDRCompare.java
+++ b/tools/java/org/unicode/cldr/tool/CLDRCompare.java
@@ -9,16 +9,15 @@
 import org.unicode.cldr.util.CLDRPaths;
 import org.unicode.cldr.util.CldrUtility;
 import org.unicode.cldr.util.Factory;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.PatternCache;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
-
 public class CLDRCompare {
     public static void main(String[] args) throws Exception {
         String filter = CldrUtility.getProperty("filter", ".*");
         Matcher matcher = PatternCache.get(filter).matcher("");
-        File oldVersion = new File(CldrUtility.getProperty("old", new File(CLDRPaths.COMMON_DIRECTORY
-            + "../../../common-cldr1.6").getCanonicalPath()));
+        File oldVersion = new File(CldrUtility.getProperty("old", PathUtilities.getNormalizedPathString(CLDRPaths.COMMON_DIRECTORY
+    + "../../../common-cldr1.6")));
         if (!oldVersion.exists()) {
             throw new IllegalArgumentException("Directory not found");
         }
@@ -34,13 +33,13 @@
         for (String subDir : newVersion.list()) {
             if (subDir.equals("CVS") || subDir.equals("posix") || subDir.equals("test")) continue;
 
-            final String newSubDir = newVersion.getCanonicalPath() + "/" + subDir;
+            final String newSubDir = PathUtilities.getNormalizedPathString(newVersion) + "/" + subDir;
             final File srcDir = new File(newSubDir);
             if (!srcDir.isDirectory()) continue;
 
-            final String oldSubDir = oldVersion.getCanonicalPath() + "/" + subDir;
+            final String oldSubDir = PathUtilities.getNormalizedPathString(oldVersion) + "/" + subDir;
 
-            TreeSet<String> files = new TreeSet<String>();
+            TreeSet<String> files = new TreeSet<>();
 
             Factory cldrFactory = Factory.make(newSubDir, ".*");
             files.addAll(cldrFactory.getAvailable());
@@ -58,17 +57,17 @@
                     continue;
                 }
 
-                HashSet<String> paths = new HashSet<String>();
+                HashSet<String> paths = new HashSet<>();
                 CLDRFile newCldrFile = null;
                 try {
                     newCldrFile = cldrFactory.make(file, false);
-                    CollectionUtilities.addAll(newCldrFile.iterator(), paths);
+                    newCldrFile.forEach(paths::add);
                 } catch (Exception e) {
                 }
                 CLDRFile oldCldrFile = null;
                 try {
                     oldCldrFile = oldFactory.make(file, false);
-                    CollectionUtilities.addAll(oldCldrFile.iterator(), paths);
+                    oldCldrFile.forEach(paths::add);
                 } catch (Exception e1) {
                 }
 
diff --git a/tools/java/org/unicode/cldr/tool/CLDRFilePseudolocalizer.java b/tools/java/org/unicode/cldr/tool/CLDRFilePseudolocalizer.java
index ba3efa9..329add5 100644
--- a/tools/java/org/unicode/cldr/tool/CLDRFilePseudolocalizer.java
+++ b/tools/java/org/unicode/cldr/tool/CLDRFilePseudolocalizer.java
@@ -78,7 +78,7 @@
         private int charCount = 0;
 
         private static Map<Integer, String> buildReplacementsTable() {
-            Map<Integer, String> table = new HashMap<Integer, String>();
+            Map<Integer, String> table = new HashMap<>();
             table.put((int) ' ', "\u2003");
             table.put((int) '!', "\u00a1");
             table.put((int) '"', "\u2033");
@@ -172,11 +172,13 @@
             return table;
         }
 
+        @Override
         public String start() {
             charCount = 0;
             return "[";
         }
 
+        @Override
         public String end() {
             StringBuilder expansionText = new StringBuilder();
             int expansion = (charCount + 1) / 2;
@@ -198,6 +200,7 @@
             return expansionText.toString();
         }
 
+        @Override
         public String fragment(String text) {
             StringBuilder buf = new StringBuilder();
             int index = 0;
@@ -228,6 +231,7 @@
         /** Postfix to add after each LTR word */
         private static final String BIDI_POSTFIX = PDF + RLM;
 
+        @Override
         public String fragment(String text) {
             StringBuilder output = new StringBuilder();
             boolean wrapping = false;
diff --git a/tools/java/org/unicode/cldr/tool/CLDRFileTransformer.java b/tools/java/org/unicode/cldr/tool/CLDRFileTransformer.java
index baf3e9b..0a12fff 100644
--- a/tools/java/org/unicode/cldr/tool/CLDRFileTransformer.java
+++ b/tools/java/org/unicode/cldr/tool/CLDRFileTransformer.java
@@ -29,15 +29,17 @@
  * @author jchye
  */
 public class CLDRFileTransformer {
+    public enum PolicyIfExisting {
+        RETAIN,  // Do not transliterate if existing output has locale content
+        DISCARD, // Replace existing output locale content
+        MINIMIZE // RETAIN, plus drop values if translit is a no-op.
+    }
+
     /**
      * Contains all supported locale-to-locale conversions along with information
      * needed to convert each locale. Each enum value is named after the locale that results
      * from the conversion.
      */
-    enum PolicyIfExisting {
-        RETAIN, DISCARD, MINIMIZE
-    }
-
     public enum LocaleTransform {
         sr_Latn("sr", "Serbian-Latin-BGN.xml", Transliterator.FORWARD, "[:script=Cyrl:]", PolicyIfExisting.DISCARD), //
         sr_Latn_BA("sr_Cyrl_BA", "Serbian-Latin-BGN.xml", Transliterator.FORWARD, "[:script=Cyrl:]", PolicyIfExisting.DISCARD), //
@@ -47,7 +49,7 @@
         yo_BJ("yo", "yo-yo_BJ.xml", Transliterator.FORWARD, "[ẹ ọ ṣ Ẹ Ọ Ṣ]", PolicyIfExisting.DISCARD), //
         de_CH("de", "[ß] Casefold", Transliterator.FORWARD, "[ß]", PolicyIfExisting.MINIMIZE), //
         yue_Hans("yue", "Simplified-Traditional.xml", Transliterator.REVERSE, "[:script=Hant:]", PolicyIfExisting.RETAIN), //
-        // en_NZ("en_AU", "null", Transliterator.FORWARD, "[]", PolicyIfExisting.DISCARD), 
+        // en_NZ("en_AU", "null", Transliterator.FORWARD, "[]", PolicyIfExisting.DISCARD),
         // Needs work to fix currency symbols, handle Maori. See http://unicode.org/cldr/trac/ticket/9516#comment:6
         ;
 
@@ -60,6 +62,7 @@
         /**
          * @deprecated Use {@link #LocaleTransform(String,String,int,String,PolicyIfExisting)} instead
          */
+        @Deprecated
         private LocaleTransform(String inputLocale, String transformFilename, int direction, String inputCharPattern) {
             this(inputLocale, transformFilename, direction, inputCharPattern, PolicyIfExisting.DISCARD);
         }
@@ -73,6 +76,13 @@
         }
 
         /**
+         * @return the policy for existing content
+         */
+        public PolicyIfExisting getPolicyIfExisting() {
+            return policy;
+        }
+
+        /**
          * @return the locale that used for conversion
          */
         public String getInputLocale() {
@@ -118,7 +128,7 @@
      * Use ConcurrentHashMap rather than HashMap to avoid concurrency problems.
      * Reference: https://unicode.org/cldr/trac/ticket/11657
      */
-    private static Map<LocaleTransform, Transliterator> transliterators = new ConcurrentHashMap<LocaleTransform, Transliterator>();
+    private static Map<LocaleTransform, Transliterator> transliterators = new ConcurrentHashMap<>();
     private String transformDir;
 
     /**
@@ -204,7 +214,7 @@
 
     /**
      * Transforms a CLDRFile value into another form.
-     * @param parentValue 
+     * @param parentValue
      */
     private String transformValue(Transliterator transliterator, LocaleTransform localeTransform, String path, String value,
         String oldValue, String parentValue) {
@@ -269,7 +279,7 @@
                 }
                 String outputDir = CLDRPaths.GEN_DIRECTORY + "common/" + dir + File.separator;
                 String outputFile = output.getLocaleID() + ".xml";
-                
+
                 try (PrintWriter out = FileUtilities.openUTF8Writer(outputDir, outputFile)) {
                     System.out.println("Generating locale file: " + outputDir + outputFile);
                     if (!transformer.unconverted.isEmpty()) {
diff --git a/tools/java/org/unicode/cldr/tool/CLDRFormat.java b/tools/java/org/unicode/cldr/tool/CLDRFormat.java
index fd72113..d0aef05 100644
--- a/tools/java/org/unicode/cldr/tool/CLDRFormat.java
+++ b/tools/java/org/unicode/cldr/tool/CLDRFormat.java
@@ -12,12 +12,11 @@
 import org.unicode.cldr.util.CLDRPaths;
 import org.unicode.cldr.util.CldrUtility;
 import org.unicode.cldr.util.Factory;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.PatternCache;
 import org.unicode.cldr.util.SimpleFactory;
 //import org.unicode.cldr.util.XPathParts.Comments;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
-
 public class CLDRFormat {
     public static void main(String[] args) throws Exception {
         // TODO - make these parameters
@@ -28,7 +27,7 @@
         File dtd = new File(dest + "/main/" + "../../common/dtd/ldmlSupplemental.dtd");
         if (!dtd.exists()) {
             throw new IllegalArgumentException("Can't access DTD\nas is: " + dtd + "\ncanonical: "
-                + dtd.getCanonicalPath());
+                + PathUtilities.getNormalizedPathString(dtd));
         }
         // Log.setLog(Utility.GEN_DIRECTORY + "logCldr.txt");
         for (String subDir : src.list()) {
@@ -77,18 +76,18 @@
         }
     }
 
-    static Set<String> keys1 = new TreeSet<String>();
-    static Set<String> keys2 = new TreeSet<String>();
+    static Set<String> keys1 = new TreeSet<>();
+    static Set<String> keys2 = new TreeSet<>();
 
     private static String findFirstDifference(CLDRFile cldrFile, CLDRFile regenFile) {
         keys1.clear();
         keys2.clear();
-        CollectionUtilities.addAll(cldrFile.iterator(), keys1);
-        CollectionUtilities.addAll(regenFile.iterator(), keys2);
+        cldrFile.forEach(keys1::add);
+        regenFile.forEach(keys2::add);
         if (!keys1.equals(keys2)) {
-            Set<String> missing = new TreeSet<String>(keys1);
+            Set<String> missing = new TreeSet<>(keys1);
             missing.removeAll(keys2);
-            Set<String> extras = new TreeSet<String>(keys2);
+            Set<String> extras = new TreeSet<>(keys2);
             extras.removeAll(keys1);
             return "\tMissing: " + missing.toString().replace(", ", ",\n") + ";\n\tExtras: "
                 + extras.toString().replace(", ", ",\n");
diff --git a/tools/java/org/unicode/cldr/tool/CLDRModify.java b/tools/java/org/unicode/cldr/tool/CLDRModify.java
index 3c7857a..9713254 100644
--- a/tools/java/org/unicode/cldr/tool/CLDRModify.java
+++ b/tools/java/org/unicode/cldr/tool/CLDRModify.java
@@ -49,8 +49,9 @@
 import org.unicode.cldr.util.FileProcessor;
 import org.unicode.cldr.util.LanguageTagParser;
 import org.unicode.cldr.util.Level;
-import org.unicode.cldr.util.Log;
+// import org.unicode.cldr.util.Log;
 import org.unicode.cldr.util.LogicalGrouping;
+import org.unicode.cldr.util.PathChecker;
 import org.unicode.cldr.util.PathHeader;
 import org.unicode.cldr.util.PatternCache;
 import org.unicode.cldr.util.RegexLookup;
@@ -65,9 +66,9 @@
 import org.unicode.cldr.util.XPathParts.Comments;
 import org.unicode.cldr.util.XPathParts.Comments.CommentType;
 
+import com.google.common.base.Joiner;
 import com.google.common.base.Splitter;
 import com.ibm.icu.dev.tool.UOption;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Utility;
 import com.ibm.icu.text.Collator;
 import com.ibm.icu.text.DateTimePatternGenerator;
@@ -162,6 +163,7 @@
             }
         }
 
+        @Override
         public String toString() {
             return action != null ? action.toString()
                 : exactMatch == null ? regexMatch.toString()
@@ -335,7 +337,7 @@
         System.out.format("Source:\t%s\n", sourceDirBase);
         System.out.format("Target:\t%s\n", targetDirBase);
 
-        Set<String> dirSet = new TreeSet<String>();
+        Set<String> dirSet = new TreeSet<>();
         if (recurseOnDirectories == null) {
             dirSet.add("");
         } else {
@@ -350,7 +352,7 @@
             String sourceDir = sourceDirBase + dir;
             if (!new File(sourceDir).isDirectory()) continue;
             String targetDir = targetDirBase + dir;
-            Log.setLog(targetDir + "/diff", "log.txt");
+            // Log.setLog(targetDir + "/diff", "log.txt");
             try {
                 Factory cldrFactory = Factory.make(sourceDir, ".*");
 
@@ -389,10 +391,10 @@
                  * testSet = new TreeSet(Arrays.asList(quicktest));
                  * }
                  */
-                Set<String> locales = new TreeSet<String>(cldrFactory.getAvailable());
+                Set<String> locales = new TreeSet<>(cldrFactory.getAvailable());
                 if (mergeFactory != null) {
-                    Set<String> temp = new TreeSet<String>(mergeFactory.getAvailable());
-                    Set<String> locales3 = new TreeSet<String>();
+                    Set<String> temp = new TreeSet<>(mergeFactory.getAvailable());
+                    Set<String> locales3 = new TreeSet<>();
                     for (String locale : temp) {
                         if (!locale.startsWith(join_prefix) || !locale.endsWith(join_postfix)) continue;
                         locales3.add(locale.substring(join_prefix.length(), locale.length() - join_postfix.length()));
@@ -523,13 +525,13 @@
                         testPath = "//ldml/dates/calendars/calendar[@type=\"persian\"]/months/monthContext[@type=\"format\"]/monthWidth[@type=\"abbreviated\"]/alias";
                         System.out.println(k.getStringValue(testPath));
                         // System.out.println(k.getFullXPath(testPath));
-                        Iterator it4 = k.iterator();
-                        Set s = CollectionUtilities.addAll(it4, new TreeSet());
+                        TreeSet s = new TreeSet();
+                        k.forEach(s::add);
 
                         System.out.println(k.getStringValue(testPath));
                         // if (true) return;
                         Set orderedSet = new TreeSet(k.getComparator());
-                        CollectionUtilities.addAll(k.iterator(), orderedSet);
+                        k.forEach(orderedSet::add);
                         for (Iterator it3 = orderedSet.iterator(); it3.hasNext();) {
                             String path = (String) it3.next();
                             // System.out.println(path);
@@ -575,7 +577,7 @@
                 }
             } finally {
                 fixList.handleCleanup();
-                Log.close();
+                // Log.close();
                 System.out.println("Done -- Elapsed time: " + ((System.currentTimeMillis() - startTime) / 60000.0)
                     + " minutes");
             }
@@ -624,7 +626,7 @@
             }
             return Retention.RETAIN_IF_DIFFERENT;
         }
-    };
+    }
 
     static final Splitter COMMA_SEMI = Splitter.on(Pattern.compile("[,;|]")).trimResults().omitEmptyStrings();
     protected static final boolean NUMBER_SYSTEM_HACK = true;
@@ -646,7 +648,7 @@
      *
      */
     private static void removePosix(CLDRFile toMergeIn) {
-        Set<String> toRemove = new HashSet<String>();
+        Set<String> toRemove = new HashSet<>();
         for (String xpath : toMergeIn) {
             if (xpath.startsWith("//ldml/posix")) toRemove.add(xpath);
         }
@@ -704,6 +706,9 @@
     // }
     // }
 
+    static PathChecker pathChecker = new PathChecker();
+
+
     abstract static class CLDRFilter {
         protected CLDRFile cldrFileToFilter;
         protected CLDRFile cldrFileToFilterResolved;
@@ -810,6 +815,10 @@
             }
             boolean pathSame = oldFullPath.equals(newFullPath);
 
+            if (!pathChecker.checkPath(newFullPath)) {
+                throw new IllegalArgumentException("Bad path: " + newFullPath);
+            }
+
             if (pathSame) {
                 if (newValue == null) {
                     remove(oldFullPath, reason);
@@ -975,9 +984,9 @@
         }
     }
 
-    static Set<String> totalSkeletons = new HashSet<String>();
+    static Set<String> totalSkeletons = new HashSet<>();
 
-    static Map<String, String> rootUnitMap = new HashMap<String, String>();
+    static Map<String, String> rootUnitMap = new HashMap<>();
 
     static {
         rootUnitMap.put("second", "s");
@@ -1035,6 +1044,7 @@
         });
 
         fixList.add('e', "fix Interindic", new CLDRFilter() {
+            @Override
             public void handlePath(String xpath) {
                 if (xpath.indexOf("=\"InterIndic\"") < 0) return;
                 String v = cldrFileToFilter.getStringValue(xpath);
@@ -1070,6 +1080,7 @@
                 // TODO add simpler way to skip file entirely
             }
 
+            @Override
             public void handlePath(String xpath) {
                 if (skip) {
                     return;
@@ -1101,7 +1112,7 @@
                 }
                 String oldFullXPath = cldrFileToFilter.getFullXPath(xpath);
                 String value = cldrFileToFilter.getStringValue(xpath);
-                XPathParts fullparts = XPathParts.getInstance(oldFullXPath); // not frozen, for removeAttribute
+                XPathParts fullparts = XPathParts.getFrozenInstance(oldFullXPath).cloneAsThawed(); // not frozen, for removeAttribute
                 fullparts.removeAttribute("pattern", "alt");
                 fullparts.setAttribute("currencyFormat", "type", "accounting");
                 String newFullXPath = fullparts.toString();
@@ -1138,6 +1149,7 @@
         fixList.add('x', "retain paths", new CLDRFilter() {
             Matcher m = null;
 
+            @Override
             public void handlePath(String xpath) {
                 if (m == null) {
                     m = PatternCache.get(options[PATH].value).matcher("");
@@ -1181,20 +1193,23 @@
         fixList.add('l', "change language code", new CLDRFilter() {
             private CLDRFile resolved;
 
+            @Override
             public void handleStart() {
                 resolved = factory.make(cldrFileToFilter.getLocaleID(), true);
             }
 
+            @Override
             public void handlePath(String xpath) {
                 if (!xpath.contains("/language")) {
                     return;
                 }
-                XPathParts parts = XPathParts.getInstance(xpath); // not frozen, for setAttribute
+                XPathParts parts = XPathParts.getFrozenInstance(xpath);
                 String languageCode = parts.findAttributeValue("language", "type");
                 String v = resolved.getStringValue(xpath);
                 if (!languageCode.equals("swc")) {
                     return;
                 }
+                parts = parts.cloneAsThawed();
                 parts.setAttribute("language", "type", "sw_CD");
                 replace(xpath, parts.toString(), v);
             }
@@ -1221,9 +1236,11 @@
 
         fixList.add('g', "Swap alt/non-alt values for Czechia", new CLDRFilter() {
 
+            @Override
             public void handleStart() {
             }
 
+            @Override
             public void handlePath(String xpath) {
                 XPathParts parts = XPathParts.getFrozenInstance(xpath);
                 if (!parts.containsAttributeValue("alt", "variant") || !parts.containsAttributeValue("type", "CZ")) {
@@ -1239,6 +1256,7 @@
 
         fixList.add('u', "fix duration unit patterns", new CLDRFilter() {
 
+            @Override
             public void handlePath(String xpath) {
                 if (!xpath.contains("/units")) {
                     return;
@@ -1274,7 +1292,7 @@
                     return;
                 }
                 String fullpath = cldrFileToFilter.getFullXPath(xpath);
-                XPathParts parts = XPathParts.getInstance(fullpath); // not frozen, for setAttribute
+                XPathParts parts = XPathParts.getFrozenInstance(fullpath).cloneAsThawed(); // not frozen, for setAttribute
                 String countValue = parts.getAttributeValue(-1, "count");
                 if (!DIGITS.containsAll(countValue)) {
                     return;
@@ -1303,6 +1321,7 @@
 
         fixList.add('b', "Prep for bulk import", new CLDRFilter() {
 
+            @Override
             public void handlePath(String xpath) {
                 if (!options[USER].doesOccur) {
                     return;
@@ -1310,7 +1329,7 @@
                 String userID = options[USER].value;
                 String fullpath = cldrFileToFilter.getFullXPath(xpath);
                 String value = cldrFileToFilter.getStringValue(xpath);
-                XPathParts parts = XPathParts.getInstance(fullpath); // not frozen, for addAttribute
+                XPathParts parts = XPathParts.getFrozenInstance(fullpath).cloneAsThawed(); // not frozen, for addAttribute
                 parts.addAttribute("draft", "unconfirmed");
                 parts.addAttribute("alt", "proposed-u" + userID + "-implicit1.8");
                 String newPath = parts.toString();
@@ -1319,6 +1338,7 @@
         });
 
         fixList.add('c', "Fix transiton from an old currency code to a new one", new CLDRFilter() {
+            @Override
             public void handlePath(String xpath) {
                 String oldCurrencyCode = "VEF";
                 String newCurrencyCode = "VES";
@@ -1367,14 +1387,17 @@
         fixList.add('p', "input-processor", new CLDRFilter() {
             private DisplayAndInputProcessor inputProcessor;
 
+            @Override
             public void handleStart() {
                 inputProcessor = new DisplayAndInputProcessor(cldrFileToFilter, true);
             }
 
+            @Override
             public void handleEnd() {
                 inputProcessor = null; // clean up, just in case
             }
 
+            @Override
             public void handlePath(String xpath) {
                 String value = cldrFileToFilter.getStringValue(xpath);
                 if (!value.equals(value.trim())) {
@@ -1391,6 +1414,7 @@
 
         fixList.add('t', "Fix missing count values groups", new CLDRFilter() {
 
+            @Override
             public void handlePath(String xpath) {
                 if (xpath.indexOf("@count=\"other\"") < 0) {
                     return;
@@ -1410,6 +1434,7 @@
         });
 
         fixList.add('f', "NFC (all but transforms, exemplarCharacters, pc, sc, tc, qc, ic)", new CLDRFilter() {
+            @Override
             public void handlePath(String xpath) {
                 if (xpath.indexOf("/segmentation") >= 0
                     || xpath.indexOf("/transforms") >= 0
@@ -1446,6 +1471,7 @@
             StandardCodes sc = StandardCodes.make();
             String[] codeTypes = { "language", "script", "territory", "currency" };
 
+            @Override
             public void handlePath(String xpath) {
                 if (xpath.indexOf("/currency") < 0
                     && xpath.indexOf("/timeZoneNames") < 0
@@ -1468,12 +1494,13 @@
         });
 
         fixList.add('w', "fix alt='...proposed' when there is no alternative", new CLDRFilter() {
-            private Set<String> newFullXPathSoFar = new HashSet<String>();
+            private Set<String> newFullXPathSoFar = new HashSet<>();
 
+            @Override
             public void handlePath(String xpath) {
                 if (xpath.indexOf("proposed") < 0) return;
                 String fullXPath = cldrFileToFilter.getFullXPath(xpath);
-                XPathParts parts = XPathParts.getInstance(fullXPath); // not frozen, for removeProposed
+                XPathParts parts = XPathParts.getFrozenInstance(fullXPath).cloneAsThawed(); // not frozen, for removeProposed
                 String newFullXPath = parts.removeProposed().toString();
                 // now see if there is an uninherited value
                 String value = cldrFileToFilter.getStringValue(xpath);
@@ -1510,12 +1537,14 @@
         fixList.add('d', "fix dates", new CLDRFilter() {
             DateTimePatternGenerator dateTimePatternGenerator = DateTimePatternGenerator.getEmptyInstance();
             DateTimePatternGenerator.FormatParser formatParser = new DateTimePatternGenerator.FormatParser();
-            Map<String, Set<String>> seenSoFar = new HashMap<String, Set<String>>();
+            Map<String, Set<String>> seenSoFar = new HashMap<>();
 
+            @Override
             public void handleStart() {
                 seenSoFar.clear();
             }
 
+            @Override
             public void handlePath(String xpath) {
                 // timeFormatLength type="full"
                 if (xpath.contains("timeFormatLength") && xpath.contains("full")) {
@@ -1591,12 +1620,14 @@
 
             DateTimePatternGenerator dateTimePatternGenerator = DateTimePatternGenerator.getEmptyInstance();
             DateTimePatternGenerator.FormatParser formatParser = new DateTimePatternGenerator.FormatParser();
-            Map<String, Set<String>> seenSoFar = new HashMap<String, Set<String>>();
+            Map<String, Set<String>> seenSoFar = new HashMap<>();
 
+            @Override
             public void handleStart() {
                 seenSoFar.clear();
             }
 
+            @Override
             public void handlePath(String xpath) {
                 DateTimePatternType datetimePatternType = DateTimePatternType.fromPath(xpath);
 
@@ -1628,10 +1659,12 @@
         fixList.add('j', "add year ranges from root to Japanese calendar eras", new CLDRFilter() {
             private CLDRFile rootFile;
 
+            @Override
             public void handleStart() {
                 rootFile = factory.make("root", false);
             }
 
+            @Override
             public void handlePath(String xpath) {
                 // Skip paths we don't care about
                 if (xpath.indexOf("/calendar[@type=\"japanese\"]/eras/era") < 0) return;
@@ -1668,7 +1701,7 @@
 
         fixList.add('r', "fix references and standards", new CLDRFilter() {
             int currentRef = 500;
-            Map<String, TreeMap<String, String>> locale_oldref_newref = new TreeMap<String, TreeMap<String, String>>();
+            Map<String, TreeMap<String, String>> locale_oldref_newref = new TreeMap<>();
             TreeMap<String, String> oldref_newref;
 
             //LanguageTagParser ltp = new LanguageTagParser();
@@ -1676,11 +1709,12 @@
             // References standards = new References(true);
             // References references = new References(false);
 
+            @Override
             public void handleStart() {
                 String locale = cldrFileToFilter.getLocaleID();
                 oldref_newref = locale_oldref_newref.get(locale);
                 if (oldref_newref == null) {
-                    oldref_newref = new TreeMap<String, String>();
+                    oldref_newref = new TreeMap<>();
                     locale_oldref_newref.put(locale, oldref_newref);
                 }
             }
@@ -1688,12 +1722,13 @@
             // // Samples:
             // // <language type="ain" references="RP1">阿伊努文</language>
             // // <reference type="R1" uri="http://www.info.gov.hk/info/holiday_c.htm">二零零五年公眾假期刊登憲報</reference>
+            @Override
             public void handlePath(String xpath) {
                 // must be minimised for this to work.
                 String fullpath = cldrFileToFilter.getFullXPath(xpath);
                 if (!fullpath.contains("reference")) return;
                 String value = cldrFileToFilter.getStringValue(xpath);
-                XPathParts fullparts = XPathParts.getInstance(fullpath); // can't be frozen
+                XPathParts fullparts = XPathParts.getFrozenInstance(fullpath).cloneAsThawed(); // can't be frozen
                 if ("reference".equals(fullparts.getElement(-1))) {
                     fixType(value, "type", fullpath, fullparts);
                 } else if (fullparts.getAttributeValue(-1, "references") != null) {
@@ -1738,13 +1773,14 @@
                     return;
                 }
                 String fullpath = cldrFileToFilter.getFullXPath(xpath);
-                XPathParts parts = XPathParts.getInstance(fullpath); // not frozen, for putAttributeValue
+                XPathParts parts = XPathParts.getFrozenInstance(fullpath);
                 String cp = parts.getAttributeValue(2, "cp");
                 String tts = parts.getAttributeValue(2, "tts");
                 String type = parts.getAttributeValue(2, "type");
                 if ("tts".equals(type)) {
                     return; // ok, skip
                 }
+                parts = parts.cloneAsThawed();
                 String hex = "1F600";
                 if (cp.startsWith("[")) {
                     UnicodeSet us = new UnicodeSet(cp);
@@ -1787,7 +1823,6 @@
                 if (!available.contains(localeID)) {
                     throw new IllegalArgumentException("no annotations available, probably wrong directory");
                 }
-                ;
                 resolved = factory.make(localeID, true);
             }
 
@@ -1805,7 +1840,7 @@
                 if (type == null) {
                     return; // no TTS, so keywords, skip
                 }
-                
+
                 XPathParts keywordParts = parts.cloneAsThawed().removeAttribute(2, "type");
                 String keywordPath = keywordParts.toString();
                 String rawKeywordValue = cldrFileToFilter.getStringValue(keywordPath);
@@ -1817,13 +1852,13 @@
                         return;
                     }
                 }
-                
+
                 // skip if the name is not above root
                 String nameSourceLocale = resolved.getSourceLocaleID(xpath, null);
                 if ("root".equals(nameSourceLocale) || XMLSource.CODE_FALLBACK_ID.equals(nameSourceLocale)) {
                     return;
                 }
-                
+
                 String name = resolved.getStringValue(xpath);
                 String keywordValue = resolved.getStringValue(keywordPath);
                 String sourceLocaleId = resolved.getSourceLocaleID(keywordPath, null);
@@ -1837,7 +1872,7 @@
                     int debug = 0;
                 }
                 DisplayAndInputProcessor.filterCoveredKeywords(sorted);
-                String newKeywordValue = CollectionUtilities.join(sorted, " | ");
+                String newKeywordValue = Joiner.on(" | ").join(sorted);
                 if (!newKeywordValue.equals(keywordValue)) {
                     replace(keywordPath, keywordPath, newKeywordValue);
                 }
@@ -1919,7 +1954,7 @@
             "fix according to -k config file. Details on http://cldr.unicode.org/development/cldr-big-red-switch/cldrmodify-passes/cldrmodify-config",
             new CLDRFilter() {
             private Map<ConfigMatch, LinkedHashSet<Map<ConfigKeys, ConfigMatch>>> locale2keyValues;
-            private LinkedHashSet<Map<ConfigKeys, ConfigMatch>> keyValues = new LinkedHashSet<Map<ConfigKeys, ConfigMatch>>();
+            private LinkedHashSet<Map<ConfigKeys, ConfigMatch>> keyValues = new LinkedHashSet<>();
             private Matcher draftMatcher = Pattern.compile("\\[@draft=\"[^\"]+\"]").matcher("");
 
             @Override
@@ -1955,8 +1990,9 @@
                     case add:
                         if (pathMatch != null || valueMatch != null || newPath == null || newValue == null) {
                             throw new IllegalArgumentException(
-                                "Bad arguments, must have " +
-                                    "path==null, value=null, new_path!=null, new_value!=null:\n\t"
+                                "Bad arguments, must have non-null for one of:" +
+                                    "path, value, new_path, new_value "
+                                    + ":\n\t"
                                     + entry);
                         }
                         String newPathString = newPath.getPath(getResolved());
@@ -1989,7 +2025,7 @@
             }
 
             private void fillCache() {
-                locale2keyValues = new LinkedHashMap<ConfigMatch, LinkedHashSet<Map<ConfigKeys, ConfigMatch>>>();
+                locale2keyValues = new LinkedHashMap<>();
                 String configFileName = options[KONFIG].value;
                 FileProcessor myReader = new FileProcessor() {
                     {
@@ -2003,7 +2039,7 @@
 //                                return true;
 //                            }
                         String[] lineParts = line.split("\\s*;\\s*");
-                        Map<ConfigKeys, ConfigMatch> keyValue = new EnumMap<ConfigKeys, ConfigMatch>(
+                        Map<ConfigKeys, ConfigMatch> keyValue = new EnumMap<>(
                             ConfigKeys.class);
                         for (String linePart : lineParts) {
                             int pos = linePart.indexOf('=');
@@ -2022,11 +2058,12 @@
                             throw new IllegalArgumentException();
                         }
 
+                        // validate new path
                         LinkedHashSet<Map<ConfigKeys, ConfigMatch>> keyValues = locale2keyValues
                             .get(locale);
                         if (keyValues == null) {
                             locale2keyValues.put(locale,
-                                keyValues = new LinkedHashSet<Map<ConfigKeys, ConfigMatch>>());
+                                keyValues = new LinkedHashSet<>());
                         }
                         keyValues.add(keyValue);
                         return true;
@@ -2181,8 +2218,8 @@
             }
             @Override
             public void handlePath(String xpath) {
-                if (skip 
-                    || seen.contains(xpath) 
+                if (skip
+                    || seen.contains(xpath)
                     || coverageLeveler.getLevel(xpath) == Level.COMPREHENSIVE) {
                     return;
                 }
@@ -2229,12 +2266,12 @@
                 for (String path2 : paths) {
                     String fullPath = resolved.getFullXPath(path2);
                     String value = resolved.getStringValue(path2);
-                    if (LogicalGrouping.isOptional(cldrFileToFilter, path2) 
+                    if (LogicalGrouping.isOptional(cldrFileToFilter, path2)
                         && !cldrFileToFilter.isHere(path2)) {
                         continue;
                     }
 
-                    XPathParts fullparts = XPathParts.getInstance(fullPath); // not frozen, for setAttribute
+                    XPathParts fullparts = XPathParts.getFrozenInstance(fullPath).cloneAsThawed(); // not frozen, for setAttribute
                     fullparts.setAttribute(-1, "draft", worstStatus.toString());
                     replace(fullPath, fullparts.toString(), value, "Fleshing out bailey to " + worstStatus);
                 }
@@ -2268,11 +2305,11 @@
         if (key.equals("root")) return;
         Set<String> availableChildren = cldrFactory.getAvailableWithParent(key, true);
         if (availableChildren.size() == 0) return;
-        Set<String> skipPaths = new HashSet<String>();
-        Map<String, ValuePair> haveSameValues = new TreeMap<String, ValuePair>();
+        Set<String> skipPaths = new HashSet<>();
+        Map<String, ValuePair> haveSameValues = new TreeMap<>();
         CLDRFile resolvedFile = cldrFactory.make(key, true);
         // get only those paths that are not in "root"
-        CollectionUtilities.addAll(resolvedFile.iterator(), skipPaths);
+        resolvedFile.forEach(skipPaths::add);
 
         // first, collect all the paths
         for (String locale : availableChildren) {
@@ -2350,7 +2387,7 @@
         // TODO before modifying, make sure that it is fully resolved.
         // then minimize against the NEW parents
 
-        Set<String> removal = new TreeSet<String>(k.getComparator());
+        Set<String> removal = new TreeSet<>(k.getComparator());
         CLDRFile replacements = SimpleFactory.makeFile("temp");
         fixList.setFile(k, inputOptions, cldrFactory, removal, replacements);
 
@@ -2399,9 +2436,9 @@
     public static void testJavaSemantics() {
         Collator caseInsensitive = Collator.getInstance(ULocale.ROOT);
         caseInsensitive.setStrength(Collator.SECONDARY);
-        Set<String> setWithCaseInsensitive = new TreeSet<String>(caseInsensitive);
+        Set<String> setWithCaseInsensitive = new TreeSet<>(caseInsensitive);
         setWithCaseInsensitive.addAll(Arrays.asList(new String[] { "a", "b", "c" }));
-        Set<String> plainSet = new TreeSet<String>();
+        Set<String> plainSet = new TreeSet<>();
         plainSet.addAll(Arrays.asList(new String[] { "a", "b", "B" }));
         System.out.println("S1 equals S2?\t" + setWithCaseInsensitive.equals(plainSet));
         System.out.println("S2 equals S1?\t" + plainSet.equals(setWithCaseInsensitive));
diff --git a/tools/java/org/unicode/cldr/tool/Chart.java b/tools/java/org/unicode/cldr/tool/Chart.java
index 882af23..752b064 100644
--- a/tools/java/org/unicode/cldr/tool/Chart.java
+++ b/tools/java/org/unicode/cldr/tool/Chart.java
@@ -23,7 +23,7 @@
     public static final SupplementalDataInfo SDI = CONFIG.getSupplementalDataInfo();
     public static final CLDRFile ENGLISH = CONFIG.getEnglish();
     public static final String LS = System.lineSeparator();
-    
+
     public static final String PREV_CHART_VERSION_DIRECTORY = ToolConstants.getBaseDirectory(ToolConstants.PREV_CHART_VERSION);
     public static final String CHART_VERSION_DIRECTORY = ToolConstants.getBaseDirectory(ToolConstants.CHART_VERSION);
 
@@ -31,7 +31,7 @@
     private static final String LDML_SPEC = "https://unicode.org/reports/tr35/";
 
     public static String dataScrapeMessage(String specPart, String testFile, String... dataFiles) {
-        final String dataFileList = dataFiles.length == 0 ? null : 
+        final String dataFileList = dataFiles.length == 0 ? null :
             ListFormatter.getInstance(ULocale.ENGLISH).format(
                 Arrays.asList(dataFiles).stream()
                 .map(dataFile -> Chart.dataFileLink(dataFile))
@@ -59,7 +59,7 @@
      */
     public String getFileName() {
         return null;
-    };
+    }
 
     /**
      * Show Date?
@@ -100,7 +100,7 @@
         standardFooter(pw, AnalyticsID.CLDR);
     }
 
-    enum AnalyticsID {
+    private enum AnalyticsID {
         CLDR("UA-7672775-1"), ICU("UA-7670213-1"), ICU_GUIDE("UA-7670256-1"), UNICODE("UA-7670213-1"), UNICODE_UTILITY("UA-8314904-1");
         public final String id;
 
@@ -109,7 +109,7 @@
         }
     }
 
-    public static void standardFooter(FormattedFileWriter pw, AnalyticsID analytics) throws IOException {
+    private static void standardFooter(FormattedFileWriter pw, AnalyticsID analytics) throws IOException {
         pw.write("<div style='text-align: center; margin-top:2em; margin-bottom: 60em;'><br>\n"
             + "<a href='http://www.unicode.org/unicode/copyright.html'>\n"
             + "<img src='http://www.unicode.org/img/hb_notice.gif' style='border-style: none; width: 216px; height=50px;' alt='Access to Copyright and terms of use'>"
diff --git a/tools/java/org/unicode/cldr/tool/ChartAnnotations.java b/tools/java/org/unicode/cldr/tool/ChartAnnotations.java
index 14a97e7..7bb9dcb 100644
--- a/tools/java/org/unicode/cldr/tool/ChartAnnotations.java
+++ b/tools/java/org/unicode/cldr/tool/ChartAnnotations.java
@@ -16,6 +16,7 @@
 import org.unicode.cldr.util.Annotations.AnnotationSet;
 import org.unicode.cldr.util.CLDRFile;
 import org.unicode.cldr.util.CLDRPaths;
+import org.unicode.cldr.util.CLDRURLS;
 import org.unicode.cldr.util.CldrUtility;
 import org.unicode.cldr.util.Factory;
 import org.unicode.cldr.util.FileCopier;
@@ -23,9 +24,9 @@
 import org.unicode.cldr.util.LanguageTagParser;
 import org.unicode.cldr.util.LocaleIDParser;
 
+import com.google.common.base.Joiner;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R3;
@@ -39,7 +40,9 @@
     private static final String LDML_ANNOTATIONS = "<a href='http://unicode.org/repos/cldr/trunk/specs/ldml/tr35-general.html#Annotations'>LDML Annotations</a>";
 
     private static final String MAIN_HEADER = "<p>Annotations provide names and keywords for Unicode characters, currently focusing on emoji. "
-        + "If you see any problems, please <a target='_blank' href='http://unicode.org/cldr/trac/newticket'>file a ticket</a> with the corrected values for the locale. "
+        + "If you see any problems, please <a target='_blank' href='"
+        + CLDRURLS.CLDR_NEWTICKET_URL
+        + "'>file a ticket</a> with the corrected values for the locale. "
         + "For the XML data used for these charts, see "
         + "<a href='http://unicode.org/repos/cldr/tags/latest/common/annotations/'>latest-release annotations </a> "
         + "or <a href='http://unicode.org/repos/cldr/tags/latest/common/annotations/'>beta annotations</a>. "
@@ -71,6 +74,7 @@
         return MAIN_HEADER + "<p>The charts are presented in groups of related languages, for easier comparison.<p>";
     }
 
+    @Override
     public void writeContents(FormattedFileWriter pw) throws IOException {
         FileCopier.ensureDirectoryExists(DIR);
         FileCopier.copy(Chart.class, "index.css", DIR);
@@ -108,7 +112,7 @@
 
         // set up right order for columns
 
-        Map<String, String> nameToCode = new LinkedHashMap<String, String>();
+        Map<String, String> nameToCode = new LinkedHashMap<>();
         Relation<LanguageGroup, R3<Integer, String, String>> groupToNameAndCodeSorted = Relation.of(
             new EnumMap<LanguageGroup, Set<R3<Integer, String, String>>>(LanguageGroup.class),
             TreeSet.class);
@@ -212,7 +216,7 @@
                             }
                         }
                         for (Entry<String, Collection<String>> entry : valueToSub.asMap().entrySet()) {
-                            baseAnnotation += "<hr><i>" + CollectionUtilities.join(entry.getValue(), ", ") + "</i>: " + entry.getKey();
+                            baseAnnotation += "<hr><i>" + Joiner.on(", ").join(entry.getValue()) + "</i>: " + entry.getKey();
                         }
                     }
                     tablePrinter.addCell(baseAnnotation);
@@ -333,7 +337,7 @@
                 + "The keywords plus the words in the short name are typically used for search and predictive typing.<p>\n"
                 + "<p>Most short names and keywords that can be constructed with the mechanism in " + LDML_ANNOTATIONS + " are omitted. "
                 + "However, a few are included for comparison: "
-                + CollectionUtilities.join(EXTRAS.addAllTo(new TreeSet<>()), ", ") + ". "
+                + Joiner.on(", ").join(EXTRAS.addAllTo(new TreeSet<>())) + ". "
                 + "In this chart, missing items are marked with “" + Annotations.MISSING_MARKER + "”, "
                 + "‘fallback’ constructed items with “" + Annotations.BAD_MARKER + "”, "
                 + "substituted English values with “" + Annotations.ENGLISH_MARKER + "”, and "
diff --git a/tools/java/org/unicode/cldr/tool/ChartCollation.java b/tools/java/org/unicode/cldr/tool/ChartCollation.java
index 20bd229..9a67264 100644
--- a/tools/java/org/unicode/cldr/tool/ChartCollation.java
+++ b/tools/java/org/unicode/cldr/tool/ChartCollation.java
@@ -29,8 +29,8 @@
 import org.unicode.cldr.util.XMLFileReader;
 import org.unicode.cldr.util.XPathParts;
 
+import com.google.common.base.Joiner;
 import com.google.common.base.Splitter;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.text.Collator;
 import com.ibm.icu.text.RuleBasedCollator;
 import com.ibm.icu.text.Transliterator;
@@ -41,7 +41,7 @@
     static final String NOT_TAILORED = "notTailored";
     static final String NOT_EXEMPLARS = "notExemplars";
 
-    private static final String KNOWN_PROBLEMS = 
+    private static final String KNOWN_PROBLEMS =
         "<ul>" + LS
         + "<li>The characters used in the illustration are:" + LS
         + "<ol>" + LS
@@ -90,6 +90,7 @@
             + dataScrapeMessage("/tr35-collation.html", "common/testData/units/unitsTest.txt", "common/collation")+ LS;
     }
 
+    @Override
     public void writeContents(FormattedFileWriter pw) throws IOException {
         FileCopier.ensureDirectoryExists(DIR);
         FileCopier.copy(Chart.class, "index.css", DIR);
@@ -210,7 +211,7 @@
         if (dataItem == null) {
             data.put(type, dataItem = new Data());
         }
-        dataItem.settings.add(leaf + ":" + CollectionUtilities.join(settings, ";"));
+        dataItem.settings.add(leaf + ":" + Joiner.on(";").join(settings));
     }
 
     private void addCollator(Map<String, Data> data, String type, RuleBasedCollator col) {
@@ -311,7 +312,7 @@
                 Set<String> settings = entry.getValue().settings;
                 StringBuilder list = new StringBuilder();
                 if (!settings.isEmpty()) {
-                    list.append(CollectionUtilities.join(settings, "<br>"));
+                    list.append(Joiner.on("<br>").join(settings));
                     list.append("<br><b><i>plus</i></b><br>");
                 }
                 if (col == null) {
diff --git a/tools/java/org/unicode/cldr/tool/ChartDelta.java b/tools/java/org/unicode/cldr/tool/ChartDelta.java
index 4acfb65..a478a8f 100644
--- a/tools/java/org/unicode/cldr/tool/ChartDelta.java
+++ b/tools/java/org/unicode/cldr/tool/ChartDelta.java
@@ -19,6 +19,7 @@
 import java.util.regex.Pattern;
 
 import org.unicode.cldr.draft.FileUtilities;
+import org.unicode.cldr.test.SubmissionLocales;
 import org.unicode.cldr.tool.FormattedFileWriter.Anchors;
 import org.unicode.cldr.tool.Option.Options;
 import org.unicode.cldr.tool.Option.Params;
@@ -43,14 +44,15 @@
 import org.unicode.cldr.util.SimpleXMLSource;
 import org.unicode.cldr.util.StandardCodes;
 import org.unicode.cldr.util.SupplementalDataInfo;
+import org.unicode.cldr.util.SupplementalDataInfo.CoverageVariableInfo;
 import org.unicode.cldr.util.TransliteratorUtilities;
 import org.unicode.cldr.util.XMLFileReader;
 import org.unicode.cldr.util.XPathParts;
 
+import com.google.common.base.Joiner;
 import com.google.common.base.Splitter;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row.R2;
 import com.ibm.icu.impl.Row.R3;
@@ -62,24 +64,23 @@
 public class ChartDelta extends Chart {
     private static final boolean verbose_skipping = false;
 
-    private static final String DIR_NAME = "delta";
+    private static final String DEFAULT_DELTA_DIR_NAME = "delta";
+    private static final String DEFAULT_CHURN_DIR_NAME = "churn";
 
     private static final boolean SKIP_REFORMAT_ANNOTATIONS = ToolConstants.PREV_CHART_VERSION.compareTo("30") >= 0;
 
     private static final PageId DEBUG_PAGE_ID = PageId.DayPeriod;
 
     private static final SupplementalDataInfo SUPPLEMENTAL_DATA_INFO = CLDRConfig.getInstance().getSupplementalDataInfo();
-    private static final String LAST_ARCHIVE_DIRECTORY = CLDRPaths.LAST_RELEASE_DIRECTORY;
-    private static final String CURRENT_DIRECTORY = CLDRPaths.ARCHIVE_DIRECTORY + "cldr-" + ToolConstants.PREV_CHART_VERSION_WITH0 + "/";
-    private static final String LOG_DIR = CLDRPaths.GEN_DIRECTORY + "charts/";
 
-    enum MyOptions {
+    private enum MyOptions {
         fileFilter(new Params().setHelp("filter files by dir/locale, eg: ^main/en$ or .*/en").setMatch(".*")),
         orgFilter(new Params().setHelp("filter files by organization").setMatch(".*")),
         Vxml(new Params().setHelp("use cldr-aux for the base directory")),
         coverageFilter(new Params().setHelp("filter files by coverage").setMatch(".*")),
-        directory(new Params().setHelp("Set the output directory name").setDefault(DIR_NAME).setMatch(".*")),
+        directory(new Params().setHelp("Set the output directory name").setDefault(DEFAULT_DELTA_DIR_NAME).setMatch(".*")),
         verbose(new Params().setHelp("verbose debugging messages")),
+        highLevelOnly(new Params().setHelp("check high-level paths (churn) only").setFlag('H')),
         ;
 
         // BOILERPLATE TO COPY
@@ -96,20 +97,31 @@
             }
         }
 
-        private static Set<String> parse(String[] args, boolean showArguments) {
+        private static Set<String> parse(String[] args) {
             return myOptions.parse(MyOptions.values()[0], args, true);
         }
     }
 
     private final Matcher fileFilter;
-    private final String DIR;
+    private final String dirName; // "delta" or "churn" or set as option
+    private final String chartNameCap; // capitalized, e.g., "Delta" or "Churn"
+    private final String DIR; // full path of output folder
     private final Level minimumPathCoverage;
-    private final boolean vxml;
     private final boolean verbose;
 
+    /**
+     * If true, check only high-level paths, i.e., paths for which any changes
+     * have high potential to cause disruptive "churn"
+     */
+    private final boolean highLevelOnly;
+
     public static void main(String[] args) {
+        main(args, false);
+    }
+
+    public static void main(String[] args, boolean highLevelOnly) {
         System.out.println("use -DCHART_VERSION=36.0 -DPREV_CHART_VERSION=34.0 to generate the differences between v36 and v34.");
-        MyOptions.parse(args, true);
+        MyOptions.parse(args);
         Matcher fileFilter = !MyOptions.fileFilter.option.doesOccur() ? null : PatternCache.get(MyOptions.fileFilter.option.getValue()).matcher("");
         if (MyOptions.orgFilter.option.doesOccur()) {
             if (MyOptions.fileFilter.option.doesOccur()) {
@@ -118,23 +130,38 @@
             String rawOrg = MyOptions.orgFilter.option.getValue();
             Organization org = Organization.fromString(rawOrg);
             Set<String> locales = StandardCodes.make().getLocaleCoverageLocales(org);
-            fileFilter = PatternCache.get("^(main|annotations)/(" + CollectionUtilities.join(locales, "|") + ")$").matcher("");
+            fileFilter = PatternCache.get("^(main|annotations)/(" + Joiner.on("|").join(locales) + ")$").matcher("");
         }
         Level coverage = !MyOptions.coverageFilter.option.doesOccur() ? null : Level.fromString(MyOptions.coverageFilter.option.getValue());
         boolean verbose = MyOptions.verbose.option.doesOccur();
-        boolean vxml = MyOptions.Vxml.option.doesOccur();
-        String DIR = CLDRPaths.CHART_DIRECTORY + MyOptions.directory.option.getValue();
-        ChartDelta temp = new ChartDelta(fileFilter, coverage, DIR, verbose, vxml);
+        if (MyOptions.highLevelOnly.option.doesOccur()) {
+            highLevelOnly = true;
+        }
+        String dirName = MyOptions.directory.option.getValue();
+        if (highLevelOnly && DEFAULT_DELTA_DIR_NAME.equals(dirName)) {
+            System.out.println("For highLevelOnly, changing directory from " + DEFAULT_DELTA_DIR_NAME
+                    + " to " + DEFAULT_CHURN_DIR_NAME);
+            dirName = DEFAULT_CHURN_DIR_NAME;
+        }
+        ChartDelta temp = new ChartDelta(fileFilter, coverage, dirName, verbose, highLevelOnly);
         temp.writeChart(null);
         temp.showTotals();
+        if (highLevelOnly) {
+            HighLevelPaths.reportHighLevelPathUsage();
+        }
+        System.out.println("Finished. Files may have been created in these directories:");
+        System.out.println(temp.DIR);
+        System.out.println(getTsvDir(temp.DIR, temp.dirName));
     }
 
-    public ChartDelta(Matcher fileFilter, Level coverage, String dir, boolean verbose, boolean vxml) {
+    private ChartDelta(Matcher fileFilter, Level coverage, String dirName, boolean verbose, boolean highLevelOnly) {
         this.fileFilter = fileFilter;
         this.verbose = verbose;
-        this.DIR = dir;
+        this.highLevelOnly = highLevelOnly;
+        this.dirName = dirName;
+        this.chartNameCap = dirName.substring(0, 1).toUpperCase() + dirName.substring(1);
+        this.DIR = CLDRPaths.CHART_DIRECTORY + dirName;
         this.minimumPathCoverage = coverage;
-        this.vxml = vxml;
     }
 
     private static final String SEP = "\u0001";
@@ -152,7 +179,7 @@
 
     @Override
     public String getTitle() {
-        return "Delta Charts";
+        return chartNameCap + " Charts";
     }
 
     @Override
@@ -180,21 +207,23 @@
         pw.write(anchors.toString());
     }
 
-    static class PathHeaderSegment extends R3<PathHeader, Integer, String> {
+    private static class PathHeaderSegment extends R3<PathHeader, Integer, String> {
         public PathHeaderSegment(PathHeader b, int elementIndex, String attribute) {
             super(b, elementIndex, attribute);
         }
     }
 
-    static class PathDiff extends R4<PathHeaderSegment, String, String, String> {
+    private static class PathDiff extends R4<PathHeaderSegment, String, String, String> {
         public PathDiff(String locale, PathHeaderSegment pathHeaderSegment, String oldValue, String newValue) {
             super(pathHeaderSegment, locale, oldValue, newValue);
         }
     }
 
-    static final CLDRFile EMPTY_CLDR = new CLDRFile(new SimpleXMLSource("und").freeze());
+    private static final CLDRFile EMPTY_CLDR = new CLDRFile(new SimpleXMLSource("und").freeze());
 
-    enum ChangeType {
+    private static final File CLDR_BASE_DIR = CLDRConfig.getInstance().getCldrBaseDirectory();
+
+    private enum ChangeType {
         added, deleted, changed, same;
         public static ChangeType get(String oldValue, String currentValue) {
             return oldValue == null ? added
@@ -204,9 +233,9 @@
         }
     }
 
-    Counter<ChangeType> counter = new Counter<>();
-    Map<String, Counter<ChangeType>> fileCounters = new TreeMap<>();
-    Set<String> badHeaders = new TreeSet<>();
+    private Counter<ChangeType> counter = new Counter<>();
+    private Map<String, Counter<ChangeType>> fileCounters = new TreeMap<>();
+    private Set<String> badHeaders = new TreeSet<>();
 
     private void addChange(String file, ChangeType changeType, int count) {
         counter.add(changeType, count); // unified add
@@ -218,8 +247,8 @@
     }
 
     private void showTotals() {
-        try (PrintWriter pw = FileUtilities.openUTF8Writer(getTsvDir(DIR, DIR_NAME), DIR_NAME + "_summary.tsv")) {
-            pw.println("# percentages are of *new* total");
+        try (PrintWriter pw = FileUtilities.openUTF8Writer(getTsvDir(DIR, dirName), dirName + "_summary.tsv")) {
+            // pw.println("# percentages are of *new* total");
             pw.print("# dir\tfile");
             for (ChangeType item : ChangeType.values()) {
                 pw.print("\t" + (item == ChangeType.same ? "total" : item.toString()));
@@ -233,7 +262,7 @@
             for (String s : badHeaders) {
                 pw.println(s);
             }
-            pw.println("# EOF");
+            // pw.println("# EOF");
         } catch (IOException e) {
             throw new ICUUncheckedIOException(e);
         }
@@ -256,39 +285,27 @@
         pw.println();
     }
 
-    public void writeSubcharts(Anchors anchors) throws IOException {
-        FileUtilities.copyFile(ChartDelta.class, "index.css", getDirectory());
-        counter.clear();
-        fileCounters.clear();
-        writeNonLdmlPlain(anchors);
-        writeLdml(anchors);
-    }
-
-    private static final File[] PATHS = {
-        new File(CLDRPaths.MAIN_DIRECTORY),
-        new File(CLDRPaths.ANNOTATIONS_DIRECTORY),
-    };
-
+    /**
+     *
+     * @param anchors
+     * @throws IOException
+     *
+     * TODO: shorten the function using subroutines
+     */
     private void writeLdml(Anchors anchors)  throws IOException {
-
-        try (PrintWriter tsvFile = FileUtilities.openUTF8Writer(getTsvDir(DIR, DIR_NAME), DIR_NAME + ".tsv");
-            PrintWriter tsvCountFile = FileUtilities.openUTF8Writer(getTsvDir(DIR, DIR_NAME), DIR_NAME + "_count.tsv");
+        try (PrintWriter tsvFile = FileUtilities.openUTF8Writer(getTsvDir(DIR, dirName), dirName + ".tsv");
+            PrintWriter tsvCountFile = FileUtilities.openUTF8Writer(getTsvDir(DIR, dirName), dirName + "_count.tsv");
             ) {
             tsvFile.println("# Section\tPage\tHeader\tCode\tLocale\tOld\tNew\tLevel");
 
             // set up factories
             List<Factory> factories = new ArrayList<>();
             List<Factory> oldFactories = new ArrayList<>();
-//        factories.add(Factory.make(CLDRPaths.BASE_DIRECTORY + "common/" + "main", ".*"));
-//        oldFactories.add(Factory.make(LAST_ARCHIVE_DIRECTORY + "common/" + "main", ".*"));
 
             Counter<PathHeader> counts = new Counter<>();
 
             String dirBase = ToolConstants.getBaseDirectory(ToolConstants.CHART_VERSION);
             String prevDirBase = ToolConstants.getBaseDirectory(ToolConstants.PREV_CHART_VERSION);
-//                ToolConstants.CLDR_RELEASE_VERSION_SET.contains(ToolConstants.PREV_CHART_VERSION) ? CURRENT_DIRECTORY 
-//                    : vxml ? CLDRPaths.SVN_DIRECTORY + "cldr-aux/" + "voting/36/vxml/" // TODO fix version to be variable
-//                        : CLDRPaths.BASE_DIRECTORY;
 
             for (String dir : DtdType.ldml.directories) {
                 if (dir.equals("annotationsDerived") || dir.equals("casing")) {
@@ -312,7 +329,7 @@
                 System.out.println("Will compare: " + dir + "\t\t" + current + "\t\t" + past);
             }
             if (factories.isEmpty()) {
-                throw new IllegalArgumentException("No factories found for " 
+                throw new IllegalArgumentException("No factories found for "
                     + dirBase + ": " + DtdType.ldml.directories);
             }
             // get a list of all the locales to cycle over
@@ -321,7 +338,7 @@
             Matcher m = fileMatcher.matcher("");
             Set<String> defaultContents = SDI.getDefaultContentLocales();
             LanguageTagParser ltp = new LanguageTagParser();
-            LikelySubtags ls = new LikelySubtags(SDI);
+            LikelySubtags ls = new LikelySubtags();
             for (String file : factories.get(0).getAvailable()) {
                 if (defaultContents.contains(file)) {
                     continue;
@@ -343,7 +360,6 @@
             Relation<PathHeader, String> diffAll = Relation.of(new TreeMap<PathHeader, Set<String>>(), TreeSet.class);
             for (Entry<String, Set<String>> baseNLocale : baseToLocales.keyValuesSet()) {
                 String base = baseNLocale.getKey();
-//            int qCount = 0;
                 for (int i = 0; i < factories.size(); ++i) {
                     Factory factory = factories.get(i);
                     Factory oldFactory = oldFactories.get(i);
@@ -353,12 +369,10 @@
                     }
                     File sourceDir = sourceDirs.get(0);
                     String sourceDirLeaf = sourceDir.getName();
-                    //System.out.println(sourceDirLeaf);
                     boolean resolving = !sourceDirLeaf.contains("subdivisions")
                         && !sourceDirLeaf.contains("transforms");
 
                     for (String locale : baseNLocale.getValue()) {
-                        //System.out.println("\t" + locale);
                         String nameAndLocale = sourceDirLeaf + "/" + locale;
                         if (fileFilter != null && !fileFilter.reset(nameAndLocale).find()) {
                             if (verbose && verbose_skipping) {
@@ -366,7 +380,6 @@
                             }
                             continue;
                         }
-//                    boolean isBase = locale.equals(base);
                         if (verbose) {
                             System.out.println(nameAndLocale);
                         }
@@ -378,6 +391,9 @@
                         if (old == EMPTY_CLDR && current == EMPTY_CLDR) {
                             continue;
                         }
+                        if (highLevelOnly && !HighLevelPaths.localeIsHighLevel(locale)) {
+                            continue;
+                        }
                         paths.clear();
                         for (String path : current.fullIterable()) {
                             if (allowPath(locale, path)) {
@@ -390,10 +406,13 @@
                             }
                         }
 
-                        Output<String> reformattedValue = new Output<String>();
-                        Output<Boolean> hasReformattedValue = new Output<Boolean>();
+                        Output<String> reformattedValue = new Output<>();
+                        Output<Boolean> hasReformattedValue = new Output<>();
 
                         for (String path : paths) {
+                            if (highLevelOnly && !HighLevelPaths.pathIsHighLevel(path, locale)) {
+                                continue;
+                            }
                             if (path.startsWith("//ldml/identity")
                                 || path.endsWith("/alias")
                                 || path.startsWith("//ldml/segmentations") // do later
@@ -401,9 +420,6 @@
                                 ) {
                                 continue;
                             }
-                            if (path.contains("/tRule")) {
-                                int debug = 0;
-                            }
                             PathHeader ph = getPathHeader(path);
                             if (ph == null) {
                                 continue;
@@ -446,13 +462,12 @@
                 writeDiffs(anchors, base, diff, tsvFile, counts);
                 diff.clear();
             }
-            writeDiffs(anchors, diffAll);
+            writeDiffs(diffAll);
 
             writeCounter(tsvCountFile, "Count", counts);
-            tsvFile.println("# EOF");
-            tsvCountFile.println("# EOF");
+            //tsvFile.println("# EOF");
+            //tsvCountFile.println("# EOF");
         }
-
     }
 
     private boolean allowPath(String locale, String path) {
@@ -461,7 +476,6 @@
             if (minimumPathCoverage.compareTo(pathLevel) < 0) {
                 return false;
             }
-            int debug = 0;
         }
         return true;
     }
@@ -475,7 +489,7 @@
         // NEW:     <annotation cp="😀">face | grin</annotation>
         //          <annotation cp="😀" type="tts">grinning face</annotation>
         // from the NEW paths, get the OLD values
-        XPathParts parts = XPathParts.getInstance(path); // not frozen, for removeAttribute
+        XPathParts parts = XPathParts.getFrozenInstance(path).cloneAsThawed(); // not frozen, for removeAttribute
         boolean isTts = parts.getAttributeValue(-1, "type") != null;
         if (isTts) {
             parts.removeAttribute(-1, "type");
@@ -558,7 +572,7 @@
                 continue;
             }
             if (fullAttributes == null) {
-                fullAttributes = new TreeSet<String>();
+                fullAttributes = new TreeSet<>();
             } else {
                 fullAttributes.clear();
             }
@@ -710,7 +724,7 @@
         writeTable(anchors, file, tablePrinter, title, tsvFile);
     }
 
-    private void writeDiffs(Anchors anchors, Relation<PathHeader, String> diffAll) {
+    private void writeDiffs(Relation<PathHeader, String> diffAll) {
         TablePrinter tablePrinter = new TablePrinter()
             .addColumn("Section", "class='source'", CldrUtility.getDoubleLinkMsg(), "class='source'", true)
             .addColumn("Page", "class='source'", CldrUtility.getDoubleLinkMsg(), "class='source'", true)
@@ -725,7 +739,7 @@
             .addCell(ph.getPageId())
             .addCell(ph.getHeader())
             .addCell(ph.getCode())
-            .addCell(CollectionUtilities.join(locales, " "))
+            .addCell(Joiner.on(" ").join(locales))
             .finishRow();
         }
     }
@@ -763,9 +777,6 @@
                 }
             }
             Level coverageLevel = SUPPLEMENTAL_DATA_INFO.getCoverageLevel(ph.getOriginalPath(), locale);
-            if (coverageLevel != Level.BASIC && coverageLevel != Level.CORE) {
-                int debug = 0;
-            }
             String fixedOldValue = oldValue == null ? "▷missing◁" : TransliteratorUtilities.toHTML.transform(oldValue);
             String fixedNewValue = currentValue == null ? "▷removed◁" : TransliteratorUtilities.toHTML.transform(currentValue);
 
@@ -781,18 +792,19 @@
             .finishRow();
 
         }
-        writeTable(anchors, file, tablePrinter, ENGLISH.getName(file) + " Delta", tsvFile);
+        String title = ENGLISH.getName(file) + " " + chartNameCap;
+        writeTable(anchors, file, tablePrinter, title, tsvFile);
 
         diff.clear();
     }
 
     private class ChartDeltaSub extends Chart {
-        String title;
-        String file;
+        private String title;
+        private String file;
         private TablePrinter tablePrinter;
         private PrintWriter tsvFile;
 
-        public ChartDeltaSub(String title, String file, TablePrinter tablePrinter, PrintWriter tsvFile) {
+        private ChartDeltaSub(String title, String file, TablePrinter tablePrinter, PrintWriter tsvFile) {
             super();
             this.title = title;
             this.file = file;
@@ -824,8 +836,6 @@
         public String getExplanation() {
             return "<p>Lists data fields that differ from the last major version (see versions above)."
                 + " Inherited differences in locales are suppressed, except where the source locales are different. "
-//                + " The collations and metadata still have a raw format."
-//                + " The rbnf, segmentations, and annotations are not yet included."
                 + "<p>";
         }
 
@@ -841,9 +851,9 @@
         chartDeltaSub.writeChart(anchors);
     }
 
-    public void writeNonLdmlPlain(Anchors anchors) throws IOException {
-        try (PrintWriter tsvFile = FileUtilities.openUTF8Writer(getTsvDir(DIR, DIR_NAME), DIR_NAME + "_supp.tsv");
-            PrintWriter tsvCountFile = FileUtilities.openUTF8Writer(getTsvDir(DIR, DIR_NAME), DIR_NAME + "_supp_count.tsv");
+    private void writeNonLdmlPlain(Anchors anchors) throws IOException {
+        try (PrintWriter tsvFile = FileUtilities.openUTF8Writer(getTsvDir(DIR, dirName), dirName + "_supp.tsv");
+            PrintWriter tsvCountFile = FileUtilities.openUTF8Writer(getTsvDir(DIR, dirName), dirName + "_supp_count.tsv");
             ) {
             tsvFile.println("# Section\tPage\tHeader\tCode\tOld\tNew");
 
@@ -854,8 +864,6 @@
             Counter<PathHeader> countSame = new Counter<>();
             Counter<PathHeader> countAdded = new Counter<>();
             Counter<PathHeader> countDeleted = new Counter<>();
-            
-            
 
             for (String dir : new File(CLDRPaths.BASE_DIRECTORY + "common/").list()) {
                 if (DtdType.ldml.directories.contains(dir)
@@ -883,20 +891,22 @@
                         }
                         continue;
                     }
-
+                    if (highLevelOnly && !HighLevelPaths.localeIsHighLevel(base)) {
+                        continue;
+                    }
                     if (verbose) {
                         System.out.println(file);
                     }
-                    Relation<PathHeader, String> contentsOld = fillData(dirOld.toString() + "/", file);
-                    Relation<PathHeader, String> contents2 = fillData(dir2.toString() + "/", file);
+                    Relation<PathHeader, String> contentsOld = fillData(dirOld.toString() + "/", file, base);
+                    Relation<PathHeader, String> contents2 = fillData(dir2.toString() + "/", file, base);
 
-                    Set<PathHeader> keys = new TreeSet<PathHeader>(CldrUtility.ifNull(contentsOld.keySet(), Collections.<PathHeader> emptySet()));
+                    Set<PathHeader> keys = new TreeSet<>(CldrUtility.ifNull(contentsOld.keySet(), Collections.<PathHeader> emptySet()));
                     keys.addAll(CldrUtility.ifNull(contents2.keySet(), Collections.<PathHeader> emptySet()));
                     DtdType dtdType = null;
                     for (PathHeader key : keys) {
                         String originalPath = key.getOriginalPath();
-                        if (originalPath.contains("/paradigmLocales")) {
-                            int debug = 0;
+                        if (highLevelOnly && !HighLevelPaths.pathIsHighLevel(originalPath, base)) {
+                            continue;
                         }
                         boolean isTransform = originalPath.contains("/tRule");
                         if (dtdType == null) {
@@ -931,16 +941,12 @@
                         } else {
                             Set<String> s1MOld = setOld;
                             Set<String> s2M1 = set2;
-//                        Set<String> s1M2 = new LinkedHashSet<>(set1);
-//                        s1M2.removeAll(set2);
-//                        Set<String> s2M1 = new LinkedHashSet<>(set2);
-//                        s2M1.removeAll(set1);
                             if (s1MOld.isEmpty()) {
-                                addRow(target, key, "▷missing◁", CollectionUtilities.join(s2M1, ", "));
+                                addRow(target, key, "▷missing◁", Joiner.on(", ").join(s2M1));
                                 addChange(parentAndFile, ChangeType.added, s2M1.size());
                                 countAdded.add(key, 1);
                             } else if (s2M1.isEmpty()) {
-                                addRow(target, key, CollectionUtilities.join(s1MOld, ", "), "▷removed◁");
+                                addRow(target, key, Joiner.on(", ").join(s1MOld), "▷removed◁");
                                 addChange(parentAndFile, ChangeType.deleted, s1MOld.size());
                                 countDeleted.add(key, 1);
                             } else {
@@ -963,11 +969,9 @@
                     }
                 }
             }
-            //    private void writeDiffs(Anchors anchors, String file, String title, Relation<PathHeader, String> bcp) {
-
-            writeDiffs(anchors, "bcp47", "¤¤BCP47 Delta", bcp, tsvFile);
-            writeDiffs(anchors, "supplemental-data", "¤¤Supplemental Delta", supplemental, tsvFile);
-            writeDiffs(anchors, "transforms", "¤¤Transforms Delta", transforms, tsvFile);
+            writeDiffs(anchors, "bcp47", "¤¤BCP47 " + chartNameCap, bcp, tsvFile);
+            writeDiffs(anchors, "supplemental-data", "¤¤Supplemental " + chartNameCap, supplemental, tsvFile);
+            writeDiffs(anchors, "transforms", "¤¤Transforms " + chartNameCap, transforms, tsvFile);
 
             writeCounter(tsvCountFile, "CountSame", countSame);
             tsvCountFile.println();
@@ -975,15 +979,15 @@
             tsvCountFile.println();
             writeCounter(tsvCountFile, "CountDeleted", countDeleted);
 
-            tsvFile.println("# EOF");
-            tsvCountFile.println("# EOF");
+            //tsvFile.println("# EOF");
+            //tsvCountFile.println("# EOF");
         }
     }
 
     private void writeCounter(PrintWriter tsvFile, String title, Counter<PathHeader> countDeleted) {
         tsvFile.append("# "
             + title
-            + "\tPathHeader\n\n");
+            + "\tSection\tPage\tSubhead\tCode\n\n");
         for (R2<Long, PathHeader> entry : countDeleted.getEntrySetSortedByCount(false, null)) {
             tsvFile.println(entry.get0() + "\t" + entry.get1());
         }
@@ -996,13 +1000,24 @@
         target.put(key, oldItem + SEP + newItem);
     }
 
-    public Relation<PathHeader, String> fillData(String directory, String file) {
+    /**
+     * Fill in the chart data for the specified file
+     *
+     * @param directory
+     * @param file like "xx.xml" where "xx" may be a locale name
+     * @param fileBase like "xx", same as file without ".xml"
+     * @return the Relation
+     */
+    private Relation<PathHeader, String> fillData(String directory, String file, String fileBase) {
         Relation<PathHeader, String> results = Relation.of(new TreeMap<PathHeader, Set<String>>(), TreeSet.class);
 
         List<Pair<String, String>> contents1;
         try {
             contents1 = XMLFileReader.loadPathValues(directory + file, new ArrayList<Pair<String, String>>(), true);
         } catch (Exception e) {
+            /*
+             * This happens with e = ICUException, file = grammaticalFeatures.xml in cldr-36.0
+             */
             return results;
         }
         DtdType dtdType = null;
@@ -1011,24 +1026,40 @@
 
         for (Pair<String, String> s : contents1) {
             String path = s.getFirst();
-            if (path.contains("/collat")) {
-                int debug = 0;
+            if (highLevelOnly && !HighLevelPaths.pathIsHighLevel(path, fileBase /* locale, or not */)) {
+                continue;
             }
-
             String value = s.getSecond();
             if (dtdType == null) {
+                /*
+                 * Note: although dtdType and dtdData depend on path, they are the same for all paths
+                 * in the same file, so they only need to be set the first time through this loop.
+                 *
+                 * Note: the current DTD in CLDR_BASE_DIR is supposed to be backward-compatible, that is, to support
+                 * paths from all archived versions. Any exception to that rule (e.g., for "grammaticalState") is a bug.
+                 */
                 dtdType = DtdType.fromPath(path);
-                dtdData = DtdData.getInstance(dtdType);
+                dtdData = DtdData.getInstance(dtdType, CLDR_BASE_DIR);
             }
             XPathParts pathPlain = XPathParts.getFrozenInstance(path);
-            if (dtdData.isMetadata(pathPlain)) {
+            try {
+                if (dtdData.isMetadata(pathPlain)) {
+                    continue;
+                }
+            } catch (NullPointerException e) {
+                /*
+                 * TODO: this happens for "grammaticalState" in this path from version 37:
+                 * //supplementalData/grammaticalData/grammaticalFeatures[@targets="nominal"][@locales="he"]/grammaticalState[@values="definite indefinite construct"]
+                 * Reference: https://unicode-org.atlassian.net/browse/CLDR-13306
+                 */
+                System.out.println("Caught NullPointerException in fillData calling isMetadata, path = " + path);
                 continue;
             }
             Set<String> pathForValues = dtdData.getRegularizedPaths(pathPlain, extras);
             if (pathForValues != null) {
                 for (String pathForValue : pathForValues) {
                     PathHeader pathHeader = phf.fromPath(pathForValue);
-                    Splitter splitter = getValueSplitter(pathPlain);
+                    Splitter splitter = DtdData.getValueSplitter(pathPlain);
                     for (String line : splitter.split(value)) {
                         // special case # in transforms
                         if (isComment(pathPlain, line)) {
@@ -1064,11 +1095,7 @@
         return false;
     }
 
-    public Splitter getValueSplitter(XPathParts pathPlain) {
-        return DtdData.getValueSplitter(pathPlain);
-    }
-
-    public static boolean isComment(XPathParts pathPlain, String line) {
+    private static boolean isComment(XPathParts pathPlain, String line) {
         if (pathPlain.contains("transform")) {
             if (line.startsWith("#")) {
                 return true;
@@ -1077,154 +1104,357 @@
         return false;
     }
 
-//    private static final Set<String> SKIP_ATTRIBUTE = new HashSet<String>(Arrays.asList("references"));
-//
-//    private static void checkedPut(Map<String, String> contentsA, String path2, String value) {
-//        String old = contentsA.get(path2);
-//        if (old != null) {
-//            if (old.equals(value)) {
-//                return;
-//            }
-//            value = old + "\n" + value;
-//        }
-//        contentsA.put(path2, value);
-//    }
-//
-//    static final ChainedMap.M4<DtdType, String, String, Boolean> FIXED_DISTINGUISHING = ChainedMap.of(
-//        new HashMap<DtdType, Object>(),
-//        new HashMap<String, Object>(),
-//        new HashMap<String, Object>(),
-//        Boolean.class);
-//
-//    static final ChainedMap.M3<DtdType, String, Boolean> FIXED_ORDERING = ChainedMap.of(
-//        new HashMap<DtdType, Object>(),
-//        new HashMap<String, Object>(),
-//        Boolean.class);
-//
-//    static {
-//        //<key name="ca" description="Calendar algorithm key" alias="calendar">
-//        //<type name="buddhist" description="Thai Buddhist calendar"/>
-//        FIXED_DISTINGUISHING.put(DtdType.ldmlBCP47, "key", "alias", false);
-//
-//        FIXED_ORDERING.put(DtdType.supplementalData, "substitute", true);
-//
-//        //<approvalRequirement votes="20" locales="Cldr:modern" paths="//ldml/numbers/symbols[^/]++/(decimal|group|(plus|minus)Sign)"/>
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "approvalRequirement", "locales", true);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "approvalRequirement", "paths", true);
-//        // approvalRequirement should be ordered, but for our comparison, simpler to override
-//
-//        //<coverageVariable key="%acctPattern" value="[@type='accounting']/pattern[@type='standard']"/>
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "coverageVariable", "key", true);
-//        FIXED_ORDERING.put(DtdType.supplementalData, "coverageVariable", false);
-//
-//        //<coverageLevel inLanguage="%phonebookCollationLanguages" value="minimal" match="localeDisplayNames/types/type[@type='phonebook'][@key='collation']"/>
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "coverageLevel", "inLanguage", true);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "coverageLevel", "inScript", true);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "coverageLevel", "inTerritory", true);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "coverageLevel", "match", true);
-//        FIXED_ORDERING.put(DtdType.supplementalData, "coverageLevel", false); // this should be true, but for our comparison, simpler to override
-//
-////        <!ATTLIST dayPeriodRule type NMTOKEN #REQUIRED >
-////        <!ATTLIST dayPeriodRule at NMTOKEN #IMPLIED >
-////        <!ATTLIST dayPeriodRule after NMTOKEN #IMPLIED >
-////        <!ATTLIST dayPeriodRule before NMTOKEN #IMPLIED >
-////        <!ATTLIST dayPeriodRule from NMTOKEN #IMPLIED >
-////        <!ATTLIST dayPeriodRule to NMTOKEN #IMPLIED >
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "dayPeriodRule", "type", false);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "dayPeriodRule", "at", true);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "dayPeriodRule", "after", true);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "dayPeriodRule", "before", true);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "dayPeriodRule", "from", true);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "dayPeriodRule", "to", true);
-//
-//// <personList type="neutral" locales="af bn bg da de en et eu fa fil fi gu hu id ja kn ko ml ms no sv sw ta te th tr vi zu" />
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "personList", "type", false);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "personList", "locales", true);
-//
-//        //          <languageMatch desired="am_*_*" supported="en_GB" percent="90" oneway="true" /> <!-- fix ICU for en_GB -->
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "languageMatch", "desired", true);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "languageMatch", "supported", true);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "languageMatch", "oneway", true);
-//        FIXED_ORDERING.put(DtdType.supplementalData, "languageMatch", false); // this should be true, but for our comparison, simpler to override
-//
-//        //              <usesMetazone to="1979-10-25 23:00" from="1977-10-20 23:00" mzone="Europe_Central"/>
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "usesMetazone", "from", true);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "usesMetazone", "to", true);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "usesMetazone", "mzone", false);
-//
-////        <!ATTLIST numberingSystem type ( numeric | algorithmic ) #REQUIRED >
-////        <!ATTLIST numberingSystem id NMTOKEN #REQUIRED >
-////        <!ATTLIST numberingSystem radix NMTOKEN #IMPLIED >
-////        <!ATTLIST numberingSystem digits CDATA #IMPLIED >
-////        <!ATTLIST numberingSystem rules CDATA #IMPLIED >
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "numberingSystem", "type", false);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "numberingSystem", "radix", false);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "numberingSystem", "digits", false);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "numberingSystem", "rules", false);
-//
-//        FIXED_ORDERING.put(DtdType.supplementalData, "pluralRule", false); // this should be true, but for our comparison, simpler to override
-//
-//        //pluralRanges locales
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "pluralRanges", "locales", true);
-//
-//        //          <pluralRange start="one"   end="one"   result="one"/>
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "pluralRange", "start", true);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "pluralRange", "end", true);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "pluralRange", "result", false);
-//
-////        <territory type="AC" gdp="35200000" literacyPercent="99" population="940">  <!--Ascension Island-->
-////        <languagePopulation type="en" populationPercent="99" references="R1020"/>   <!--English-->
-//
-//        FIXED_DISTINGUISHING.put(DtdType.ldml, "rbnfrule", "value", false);
-//        FIXED_ORDERING.put(DtdType.ldml, "ruleset", false); // this should be true, but for our comparison, simpler to override
-//        FIXED_ORDERING.put(DtdType.ldml, "rbnfrule", false); // this should be true, but for our comparison, simpler to override
-//
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "transform", "source", true);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "transform", "target", true);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "transform", "direction", true);
-//        FIXED_DISTINGUISHING.put(DtdType.supplementalData, "transform", "variant", true);
-//        FIXED_ORDERING.put(DtdType.supplementalData, "tRule", false);
-//
-//        System.out.println("Current Overrides for Distinguishing");
-//        for (R4<DtdType, String, String, Boolean> entry : FIXED_DISTINGUISHING.rows()){
-//            DtdData dtdData = DtdData.getInstance(entry.get0());
-//            boolean actual = dtdData.isDistinguishing(entry.get1(), entry.get2());
-//            boolean fixed = entry.get3();
-//            if (actual != fixed) {
-//                System.out.println("\tOverride to\t" + entry);
-//            } else {
-//                System.out.println("\tUnnecessary\t" + entry);
-//            }
-//        }
-//        System.out.println("Current Overrides for Ordering");
-//        for (R3<DtdType, String, Boolean> entry : FIXED_ORDERING.rows()){
-//            DtdData dtdData = DtdData.getInstance(entry.get0());
-//            boolean actual = dtdData.isOrdered(entry.get1());
-//            boolean fixed = entry.get2();
-//            if (actual != fixed) {
-//                System.out.println("\tOverride to\t" + entry);
-//            } else {
-//                System.out.println("\tUnnecessary\t" + entry);
-//            }
-//        }
-//
-//        // FIXED_ORDERING.freeze(); Add to ChainedMap?
-//    }
+    /**
+     * Determine which paths are considered "high-level" paths, i.e.,
+     * paths for which any changes have high potential to cause disruptive "churn".
+     * Whether a path is high-level sometimes depends on the locale or xml file in
+     * which it occurs.
+     * Some paths are high-level regardless of the locale in which they are located.
+     * Other paths are high-level for some locales but not others. For example,
+     *    //ldml/localeDisplayNames/languages/language[@type="xx"]
+     * is high level in locale "xx", and maybe "en", but not for all locales.
+     */
+    private static class HighLevelPaths {
+        /**
+         * A set of paths to be treated as "high-level".
+         * These are complete paths to be matched exactly.
+         * (Other paths are recognized by special functions like isHighLevelTerritoryName.)
+         *
+         * The ordering and comments for are based on the design spec.
+         *
+         * Possibilities for improvement: read from file; maybe use RegexLookup;
+         *  distinguish these types:
+         *  (1) complete paths to be matched exactly;
+         *  (2) paths recognized by special functions like isHighLevelTerritoryName
+         *  (3) prefixes that could match with startsWith();
+         *  (4) RegexLookup or other regex
+         *  (5) "starred" paths
+         *  Currently we only have type (1) in this array, and all others are of type (2).
+         */
+        final private static Set<String> highLevelPaths = new HashSet<>(Arrays.asList(
+            /*
+             * Core data
+             */
+            "//ldml/characters/exemplarCharacters",
+            "//ldml/numbers/defaultNumberingSystem",
+            "//ldml/numbers/otherNumberingSystems/native",
+            /*
+             * Territory and Language names
+             *  Country/Region names (English and Native names) -- see isHighLevelTerritoryName
+             *   //ldml/localeDisplayName/territories/territory/...
+             *  Language names (English and Native) -- see isHighLevelLangName
+             *   //ldml/localeDisplayNames/languages/language/...
+             */
+            /*
+             * Date
+             * Note: "year", "month", etc., below, form a subset (eight) of all possible values for type,
+             * excluding, for example, "fri" and "zone". If we use starred paths, we would need further complication
+             * to filter out "fri", "zone", etc.
+             */
+            "//ldml/dates/fields/field[@type=\"year\"]/displayName",
+            "//ldml/dates/fields/field[@type=\"month\"]/displayName",
+            "//ldml/dates/fields/field[@type=\"week\"]/displayName",
+            "//ldml/dates/fields/field[@type=\"day\"]/displayName",
+            "//ldml/dates/fields/field[@type=\"hour\"]/displayName",
+            "//ldml/dates/fields/field[@type=\"era\"]/displayName",
+            "//ldml/dates/fields/field[@type=\"minute\"]/displayName",
+            "//ldml/dates/fields/field[@type=\"second\"]/displayName",
+            /*
+             * TODO: First day of week: /supplemental.xml firstDay
+             * TODO: First week of year: /supplementalData/weekData/firstDay[not(\@alt)
+             */
+            "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dateFormats/dateFormatLength[@type=\"full\"]/dateFormat[@type=\"standard\"]/pattern[@type=\"standard\"]",
+            "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dateFormats/dateFormatLength[@type=\"long\"]/dateFormat[@type=\"standard\"]/pattern[@type=\"standard\"]",
+            "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dateFormats/dateFormatLength[@type=\"medium\"]/dateFormat[@type=\"standard\"]/pattern[@type=\"standard\"]",
+            "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dateFormats/dateFormatLength[@type=\"short\"]/dateFormat[@type=\"standard\"]/pattern[@type=\"standard\"]",
+            "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dateTimeFormats/availableFormats/dateFormatItem[@id=\"MMMEd\"]",
+            "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dateTimeFormats/availableFormats/dateFormatItem[@id=\"MEd\"]",
+            /*
+             * Time
+             */
+            "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/timeFormats/timeFormatLength[@type=\"full\"]/timeFormat[@type=\"standard\"]/pattern[@type=\"standard\"]",
+            "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/timeFormats/timeFormatLength[@type=\"long\"]/timeFormat[@type=\"standard\"]/pattern[@type=\"standard\"]",
+            "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/timeFormats/timeFormatLength[@type=\"medium\"]/timeFormat[@type=\"standard\"]/pattern[@type=\"standard\"]",
+            "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/timeFormats/timeFormatLength[@type=\"short\"]/timeFormat[@type=\"standard\"]/pattern[@type=\"standard\"]",
+            "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dayPeriods/dayPeriodContext[@type=\"format\"]/dayPeriodWidth[@type=\"wide\"]/dayPeriod[@type=\"am\"]",
+            "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dayPeriods/dayPeriodContext[@type=\"format\"]/dayPeriodWidth[@type=\"abbreviated\"]/dayPeriod[@type=\"am\"]",
+            "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dayPeriods/dayPeriodContext[@type=\"format\"]/dayPeriodWidth[@type=\"wide\"]/dayPeriod[@type=\"pm\"]",
+            "//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dayPeriods/dayPeriodContext[@type=\"format\"]/dayPeriodWidth[@type=\"abbreviated\"]/dayPeriod[@type=\"pm\"]",
+            /*
+             * Currency (English and Native) -- see isHighLevelCurrencyName
+             * E.g., //ldml/numbers/currencies/currency[@type=\"KRW\"]/displayName"
+             *
+             * TODO: per design spec, "ISO Currency Code: SupplementalData.xml match <region iso3166>"
+             */
+            /*
+             * Currency Formats
+             *  a. Currency thousand separator
+             *      TODO: See pt_CV.xml example <numbers><currencies><currency><symbol>
+             *  b. Currency decimal separator
+             *      TODO: See pt_CV.xml example <numbers><currencies><currency><decimal>
+             *  c. Currency Symbol//ldml/numbers/currencies/currency[@type="CNY"]/symbol
+             *  d. Currency Symbol Narrow
+             */
+            "//ldml/numbers/currencyFormats[@numberSystem=\"latn\"]/currencyFormatLength/currencyFormat[@type=\"standard\"]/pattern[@type=\"standard\"]",
+            "//ldml/numbers/currencyFormats[@numberSystem=\"arab\"]/currencyFormatLength/currencyFormat[@type=\"standard\"]/pattern[@type=\"standard\"]",
+            /*
+             * Currency symbols
+             */
+            "//ldml/numbers/currencies/currency[@type=\"CNY\"]/symbol",
+            "//ldml/numbers/currencies/currency[@type=\"CNY\"]/symbol[@alt=\"narrow\"]",
+            /*
+             * Number Symbols
+             */
+            "//ldml/numbers/minimumGroupingDigits",
+            "//ldml/numbers/symbols[@numberSystem=\"latn\"]/decimal",
+            "//ldml/numbers/symbols[@numberSystem=\"latn\"]/group",
+            "//ldml/numbers/symbols[@numberSystem=\"arab\"]/decimal",
+            "//ldml/numbers/symbols[@numberSystem=\"arab\"]/group",
+            /*
+             * Number formats
+             */
+            "//ldml/numbers/decimalFormats[@numberSystem=\"latn\"]/decimalFormatLength/decimalFormat[@type=\"standard\"]/pattern[@type=\"standard\"]",
+            "//ldml/numbers/percentFormats[@numberSystem=\"latn\"]/percentFormatLength/percentFormat[@type=\"standard\"]/pattern[@type=\"standard\"]",
+            "//ldml/numbers/currencyFormats[@numberSystem=\"latn\"]/currencyFormatLength/currencyFormat[@type=\"accounting\"]/pattern[@type=\"standard\"]",
+            "//ldml/numbers/decimalFormats[@numberSystem=\"arab\"]/decimalFormatLength/decimalFormat[@type=\"standard\"]/pattern[@type=\"standard\"]",
+            "//ldml/numbers/percentFormats[@numberSystem=\"arab\"]/percentFormatLength/percentFormat[@type=\"standard\"]/pattern[@type=\"standard\"]"
+            /*
+             * "Complementary Observations"
+             */
+            /*
+             * Changes to language aliases (supplementalMetaData) -- see isHighLevelLangAlias
+             * E.g., //supplementalData/metadata/alias/languageAlias[@type="aar"]
+             */
+            /*
+             * Changes in the containment graph -- see isHighLevelTerritoryContainment
+             * Data mostly (or entirely?) from M49 standard, thus CLDR has limited control.
+             * Users use the containment graph in a variety of ways.
+             * E.g., //supplementalData/territoryContainment/group[@type="003"][@contains="013 021 029"]
+             */
+            /*
+             * TODO: per design doc, "Format changes: second to none on the disruptiveness scale are changes involving spaces such as SPACE -> NBSP
+             *  or NBSP -> Narrow NBSP. Or adding a space somewhere in the format where previously there was none."
+             * TODO: per design doc, "Adding a timezone"
+             * TODO: per design doc, "Changes of symbols or codes that are cross-locale in some way such as the unknown
+             *  currency symbol change '???' -> '¤'."
+             * TODO: per design doc, "Change in character properties (not a CLDR but a Unicode change), and here especially
+             *  newly adding or removing punctuation. Frequently irritates parsers."
+             */
+        ));
 
-//    private static boolean isFixedDistinguishing(DtdType dtdType, String element, String key) {
-//        Boolean override = FIXED_DISTINGUISHING.get(dtdType, element, key);
-//        if (override != null) {
-//            return override;
-//        }
-//        return CLDRFile.isDistinguishing(dtdType, element, key);
-//    }
-//
-//    private static boolean shouldBeOrdered(DtdType dtdType, String element) {
-//        Boolean override = FIXED_ORDERING.get(dtdType, element);
-//        if (override != null) {
-//            return override;
-//        }
-//        return CLDRFile.isOrdered(element, dtdType);
-//    }
+        /**
+         * Should the given path be taken into account for generating "churn" reports?
+         *
+         * @param path the path of interest
+         * @param locale the locale in which the path was found, or null, or possibly
+         *     the base file name without extension, like "xx" if the file name is "xx.xml",
+         *     where "xx" may or may not be a locale
+         * @return true if it counts, else false to ignore
+         */
+        private static boolean pathIsHighLevel(String path, String locale) {
+            if (path == null || locale == null) {
+                return false;
+            }
+            if (!localeIsHighLevel(locale)) { // this should normally be caught at a higher level
+               System.out.println("locale [" + locale + "] failed localeIsHighLevel in pathIsHighLevel; path = " + path);
+               return false;
+            }
+            if (highLevelPaths.contains(path)) {
+                recordHighLevelMatch(path);
+                return true;
+            } else if (isHighLevelTerritoryName(path, locale)) {
+                if (verboseHighLevelReporting) {
+                    recordHighLevelMatch(path);
+                }
+                return true;
+            } else if (isHighLevelLangName(path, locale)) {
+                if (verboseHighLevelReporting) {
+                    recordHighLevelMatch(path);
+                }
+                return true;
+            } else if (isHighLevelCurrencyName(path, locale)) {
+                if (verboseHighLevelReporting) {
+                    recordHighLevelMatch(path);
+                }
+                return true;
+            } else if (isHighLevelLangAlias(path, locale)) {
+                // if (verboseHighLevelReporting) {
+                recordHighLevelMatch(path);
+                // }
+                return true;
+            } else if (isHighLevelTerritoryContainment(path, locale)) {
+                // if (verboseHighLevelReporting) {
+                recordHighLevelMatch(path);
+                // }
+                return true;
+            }
+            return false;
+        }
 
+        private static boolean localeIsHighLevel(String locale) {
+            return SubmissionLocales.CLDR_LOCALES.contains(locale);
+        }
+
+        /**
+         * Changes to language aliases (supplementalMetaData)
+         * E.g., //supplementalData/metadata/alias/languageAlias[@type="aar"]
+         *
+         * @param path
+         * @param locale
+         * @return true or false
+         */
+        private static boolean isHighLevelLangAlias(String path, String locale) {
+            // TODO Implement isHighLevelLangAlias
+            return false;
+        }
+
+        /**
+         * Changes in the containment graph -- see isHighLevelTerritoryContainment
+         * Data mostly (or entirely?) from M49 standard, thus CLDR has limited control.
+         * Users use the containment graph in a variety of ways.
+         * E.g., //supplementalData/territoryContainment/group[@type="003"][@contains="013 021 029"]
+         *
+         * @param path
+         * @param locale
+         * @return true or false
+         */
+        private static boolean isHighLevelTerritoryContainment(String path, String locale) {
+            // TODO Implement isHighLevelTerritoryContainment
+            if (path.startsWith("//supplementalData/territoryContainment")) {
+                System.out.println("isHighLevelTerritoryContainment got " + path);
+            }
+            return false;
+        }
+
+        /**
+         * Is the given path a high-level territory name path in the given locale?
+         *
+         * E.g., //ldml/localeDisplayNames/territories/territory[@type="NNN"]
+         * if type "NNN" CORRESPONDS TO the locale or the locale is "en"
+         *
+         * English names (en.xml): match all types
+         * Native: check each territory type NNN corresponding to the given locale
+         *
+         * Exclude "alt"
+         *
+         * @param path
+         * @param locale
+         * @return true or false
+         */
+        private static boolean isHighLevelTerritoryName(String path, String locale) {
+            if (path.startsWith("//ldml/localeDisplayNames/territories/territory")
+                    && !path.contains("[@alt=")) {
+                if ("en".equals(locale)) {
+                    return true;
+                }
+                CoverageVariableInfo cvi = SUPPLEMENTAL_DATA_INFO.getCoverageVariableInfo(locale);
+                if (cvi != null) {
+                    for (String type: cvi.targetTerritories) {
+                        if (path.contains("[@type=\"" + type + "\"]")) {
+                            return true;
+                        }
+                    }
+                }
+            }
+            return false;
+        }
+
+        /**
+         * Is the given path a high-level language name path in the given locale?
+         *
+         * E.g., //ldml/localeDisplayNames/languages/language[@type="xx"]
+         * if type "xx" matches the locale or the locale is "en"
+         *
+         * Exclude "alt"
+         *
+         * @param path
+         * @param locale
+         * @return true or false
+         */
+        private static boolean isHighLevelLangName(String path, String locale) {
+            if (path.startsWith("//ldml/localeDisplayNames/languages/language")
+                    && !path.contains("[@alt=")) {
+                if ("en".equals(locale)) {
+                    /*
+                     * English names (en.xml): match all types
+                     */
+                    return true;
+                } else if (path.contains("[@type=\"" + locale + "\"]")) {
+                    /*
+                     * Native names: match the type=”xx” of each xml file to identify the Native. E.g., type=ko if ko.xml
+                     */
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        /**
+         * Is the given path a high-level currency name path in the given locale?
+         *
+         * E.g., //ldml/numbers/currencies/currency[@type=\"AAA\"]/displayName
+         * if type "AAA" CORRESPONDS TO the locale or the locale is "en"
+         *
+         * English names (en.xml): match all types
+         * Native: check each currency type AAA corresponding to the given locale
+         *
+         * Do NOT exclude "alt"; e.g.,
+         * //ldml/numbers/currencies/currency[@type="KRW"]/symbol[@alt="narrow"]
+         *
+         * @param path
+         * @param locale
+         * @return true or false
+         */
+        private static boolean isHighLevelCurrencyName(String path, String locale) {
+            if (path.startsWith("//ldml/numbers/currencies/currency")) {
+                if ("en".equals(locale)) {
+                    return true;
+                }
+                CoverageVariableInfo cvi = SUPPLEMENTAL_DATA_INFO.getCoverageVariableInfo(locale);
+                if (cvi != null) {
+                    for (String type: cvi.targetCurrencies) {
+                        if (path.contains("[@type=\"" + type + "\"]")) {
+                            return true;
+                        }
+                    }
+                }
+            }
+            return false;
+        }
+
+        /**
+         * For debugging, testing
+         */
+        private static Set<String> highLevelPathMatched = null;
+        private static boolean verboseHighLevelReporting = false;
+
+        private static void recordHighLevelMatch(String path) {
+            if (highLevelPathMatched == null) {
+                highLevelPathMatched = new HashSet<>();
+            }
+            highLevelPathMatched.add(path);
+        }
+
+        /**
+         * For debugging, report on any paths in highLevelPaths that never matched
+         */
+        private static void reportHighLevelPathUsage() {
+            if (highLevelPathMatched == null) {
+                System.out.println("Zero high-level paths were matched!");
+                return;
+            }
+            for (String path: highLevelPaths) {
+                if (!highLevelPathMatched.contains(path)) {
+                    System.out.println("Unmatched high-level path: " + path);
+                }
+            }
+            if (verboseHighLevelReporting || true) {
+                for (String path: highLevelPathMatched) {
+                    if (!highLevelPaths.contains(path)) {
+                        System.out.println("Special matched high-level path: " + path);
+                    }
+                }
+            }
+        }
+    }
 }
diff --git a/tools/java/org/unicode/cldr/tool/ChartDtdDelta.java b/tools/java/org/unicode/cldr/tool/ChartDtdDelta.java
index 2030ff0..31162c6 100644
--- a/tools/java/org/unicode/cldr/tool/ChartDtdDelta.java
+++ b/tools/java/org/unicode/cldr/tool/ChartDtdDelta.java
@@ -11,6 +11,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.regex.Matcher;
 
 import org.unicode.cldr.util.CLDRConfig;
 import org.unicode.cldr.util.CldrUtility;
@@ -21,11 +22,12 @@
 import org.unicode.cldr.util.DtdType;
 import org.unicode.cldr.util.SupplementalDataInfo;
 
+import com.google.common.base.Joiner;
 import com.google.common.base.MoreObjects;
+import com.google.common.base.Splitter;
 import com.google.common.collect.ImmutableMultimap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Multimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Utility;
 import com.ibm.icu.util.VersionInfo;
 
@@ -35,9 +37,14 @@
  */
 public class ChartDtdDelta extends Chart {
 
+    private static final Splitter SPLITTER_SPACE = Splitter.on(' ');
+
     private static final String DEPRECATED_PREFIX = "⊖";
 
     private static final String NEW_PREFIX = "+";
+    private static final String ORDERED_SIGN = "⇣";
+    private static final String UNORDERED_SIGN = "⇟";
+
 
     private static final Set<String> OMITTED_ATTRIBUTES = Collections.singleton("⊕");
 
@@ -63,16 +70,17 @@
             + "<li>Element attributes are abbreviated as ⊕ where is no change to them, "
             + "but the element is newly the child of another.</li>\n"
             + "<li>LDML DTDs have augmented data:\n"
-            + "<ul><li>Attribute status is marked by: " 
+            + "<ul><li>Attribute status is marked by: "
             + AttributeStatus.distinguished.shortName + "=" + AttributeStatus.distinguished + ", "
             + AttributeStatus.value.shortName + "=" + AttributeStatus.value + ", or "
             + AttributeStatus.metadata.shortName + "=" + AttributeStatus.metadata + ".</li>\n"
             + "<li>Attribute value constraints are marked with ⟨…⟩ (for DTD constraints) and ⟪…⟫ (for augmented constraints, added in v35.0).</li>\n"
-            + "<li>Changes in status or constraints are shown with ➠.</li>\n"
+            + "<li>Changes in status or constraints are shown with ➠, with identical sections shown with ….</li>\n"
+            + "<li>Newly ordered elements are indicated with " + ORDERED_SIGN + "; newly unordered with " + UNORDERED_SIGN + ".</li>\n"
             + "</ul></li></ul>\n"
             + "<p>For more information, see the LDML spec.</p>";
     }
-    
+
     @Override
     public void writeContents(FormattedFileWriter pw) throws IOException {
         TablePrinter tablePrinter = new TablePrinter()
@@ -92,7 +100,7 @@
             .setSpanRows(false);
 
         String last = null;
-        
+
         for (String current : ToolConstants.CLDR_RELEASE_AND_DEV_VERSION_SET) {
             System.out.println("DTD delta: " + current);
             final boolean finalVersion = current.equals(ToolConstants.DEV_VERSION);
@@ -105,9 +113,9 @@
                 DtdData dtdCurrent = null;
                 try {
                     dtdCurrent = DtdData.getInstance(type,
-                        finalVersion 
-                        // && ToolConstants.CHART_STATUS != ToolConstants.ChartStatus.release 
-                        ? null 
+                        finalVersion
+                        // && ToolConstants.CHART_STATUS != ToolConstants.ChartStatus.release
+                        ? null
                             : current);
                 } catch (Exception e) {
                     if (!(e.getCause() instanceof FileNotFoundException)) {
@@ -173,7 +181,7 @@
     static final boolean SHOW = false;
 
     @SuppressWarnings("unused")
-    private void checkNames(String version, DtdData dtdCurrent, DtdData dtdLast, Map<String, Element> oldNameToElement, String path, Element element, 
+    private void checkNames(String version, DtdData dtdCurrent, DtdData dtdLast, Map<String, Element> oldNameToElement, String path, Element element,
         HashSet<Element> seen, boolean showAnyway) {
         String name = element.getName();
 
@@ -204,21 +212,24 @@
 
 
         Element oldElement = null;
+        boolean ordered = element.isOrdered();
 
         if (!oldNameToElement.containsKey(name)) {
             Set<String> attributeNames = getAttributeNames(dtdCurrent, dtdLast, name, Collections.emptyMap(), element.getAttributes());
-            addData(dtdCurrent, NEW_PREFIX + name, version, newPath, attributeNames);
+            addData(dtdCurrent, NEW_PREFIX + name + (ordered ? ORDERED_SIGN : ""), version, newPath, attributeNames);
         } else {
             oldElement = oldNameToElement.get(name);
+            boolean oldOrdered = oldElement.isOrdered();
             Set<String> attributeNames = getAttributeNames(dtdCurrent, dtdLast, name, oldElement.getAttributes(), element.getAttributes());
             boolean currentDeprecated = element.isDeprecated();
             boolean lastDeprecated = dtdLast == null ? false : oldElement.isDeprecated(); //  + (currentDeprecated ? "ⓓ" : "")
             boolean newlyDeprecated = currentDeprecated && !lastDeprecated;
+            String orderingStatus = (ordered == oldOrdered || currentDeprecated) ? "" : ordered ? ORDERED_SIGN : UNORDERED_SIGN;
             if (newlyDeprecated) {
-                addData(dtdCurrent, DEPRECATED_PREFIX + name, version, newPath, Collections.emptySet());
+                addData(dtdCurrent, DEPRECATED_PREFIX + name + orderingStatus, version, newPath, Collections.emptySet());
             }
             if (!attributeNames.isEmpty()) {
-                addData(dtdCurrent, (newlyDeprecated ? DEPRECATED_PREFIX : "") + name, version, newPath, attributeNames);
+                addData(dtdCurrent, (newlyDeprecated ? DEPRECATED_PREFIX : "") + name + orderingStatus, version, newPath, attributeNames);
             }
         }
         if (element.getName().equals("coordinateUnit")) {
@@ -262,8 +273,8 @@
             }
             dtdType = dtdCurrent.dtdType;
             this.newPath = fix(newPath);
-            this.attributeNames = attributeNames2.isEmpty() ? NONE :  
-                START_ATTR + CollectionUtilities.join(attributeNames2, END_ATTR + START_ATTR) + END_ATTR;
+            this.attributeNames = attributeNames2.isEmpty() ? NONE :
+                START_ATTR + Joiner.on(END_ATTR + START_ATTR).join(attributeNames2) + END_ATTR;
             this.newElement = newElement;
         }
 
@@ -305,7 +316,7 @@
 
     static final Set<String> SKIP_ATTRIBUTES = ImmutableSet.of("references", "standard", "draft", "alt");
 
-    private static Set<String> getAttributeNames(DtdData dtdCurrent, DtdData dtdLast, String elementName, 
+    private static Set<String> getAttributeNames(DtdData dtdCurrent, DtdData dtdLast, String elementName,
         Map<Attribute, Integer> attributesOld,
         Map<Attribute, Integer> attributes) {
         Set<String> names = new LinkedHashSet<>();
@@ -313,7 +324,7 @@
             int debug = 0;
         }
 
-        main: 
+        main:
             // we want to add a name that is new or that becomes deprecated
             for (Attribute attribute : attributes.keySet()) {
                 String name = attribute.getName();
@@ -326,11 +337,11 @@
 //            if (isDeprecated(dtdCurrent, elementName, name)) { // SDI.isDeprecated(dtdCurrent, elementName, name, "*")) {
 //                continue;
 //            }
-                String oldMatch = "?"; 
+                String oldMatch = "?";
                 String pre, post;
                 Attribute attributeOld = attribute.getMatchingName(attributesOld);
                 if (attributeOld == null) {
-                    display += " " + AttributeStatus.getShortName(status) + " " + match;
+                    display = NEW_PREFIX + name +  " " + AttributeStatus.getShortName(status) + " " + match;
                 } else if (attribute.isDeprecated() && !attributeOld.isDeprecated()) {
                     display = DEPRECATED_PREFIX + name;
                 } else {
@@ -340,7 +351,7 @@
                     boolean matchEquals = match.equals(oldMatch);
                     if (status != oldStatus) {
                         pre = AttributeStatus.getShortName(oldStatus);
-                        post = AttributeStatus.getShortName(status); 
+                        post = AttributeStatus.getShortName(status);
                         if (!matchEquals) {
                             pre += " " + oldMatch;
                             post += " " + match;
@@ -351,13 +362,45 @@
                     } else {
                         continue main; // skip attribute entirely;
                     }
-                    display += " " + pre + "➠" + post;
+                    display = name + " " + diff(pre, post);
                 }
                 names.add(display);
             }
         return names;
     }
 
+    public static String diff(String pre, String post) {
+        Matcher matcherPre = Attribute.LEAD_TRAIL.matcher(pre);
+        Matcher matcherPost = Attribute.LEAD_TRAIL.matcher(post);
+        if (matcherPre.matches() && matcherPost.matches()) {
+            List<String> preParts = SPLITTER_SPACE.splitToList(matcherPre.group(2));
+            List<String> postParts = SPLITTER_SPACE.splitToList(matcherPost.group(2));
+            pre = matcherPre.group(1) + remove(preParts, postParts) + matcherPre.group(3);
+            post = matcherPost.group(1) + remove(postParts, preParts) + matcherPost.group(3);
+        }
+        return pre + "➠" + post;
+    }
+
+    private static String remove(List<String> main, List<String> toRemove) {
+        List<String> result = new ArrayList<>();
+        boolean removed = false;
+        for (String s : main) {
+            if (toRemove.contains(s)) {
+                removed = true;
+            } else {
+                if (removed) {
+                    result.add("…");
+                    removed = false;
+                }
+                result.add(s);
+            }
+        }
+        if (removed) {
+            result.add("…");
+        }
+        return Joiner.on(" ").join(result);
+    }
+
 //    private static boolean isDeprecated(DtdData dtdCurrent, String elementName, String attributeName) {
 //        try {
 //            return dtdCurrent.isDeprecated(elementName, attributeName, "*");
diff --git a/tools/java/org/unicode/cldr/tool/ChartGrammaticalForms.java b/tools/java/org/unicode/cldr/tool/ChartGrammaticalForms.java
new file mode 100644
index 0000000..56b900b
--- /dev/null
+++ b/tools/java/org/unicode/cldr/tool/ChartGrammaticalForms.java
@@ -0,0 +1,642 @@
+package org.unicode.cldr.tool;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.regex.Matcher;
+import java.util.stream.Collectors;
+
+import org.unicode.cldr.draft.FileUtilities;
+import org.unicode.cldr.tool.FormattedFileWriter.Anchors;
+import org.unicode.cldr.util.CLDRConfig;
+import org.unicode.cldr.util.CLDRFile;
+import org.unicode.cldr.util.CLDRLocale;
+import org.unicode.cldr.util.CLDRPaths;
+import org.unicode.cldr.util.CldrUtility;
+import org.unicode.cldr.util.Factory;
+import org.unicode.cldr.util.FileCopier;
+import org.unicode.cldr.util.GrammarInfo;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalFeature;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalScope;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalTarget;
+import org.unicode.cldr.util.ICUServiceBuilder;
+import org.unicode.cldr.util.LanguageTagParser;
+import org.unicode.cldr.util.MapComparator;
+import org.unicode.cldr.util.Pair;
+import org.unicode.cldr.util.Rational;
+import org.unicode.cldr.util.Rational.FormatStyle;
+import org.unicode.cldr.util.StandardCodes.LstrType;
+import org.unicode.cldr.util.SupplementalDataInfo;
+import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo;
+import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo.Count;
+import org.unicode.cldr.util.SupplementalDataInfo.PluralType;
+import org.unicode.cldr.util.UnitConverter;
+import org.unicode.cldr.util.UnitConverter.ConversionInfo;
+import org.unicode.cldr.util.UnitConverter.PlaceholderLocation;
+import org.unicode.cldr.util.UnitConverter.UnitId;
+import org.unicode.cldr.util.UnitPathType;
+import org.unicode.cldr.util.Validity;
+
+import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.TreeMultimap;
+import com.ibm.icu.impl.locale.XCldrStub.ImmutableMap;
+import com.ibm.icu.text.DecimalFormat;
+import com.ibm.icu.text.MessageFormat;
+import com.ibm.icu.text.PluralRules;
+import com.ibm.icu.text.PluralRules.SampleType;
+import com.ibm.icu.text.RuleBasedCollator;
+import com.ibm.icu.util.Output;
+import com.ibm.icu.util.ULocale;
+
+public class ChartGrammaticalForms extends Chart {
+
+    private static final String MAIN_HEADER = "<h2>Grammatical Forms</h2>";
+    private static final boolean DEBUG = false;
+    private static final String DIR = CLDRPaths.CHART_DIRECTORY + "grammar/";
+    public static final PluralRules ENGLISH_PLURAL_RULES = SDI.getPlurals("en").getPluralRules();
+
+    public static void main(String[] args) {
+        new ChartGrammaticalForms().writeChart(null);
+    }
+
+    @Override
+    public String getDirectory() {
+        return DIR;
+    }
+
+    @Override
+    public String getTitle() {
+        return "Grammatical Forms Charts";
+    }
+
+    @Override
+    public String getFileName() {
+        return "index";
+    }
+
+    @Override
+    public String getExplanation() {
+        return MAIN_HEADER + "<p>In this version a preliminary set of languages have additional grammatical information, as listed below.<p>";
+    }
+
+    @Override
+    public void writeContents(FormattedFileWriter pw) throws IOException {
+        FileCopier.ensureDirectoryExists(DIR);
+        FileCopier.copy(Chart.class, "index.css", DIR);
+        FormattedFileWriter.copyIncludeHtmls(DIR);
+
+        FormattedFileWriter.Anchors anchors = new FormattedFileWriter.Anchors();
+        writeSubcharts(anchors);
+        pw.setIndex("Main Chart Index", "../index.html");
+        pw.write(anchors.toString());
+    }
+
+    static final UnitConverter uc = SDI.getUnitConverter();
+    static final Map<String, Map<Rational, String>> BASE_TO_FACTOR_TO_UNIT;
+    static {
+        Map<String, Map<Rational, String>> _BASE_TO_BEST = new TreeMap<>();
+        ImmutableSet<String> skip = ImmutableSet.of("mile-scandinavian", "100-kilometer", "dunam");
+        Output<String> baseOut = new Output<>();
+        for (String longUnit : Validity.getInstance().getStatusToCodes(LstrType.unit).get(Validity.Status.regular)) {
+            String shortUnit = uc.getShortId(longUnit);
+            System.out.println(shortUnit);
+            if (skip.contains(shortUnit)) {
+                continue;
+            }
+            if ("mile-per-gallon".equals(shortUnit)) {
+                int debug = 0;
+            }
+            //Set<String> systems = uc.getSystems(unit);
+            ConversionInfo info = uc.parseUnitId(shortUnit, baseOut, false);
+            if (info == null) {
+                continue;
+            }
+            Map<Rational, String> factorToUnit = _BASE_TO_BEST.get(baseOut.value);
+            if (factorToUnit == null) {
+                _BASE_TO_BEST.put(baseOut.value, factorToUnit = new TreeMap<>());
+                factorToUnit.put(Rational.ONE, baseOut.value);
+            }
+
+            if (!info.factor.isPowerOfTen()) {
+                continue;
+            }
+
+            String old = factorToUnit.get(info.factor);
+            if (old == null || old.length() > shortUnit.length()) {
+                factorToUnit.put(info.factor, shortUnit);
+            }
+        }
+        BASE_TO_FACTOR_TO_UNIT = CldrUtility.protectCollection(_BASE_TO_BEST);
+        for (Entry<String, Map<Rational, String>> entry : BASE_TO_FACTOR_TO_UNIT.entrySet()) {
+            System.out.println(entry);
+        }
+    }
+
+    class BestUnitForGender implements Comparable<BestUnitForGender> {
+        final boolean durationOrLength; // true is better
+        final boolean metric; // true is better
+        final double distanceFromOne; // zero is better
+        final String quantity;
+        final String shortUnit;
+        public BestUnitForGender(String shortUnit, String quantity, Collection<String> systems, double baseSize) {
+            super();
+            this.shortUnit = shortUnit;
+            this.quantity = quantity;
+            this.durationOrLength = quantity.equals("duration") || quantity.equals("length");
+            this.metric = systems.contains("metric");
+            this.distanceFromOne = Math.abs(Math.log(baseSize));
+        }
+        @Override
+        public int compareTo(BestUnitForGender o) {
+            // negation, because we want the best one first
+            return ComparisonChain.start()
+                .compare(o.durationOrLength, durationOrLength)
+                .compare(o.metric, metric)
+                .compare(quantity, o.quantity)
+                .compare(distanceFromOne, o.distanceFromOne)
+                .compare(shortUnit, o.shortUnit)
+                .result();
+        }
+        @Override
+        public int hashCode() {
+            return shortUnit.hashCode();
+        }
+        @Override
+        public boolean equals(Object obj) {
+            return compareTo((BestUnitForGender)obj) == 0;
+        }
+        @Override
+        public String toString() {
+            return shortUnit + "(" + (durationOrLength ? "D" : "") + (metric ? "M" : "") + ":" + quantity + ":" + Math.round(distanceFromOne*10) + ")";
+        }
+    }
+
+    public class TablePrinterWithHeader {
+        final String header;
+        final TablePrinter tablePrinter;
+        public TablePrinterWithHeader(String header, TablePrinter tablePrinter) {
+            this.header = header;
+            this.tablePrinter = tablePrinter;
+        }
+    }
+
+    public void writeSubcharts(Anchors anchors) throws IOException {
+        Set<String> locales = GrammarInfo.SEED_LOCALES;
+
+        LanguageTagParser ltp = new LanguageTagParser();
+        //ImmutableSet<String> casesNominativeOnly = ImmutableSet.of(GrammaticalFeature.grammaticalCase.getDefault(null));
+        Factory factory = CLDRConfig.getInstance().getCldrFactory();
+
+        MapComparator<String> caseOrder = new MapComparator<>(new String[] {
+            "nominative", "vocative", "accusative", "oblique",
+            "genitive", "dative", "locative", "instrumental"});
+        Set<String> sortedCases = new TreeSet<>(caseOrder);
+
+        MapComparator<String> genderOrder = new MapComparator<>(new String[] {
+            "masculine", "inanimate", "animate", "common", "feminine", "neuter"});
+        Set<String> sortedGenders = new TreeSet<>(genderOrder);
+
+        Output<Double> sizeInBaseUnits = new Output<>();
+
+        // collect the "best unit ordering"
+        Map<String, BestUnitForGender> unitToBestUnit = new TreeMap<>();
+        for (String longUnit : GrammarInfo.SPECIAL_TRANSLATION_UNITS) {
+            final String shortUnit = uc.getShortId(longUnit);
+            if (shortUnit.equals("generic")) {
+                continue;
+            }
+            String unitCell = getBestBaseUnit(uc, shortUnit, sizeInBaseUnits);
+            String quantity = shortUnit.contentEquals("generic") ? "temperature" : uc.getQuantityFromUnit(shortUnit, false);
+
+            Set<String> systems = uc.getSystems(shortUnit);
+            unitToBestUnit.put(shortUnit, new BestUnitForGender(shortUnit, quantity, systems, sizeInBaseUnits.value));
+        }
+        unitToBestUnit = ImmutableMap.copyOf(unitToBestUnit);
+        // quick check
+        final BestUnitForGender u1 = unitToBestUnit.get("meter");
+        final BestUnitForGender u2 = unitToBestUnit.get("square-centimeter");
+        int comp = u1.compareTo(u2); // should be less
+
+        Set<BestUnitForGender> sorted2 = new TreeSet<>(unitToBestUnit.values());
+        System.out.println(sorted2);
+
+        PlaceholderLocation placeholderPosition = PlaceholderLocation.missing;
+        Matcher placeholderMatcher = UnitConverter.PLACEHOLDER.matcher("");
+        Output<String> unitPatternOut = new Output<>();
+
+        for (String locale : locales) {
+            if (locale.equals("root")) {
+                continue;
+            }
+            ltp.set(locale);
+            String region = ltp.getRegion();
+            if (!region.isEmpty()) {
+                continue;
+            }
+            GrammarInfo grammarInfo = SupplementalDataInfo.getInstance().getGrammarInfo(locale, true);
+            if (grammarInfo == null || !grammarInfo.hasInfo(GrammaticalTarget.nominal)) {
+                continue;
+            }
+            CLDRFile cldrFile = factory.make(locale, true);
+
+            {
+                Collection<String> genders = grammarInfo.get(GrammaticalTarget.nominal, GrammaticalFeature.grammaticalGender, GrammaticalScope.units);
+                sortedGenders.clear();
+                sortedGenders.addAll(genders);
+            }
+            {
+                Collection<String> rawCases = grammarInfo.get(GrammaticalTarget.nominal, GrammaticalFeature.grammaticalCase, GrammaticalScope.units);
+                if (rawCases.isEmpty()) {
+                    rawCases = ImmutableSet.of(GrammaticalFeature.grammaticalCase.getDefault(null));
+                }
+                sortedCases.clear();
+                sortedCases.addAll(rawCases);
+            }
+
+            //Collection<String> nomCases = rawCases.isEmpty() ? casesNominativeOnly : rawCases;
+
+            PluralInfo plurals = SupplementalDataInfo.getInstance().getPlurals(PluralType.cardinal, locale);
+            if (plurals == null) {
+                System.err.println("No " + PluralType.cardinal + "  plurals for " + locale);
+            }
+            Collection<Count> adjustedPlurals = plurals.getCounts();
+            ICUServiceBuilder isb = ICUServiceBuilder.forLocale(CLDRLocale.getInstance(locale));
+            DecimalFormat decFormat = isb.getNumberFormat(1);
+
+            Map<String, TablePrinterWithHeader> info = new LinkedHashMap<>();
+
+
+            if (sortedCases.size() > 1) {
+                // set up the table and add the headers
+                TablePrinter caseTablePrinter = new TablePrinter()
+                    .addColumn("Unit", "class='source' width='1%'", CldrUtility.getDoubleLinkMsg(), "class='source'", true)
+                    .setSortPriority(2)
+                    .setRepeatHeader(true)
+                    .addColumn("Quantity", "class='source' width='1%'", null, "class='source'", true)
+                    .setSortPriority(0)
+                    .addColumn("Size", "class='source' width='1%'", null, "class='source'", true)
+                    .setSortPriority(1)
+                    .setHidden(true)
+                    .addColumn("Gender", "class='source' width='1%'", null, "class='source'", true)
+                    .addColumn("Case", "class='source' width='1%'", null, "class='source'", true)
+                    ;
+                double width = ((int) ((99.0 / (adjustedPlurals.size()*2 + 1)) * 1000)) / 1000.0;
+                String widthStringTarget = "class='target' width='" + width + "%'";
+                final PluralRules pluralRules = plurals.getPluralRules();
+
+                addTwoColumns(caseTablePrinter, widthStringTarget, adjustedPlurals, pluralRules, true);
+
+                // now get the items
+                // also gather info on the "best power units"
+
+                for (String longUnit : GrammarInfo.SPECIAL_TRANSLATION_UNITS) {
+                    final String shortUnit = uc.getShortId(longUnit);
+                    String unitCell = getBestBaseUnit(uc, shortUnit, sizeInBaseUnits);
+                    String quantity = shortUnit.contentEquals("generic") ? "temperature" : uc.getQuantityFromUnit(shortUnit, false);
+
+                    String gender = UnitPathType.gender.getTrans(cldrFile, "long", shortUnit, null, null, null, null);
+                    Set<String> systems = uc.getSystems(shortUnit);
+
+                    for (String case1 : sortedCases) { //
+                        // start a row, then add the cells in the row.
+                        caseTablePrinter
+                        .addRow()
+                        .addCell(unitCell)
+                        .addCell(quantity)
+                        .addCell(sizeInBaseUnits.value)
+                        .addCell(gender)
+                        .addCell(case1);
+
+                        for (Count plural : adjustedPlurals) {
+                            Double sample = getBestSample(pluralRules, plural);
+
+                            // <caseMinimalPairs case="nominative">{0} kostet €3,50.</caseMinimalPairs>
+
+                            String unitPattern = cldrFile.getStringValueWithBailey("//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"" + longUnit + "\"]/unitPattern"
+                                + GrammarInfo.getGrammaticalInfoAttributes(grammarInfo, UnitPathType.unit, plural.toString(), null, case1));
+
+                            caseTablePrinter.addCell(unitPattern);
+
+                            String numberPlusUnit = MessageFormat.format(unitPattern, decFormat.format(sample));
+
+                            String caseMinimalPair = cldrFile.getStringValue("//ldml/numbers/minimalPairs/caseMinimalPairs[@case=\"" + case1 + "\"]");
+                            String withContext = caseMinimalPair == null ? numberPlusUnit : MessageFormat.format(caseMinimalPair, numberPlusUnit);
+
+                            caseTablePrinter.addCell(withContext);
+                        }
+                        // finish the row
+                        caseTablePrinter.finishRow();
+                    }
+                }
+                info.put("Unit Case Info", new TablePrinterWithHeader(
+                    "<p>This table has rows contains unit forms appropriate for different grammatical cases and plural forms. "
+                        + "Each plural form has a sample value such as <i>(1.2)</i> or <i>2</i>. "
+                        + "That value is used with the localized unit pattern to form a formatted measure, such as “2,0 Stunden”. "
+                        + "That formatted measure is in turn substituted into a "
+                        + "<b><a target='doc-minimal-pairs' href='http://cldr.unicode.org/translation/grammatical-inflection#TOC-Miscellaneous-Minimal-Pairs'>case minimal pair pattern</a></b>. "
+                        + "The <b>Gender</b> column is informative; it just supplies the supplied gender for the unit.</p>\n"
+                        + "<ul><li>For clarity, conversion values are supplied for non-metric units. "
+                        + "For more information, see <a target='unit_conversions' href='../supplemental/unit_conversions.html'>Unit Conversions</a>.</li>"
+                        + "</ul>\n"
+                        , caseTablePrinter));
+            }
+
+            if (sortedCases.size() > 1 || sortedGenders.size() > 1) {
+
+                // get best units for gender.
+                Multimap<String, BestUnitForGender> bestUnitForGender = TreeMultimap.create();
+
+                for (String longUnit : GrammarInfo.SPECIAL_TRANSLATION_UNITS) {
+                    final String shortUnit = uc.getShortId(longUnit);
+                    String gender = UnitPathType.gender.getTrans(cldrFile, "long", shortUnit, null, null, null, null);
+                    final BestUnitForGender bestUnit = unitToBestUnit.get(shortUnit);
+                    if (bestUnit != null) {
+                        bestUnitForGender.put(gender, bestUnit);
+                    }
+                }
+
+                for (Entry<String, Collection<BestUnitForGender>> entry : bestUnitForGender.asMap().entrySet()) {
+                    List<String> items = entry.getValue()
+                        .stream()
+                        .map(x -> x.shortUnit)
+                        .collect(Collectors.toList());
+                    System.out.println(locale + "\t" + entry.getKey() + "\t" + items);
+                }
+
+
+                TablePrinter caseTablePrinter = new TablePrinter()
+                    .addColumn("Unit", "class='source' width='1%'", CldrUtility.getDoubleLinkMsg(), "class='source'", true)
+                    .setSortPriority(2)
+                    .setRepeatHeader(true)
+                    .addColumn("Case", "class='source' width='1%'", null, "class='source'", true)
+                    .addColumn("Gender", "class='source' width='1%'", null, "class='source'", true)
+                    ;
+                double width = ((int) ((99.0 / (adjustedPlurals.size()*2 + 1)) * 1000)) / 1000.0;
+                String widthStringTarget = "class='target' width='" + width + "%'";
+                final PluralRules pluralRules = plurals.getPluralRules();
+
+                addTwoColumns(caseTablePrinter, widthStringTarget, adjustedPlurals, pluralRules, false);
+
+                // now get the items
+                for (String power : Arrays.asList("power2", "power3")) {
+                    String unitCell = power;
+
+                    for (String gender : sortedGenders) {
+                        Collection<BestUnitForGender> bestUnits = bestUnitForGender.get(gender);
+                        String bestUnit = null;
+                        if (!bestUnits.isEmpty()) {
+                            bestUnit = bestUnits.iterator().next().shortUnit;
+                        }
+
+                        for (String case1 : sortedCases) { //
+                            // start a row, then add the cells in the row.
+                            caseTablePrinter
+                            .addRow()
+                            .addCell(unitCell)
+                            .addCell(case1)
+                            .addCell(gender + (bestUnit == null ? "" : "\n(" + bestUnit + ")"))
+                            ;
+
+                            for (Count plural : adjustedPlurals) {
+                                String localizedPowerPattern = UnitPathType.power.getTrans(cldrFile, "long", power, plural.toString(), case1, gender, null);
+                                caseTablePrinter.addCell(localizedPowerPattern);
+
+                                if (bestUnit == null) {
+                                    caseTablePrinter.addCell("n/a");
+                                } else {
+                                    Double samplePlural = getBestSample(pluralRules, plural);
+                                    String localizedUnitPattern = UnitPathType.unit.getTrans(cldrFile, "long", bestUnit, plural.toString(), case1, gender, null);
+                                    placeholderPosition = UnitConverter.extractUnit(placeholderMatcher, localizedUnitPattern, unitPatternOut);
+                                    if (placeholderPosition != PlaceholderLocation.middle) {
+                                        localizedUnitPattern = unitPatternOut.value;
+                                        String placeholderPattern = placeholderMatcher.group();
+
+                                        String combined;
+                                        try {
+                                            combined = UnitConverter.combineLowercasing(new ULocale(locale), "long", localizedPowerPattern, localizedUnitPattern);
+                                        } catch (Exception e) {
+                                           throw new IllegalArgumentException(locale + ") Can't combine "
+                                               + "localizedPowerPattern=«" + localizedPowerPattern
+                                               + "» with localizedUnitPattern=«"+ localizedUnitPattern + "»"
+                                               );
+                                        }
+                                        String combinedWithPlaceholder = UnitConverter.addPlaceholder(combined, placeholderPattern, placeholderPosition);
+
+                                        String sample = MessageFormat.format(combinedWithPlaceholder, decFormat.format(samplePlural));
+
+                                        String caseMinimalPair = cldrFile.getStringValue("//ldml/numbers/minimalPairs/caseMinimalPairs[@case=\"" + case1 + "\"]");
+                                        String withContext = caseMinimalPair == null ? sample : MessageFormat.format(caseMinimalPair, sample);
+
+                                        caseTablePrinter.addCell(withContext);
+                                    }
+                                }
+                            }
+                            // finish the row
+                            caseTablePrinter.finishRow();
+                        }
+                    }
+                }
+                info.put("Unit Power Components", new TablePrinterWithHeader(
+                    "<p>This table shows the square (power2) and cubic (power3) patterns, which may vary by case, gender, and plural forms. "
+                        + "Each gender is illustrated with a unit where possible, such as <i>(second)</i> or <i>(meter)</i>. "
+                        + "Each plural category is illustrated with a unit where possible, such as <i>(1)</i> or <i>(1.2)</i>. "
+                        + "The patterns are first supplied, and then combined with the samples and "
+                        + "<b><a target='doc-minimal-pairs' href='http://cldr.unicode.org/translation/grammatical-inflection#TOC-Miscellaneous-Minimal-Pairs'>case minimal pair patterns</a></b> "
+                        + "in the next <b>Formatted Sample</b> column."
+                        + "</p>", caseTablePrinter));
+            }
+
+
+            if (!info.isEmpty()) {
+                String name = ENGLISH.getName(locale);
+                new Subchart(name + ": Unit Grammar Info", locale, info).writeChart(anchors);
+            }
+        }
+    }
+
+    public void addTwoColumns(TablePrinter caseTablePrinter, String widthStringTarget, Collection<Count> adjustedPlurals, final PluralRules pluralRules, boolean spanRows) {
+        for (Count plural : adjustedPlurals) {
+            Double sample = getBestSample(pluralRules, plural);
+            final String pluralHeader = plural.toString() + " (" + sample + ")";
+            caseTablePrinter.addColumn("Form for: " + pluralHeader, widthStringTarget, null, "class='target'", true)
+            .setSpanRows(spanRows);
+            caseTablePrinter.addColumn("Formatted Sample: " + pluralHeader, widthStringTarget, null, "class='target'", true);
+        }
+    }
+
+    static final Map<String, Pair<String, Double>> BEST_UNIT_CACHE = new HashMap<>();
+
+    public static String getBestBaseUnit(UnitConverter uc, final String shortUnit, Output<Double> sizeInBaseUnits) {
+        Pair<String, Double> cached = BEST_UNIT_CACHE.get(shortUnit);
+        if (cached != null) {
+            sizeInBaseUnits.value = cached.getSecond();
+            return cached.getFirst();
+        }
+        if (shortUnit.equals("square-mile")) {
+            int debug = 0;
+        }
+        String unitCell = ENGLISH.getStringValue("//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"" + uc.getLongId(shortUnit)
+        + "\"]/displayName");
+        Output<String> baseUnit = new Output<>();
+        ConversionInfo info = uc.parseUnitId(shortUnit, baseUnit, false);
+
+        if (info != null) {
+            sizeInBaseUnits.value = info.factor.doubleValue();
+            Map<Rational, String> factorToUnit = BASE_TO_FACTOR_TO_UNIT.get(baseUnit.value);
+            if (factorToUnit == null) {
+                int debug = 0;
+            }
+            String bestUnit = null;
+            Rational bestFactor = null;
+            Rational inputBoundary = Rational.of(2).multiply(info.factor);
+            for (Entry<Rational, String> entry : factorToUnit.entrySet()) {
+                final Rational currentFactor = entry.getKey();
+                if (bestUnit != null && currentFactor.compareTo(inputBoundary) >= 0) {
+                    break;
+                }
+                bestFactor = currentFactor;
+                bestUnit = entry.getValue();
+            }
+            bestFactor = info.factor.divide(bestFactor); // scale for bestUnit
+            if (!bestFactor.equals(Rational.ONE) || !shortUnit.equals(bestUnit)) {
+                final String string = bestFactor.toString(FormatStyle.repeating);
+                final double bestDoubleFactor = bestFactor.doubleValue();
+                String pluralCategory = ENGLISH_PLURAL_RULES.select(bestDoubleFactor);
+                final String unitPath = "//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"" + uc.getLongId(bestUnit)
+                + "\"]/unitPattern[@count=\"" + pluralCategory
+                + "\"]";
+                String unitPattern = ENGLISH.getStringValue(unitPath);
+                if (unitPattern == null) {
+                    final UnitId unitId = uc.createUnitId(bestUnit);
+                    unitPattern = unitId.toString(ENGLISH, "long", pluralCategory, null, null, false);
+                    if (unitPattern == null) {
+                        int debug = 0;
+                    }
+                }
+                String unitMeasure = MessageFormat.format(unitPattern, string.contains("/") ? "~" + bestDoubleFactor : string);
+                unitCell = shortUnit + "\n( = " + unitMeasure + ")";
+            }
+        } else {
+            sizeInBaseUnits.value = Double.valueOf(-1);
+        }
+        BEST_UNIT_CACHE.put(shortUnit, Pair.of(unitCell, sizeInBaseUnits.value));
+        return unitCell;
+    }
+
+    private Double getBestSample(PluralRules pluralRules, Count plural) {
+        Collection<Double> samples = pluralRules.getSamples(plural.toString());
+        if (samples.isEmpty()) {
+            samples = pluralRules.getSamples(plural.toString(), SampleType.DECIMAL);
+        }
+        int size = samples.size();
+        switch (size) {
+        case 0:
+            throw new IllegalArgumentException("shouldn't happen");
+        case 1:
+            return samples.iterator().next();
+        }
+        return Iterables.skip(samples, 1).iterator().next();
+    }
+
+    private class Subchart extends Chart {
+        String title;
+        String file;
+        private Map<String,TablePrinterWithHeader> tablePrinter;
+
+        @Override
+        public boolean getShowDate() {
+            return false;
+        }
+
+        public Subchart(String title, String file, Map<String, TablePrinterWithHeader> info) {
+            super();
+            this.title = title;
+            this.file = file;
+            this.tablePrinter = info;
+        }
+
+        @Override
+        public String getDirectory() {
+            return DIR;
+        }
+
+        @Override
+        public String getTitle() {
+            return title;
+        }
+
+        @Override
+        public String getFileName() {
+            return file;
+        }
+
+        @Override
+        public String getExplanation() {
+            return MAIN_HEADER
+                + "<p><i>Unit Inflections, Phase 1:</i> The end goal is to add full case and gender support for formatted units. "
+                + "During Phase 1, a limited number of locales and units of measurement are being handled in CLDR v38, "
+                + "so that we can work kinks out of the process before expanding to all units for all locales.</p>\n"
+                + "<p>This chart shows grammatical information available for certain unit and/or power patterns. These patterns are also illustrated with <b>Formatted Samples</b> that combine the patterns with sample numbers and "
+                + "<b><a target='doc-minimal-pairs' href='http://cldr.unicode.org/translation/grammatical-inflection#TOC-Miscellaneous-Minimal-Pairs'>case minimal pair patterns</a></b>. "
+                + "For example, “… für {0} …” is a <i>case minimal pair pattern</i> that requires the placeholder {0} to be in the accusative case in German. By inserting into a minimal pair pattern, "
+                + "it is easier to ensure that the original unit and/or power patterns are correctly inflected. </p>\n"
+                + "<p><b>Notes</b>"
+                + "<ul><li>We don't have the cross-product of minimal pairs for both case and plural forms, "
+                + "so the <i>case minimal pair pattern</i> might not be correct for the row’s plural category, especially in the nominative.</li>"
+                + "<li>Translators often have difficulties with the the minimal pair patterns, "
+                + "since they are <i>transcreations</i> not translations. The Hindi minimal pair patterns for case and gender have been discarded because they were incorrectly translated.</li>"
+                + "<li>We don't expect translators to supply minimal pair patterns that are natural for any kind of placeholder: "
+                + "for example, it is probably not typical to use the vocative with 3.2 meters! So look at the <b>Formatted Samples</b> as an aid for helping to see the context for grammatical inflections, but one that has limitations.</li></ul>"
+                ;
+        }
+
+        @Override
+        public void writeContents(FormattedFileWriter pw) throws IOException {
+            if (tablePrinter.size() > 1) {
+                pw.write("<h2>Table of Contents</h2>\n");
+                pw.append("<ol>\n");
+                for (String header : tablePrinter.keySet()) {
+                    pw.write("<li><b>"
+                        + "<a href='#" + FileUtilities.anchorize(header)+ "'>" + header + "</a>"
+                        + "</b></li>\n");
+                }
+                pw.append("</ol>\n");
+            }
+            for (Entry<String, TablePrinterWithHeader> entry : tablePrinter.entrySet()) {
+                final String header = entry.getKey();
+                pw.write("<h2><a name='" + FileUtilities.anchorize(header)+ "'>" + header + "</a></h2>\n");
+                final TablePrinterWithHeader explanation = entry.getValue();
+                pw.write(explanation.header);
+                pw.write(explanation.tablePrinter.toTable());
+            }
+        }
+    }
+
+    public static RuleBasedCollator RBC;
+    static {
+        Factory cldrFactory = Factory.make(CLDRPaths.COMMON_DIRECTORY + "collation/", ".*");
+        CLDRFile root = cldrFactory.make("root", false);
+        String rules = root.getStringValue("//ldml/collations/collation[@type=\"emoji\"][@visibility=\"external\"]/cr");
+
+//        if (!rules.contains("'#⃣'")) {
+//            rules = rules.replace("#⃣", "'#⃣'").replace("*⃣", "'*⃣'"); //hack for 8288
+//        }
+
+        try {
+            RBC = new RuleBasedCollator(rules);
+        } catch (Exception e) {
+            throw new IllegalArgumentException("Failure in rules for " + CLDRPaths.COMMON_DIRECTORY + "collation/" + "root", e);
+        }
+    }
+}
diff --git a/tools/java/org/unicode/cldr/tool/ChartLanguageMatching.java b/tools/java/org/unicode/cldr/tool/ChartLanguageMatching.java
index 5a1ac96..4534c29 100644
--- a/tools/java/org/unicode/cldr/tool/ChartLanguageMatching.java
+++ b/tools/java/org/unicode/cldr/tool/ChartLanguageMatching.java
@@ -5,7 +5,6 @@
 
 import org.unicode.cldr.util.CLDRFile;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Row.R4;
 
 public class ChartLanguageMatching extends Chart {
@@ -97,7 +96,7 @@
                 parts[2] = "XY";
             }
         }
-        String result = ENGLISH.getName(CollectionUtilities.join(parts, "_"), true, CLDRFile.SHORT_ALTS);
+        String result = ENGLISH.getName(String.join("_", parts), true, CLDRFile.SHORT_ALTS);
         if (user) {
             result = result
                 .replace("Xxxx", "any-script")
diff --git a/tools/java/org/unicode/cldr/tool/ChartSubdivisionNames.java b/tools/java/org/unicode/cldr/tool/ChartSubdivisionNames.java
index 4beeca1..178c112 100644
--- a/tools/java/org/unicode/cldr/tool/ChartSubdivisionNames.java
+++ b/tools/java/org/unicode/cldr/tool/ChartSubdivisionNames.java
@@ -60,6 +60,7 @@
         return MAIN_HEADER + "<p>The charts are presented in groups of related languages, for easier comparison.<p>";
     }
 
+    @Override
     public void writeContents(FormattedFileWriter pw) throws IOException {
         FileCopier.ensureDirectoryExists(DIR);
         FileCopier.copy(Chart.class, "index.css", DIR);
@@ -82,7 +83,7 @@
         Set<String> subdivisions = Validity.getInstance().getStatusToCodes(LstrType.subdivision).get(Status.regular);
         // set up right order for columns
 
-        Map<String, String> nameToCode = new LinkedHashMap<String, String>();
+        Map<String, String> nameToCode = new LinkedHashMap<>();
         Relation<LanguageGroup, R3<Integer, String, String>> groupToNameAndCodeSorted = Relation.of(
             new EnumMap<LanguageGroup, Set<R3<Integer, String, String>>>(LanguageGroup.class),
             TreeSet.class);
diff --git a/tools/java/org/unicode/cldr/tool/ChartSubdivisions.java b/tools/java/org/unicode/cldr/tool/ChartSubdivisions.java
index ed25074..bbe0f13 100644
--- a/tools/java/org/unicode/cldr/tool/ChartSubdivisions.java
+++ b/tools/java/org/unicode/cldr/tool/ChartSubdivisions.java
@@ -16,7 +16,7 @@
 import org.unicode.cldr.util.Validity;
 import org.unicode.cldr.util.Validity.Status;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row.R2;
 
@@ -116,7 +116,8 @@
             tablePrinter.addRow()
                 .addCell(ENGLISH.getName(CLDRFile.TERRITORY_NAME, region))
                 .addCell(region)
-                .addCell(regionAliases == null ? "«none»" : "=" + CollectionUtilities.join(regionAliases, ", "))
+                .addCell(regionAliases == null ? "«none»" : "=" + Joiner.on(", ")
+                    .join(regionAliases))
                 //.addCell(type)
                 .addCell("")
                 .addCell("")
diff --git a/tools/java/org/unicode/cldr/tool/CheckAnnotations.java b/tools/java/org/unicode/cldr/tool/CheckAnnotations.java
index fa6d882..8bc116e 100644
--- a/tools/java/org/unicode/cldr/tool/CheckAnnotations.java
+++ b/tools/java/org/unicode/cldr/tool/CheckAnnotations.java
@@ -12,7 +12,7 @@
         AnnotationSet data = Annotations.getDataSet("en");
         CLDRConfig config = CLDRConfig.getInstance();
         //UnicodeMap<Annotations> data2 = Annotations.getData("de");
-        Set<String> sorted = new TreeSet<String>(config.getCollator());
+        Set<String> sorted = new TreeSet<>(config.getCollator());
 
         int i = 0;
         boolean needMore = true;
diff --git a/tools/java/org/unicode/cldr/tool/CheckEnglishCurrencyNames.java b/tools/java/org/unicode/cldr/tool/CheckEnglishCurrencyNames.java
index 7ae8caa..f576601 100644
--- a/tools/java/org/unicode/cldr/tool/CheckEnglishCurrencyNames.java
+++ b/tools/java/org/unicode/cldr/tool/CheckEnglishCurrencyNames.java
@@ -30,7 +30,7 @@
         Set<String> currencyCodes = sc.getGoodAvailableCodes("currency");
         Relation<String, String> currencyCodesWithDates = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
         Relation<String, String> modernCurrencyCodes2territory = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
-        Set<String> territoriesWithoutModernCurrencies = new TreeSet<String>(sc.getGoodAvailableCodes("territory"));
+        Set<String> territoriesWithoutModernCurrencies = new TreeSet<>(sc.getGoodAvailableCodes("territory"));
 
         for (String territory : sc.getGoodAvailableCodes("territory")) {
             if (supplementalDataInfo.getContained(territory) != null) {
@@ -73,7 +73,7 @@
                 System.out.println(currency + "\t" + name);
             }
         }
-        Set<String> remainder = new TreeSet<String>();
+        Set<String> remainder = new TreeSet<>();
         remainder.addAll(currencyCodes);
         remainder.removeAll(currencyCodesWithDates.keySet());
         System.out.println("Currencies without Territories: " + remainder);
@@ -96,9 +96,9 @@
             }
         }
         Relation<String, String> currency2symbols = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
-        Map<String, Relation<String, String>> currency2symbol2locales = new TreeMap<String, Relation<String, String>>(); //
+        Map<String, Relation<String, String>> currency2symbol2locales = new TreeMap<>(); //
         System.out.format("Raw usage data\n");
-        Set<String> noOfficialLanguages = new TreeSet<String>();
+        Set<String> noOfficialLanguages = new TreeSet<>();
 
         for (Entry<String, Set<String>> currencyAndTerritories : modernCurrencyCodes2territory.keyValuesSet()) {
             String currency = currencyAndTerritories.getKey();
diff --git a/tools/java/org/unicode/cldr/tool/CheckHtmlFiles.java b/tools/java/org/unicode/cldr/tool/CheckHtmlFiles.java
index 45d70d6..af2ac57 100644
--- a/tools/java/org/unicode/cldr/tool/CheckHtmlFiles.java
+++ b/tools/java/org/unicode/cldr/tool/CheckHtmlFiles.java
@@ -38,14 +38,15 @@
 import org.unicode.cldr.util.DtdData.Element;
 import org.unicode.cldr.util.DtdType;
 import org.unicode.cldr.util.Pair;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.PatternCache;
 import org.unicode.cldr.util.RegexUtilities;
 import org.unicode.cldr.util.SimpleHtmlParser;
 import org.unicode.cldr.util.SimpleHtmlParser.Type;
 import org.unicode.cldr.util.TransliteratorUtilities;
 
+import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableSet;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row.R4;
 import com.ibm.icu.text.BreakIterator;
@@ -247,13 +248,13 @@
     static Pattern WHITESPACE = PatternCache.get("[\\s]+");
     static Pattern BADSECTION = PatternCache.get("^\\s*(\\d+\\s*)?Section\\s*\\d+\\s*[-:]\\s*");
 
-    static final Set<String> FORCEBREAK = new HashSet<String>(Arrays.asList(
+    static final Set<String> FORCEBREAK = new HashSet<>(Arrays.asList(
         "table", "div", "blockquote",
         "p", "br", "td", "th", "h1", "h2", "h3", "h4", "h5", "li"));
 
 //    enum ContentsElements {h1, h2, h3, h4, h5, caption}
 
-    static final Set<String> DO_CONTENTS = new HashSet<String>(Arrays.asList(
+    static final Set<String> DO_CONTENTS = new HashSet<>(Arrays.asList(
         "h1", "h2", "h3", "h4", "h5", "caption"));
 
     static class Levels implements Comparable<Levels> {
@@ -354,7 +355,7 @@
     static class HeadingInfo {
         private Levels levels = new Levels();
         private String text = "";
-        private Set<String> ids = new LinkedHashSet<String>();
+        private Set<String> ids = new LinkedHashSet<>();
         private boolean suppressSection;
         private boolean isHeader;
 
@@ -478,8 +479,8 @@
     static class HeadingInfoList {
         private static final long serialVersionUID = -6722150173224993960L;
         Levels lastBuildLevel;
-        private Set<String> errors = new LinkedHashSet<String>();
-        Output<Boolean> missingLevel = new Output<Boolean>(false);
+        private Set<String> errors = new LinkedHashSet<>();
+        Output<Boolean> missingLevel = new Output<>(false);
         private String fileName;
         ArrayList<HeadingInfo> list = new ArrayList<>();
 
@@ -509,7 +510,7 @@
         public void listContents() {
 
             System.out.print("\n\t\t<!-- START Generated TOC: CheckHtmlFiles -->");
-            Counter<String> idCounter = new Counter<String>();
+            Counter<String> idCounter = new Counter<>();
 
             int lastLevel = new Levels().getDepth();
             String pad = PAD;
@@ -640,12 +641,12 @@
 
     static class Data implements Iterable<String> {
         private static final Pattern ELEMENT_ATTLIST = Pattern.compile("<!(ELEMENT|ATTLIST)\\s+(\\S+)[^>]*>");
-        List<String> sentences = new ArrayList<String>();
+        List<String> sentences = new ArrayList<>();
         M4<String, String, String, Boolean> dtdItems = ChainedMap.of(
             new LinkedHashMap<String, Object>(),
             new TreeMap<String, Object>(),
             new TreeMap<String, Object>(), Boolean.class);
-        Counter<String> hashedSentences = new Counter<String>();
+        Counter<String> hashedSentences = new Counter<>();
         int count = 0;
         int totalErrorCount = 0;
         int totalFatalCount = 0;
@@ -671,7 +672,7 @@
             if (!sourceDirectory.exists()) {
                 throw new IllegalArgumentException("Can't find " + sourceDirectory);
             }
-            String canonicalBase = sourceDirectory.getCanonicalPath();
+            String canonicalBase = PathUtilities.getNormalizedPathString(sourceDirectory);
             String FileRegex = canonicalBase + File.separator + regex;
             FileRegex = FileRegex.replace("\\", "\\\\");
             FileRegex = FileRegex.replace("\\\\.", "\\.");
@@ -731,7 +732,7 @@
             // for detecting missing captions
             boolean pushedTable = false;
             boolean checkCaption = false;
-            List<Integer> captionWarnings = new ArrayList<Integer>();
+            List<Integer> captionWarnings = new ArrayList<>();
 
             main: while (true) {
                 int lineCount = parser.getLineCount();
@@ -879,7 +880,7 @@
             }
             if (!captionWarnings.isEmpty()) {
                 System.out.println("WARNING: Missing <caption> on the following lines: "
-                    + "\n    " + CollectionUtilities.join(captionWarnings, ", ")
+                    + "\n    " + Joiner.on(", ").join(captionWarnings)
                     + "\n\tTo fix, add <caption> after the <table>, such as:"
                     + "\n\t\t<table>"
                     + "\n\t\t\t<caption>Private Use Codes in CLDR</a></caption>"
diff --git a/tools/java/org/unicode/cldr/tool/CheckLangTagBNF.java b/tools/java/org/unicode/cldr/tool/CheckLangTagBNF.java
index 2e9fcf4..59ac6c5 100644
--- a/tools/java/org/unicode/cldr/tool/CheckLangTagBNF.java
+++ b/tools/java/org/unicode/cldr/tool/CheckLangTagBNF.java
@@ -46,7 +46,7 @@
 
     private static final String[] groupNames = { "whole", "lang", "script", "region", "variants", "extensions",
         "privateuse",
-        "grandfathered", "privateuse", "localeExtensions"
+        "legacy", "privateuse", "localeExtensions"
     };
 
     /**
@@ -215,15 +215,6 @@
 
         System.out.println(contents);
 
-        // System.out.println(langTagPattern);
-        // System.out.println(cleanedLangTagPattern);
-//        StandardCodes sc = StandardCodes.make();
-//        Set<String> grandfathered = sc.getAvailableCodes("grandfathered");
-        // for (Iterator it = grandfathered.iterator(); it.hasNext();) {
-        // System.out.print(it.next() + " | ");
-        // }
-        // System.out.println();
-
         LanguageTagParser ltp = new LanguageTagParser();
         SimpleLocaleParser simpleLocaleParser = new SimpleLocaleParser();
         boolean expected = true;
@@ -286,7 +277,7 @@
                 checkStrings("script", ltp.getScript(), slp.getScript());
                 checkStrings("country", ltp.getRegion(), slp.getCountry());
                 checkStrings("variants", ltp.getVariants(), slp.getVariants());
-                Map<String, String> foo = new LinkedHashMap<String, String>();
+                Map<String, String> foo = new LinkedHashMap<>();
                 foo.putAll(ltp.getExtensions());
                 foo.putAll(ltp.getLocaleExtensions());
                 checkStrings("variants", foo, slp.getExtensions());
@@ -294,7 +285,7 @@
 
             if (ltp.getLanguage().length() != 0)
                 System.out.println("\tlang:    \t" + ltp.getLanguage()
-                    + (ltp.isGrandfathered() ? " (grandfathered)" : ""));
+                    + (ltp.isLegacy() ? " (legacy)" : ""));
             if (ltp.getScript().length() != 0) System.out.println("\tscript:\t" + ltp.getScript());
             if (ltp.getRegion().length() != 0) System.out.println("\tregion:\t" + ltp.getRegion());
             if (ltp.getVariants().size() != 0) System.out.println("\tvariants:\t" + ltp.getVariants());
diff --git a/tools/java/org/unicode/cldr/tool/CldrVersion.java b/tools/java/org/unicode/cldr/tool/CldrVersion.java
index 93b7414..467cf62 100644
--- a/tools/java/org/unicode/cldr/tool/CldrVersion.java
+++ b/tools/java/org/unicode/cldr/tool/CldrVersion.java
@@ -22,20 +22,21 @@
  * @author markdavis
  *
  */
+// TODO compute the VersionInfo for each at creation time, and stash as field.
 public enum CldrVersion {
-    unknown, 
-    v1_1_1, v1_2, v1_3, v1_4_1, v1_5_1, v1_6_1, v1_7_2, v1_8_1, v1_9_1, v2_0_1, 
+    unknown,
+    v1_1_1, v1_2, v1_3, v1_4_1, v1_5_1, v1_6_1, v1_7_2, v1_8_1, v1_9_1, v2_0_1,
     v21_0, v22_1, v23_1, v24_0, v25_0, v26_0, v27_0, v28_0, v29_0, v30_0, v31_0, v32_0, v33_0, v33_1, v34_0,
-    v35_0, v35_1, v36_0,
+    v35_0, v35_1, v36_0, v36_1, v37_0,
     trunk;
 
     private final String baseDirectory;
     private final String dotName;
     private final VersionInfo versionInfo;
-    
-    /** 
+
+    /**
      * Get the closest available version (successively dropping lower-significance values)
-     * We do this because the archive might contain a dot-dot version 
+     * We do this because the archive might contain a dot-dot version
      * but have a folder called by the round(er) version number.
      */
     public static CldrVersion from(VersionInfo versionInfo) {
@@ -51,22 +52,23 @@
                     : versionInfo.getMinor() != 0 ? VersionInfo.getInstance(versionInfo.getMajor())
                         : unknown.versionInfo; // will always terminate with unknown.
         }
-    };
+    }
 
     public static CldrVersion from(String versionString) {
         return valueOf(versionString.charAt(0) < 'A' ? "v" + versionString.replace('.', '_') : versionString);
-    };
+    }
 
     public VersionInfo getVersionInfo() {
         return versionInfo;
     }
+    @Override
     public String toString() {
         return dotName;
-    };
+    }
     public String getBaseDirectory() {
         return baseDirectory;
     }
-    
+
     public boolean isOlderThan(CldrVersion other) {
         return compareTo(other) < 0;
     }
@@ -116,8 +118,8 @@
     public List<File> getPathsForFactory() {
         return ImmutableList.copyOf(versionInfo != null && versionInfo.getMajor() < 27
             ? new File[] { new File(getBaseDirectory() + "common/main/") }
-        : new File[] { 
-            new File(getBaseDirectory() + "common/main/"), 
+        : new File[] {
+            new File(getBaseDirectory() + "common/main/"),
             new File(getBaseDirectory() + "common/annotations/") });
     }
 
@@ -164,7 +166,7 @@
             LinkedHashSet<VersionInfo> fileMTc = new LinkedHashSet<>(allFileVersions);
             fileMTc.removeAll(allTc);
             if (!fileMTc.isEmpty()) {
-                errorMessages.add("Extra " + CLDRPaths.ARCHIVE_DIRECTORY + " compared to ToolConstants.CLDR_VERSIONS: " + fileMTc);
+                errorMessages.add("Extra folders in " + CLDRPaths.ARCHIVE_DIRECTORY + " compared to ToolConstants.CLDR_VERSIONS: " + fileMTc);
             }
         }
 
diff --git a/tools/java/org/unicode/cldr/tool/CollectExemplars.java b/tools/java/org/unicode/cldr/tool/CollectExemplars.java
index d50d4ca..9bce5c4 100644
--- a/tools/java/org/unicode/cldr/tool/CollectExemplars.java
+++ b/tools/java/org/unicode/cldr/tool/CollectExemplars.java
@@ -10,7 +10,7 @@
 public class CollectExemplars {
     public static void main(String[] args) {
         final String stock = "en|ar|de|es|fr|it|ja|ko|nl|pl|ru|th|tr|pt|zh|zh_Hant|bg|ca|cs|da|el|fa|fi|fil|hi|hr|hu|id|lt|lv|ro|sk|sl|sr|sv|uk|vi|he|nb|et|ms|am|bn|gu|is|kn|ml|mr|sw|ta|te|ur|eu|gl|af|zu|en_GB|es_419|pt_PT|fr_CA|zh_HK";
-        final HashSet<String> REGION_LOCALES = new HashSet<String>(Arrays.asList(stock.split("\\|")));
+        final HashSet<String> REGION_LOCALES = new HashSet<>(Arrays.asList(stock.split("\\|")));
         UnicodeSet target = new UnicodeSet();
         add("special", null, new UnicodeSet("[㐀-䶵一-鿌﨎﨏﨑﨓﨔﨟﨡﨣﨤﨧-﨩𠀀-𪛖 𪜀-𫜴𫝀-𫠝]"), target);
         for (ULocale locale : ULocale.getAvailableLocales()) {
diff --git a/tools/java/org/unicode/cldr/tool/CompareData.java b/tools/java/org/unicode/cldr/tool/CompareData.java
index 6a8bcf6..29864ef 100644
--- a/tools/java/org/unicode/cldr/tool/CompareData.java
+++ b/tools/java/org/unicode/cldr/tool/CompareData.java
@@ -11,6 +11,7 @@
 import org.unicode.cldr.util.CldrUtility;
 import org.unicode.cldr.util.Factory;
 import org.unicode.cldr.util.LocaleIDParser;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.PrettyPath;
 
 import com.ibm.icu.dev.tool.UOption;
@@ -51,16 +52,16 @@
         try {
             UOption.parseArgs(args, options);
             String sourceDir = options[SOURCEDIR].value + "common/main/";
-            System.out.println(new File(sourceDir).getCanonicalPath());
+            System.out.println(PathUtilities.getNormalizedPathString(sourceDir));
             String compareDir = options[DESTDIR].value + "common/main/";
-            System.out.println(new File(compareDir).getCanonicalPath());
+            System.out.println(PathUtilities.getNormalizedPathString(compareDir));
 
             cldrFactory = Factory.make(sourceDir, options[MATCH].value);
             Factory oldFactory = Factory.make(compareDir, options[MATCH].value);
 
-            locales = new TreeSet<String>(cldrFactory.getAvailable());
+            locales = new TreeSet<>(cldrFactory.getAvailable());
             new CldrUtility.MatcherFilter(options[MATCH].value).retainAll(locales);
-            Set<String> pathsSeen = new HashSet<String>();
+            Set<String> pathsSeen = new HashSet<>();
             int newItemsTotal = 0;
             int replacementItemsTotal = 0;
             int deletedItemsTotal = 0;
@@ -73,9 +74,9 @@
                 int sameItems = 0;
                 String locale = it.next();
                 if (locale.startsWith("supplem") || locale.startsWith("character")) continue;
-                CLDRFile file = (CLDRFile) cldrFactory.make(locale, false);
+                CLDRFile file = cldrFactory.make(locale, false);
                 try {
-                    CLDRFile oldFile = (CLDRFile) oldFactory.make(locale, false);
+                    CLDRFile oldFile = oldFactory.make(locale, false);
                     pathsSeen.clear();
                     for (Iterator<String> it2 = file.iterator(); it2.hasNext();) {
                         String path = it2.next();
@@ -125,4 +126,4 @@
         }
         return count;
     }
-}
\ No newline at end of file
+}
diff --git a/tools/java/org/unicode/cldr/tool/CompareEn.java b/tools/java/org/unicode/cldr/tool/CompareEn.java
index 7205429..647a64d 100644
--- a/tools/java/org/unicode/cldr/tool/CompareEn.java
+++ b/tools/java/org/unicode/cldr/tool/CompareEn.java
@@ -16,8 +16,6 @@
 import org.unicode.cldr.util.CldrUtility;
 import org.unicode.cldr.util.Factory;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
-
 public class CompareEn {
 
     enum MyOptions {
@@ -72,11 +70,12 @@
 
             // walk through all the new paths and values to check them.
 
-            Set<String> paths = CollectionUtilities.addAll(en_GB.iterator(), new TreeSet<>());
+            TreeSet<String> paths = new TreeSet<>();
+            en_GB.forEach(paths::add);
 
             for (String path : paths) {
                 if (path.startsWith("//ldml/identity")) {
-                    continue; 
+                    continue;
                 }
              // skip certain paths
                 if (path.startsWith("//ldml/dates/timeZoneNames/") && path.contains("/short/")) {
@@ -130,8 +129,9 @@
 
                 // walk through all the new paths and values to check them.
 
-                Set<String> paths = CollectionUtilities.addAll(en_GB.iterator(), new TreeSet<>());
-                paths = CollectionUtilities.addAll(en_001.iterator(), paths);
+                TreeSet<String> paths = new TreeSet<>();
+                en_GB.forEach(paths::add);
+                en_001.forEach(paths::add);
 
                 for (String path : paths) {
                     if (path.startsWith("//ldml/identity")) {
diff --git a/tools/java/org/unicode/cldr/tool/CompareFilesBetweenReleases2.java b/tools/java/org/unicode/cldr/tool/CompareFilesBetweenReleases2.java
index 20d5dbf..ffb32e9 100644
--- a/tools/java/org/unicode/cldr/tool/CompareFilesBetweenReleases2.java
+++ b/tools/java/org/unicode/cldr/tool/CompareFilesBetweenReleases2.java
@@ -2,60 +2,110 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.Collections;
 import java.util.LinkedHashSet;
 import java.util.Set;
 import java.util.TreeSet;
-
-import org.unicode.cldr.util.CLDRPaths;
+import java.util.stream.Collectors;
 
 import com.google.common.collect.ImmutableSet;
 
+import org.unicode.cldr.util.CLDRPaths;
+import org.unicode.cldr.util.CLDRTool;
+import org.unicode.cldr.util.PathUtilities;
+
+@CLDRTool(alias = "CompareFilesBetweenReleases", description = "Print a report of which files changed since the last release")
 public class CompareFilesBetweenReleases2 {
 
     //private static final String STAGING_DIRECTORY = CldrUtility.getPath(CLDRPaths.BASE_DIRECTORY, "../cldr-staging/production");
     private static final String RELEASE_DIRECTORY = CLDRPaths.ARCHIVE_DIRECTORY + "cldr-" + ToolConstants.LAST_RELEASE_VERSION + "/";
 
     public static void main(String[] args) throws IOException {
-        Set<String> staging = getFiles(new File(CLDRPaths.BASE_DIRECTORY));
-        Set<String> lastRelease = getFiles(new File(RELEASE_DIRECTORY));
-        System.out.println("\nIn trunk, but not last release:\n");
-        showDiff(staging, lastRelease);
-        System.out.println("\nIn last release, but not trunk:\n");
-        showDiff(lastRelease, staging);
+        final File stagingFile = new File(CLDRPaths.BASE_DIRECTORY);
+        final File lastFile = new File(RELEASE_DIRECTORY);
+        System.out.println("Comparing " + lastFile.getAbsolutePath() + " vs " + stagingFile.getAbsolutePath());
+        Set<String> staging = getFiles(stagingFile, SKIP);
+        Set<String> lastRelease = getFiles(lastFile, SKIP);
+
+        // now, check common <-> seed
+        Set<String> stagingCommon   = getFiles(new File(stagingFile, "common"), Collections.emptySet());
+        Set<String> stagingSeed     = getFiles(new File(stagingFile, "seed"),   Collections.emptySet());
+        Set<String> lastCommon      = getFiles(new File(lastFile,    "common"), Collections.emptySet());
+        Set<String> lastSeed        = getFiles(new File(lastFile,    "seed"),   Collections.emptySet());
+
+        Set<String> seedToCommon    = lastSeed.stream()
+                                        .distinct()
+                                        .filter(stagingCommon::contains)
+                                        .map((String s) -> "/common" + s)
+                                        .collect(Collectors.toCollection(() -> new TreeSet<String>()));
+        Set<String> commonToSeed    = lastCommon.stream()
+                                        .distinct()
+                                        .filter(stagingSeed::contains)
+                                        .map((String s) -> "/seed" + s)
+                                        .collect(Collectors.toCollection(() -> new TreeSet<String>()));
+        // this is like commonToSeed but has /common in it, for exclusion
+        Set<String> commonToSeedExclude    = lastCommon.stream()
+                                        .distinct()
+                                        .filter(stagingSeed::contains)
+                                        .map((String s) -> "/common" + s)
+                                        .collect(Collectors.toCollection(() -> new TreeSet<String>()));
+        if( !seedToCommon.isEmpty() ) {
+            System.out.println("\nMoved from Seed to Common:\n");
+            seedToCommon.forEach((final String f) -> System.out.println(f));
+        }
+        if( !commonToSeed.isEmpty() ) {
+            System.out.println("\nMoved from Common to Seed:\n");
+            commonToSeed.forEach((final String f) -> System.out.println(f));
+        }
+
+        System.out.println("\nIn master, but not "+ToolConstants.LAST_RELEASE_VERSION+":\n");
+        showDiff(staging, lastRelease, seedToCommon);
+        System.out.println("\nIn "+ToolConstants.LAST_RELEASE_VERSION+", but not master:\n");
+        showDiff(lastRelease, staging, commonToSeedExclude);
     }
 
-    private static void showDiff(Set<String> staging, Set<String> lastRelease) {
+    private static void showDiff(Set<String> staging, Set<String> lastRelease, Set<String> skip) {
         Set<String> staging_release = new LinkedHashSet<>(staging);
         staging_release.removeAll(lastRelease);
+        int skippedItems = 0;
         for (String file : staging_release) {
+            if(skip.contains(file)) {
+                skippedItems++;
+                continue;
+            }
             System.out.println(file);
         }
+        if(skippedItems > 0) {
+            System.out.println("(plus " + skippedItems + " skipped item(s) listed above)");
+        }
     }
 
-    private static Set<String> getFiles(File base) throws IOException {
+    private static Set<String> getFiles(File base, Set<String> skip) throws IOException {
         Set<String> result = new TreeSet<>();
-        int baseLen = base.getCanonicalPath().length();
-        getFiles(baseLen, base, result);
+        int baseLen = PathUtilities.getNormalizedPathString(base).length();
+        getFiles(baseLen, base, result, skip);
         return result;
     }
 
     static final Set<String> SKIP = ImmutableSet.of("seed", "exemplars", "docs", "tools");
-    
-    private static void getFiles(int baseLen, File subdir, Set<String> names) throws IOException {
+
+    private static void getFiles(int baseLen, File subdir, Set<String> names, Set<String> skip) throws IOException {
         String name = subdir.getName();
         if (subdir.isDirectory()) {
-            if (SKIP.contains(name)
+            if (skip.contains(name)
                 || name.startsWith(".")) {
                 return;
             }
             for (File file : subdir.listFiles()) {
-                getFiles(baseLen, file, names);
+                getFiles(baseLen, file, names, skip);
             }
+        } else {
+            // Only add files.
+            if (name.startsWith(".")) {
+                return;
+            }
+            String fullName = PathUtilities.getNormalizedPathString(subdir);
+            names.add(fullName.substring(baseLen));
         }
-        if (name.startsWith(".")) {
-            return;
-        }
-        String fullName = subdir.getCanonicalPath();
-        names.add(fullName.substring(baseLen));
     }
-}
\ No newline at end of file
+}
diff --git a/tools/java/org/unicode/cldr/tool/CompareHanTransliterators.java b/tools/java/org/unicode/cldr/tool/CompareHanTransliterators.java
index d277319..05eacb4 100644
--- a/tools/java/org/unicode/cldr/tool/CompareHanTransliterators.java
+++ b/tools/java/org/unicode/cldr/tool/CompareHanTransliterators.java
@@ -23,7 +23,7 @@
             XMLFileReader.CONTENT_HANDLER, false);
         UnicodeMap<String> trunk = handler.map;
 
-        handler.map = new UnicodeMap<String>();
+        handler.map = new UnicodeMap<>();
 
         reader.read(CLDRPaths.LAST_RELEASE_DIRECTORY + "/common/transforms/Han-Latin.xml",
             XMLFileReader.CONTENT_HANDLER, false);
@@ -45,8 +45,9 @@
     }
 
     public static class MyContentHandler extends SimpleHandler {
-        UnicodeMap<String> map = new UnicodeMap<String>();
+        UnicodeMap<String> map = new UnicodeMap<>();
 
+        @Override
         public void handlePathValue(String path, String value) {
             if (!path.contains("tRule")) return;
             int pos = value.indexOf('→');
diff --git a/tools/java/org/unicode/cldr/tool/CompareStockDatetime.java b/tools/java/org/unicode/cldr/tool/CompareStockDatetime.java
index 16e100a..0234f76 100644
--- a/tools/java/org/unicode/cldr/tool/CompareStockDatetime.java
+++ b/tools/java/org/unicode/cldr/tool/CompareStockDatetime.java
@@ -28,7 +28,7 @@
             { "time", "short" },
         };
 
-        Map<String, Relation<String, String>> lengthToSkeletonToLocales = new TreeMap<String, Relation<String, String>>();
+        Map<String, Relation<String, String>> lengthToSkeletonToLocales = new TreeMap<>();
         // new Relation(new TreeMap(), TreeSet.class);
         Set<String> defaultContentLocales = info.getSupplementalDataInfo().getDefaultContentLocales();
 
diff --git a/tools/java/org/unicode/cldr/tool/ConvertLanguageData.java b/tools/java/org/unicode/cldr/tool/ConvertLanguageData.java
index 550a0b5..15510e6 100644
--- a/tools/java/org/unicode/cldr/tool/ConvertLanguageData.java
+++ b/tools/java/org/unicode/cldr/tool/ConvertLanguageData.java
@@ -54,9 +54,9 @@
 import org.unicode.cldr.util.XPathParts;
 import org.unicode.cldr.util.XPathParts.Comments;
 
+import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.math.DoubleMath;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
@@ -81,7 +81,7 @@
     private static final boolean ALLOW_SMALL_NUMBERS = true;
 
     static final Comparator<String> GENERAL_COLLATOR = new GeneralCollator();
-    static final Comparator<String> INVERSE_GENERAL = new InverseComparator<String>(GENERAL_COLLATOR);
+    static final Comparator<String> INVERSE_GENERAL = new InverseComparator<>(GENERAL_COLLATOR);
 
     private static StandardCodes sc = StandardCodes.make();
 
@@ -90,8 +90,8 @@
     static final int BAD_COUNTRY_NAME = 0, COUNTRY_CODE = 1, COUNTRY_POPULATION = 2, COUNTRY_LITERACY = 3,
         COUNTRY_GDP = 4, OFFICIAL_STATUS = 5, BAD_LANGUAGE_NAME = 6, LANGUAGE_CODE = 7, LANGUAGE_POPULATION = 8,
         LANGUAGE_LITERACY = 9, COMMENT = 10, NOTES = 11;
-    static final Map<String, CodeAndPopulation> languageToMaxCountry = new TreeMap<String, CodeAndPopulation>();
-    static final Map<String, CodeAndPopulation> languageToMaxScript = new TreeMap<String, CodeAndPopulation>();
+    static final Map<String, CodeAndPopulation> languageToMaxCountry = new TreeMap<>();
+    static final Map<String, CodeAndPopulation> languageToMaxScript = new TreeMap<>();
 
     private static final double NON_OFFICIAL_WEIGHT = 0.40;
 
@@ -100,13 +100,13 @@
     private static final ImmutableSet<String> scriptAssumedLocales = ImmutableSet.of(
         "bm_ML", "ha_GH", "ha_NE", "ha_NG", "kk_KZ", "ks_IN", "ky_KG", "mn_MN", "ms_BN", "ms_MY", "ms_SG", "tk_TM", "tzm_MA", "ug_CN");
 
-    static Set<String> skipLocales = new HashSet<String>(
+    static Set<String> skipLocales = new HashSet<>(
         Arrays
             .asList(
                 "sh sh_BA sh_CS sh_YU characters supplementalData supplementalData-old supplementalData-old2 supplementalData-old3 supplementalMetadata root"
                     .split("\\s")));
 
-    static Map<String, String> defaultContent = new TreeMap<String, String>();
+    static Map<String, String> defaultContent = new TreeMap<>();
 
     static Factory cldrFactory = Factory.make(CLDRPaths.MAIN_DIRECTORY, ".*");
     static CLDRFile english = cldrFactory.make("en", true);
@@ -130,13 +130,13 @@
 
             Set<String> cldrParents = getCldrParents(available);
 
-            List<String> failures = new ArrayList<String>();
-            Map<String, RowData> localeToRowData = new TreeMap<String, RowData>();
+            List<String> failures = new ArrayList<>();
+            Map<String, RowData> localeToRowData = new TreeMap<>();
 
             Set<RowData> sortedInput = getExcelData(failures, localeToRowData);
 
             // get the locales (including parents)
-            Set<String> localesWithData = new TreeSet<String>(localeToRowData.keySet());
+            Set<String> localesWithData = new TreeSet<>(localeToRowData.keySet());
             for (String locale : localeToRowData.keySet()) {
                 while (true) {
                     String parent = LocaleIDParser.getParent(locale);
@@ -195,7 +195,7 @@
 
             checkBasicData(localeToRowData);
 
-            Set<String> defaultLocaleContent = new TreeSet<String>();
+            Set<String> defaultLocaleContent = new TreeSet<>();
 
             showDefaults(cldrParents, nf, defaultContent, localeToRowData, defaultLocaleContent);
 
@@ -203,7 +203,7 @@
 
             // certain items are overridden
 
-            List<String> toRemove = new ArrayList<String>();
+            List<String> toRemove = new ArrayList<>();
             for (String override : defaultOverrides) {
                 String replacement = getReplacement(override, defaultLocaleContent);
                 if (replacement != null) {
@@ -257,7 +257,7 @@
 
     private static void getLanguageScriptSpreadsheet(PrintWriter out) {
         out.println("#Lcode\tLanguageName\tStatus\tScode\tScriptName\tReferences");
-        Pair<String, String> languageScript = new Pair<String, String>("", "");
+        Pair<String, String> languageScript = new Pair<>("", "");
         for (String language : language_status_scripts.keySet()) {
             Relation<BasicLanguageData.Type, String> status_scripts = language_status_scripts.get(language);
             for (BasicLanguageData.Type status : status_scripts.keySet()) {
@@ -284,7 +284,7 @@
 
         // Relation<String, BasicLanguageData> newLanguageData = new Relation(new TreeMap(), TreeSet.class);
         LanguageTagParser ltp = new LanguageTagParser();
-        Map<String, Relation<BasicLanguageData.Type, String>> language_status_territories = new TreeMap<String, Relation<BasicLanguageData.Type, String>>();
+        Map<String, Relation<BasicLanguageData.Type, String>> language_status_territories = new TreeMap<>();
         //Map<String, Pair<String, String>> languageToBestCountry;
         for (RowData rowData : sortedInput) {
             if (rowData.countryCode.equals("ZZ")) continue;
@@ -305,11 +305,11 @@
             }
         }
 
-        Set<String> allLanguages = new TreeSet<String>(language_status_territories.keySet());
+        Set<String> allLanguages = new TreeSet<>(language_status_territories.keySet());
         allLanguages.addAll(language_status_scripts.keySet());
         // now add all the remaining language-script info
         // <language type="sv" scripts="Latn" territories="AX FI SE"/>
-        Set<String> warnings = new LinkedHashSet<String>();
+        Set<String> warnings = new LinkedHashSet<>();
         Log.println("\t<languageData>");
         for (String languageSubtag : allLanguages) {
             Relation<BasicLanguageData.Type, String> status_scripts = language_status_scripts.get(languageSubtag);
@@ -323,7 +323,7 @@
                 oldData = Collections.emptyMap();
             }
 
-            EnumMap<BasicLanguageData.Type, BasicLanguageData> newData = new EnumMap<BasicLanguageData.Type, BasicLanguageData>(
+            EnumMap<BasicLanguageData.Type, BasicLanguageData> newData = new EnumMap<>(
                 BasicLanguageData.Type.class);
             for (BasicLanguageData.Type status : BasicLanguageData.Type.values()) {
                 Set<String> scripts = status_scripts == null ? null : status_scripts.getAll(status);
@@ -401,7 +401,7 @@
 
     private static Map<String, BasicLanguageData.Type> getDataToType(
         Collection<BasicLanguageData> collection, boolean script) {
-        Map<String, BasicLanguageData.Type> result = new TreeMap<String, BasicLanguageData.Type>();
+        Map<String, BasicLanguageData.Type> result = new TreeMap<>();
         for (BasicLanguageData i : collection) {
             for (String s : i.getScripts()) {
                 result.put(s, i.getType());
@@ -422,17 +422,17 @@
             }
         }
         // get primary combinations
-        Set<String> primaryCombos = new TreeSet<String>();
-        Set<String> basicCombos = new TreeSet<String>();
+        Set<String> primaryCombos = new TreeSet<>();
+        Set<String> basicCombos = new TreeSet<>();
         for (String languageSubtag : language2BasicLanguageData.keySet()) {
             for (BasicLanguageData item : language2BasicLanguageData.getAll(languageSubtag)) {
-                Set<String> scripts = new TreeSet<String>();
+                Set<String> scripts = new TreeSet<>();
                 scripts.addAll(item.getScripts());
                 languageToScripts.putAll(StandardCodes.fixLanguageTag(languageSubtag), scripts);
                 if (scripts.size() == 0) {
                     scripts.add("Zzzz");
                 }
-                Set<String> territories = new TreeSet<String>();
+                Set<String> territories = new TreeSet<>();
                 territories.addAll(item.getTerritories());
                 if (territories.size() == 0) {
                     territories.add("ZZ");
@@ -453,8 +453,8 @@
                 }
             }
         }
-        Set<String> populationOver20 = new TreeSet<String>();
-        Set<String> population = new TreeSet<String>();
+        Set<String> populationOver20 = new TreeSet<>();
+        Set<String> population = new TreeSet<>();
         LanguageTagParser ltp = new LanguageTagParser();
         for (String rawLocale : localeToRowData.keySet()) {
             ltp.set(rawLocale);
@@ -473,7 +473,7 @@
                 }
             }
         }
-        Set<String> inBasicButNotPopulation = new TreeSet<String>(primaryCombos);
+        Set<String> inBasicButNotPopulation = new TreeSet<>(primaryCombos);
 
         inBasicButNotPopulation.removeAll(population);
         for (String locale : inBasicButNotPopulation) {
@@ -498,7 +498,7 @@
                     + "\"");
         }
 
-        Set<String> inPopulationButNotBasic = new TreeSet<String>(populationOver20);
+        Set<String> inPopulationButNotBasic = new TreeSet<>(populationOver20);
         inPopulationButNotBasic.removeAll(basicCombos);
         for (Iterator<String> it = inPopulationButNotBasic.iterator(); it.hasNext();) {
             String locale = it.next();
@@ -514,13 +514,13 @@
     static class LanguageInfo {
         static LanguageInfo INSTANCE = new LanguageInfo();
 
-        Map<String, Set<String>> languageToScripts = new TreeMap<String, Set<String>>();
-        Map<String, Set<String>> languageToRegions = new TreeMap<String, Set<String>>();
-        Map<String, Comments> languageToComments = new TreeMap<String, Comments>();
+        Map<String, Set<String>> languageToScripts = new TreeMap<>();
+        Map<String, Set<String>> languageToRegions = new TreeMap<>();
+        Map<String, Comments> languageToComments = new TreeMap<>();
 
-        Map<String, Set<String>> languageToScriptsAlt = new TreeMap<String, Set<String>>();
-        Map<String, Set<String>> languageToRegionsAlt = new TreeMap<String, Set<String>>();
-        Map<String, Comments> languageToCommentsAlt = new TreeMap<String, Comments>();
+        Map<String, Set<String>> languageToScriptsAlt = new TreeMap<>();
+        Map<String, Set<String>> languageToRegionsAlt = new TreeMap<>();
+        Map<String, Comments> languageToCommentsAlt = new TreeMap<>();
 
         private LanguageInfo() {
             cldrFactory = Factory.make(CLDRPaths.MAIN_DIRECTORY, ".*");
@@ -535,17 +535,17 @@
                 List<String> scripts = getAttributeList(x, "scripts");
                 if (scripts != null) {
                     if (alt) {
-                        putAll(languageToScriptsAlt, lang, new LinkedHashSet<String>(scripts));
+                        putAll(languageToScriptsAlt, lang, new LinkedHashSet<>(scripts));
                     } else {
-                        putAll(languageToScripts, lang, new LinkedHashSet<String>(scripts));
+                        putAll(languageToScripts, lang, new LinkedHashSet<>(scripts));
                     }
                 }
                 List<String> regions = getAttributeList(x, "territories");
                 if (regions != null) {
                     if (alt) {
-                        putAll(languageToRegionsAlt, lang, new LinkedHashSet<String>(regions));
+                        putAll(languageToRegionsAlt, lang, new LinkedHashSet<>(regions));
                     } else {
-                        putAll(languageToRegions, lang, new LinkedHashSet<String>(regions));
+                        putAll(languageToRegions, lang, new LinkedHashSet<>(regions));
                     }
                 }
             }
@@ -594,7 +594,7 @@
         private final String badLanguageName;
         private final boolean relativeLanguagePopulation;
         // String badLanguageCode = "";
-        private final static Set<String> doneCountries = new HashSet<String>();
+        private final static Set<String> doneCountries = new HashSet<>();
 
         private final static Set<String> countryCodes = sc.getGoodAvailableCodes("territory");
 
@@ -779,6 +779,7 @@
             return result;
         }
 
+        @Override
         public int compareTo(Object o) {
             RowData that = (RowData) o;
             int result;
@@ -796,6 +797,7 @@
                 + "\t" + "writingPopulation";
         }
 
+        @Override
         public String toString() {
             return countryCode + "\t" + countryPopulation + "\t" + countryGdp
                 + "\t" + countryLiteracy
@@ -909,6 +911,7 @@
     }
 
     static class RickComparator implements Comparator<RowData> {
+        @Override
         public int compare(RowData me, RowData that) {
             int result;
             if (0 != (result = GENERAL_COLLATOR.compare(me.getCountryName(), that.getCountryName()))) return result;
@@ -1046,10 +1049,10 @@
     }
 
     static class References {
-        Map<String, Pair<String, String>> Rxxx_to_reference = new TreeMap<String, Pair<String, String>>();
-        Map<Pair<String, String>, String> reference_to_Rxxx = new TreeMap<Pair<String, String>, String>();
+        Map<String, Pair<String, String>> Rxxx_to_reference = new TreeMap<>();
+        Map<Pair<String, String>, String> reference_to_Rxxx = new TreeMap<>();
         Map<String, Pair<String, String>> Rxxx_to_oldReferences = supplementalData.getReferences();
-        Map<Pair<String, String>, String> oldReferences_to_Rxxx = new TreeMap<Pair<String, String>, String>();
+        Map<Pair<String, String>, String> oldReferences_to_Rxxx = new TreeMap<>();
         {
             for (String Rxxx : Rxxx_to_oldReferences.keySet()) {
                 oldReferences_to_Rxxx.put(Rxxx_to_oldReferences.get(Rxxx), Rxxx);
@@ -1069,7 +1072,7 @@
             if (rawReferenceText == null || rawReferenceText.length() == 0) return "";
             Pair<String, String> p;
             if (URI.reset(rawReferenceText).matches()) {
-                p = new Pair<String, String>(URI.group(1), URI.group(2) == null || URI.group(2).length() == 0 ? "[missing]"
+                p = new Pair<>(URI.group(1), URI.group(2) == null || URI.group(2).length() == 0 ? "[missing]"
                     : URI.group(2)).freeze();
             } else {
                 p = new Pair<String, String>(null, rawReferenceText).freeze();
@@ -1129,20 +1132,20 @@
 
         Set<String> languages = languagesNeeded; // sc.getGoodAvailableCodes("language");
 
-        Set<String> territories = new TreeSet<String>(sc.getGoodAvailableCodes("territory"));
+        Set<String> territories = new TreeSet<>(sc.getGoodAvailableCodes("territory"));
         territories.removeAll(supplementalData.getContainers());
         territories.remove("EU");
         territories.remove("QO");
 
-        Set<String> countriesNotFound = new TreeSet<String>(territories);
-        Set<OfficialStatus> statusFound = new TreeSet<OfficialStatus>();
-        Set<String> countriesWithoutOfficial = new TreeSet<String>(territories);
+        Set<String> countriesNotFound = new TreeSet<>(territories);
+        Set<OfficialStatus> statusFound = new TreeSet<>();
+        Set<String> countriesWithoutOfficial = new TreeSet<>(territories);
         countriesWithoutOfficial.remove("ZZ");
 
-        Map<String, Row.R2<String, Double>> countryToLargestOfficialLanguage = new HashMap<String, Row.R2<String, Double>>();
+        Map<String, Row.R2<String, Double>> countryToLargestOfficialLanguage = new HashMap<>();
 
-        Set<String> languagesNotFound = new TreeSet<String>(languages);
-        Set<RowData> sortedInput = new TreeSet<RowData>();
+        Set<String> languagesNotFound = new TreeSet<>(languages);
+        Set<RowData> sortedInput = new TreeSet<>();
         int count = 0;
         for (List<String> row : input) {
             ++count;
@@ -1235,7 +1238,7 @@
                 "\tReferences" +
                 "\tNotes");
         RickComparator rickSorting = new RickComparator();
-        Set<RowData> rickSorted = new TreeSet<RowData>(rickSorting);
+        Set<RowData> rickSorted = new TreeSet<>(rickSorting);
         rickSorted.addAll(sortedInput);
 
         for (RowData row : rickSorted) {
@@ -1261,7 +1264,7 @@
 
     private static Set<String> getCldrParents(Set<String> available) {
         LanguageTagParser ltp2 = new LanguageTagParser();
-        Set<String> cldrParents = new TreeSet<String>();
+        Set<String> cldrParents = new TreeSet<>();
         for (String locale : available) {
             if (skipLocales.contains(locale)) continue;
             try {
@@ -1336,6 +1339,7 @@
     }
 
     static Comparator<Iterable> firstElementComparator = new Comparator<Iterable>() {
+        @Override
         public int compare(Iterable o1, Iterable o2) {
             int result = ((Comparable) o1.iterator().next()).compareTo((o2.iterator().next()));
             assert result != 0;
@@ -1354,7 +1358,7 @@
         }
 
         Factory cldrFactory = Factory.make(CLDRPaths.MAIN_DIRECTORY, ".*");
-        Set<String> locales = new TreeSet<String>(cldrFactory.getAvailable());
+        Set<String> locales = new TreeSet<>(cldrFactory.getAvailable());
         LocaleIDParser lidp = new LocaleIDParser();
 
         // add all the combinations of language, script, and territory.
@@ -1367,7 +1371,7 @@
         }
 
         // adding parents
-        Set<String> toAdd = new TreeSet<String>();
+        Set<String> toAdd = new TreeSet<>();
         while (true) {
             for (String locale : locales) {
                 String newguy = LocaleIDParser.getParent(locale);
@@ -1384,19 +1388,19 @@
         }
 
         // get sets of siblings
-        Set<Set<String>> siblingSets = new TreeSet<Set<String>>(firstElementComparator);
-        Set<String> needsADoin = new TreeSet<String>(locales);
+        Set<Set<String>> siblingSets = new TreeSet<>(firstElementComparator);
+        Set<String> needsADoin = new TreeSet<>(locales);
 
-        Set<String> deprecatedLanguages = new TreeSet<String>();
+        Set<String> deprecatedLanguages = new TreeSet<>();
         deprecatedLanguages.add("sh");
-        Set<String> deprecatedRegions = new TreeSet<String>();
+        Set<String> deprecatedRegions = new TreeSet<>();
         deprecatedRegions.add("YU");
         deprecatedRegions.add("CS");
         deprecatedRegions.add("ZZ");
 
         // first find all the language subtags that have scripts, and those we need to skip. Those are aliased-only
-        Set<String> skippingItems = new TreeSet<String>();
-        Set<String> hasAScript = new TreeSet<String>();
+        Set<String> skippingItems = new TreeSet<>();
+        Set<String> hasAScript = new TreeSet<>();
         //Set<LocaleIDParser.Level> languageOnly = EnumSet.of(LocaleIDParser.Level.Language);
         for (String locale : locales) {
             lidp.set(locale);
@@ -1418,9 +1422,9 @@
             }
         }
         // walk through the locales, getting the ones we care about.
-        Map<String, Double> scriptLocaleToLanguageLiteratePopulation = new TreeMap<String, Double>();
+        Map<String, Double> scriptLocaleToLanguageLiteratePopulation = new TreeMap<>();
 
-        for (String locale : new TreeSet<String>(needsADoin)) {
+        for (String locale : new TreeSet<>(needsADoin)) {
             if (!needsADoin.contains(locale)) continue;
             lidp.set(locale);
             Set<Level> level = lidp.getLevels();
@@ -1459,9 +1463,9 @@
         }
 
         // walk through the data
-        Set<String> skippingSingletons = new TreeSet<String>();
+        Set<String> skippingSingletons = new TreeSet<>();
 
-        Set<String> missingData = new TreeSet<String>();
+        Set<String> missingData = new TreeSet<>();
         for (Set<String> siblingSet : siblingSets) {
             if (SHOW_OLD_DEFAULT_CONTENTS) System.out.println("** From siblings: " + siblingSet);
 
@@ -1490,7 +1494,7 @@
                         }
                     }
                 }
-                data.add(new Pair<Double, String>(languageLiteratePopulation, locale));
+                data.add(new Pair<>(languageLiteratePopulation, locale));
                 if (best < languageLiteratePopulation) {
                     best = languageLiteratePopulation;
                     bestLocale = locale;
@@ -1644,6 +1648,7 @@
         String code = null;
         double population = Double.NaN;
 
+        @Override
         public String toString() {
             return "{" + code + "," + population + "}";
         }
@@ -1657,6 +1662,7 @@
             UCA.setNumericCollation(true);
         }
 
+        @Override
         public int compare(String s1, String s2) {
             if (s1 == null) {
                 return s2 == null ? 0 : -1;
@@ -1667,7 +1673,7 @@
             if (result != 0) return result;
             return cpCompare.compare(s1, s2);
         }
-    };
+    }
 
     public static class InverseComparator<T> implements Comparator<T> {
         private Comparator<T> other;
@@ -1680,6 +1686,7 @@
             this.other = other;
         }
 
+        @Override
         public int compare(T a, T b) {
             return other == null
                 ? ((Comparable) b).compareTo(a)
@@ -1687,7 +1694,7 @@
         }
     }
 
-    static Set<String> languagesNeeded = new TreeSet<String>(
+    static Set<String> languagesNeeded = new TreeSet<>(
         Arrays
             .asList("ab ba bh bi bo fj fy gd ha ht ik iu ks ku ky lg mi na nb rm sa sd sg si sm sn su tg tk to tw vo yi za lb dv chr syr kha sco gv"
                 .split("\\s")));
@@ -1711,13 +1718,13 @@
     static Relation<String, BasicLanguageData> language2BasicLanguageData = Relation.of(new TreeMap<String, Set<BasicLanguageData>>(), TreeSet.class);
 
     static Map<String, Relation<BasicLanguageData.Type, String>> language_status_scripts;
-    static Map<Pair<String, String>, String> language_script_references = new TreeMap<Pair<String, String>, String>();
+    static Map<Pair<String, String>, String> language_script_references = new TreeMap<>();
 
     static final Map<String, Map<String, R2<List<String>, String>>> LOCALE_ALIAS_INFO = SupplementalDataInfo
         .getInstance().getLocaleAliasInfo();
 
     static void getLanguage2Scripts(Set<RowData> sortedInput) throws IOException {
-        language_status_scripts = new TreeMap<String, Relation<BasicLanguageData.Type, String>>();
+        language_status_scripts = new TreeMap<>();
 
         // // get current scripts
         // Relation<String,String> languageToDefaultScript = new Relation(new TreeMap(), TreeSet.class);
@@ -1779,7 +1786,7 @@
                     if (row.size() > 5) {
                         String reference = row.get(5);
                         if (reference != null && reference.length() == 0) {
-                            language_script_references.put(new Pair<String, String>(language, script), reference);
+                            language_script_references.put(new Pair<>(language, script), reference);
                         }
                     }
                 }
@@ -1844,7 +1851,7 @@
         }
 
         // check that every living language in the row data has a script
-        Set<String> livingLanguagesWithTerritories = new TreeSet<String>();
+        Set<String> livingLanguagesWithTerritories = new TreeSet<>();
         for (RowData rowData : sortedInput) {
             String language = rowData.languageCode;
             if (sc.isModernLanguage(language) && Iso639Data.getSource(language) != Iso639Data.Source.ISO_639_3) {
@@ -1939,7 +1946,7 @@
                 if (name2 != null) {
                     String name3 = name2.get("Description");
                     if (name3 != null) {
-                        names = new TreeSet<String>();
+                        names = new TreeSet<>();
                         names.add(name3);
                     }
                 }
@@ -1953,8 +1960,8 @@
             Set<String> fullScriptList = sc.getGoodAvailableCodes("script");
 
             String[] scriptList = parts[2].split("[;,]\\s*");
-            Set<String> scripts = new TreeSet<String>();
-            Set<String> scriptsAlt = new TreeSet<String>();
+            Set<String> scripts = new TreeSet<>();
+            Set<String> scriptsAlt = new TreeSet<>();
             for (String script : scriptList) {
                 if (script.length() == 0) continue;
                 boolean alt = false;
@@ -1973,12 +1980,12 @@
                 }
             }
             // now territories
-            Set<String> territories = new TreeSet<String>();
+            Set<String> territories = new TreeSet<>();
             if (parts.length > 4) {
                 String[] territoryList = parts[4].split("\\s*[;,-]\\s*");
                 for (String territoryName : territoryList) {
                     if (territoryName.equals("ISO/DIS 639") || territoryName.equals("3")) continue;
-                    String territoryCode = CountryCodeConverter.getCodeFromName(territoryName);
+                    String territoryCode = CountryCodeConverter.getCodeFromName(territoryName, true);
                     if (territoryCode == null) {
                         BadItem.ERROR.show("no name found for territory", "<" + territoryName + ">", languageSubtag);
                     } else {
@@ -2049,7 +2056,7 @@
 
     private static void showBasicLanguageData(String languageSubtag, Relation<String, String> primaryCombos,
         Set<String> suppressEmptyScripts, BasicLanguageData.Type type) {
-        Set<String> scriptsWithSameTerritories = new TreeSet<String>();
+        Set<String> scriptsWithSameTerritories = new TreeSet<>();
         Set<String> lastTerritories = Collections.emptySet();
         for (String script : primaryCombos.keySet()) {
             Set<String> territories = primaryCombos.getAll(script);
@@ -2177,7 +2184,7 @@
             return "* " + this
                 + " *\t" + problem + ":"
                 + "\t" + details
-                + (row != null && row.size() > 0 ? "\t" + CollectionUtilities.join(row, "\t") : "");
+                + (row != null && row.size() > 0 ? "\t" + Joiner.on("\t").join(row) : "");
         }
     }
 
diff --git a/tools/java/org/unicode/cldr/tool/ConvertXTB.java b/tools/java/org/unicode/cldr/tool/ConvertXTB.java
index 2a5c13c..f484529 100644
--- a/tools/java/org/unicode/cldr/tool/ConvertXTB.java
+++ b/tools/java/org/unicode/cldr/tool/ConvertXTB.java
@@ -117,7 +117,7 @@
 
         public XtbInfo(String locale) {
             this.locale = locale;
-            entries = new ArrayList<XtbEntry>();
+            entries = new ArrayList<>();
         }
 
         @Override
@@ -162,7 +162,7 @@
         public XtbHandler(Set<String> oldMessages, XtbInfo output) {
             daip = new DisplayAndInputProcessor(CLDRLocale.getInstance(output.locale));
             currentText = new StringBuffer();
-            orphanedMessages = new HashSet<String>();
+            orphanedMessages = new HashSet<>();
             this.oldMessages = oldMessages;
             this.output = output;
         }
@@ -346,7 +346,7 @@
         private Set<String> messageIds;
 
         public WsbHandler() {
-            messageIds = new HashSet<String>();
+            messageIds = new HashSet<>();
         }
 
         @Override
@@ -372,11 +372,11 @@
      */
     private String getPlaceholderForName(String xpath, String name) {
         if (loadedReverseTagMaps == null) {
-            loadedReverseTagMaps = new HashMap<String, Map<String, String>>();
+            loadedReverseTagMaps = new HashMap<>();
         }
         Map<String, String> map = loadedReverseTagMaps.get(xpath);
         if (map == null) {
-            map = new HashMap<String, String>();
+            map = new HashMap<>();
             loadedReverseTagMaps.put(xpath, map);
             Map<String, PlaceholderInfo> tagMap = getTagMap(xpath);
             for (Map.Entry<String, PlaceholderInfo> entry : tagMap.entrySet()) {
@@ -495,8 +495,8 @@
         for (XtbEntry info : xtbInfo) {
             cldrFile.add(info.xpath, info.value);
         }
-        Map<String, String> options = new HashMap<String, String>();
-        List<CheckStatus> possibleErrors = new ArrayList<CheckStatus>();
+        Map<String, String> options = new HashMap<>();
+        List<CheckStatus> possibleErrors = new ArrayList<>();
         checkCldr.setCldrFileToCheck(cldrFile, options, possibleErrors);
         for (CheckStatus status : possibleErrors) {
             System.out.println(locale + "\tLOCALE ERROR\t" + status.getMessage());
diff --git a/tools/java/org/unicode/cldr/tool/CopySubdivisionsIntoMain.java b/tools/java/org/unicode/cldr/tool/CopySubdivisionsIntoMain.java
index 624fb81..03c4111 100644
--- a/tools/java/org/unicode/cldr/tool/CopySubdivisionsIntoMain.java
+++ b/tools/java/org/unicode/cldr/tool/CopySubdivisionsIntoMain.java
@@ -82,7 +82,7 @@
         if (true) {
             throw new IllegalArgumentException("Should probably discontinue this, leaving translated subdivisions in main");
         }
-        
+
         PathStarrer pathStarrer = new PathStarrer();
 
         for (String localeId : mainFactory.getAvailable()) {
@@ -182,15 +182,15 @@
                 cldrFile.add(path, name);
                 System.out.println("Adding " + locale + ": " + path + "\t=«" + name + "»");
             }
-            
+
             if (added) {
                 // write out new main with extra subdivisions
-                
+
                 String fileName = locale + ".xml";
                 writeFile(MAIN_TARGET_DIR, fileName, cldrFile);
-                
+
                 // remove from subdivisions file
-                
+
                 CLDRFile sd = subdivisionFactory.make(locale, false).cloneAsThawed();
                 for (String key : target) {
                     String path = SubdivisionNames.getPathFromCode(key);
diff --git a/tools/java/org/unicode/cldr/tool/CountItems.java b/tools/java/org/unicode/cldr/tool/CountItems.java
index b1a24c3..5e02094 100644
--- a/tools/java/org/unicode/cldr/tool/CountItems.java
+++ b/tools/java/org/unicode/cldr/tool/CountItems.java
@@ -50,7 +50,8 @@
 import org.unicode.cldr.util.XPathParts;
 import org.unicode.cldr.util.props.ICUPropertyFactory;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableMap;
 import com.ibm.icu.dev.util.UnicodeMap;
 import com.ibm.icu.dev.util.UnicodeMapIterator;
 import com.ibm.icu.impl.Relation;
@@ -84,35 +85,36 @@
         + " America/Los_Angeles America/Phoenix America/Denver America/Chicago America/Indianapolis"
         + " America/New_York";
 
-    static final Map<String, String> country_map = CollectionUtilities.asMap(new String[][] {
-        { "AQ", "http://www.worldtimezone.com/time-antarctica24.php" },
-        { "AR", "http://www.worldtimezone.com/time-south-america24.php" },
-        { "AU", "http://www.worldtimezone.com/time-australia24.php" },
-        { "BR", "http://www.worldtimezone.com/time-south-america24.php" },
-        { "CA", "http://www.worldtimezone.com/time-canada24.php" },
-        { "CD", "http://www.worldtimezone.com/time-africa24.php" },
-        { "CL", "http://www.worldtimezone.com/time-south-america24.php" },
-        { "CN", "http://www.worldtimezone.com/time-cis24.php" },
-        { "EC", "http://www.worldtimezone.com/time-south-america24.php" },
-        { "ES", "http://www.worldtimezone.com/time-europe24.php" },
-        { "FM", "http://www.worldtimezone.com/time-oceania24.php" },
-        { "GL", "http://www.worldtimezone.com/index24.php" },
-        { "ID", "http://www.worldtimezone.com/time-asia24.php" },
-        { "KI", "http://www.worldtimezone.com/time-oceania24.php" },
-        { "KZ", "http://www.worldtimezone.com/time-cis24.php" },
-        { "MH", "http://www.worldtimezone.com/time-oceania24.php" },
-        { "MN", "http://www.worldtimezone.com/time-cis24.php" },
-        { "MX", "http://www.worldtimezone.com/index24.php" },
-        { "MY", "http://www.worldtimezone.com/time-asia24.php" },
-        { "NZ", "http://www.worldtimezone.com/time-oceania24.php" },
-        { "PF", "http://www.worldtimezone.com/time-oceania24.php" },
-        { "PT", "http://www.worldtimezone.com/time-europe24.php" },
-        { "RU", "http://www.worldtimezone.com/time-russia24.php" },
-        { "SJ", "http://www.worldtimezone.com/index24.php" },
-        { "UA", "http://www.worldtimezone.com/time-cis24.php" },
-        { "UM", "http://www.worldtimezone.com/time-oceania24.php" },
-        { "US", "http://www.worldtimezone.com/time-usa24.php" },
-        { "UZ", "http://www.worldtimezone.com/time-cis24.php" }, });
+    static final ImmutableMap<String, String> country_map = ImmutableMap.<String, String>builder()
+        .put("AQ", "http://www.worldtimezone.com/time-antarctica24.php")
+        .put("AR", "http://www.worldtimezone.com/time-south-america24.php")
+        .put("AU", "http://www.worldtimezone.com/time-australia24.php")
+        .put("BR", "http://www.worldtimezone.com/time-south-america24.php")
+        .put("CA", "http://www.worldtimezone.com/time-canada24.php")
+        .put("CD", "http://www.worldtimezone.com/time-africa24.php")
+        .put("CL", "http://www.worldtimezone.com/time-south-america24.php")
+        .put("CN", "http://www.worldtimezone.com/time-cis24.php")
+        .put("EC", "http://www.worldtimezone.com/time-south-america24.php")
+        .put("ES", "http://www.worldtimezone.com/time-europe24.php")
+        .put("FM", "http://www.worldtimezone.com/time-oceania24.php")
+        .put("GL", "http://www.worldtimezone.com/index24.php")
+        .put("ID", "http://www.worldtimezone.com/time-asia24.php")
+        .put("KI", "http://www.worldtimezone.com/time-oceania24.php")
+        .put("KZ", "http://www.worldtimezone.com/time-cis24.php")
+        .put("MH", "http://www.worldtimezone.com/time-oceania24.php")
+        .put("MN", "http://www.worldtimezone.com/time-cis24.php")
+        .put("MX", "http://www.worldtimezone.com/index24.php")
+        .put("MY", "http://www.worldtimezone.com/time-asia24.php")
+        .put("NZ", "http://www.worldtimezone.com/time-oceania24.php")
+        .put("PF", "http://www.worldtimezone.com/time-oceania24.php")
+        .put("PT", "http://www.worldtimezone.com/time-europe24.php")
+        .put("RU", "http://www.worldtimezone.com/time-russia24.php")
+        .put("SJ", "http://www.worldtimezone.com/index24.php")
+        .put("UA", "http://www.worldtimezone.com/time-cis24.php")
+        .put("UM", "http://www.worldtimezone.com/time-oceania24.php")
+        .put("US", "http://www.worldtimezone.com/time-usa24.php")
+        .put("UZ", "http://www.worldtimezone.com/time-cis24.php")
+        .build();
 
     /**
      * Count the data.
@@ -162,7 +164,7 @@
         // }
         // return a.toString() + " " + b.toString();
         // }});
-        for (UnicodeMapIterator<String> it = new UnicodeMapIterator<String>(blocks); it
+        for (UnicodeMapIterator<String> it = new UnicodeMapIterator<>(blocks); it
             .nextRange();) {
             UnicodeSet range = new UnicodeSet(it.codepoint, it.codepointEnd);
             boolean hasPat = range.containsSome(patterns);
@@ -206,9 +208,6 @@
                 Collator spaceCol = Collator.getInstance(new ULocale(locale));
                 spaceCol.setStrength(Collator.PRIMARY);
                 out.println(locale + ":\t\u200E" + v + '\u200E');
-                // String fixedFull = CollectionUtilities.prettyPrint(exemplars, col, false);
-                // System.out.println(" =>\t" + fixedFull);
-                // verifyEquality(exemplars, new UnicodeSet(fixedFull));
                 String fixed = new UnicodeSetPrettyPrinter()
                     .setOrdering(col != null ? col : Collator.getInstance(ULocale.ROOT))
                     .setSpaceComparator(spaceCol != null ? spaceCol : ROOT_PRIMARY_COLLATOR)
@@ -240,7 +239,7 @@
     public static void generateSupplementalCurrencyItems() {
         IsoCurrencyParser isoCurrencyParser = IsoCurrencyParser.getInstance();
         Relation<String, Data> codeList = isoCurrencyParser.getCodeList();
-        Map<String, String> numericTocurrencyCode = new TreeMap<String, String>();
+        Map<String, String> numericTocurrencyCode = new TreeMap<>();
         StringBuffer list = new StringBuffer();
 
         for (Iterator<String> it = codeList.keySet().iterator(); it.hasNext();) {
@@ -310,7 +309,7 @@
         //    + broken + CldrUtility.LINE_SEPARATOR + "\t\t\t</variable>");
         Set<String> isoTextFileCodes = StandardCodes.make().getAvailableCodes(
             "currency");
-        Set<String> temp = new TreeSet<String>(codeList.keySet());
+        Set<String> temp = new TreeSet<>(codeList.keySet());
         temp.removeAll(isoTextFileCodes);
         if (temp.size() != 0) {
             throw new IllegalArgumentException("Missing from ISO4217.txt file: " + temp);
@@ -335,17 +334,17 @@
         writeMetazonePrettyPath();
 
         Map<String, String> old_new = sc.getZoneLinkold_new();
-        Map<String, Set<String>> new_old = new TreeMap<String, Set<String>>();
+        Map<String, Set<String>> new_old = new TreeMap<>();
 
         for (Iterator<String> it = old_new.keySet().iterator(); it.hasNext();) {
             String old = it.next();
             String newOne = old_new.get(old);
             Set<String> oldSet = new_old.get(newOne);
             if (oldSet == null)
-                new_old.put(newOne, oldSet = new TreeSet<String>());
+                new_old.put(newOne, oldSet = new TreeSet<>());
             oldSet.add(old);
         }
-        Map<String, String> fullMap = new TreeMap<String, String>(col);
+        Map<String, String> fullMap = new TreeMap<>(col);
         for (Iterator<String> it = zone_country.keySet().iterator(); it.hasNext();) {
             String zone = it.next();
             String defaultName = TimezoneFormatter.getFallbackName(zone);
@@ -363,7 +362,7 @@
         System.out.println("\t<timezoneData>");
         System.out.println();
 
-        Set<String> multizone = new TreeSet<String>();
+        Set<String> multizone = new TreeSet<>();
         for (Iterator<String> it = country_zone.keySet().iterator(); it.hasNext();) {
             String country = it.next();
             Set<String> zones = country_zone.get(country);
@@ -375,7 +374,7 @@
             + toString(multizone, " ") + "\"" + " tzidVersion=\""
             + sc.getZoneVersion() + "\"" + ">");
 
-        Set<String> orderedSet = new TreeSet<String>(col);
+        Set<String> orderedSet = new TreeSet<>(col);
         orderedSet.addAll(zone_country.keySet());
         orderedSet.addAll(sc.getDeprecatedZoneIDs());
         StringBuffer tzid = new StringBuffer();
@@ -394,7 +393,7 @@
 
             Set<String> aliases = new_old.get(zone);
             if (aliases != null) {
-                aliases = new TreeSet<String>(aliases);
+                aliases = new TreeSet<>(aliases);
                 aliases.remove(zone);
             }
             if (skipUnaliased)
@@ -432,7 +431,7 @@
         CLDRConfig testInfo = ToolConfig.getToolInstance();
         Map<String, Map<String, String>> map = testInfo.getSupplementalDataInfo().getMetazoneToRegionToZone();
         Map zoneToCountry = testInfo.getStandardCodes().getZoneToCounty();
-        Set<Pair<String, String>> results = new TreeSet<Pair<String, String>>();
+        Set<Pair<String, String>> results = new TreeSet<>();
         Map<String, String> countryToContinent = getCountryToContinent(testInfo.getSupplementalDataInfo(),
             testInfo.getEnglish());
 
@@ -445,7 +444,7 @@
             String continent = zone.split("/")[0];
 
             final Object country = zoneToCountry.get(zone);
-            results.add(new Pair<String, String>(continent + "\t" + country + "\t" + countryToContinent.get(country)
+            results.add(new Pair<>(continent + "\t" + country + "\t" + countryToContinent.get(country)
                 + "\t" + metazone, metazone));
         }
         for (Pair<String, String> line : results) {
@@ -455,7 +454,7 @@
 
     private static Map<String, String> getCountryToContinent(SupplementalDataInfo supplementalDataInfo, CLDRFile english) {
         Relation<String, String> countryToContinent = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
-        Set<String> continents = new HashSet<String>(Arrays.asList("002", "019", "142", "150", "009"));
+        Set<String> continents = new HashSet<>(Arrays.asList("002", "019", "142", "150", "009"));
         // note: we don't need more than 3 levels
         for (String continent : continents) {
             final Set<String> subcontinents = supplementalDataInfo.getContained(continent);
@@ -467,7 +466,7 @@
             }
         }
         // convert to map
-        Map<String, String> results = new TreeMap<String, String>();
+        Map<String, String> results = new TreeMap<>();
         for (String item : countryToContinent.keySet()) {
             final Set<String> containees = countryToContinent.getAll(item);
             if (containees.size() != 1) {
@@ -481,10 +480,10 @@
     private static void writeZonePrettyPath(RuleBasedCollator col, Map<String, String> zone_country,
         CLDRFile english) throws IOException {
         System.out.println("Writing zonePrettyPath");
-        Set<String> masked = new HashSet<String>();
-        Map<String, String> zoneNew_Old = new TreeMap<String, String>(col);
+        Set<String> masked = new HashSet<>();
+        Map<String, String> zoneNew_Old = new TreeMap<>(col);
         String lastZone = "XXX";
-        for (String zone : new TreeSet<String>(zone_country.keySet())) {
+        for (String zone : new TreeSet<>(zone_country.keySet())) {
             String[] parts = zone.split("/");
             String newPrefix = zone_country.get(zone); // english.getName("tzid", zone_country.get(zone),
             // false).replace(' ', '_');
@@ -522,7 +521,7 @@
                     .println("# First are items that would be masked, and are moved forwards and sorted in reverse order");
                 Log.println();
                 //Comparator c;
-                Set<String> temp = new TreeSet<String>(new ReverseComparator<Object>(col));
+                Set<String> temp = new TreeSet<>(new ReverseComparator<>(col));
                 temp.addAll(orderedList);
                 orderedList = temp;
             } else {
@@ -558,6 +557,7 @@
             this.other = other;
         }
 
+        @Override
         public int compare(T o1, T o2) {
             return other.compare(o2, o1);
         }
@@ -616,7 +616,7 @@
 
         Set<String> available = Iso639Data.getAvailable();
         // <languageAlias type="aju" replacement="jrb"/> <!-- Moroccan Judeo-Arabic ⇒ Judeo-Arabic -->
-        Set<String> bad3letter = new HashSet<String>();
+        Set<String> bad3letter = new HashSet<>();
         for (String lang : available) {
             if (lang.length() != 2) continue;
             String target = lang;
@@ -633,7 +633,7 @@
             bad3letter.add(alpha3);
             String targetAliased;
             if (languageAliasInfo.containsKey(target)) {
-                targetAliased = CollectionUtilities.join(languageAliasInfo.get(target).get0(), " ");
+                targetAliased = Joiner.on(" ").join(languageAliasInfo.get(target).get0());
             } else {
                 targetAliased = target;
             }
@@ -658,7 +658,7 @@
 
         Set<String> encompassed = Iso639Data.getEncompassed();
         Set<String> macros = Iso639Data.getMacros();
-        Map<String, String> encompassed_macro = new HashMap<String, String>();
+        Map<String, String> encompassed_macro = new HashMap<>();
         for (Entry<String, R2<List<String>, String>> typeAndData : languageAliasInfo.entrySet()) {
             String type = typeAndData.getKey();
             R2<List<String>, String> data = typeAndData.getValue();
@@ -671,7 +671,7 @@
                 encompassed_macro.put(type, replacement);
             }
         }
-        Set<String> missing = new TreeSet<String>();
+        Set<String> missing = new TreeSet<>();
         missing.addAll(macros);
         missing.remove("no");
         missing.remove("sh");
@@ -710,7 +710,7 @@
         Factory cldrFactory = Factory.make(CLDRPaths.MAIN_DIRECTORY, ".*");
         CLDRFile english = cldrFactory.make("en", true);
 
-        Set<String> territories = new TreeSet<String>();
+        Set<String> territories = new TreeSet<>();
         Relation<String, String> containers = supplementalData.getTerritoryToContained();
         for (String region : sc.getAvailableCodes("territory")) {
             if (containers.containsKey(region)) continue;
@@ -723,11 +723,13 @@
         //final Map<String, R2<List<String>, String>> territoryAliasInfo = localeAliasInfo.get("territory");
 
         addRegions(english, territories, "alpha3", "EA,EU,IC".split(","), new Transform<String, String>() {
+            @Override
             public String transform(String region) {
                 return IsoRegionData.get_alpha3(region);
             }
         });
         addRegions(english, territories, "numeric", "AC,CP,DG,EA,EU,IC,TA".split(","), new Transform<String, String>() {
+            @Override
             public String transform(String region) {
                 return IsoRegionData.getNumeric(region);
             }
@@ -750,7 +752,7 @@
         System.out.println("Mapping equivalences - (Informational only...)");
         System.out.println("{ bib , tech , bcp47 }");
 
-        Set<R3<String, String, String>> rows = new TreeSet<R3<String, String, String>>();
+        Set<R3<String, String, String>> rows = new TreeSet<>();
         for (String lang : Iso639Data.getAvailable()) {
             String bib = Iso639Data.toBiblio3(lang);
             String tech = Iso639Data.toAlpha3(lang);
@@ -776,7 +778,7 @@
         System.out.println("Code Mappings");
         System.out.println("Cut/paste into supplementaData.xml under the line");
         System.out.println("<!-- start of data generated with CountItems tool ...");
-        List<String> warnings = new ArrayList<String>();
+        List<String> warnings = new ArrayList<>();
         territories.add("QO");
         territories.add("EU");
         // territories.add("MF");
@@ -805,7 +807,7 @@
         }
         System.out.println("    </codeMappings>");
         System.out.println("<!-- end of Code Mappings generated with CountItems tool ...");
-        System.out.println(CollectionUtilities.join(warnings, CldrUtility.LINE_SEPARATOR));
+        System.out.println(Joiner.on(CldrUtility.LINE_SEPARATOR).join(warnings));
     }
 
     enum VariableType {
@@ -814,10 +816,10 @@
 
     public static Map<String, String> getVariables(VariableType variableType) {
         String sep = CldrUtility.LINE_SEPARATOR + "\t\t\t\t";
-        Map<String, String> variableSubstitutions = new LinkedHashMap<String, String>();
-        for (String type : new String[] { "grandfathered", "territory", "script", "variant" }) {
+        Map<String, String> variableSubstitutions = new LinkedHashMap<>();
+        for (String type : new String[] { "legacy", "territory", "script", "variant" }) {
             Set<String> i;
-            i = (variableType == VariableType.full || type.equals("grandfathered")) ? sc.getAvailableCodes(type) : sc.getGoodAvailableCodes(type);
+            i = (variableType == VariableType.full || type.equals("legacy")) ? sc.getAvailableCodes(type) : sc.getGoodAvailableCodes(type);
             addVariable(variableSubstitutions, type, i, sep);
         }
 
@@ -826,7 +828,7 @@
         for (String key : bcp47Keys.keySet()) {
             Set<String> keyAliases = aliases.getAll(Row.of(key, ""));
             Set<String> rawsubtypes = bcp47Keys.getAll(key);
-            TreeSet<String> subtypes = new TreeSet<String>();
+            TreeSet<String> subtypes = new TreeSet<>();
             for (String subtype : rawsubtypes) {
                 Set<String> keySubtypeAliases = aliases.getAll(Row.of(key, subtype));
                 if (keySubtypeAliases != null) {
@@ -844,7 +846,7 @@
 
     private static void addVariable(Map<String, String> variableSubstitutions, String type, Set<String> sinput,
         String sep) {
-        TreeSet<String> s = new TreeSet<String>(ROOT_PRIMARY_COLLATOR);
+        TreeSet<String> s = new TreeSet<>(ROOT_PRIMARY_COLLATOR);
         s.addAll(sinput);
 
         StringBuffer b = new StringBuffer();
@@ -880,9 +882,9 @@
 
     private static void addRegions(CLDRFile english, Set<String> availableCodes, String codeType, String[] exceptions,
         Transform<String, String> trans) {
-        Set<String> missingRegions = new TreeSet<String>();
-        Set<String> exceptionSet = new HashSet<String>(Arrays.asList(exceptions));
-        List<String> duplicateDestroyer = new ArrayList<String>();
+        Set<String> missingRegions = new TreeSet<>();
+        Set<String> exceptionSet = new HashSet<>(Arrays.asList(exceptions));
+        List<String> duplicateDestroyer = new ArrayList<>();
         for (String region : availableCodes) {
 
             if (exceptionSet.contains(region)) continue;
@@ -894,7 +896,7 @@
             Map<String, R2<List<String>, String>> territoryAliasInfo = supplementalData.getLocaleAliasInfo().get("territory");
             String result;
             if (territoryAliasInfo.containsKey(region)) {
-                result = CollectionUtilities.join(territoryAliasInfo.get(region).get0(), " ");
+                result = Joiner.on(" ").join(territoryAliasInfo.get(region).get0());
             } else {
                 result = region;
             }
@@ -961,7 +963,7 @@
             .getFullXPath("//ldml/dates/timeZoneNames/singleCountries");
         XPathParts parts = XPathParts.getFrozenInstance(temp);
         String singleCountriesList = parts.findAttributes("singleCountries").get("list");
-        Set<String> singleCountriesSet = new TreeSet<String>(CldrUtility.splitList(singleCountriesList, ' '));
+        Set<String> singleCountriesSet = new TreeSet<>(CldrUtility.splitList(singleCountriesList, ' '));
 
         Map<String, String> zone_countries = StandardCodes.make().getZoneToCounty();
         Map<String, Set<String>> countries_zoneSet = StandardCodes.make().getCountryToZoneSet();
@@ -1015,12 +1017,12 @@
         int count = 0;
         int resolvedCount = 0;
         Set<String> locales = cldrFactory.getAvailable();
-        Set<String> keys = new HashSet<String>();
-        Set<String> values = new HashSet<String>();
-        Set<String> fullpaths = new HashSet<String>();
+        Set<String> keys = new HashSet<>();
+        Set<String> values = new HashSet<>();
+        Set<String> fullpaths = new HashSet<>();
         Matcher alt = CLDRFile.ALT_PROPOSED_PATTERN.matcher("");
 
-        Set<String> temp = new HashSet<String>();
+        Set<String> temp = new HashSet<>();
         for (Iterator<String> it = locales.iterator(); it.hasNext();) {
             String locale = it.next();
             if (CLDRFile.isSupplementalName(locale))
@@ -1042,7 +1044,7 @@
 
             CLDRFile itemResolved = cldrFactory.make(locale, true);
             temp.clear();
-            CollectionUtilities.addAll(itemResolved.iterator(), temp);
+            itemResolved.forEach(temp::add);
             int resolvedCurrent = temp.size();
 
             System.out.println(locale + "\tPlain:\t" + current + "\tResolved:\t"
diff --git a/tools/java/org/unicode/cldr/tool/CountryCodeConverter.java b/tools/java/org/unicode/cldr/tool/CountryCodeConverter.java
index e8b5da2..e59b772 100644
--- a/tools/java/org/unicode/cldr/tool/CountryCodeConverter.java
+++ b/tools/java/org/unicode/cldr/tool/CountryCodeConverter.java
@@ -20,10 +20,10 @@
 
     private static final boolean SHOW_SKIP = CldrUtility.getProperty("SHOW_SKIP", false);
 
-    private static Map<String, String> nameToCountryCode = new TreeMap<String, String>(new UTF16.StringComparator(true, true, 0));
-    private static Set<String> parseErrors = new LinkedHashSet<String>();
+    private static Map<String, String> nameToCountryCode = new TreeMap<>(new UTF16.StringComparator(true, true, 0));
+    private static Set<String> parseErrors = new LinkedHashSet<>();
 
-    public static String getCodeFromName(String display) {
+    public static String getCodeFromName(String display, boolean showMissing) {
         String trial = display.trim().toLowerCase(Locale.ENGLISH);
         if (trial.startsWith("\"") && trial.endsWith("\"")) {
             trial = trial.substring(1, trial.length() - 2);
@@ -44,8 +44,8 @@
                 // }
             }
         }
-        if (SHOW_SKIP && result == null) {
-            System.out.println("Missing code; add to external/alternate_country_names.txt a line like:" +
+        if (result == null && (showMissing || SHOW_SKIP)) {
+            System.err.println("CountryCodeConverter missing code; add to external/alternate_country_names.txt a line like:" +
                 "\t<code>;\t<name>;\t" + display);
         }
         return result;
@@ -81,7 +81,7 @@
         Set<String> goodAvailableCodes = sc.getGoodAvailableCodes("territory");
 
         for (String country : goodAvailableCodes) {
-            String description = (String) sc.getFullData("territory", country).get(0);
+            String description = sc.getFullData("territory", country).get(0);
             if (country.equals("057")) continue;
             addName(description, country);
         }
@@ -97,6 +97,7 @@
             this.goodAvailableCodes = goodAvailableCodes;
         }
 
+        @Override
         public boolean handle(String line) {
             if (line.trim().length() == 0) {
                 return true; // don't show skips
diff --git a/tools/java/org/unicode/cldr/tool/DeriveScripts.java b/tools/java/org/unicode/cldr/tool/DeriveScripts.java
index fd3ff0f..a6aa0b0 100644
--- a/tools/java/org/unicode/cldr/tool/DeriveScripts.java
+++ b/tools/java/org/unicode/cldr/tool/DeriveScripts.java
@@ -39,8 +39,8 @@
 
     static {
         File[] paths = {
-//            new File(CLDRPaths.MAIN_DIRECTORY), 
-//            new File(CLDRPaths.SEED_DIRECTORY), 
+//            new File(CLDRPaths.MAIN_DIRECTORY),
+//            new File(CLDRPaths.SEED_DIRECTORY),
             new File(CLDRPaths.EXEMPLARS_DIRECTORY) };
         final Factory fullCldrFactory = SimpleFactory.make(paths, ".*");
         LikelySubtags ls = new LikelySubtags();
@@ -60,7 +60,7 @@
 //                    if (!suppressValue.equals(likelyScript)) {
 //                        System.out.println("#" + langCode + "\tWarning: likely=" + likelyScript + ", suppress=" + suppressValue);
 //                    } else {
-//                        System.out.println("#" + langCode + "\tSuppress=Likely: " + suppressValue); 
+//                        System.out.println("#" + langCode + "\tSuppress=Likely: " + suppressValue);
 //                    }
                     continue;
                 }
@@ -97,7 +97,13 @@
 //                continue;
 //            }
 
-            CLDRFile cldrFile = fullCldrFactory.make(lang, false);
+            CLDRFile cldrFile;
+            try {
+                cldrFile = fullCldrFactory.make(lang, false);
+            } catch(final SimpleFactory.NoSourceDirectoryException nsde) {
+                throw new RuntimeException("Cannot load locale "+ lang+" for " + file
+                    + " (canonicalized from " + ltp.getLanguage()+")", nsde);
+            }
             UnicodeSet exemplars = cldrFile.getExemplarSet("", WinningChoice.WINNING);
             for (String s : exemplars) {
                 int scriptNum = UScript.getScript(s.codePointAt(0));
diff --git a/tools/java/org/unicode/cldr/tool/DiffCldr.java b/tools/java/org/unicode/cldr/tool/DiffCldr.java
index bfc028d..e0233b4 100644
--- a/tools/java/org/unicode/cldr/tool/DiffCldr.java
+++ b/tools/java/org/unicode/cldr/tool/DiffCldr.java
@@ -25,10 +25,10 @@
 import org.unicode.cldr.util.With;
 import org.unicode.cldr.util.XPathParts;
 
+import com.google.common.base.Joiner;
 import com.google.common.base.Splitter;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.util.Output;
 
 public class DiffCldr {
@@ -217,6 +217,6 @@
                 cleanedValues.add(item);
             }
         }
-        return CollectionUtilities.join(DtdData.CR_SPLITTER.split(CollectionUtilities.join(values, " ␍ ")), " ␍ ");
+        return Joiner.on(" ␍ ").join(DtdData.CR_SPLITTER.split(Joiner.on(" ␍ ").join(values)));
     }
 }
diff --git a/tools/java/org/unicode/cldr/tool/DiffWithParent.java b/tools/java/org/unicode/cldr/tool/DiffWithParent.java
index 4f7beb2..6b1db1f 100644
--- a/tools/java/org/unicode/cldr/tool/DiffWithParent.java
+++ b/tools/java/org/unicode/cldr/tool/DiffWithParent.java
@@ -86,13 +86,13 @@
         XPathParts fullParts = XPathParts.getFrozenInstance(fullPath);
         String path = CLDRFile.getDistinguishingXPath(fullPath, null);
         XPathParts parts = XPathParts.getFrozenInstance(path);
-        Set<Pair<String, String>> s = new TreeSet<Pair<String, String>>();
+        Set<Pair<String, String>> s = new TreeSet<>();
         for (int i = 0; i < fullParts.size(); ++i) {
             for (String key : fullParts.getAttributeKeys(i)) {
-                s.add(new Pair<String, String>(key, fullParts.getAttributeValue(i, key)));
+                s.add(new Pair<>(key, fullParts.getAttributeValue(i, key)));
             }
             for (String key : parts.getAttributeKeys(i)) {
-                s.remove(new Pair<String, String>(key, parts.getAttributeValue(i, key)));
+                s.remove(new Pair<>(key, parts.getAttributeValue(i, key)));
             }
         }
         return s.toString();
diff --git a/tools/java/org/unicode/cldr/tool/DumpCoverage.java b/tools/java/org/unicode/cldr/tool/DumpCoverage.java
index 12d5f40..8d88e98 100644
--- a/tools/java/org/unicode/cldr/tool/DumpCoverage.java
+++ b/tools/java/org/unicode/cldr/tool/DumpCoverage.java
@@ -26,7 +26,7 @@
         CoverageInfo covInfo = CLDRConfig.getInstance().getCoverageInfo();
         for (String lang : languages) {
             CLDRFile cf = cldrFactory.makeWithFallback(lang);
-            Set<String> paths = new TreeSet<String>();
+            Set<String> paths = new TreeSet<>();
             cf.getPaths("//ldml", null, paths);
             System.out.println("Dumping coverage for locale --> " + lang);
             for (String path : paths) {
diff --git a/tools/java/org/unicode/cldr/tool/ExtractListInfo.java b/tools/java/org/unicode/cldr/tool/ExtractListInfo.java
index ecbb192..23d0e4a 100644
--- a/tools/java/org/unicode/cldr/tool/ExtractListInfo.java
+++ b/tools/java/org/unicode/cldr/tool/ExtractListInfo.java
@@ -17,7 +17,7 @@
 
     public static void main(String[] args) {
         Factory cldrFactory = Factory.make(CLDRPaths.MAIN_DIRECTORY, ".*");
-        Set<String> skipped = new LinkedHashSet<String>();
+        Set<String> skipped = new LinkedHashSet<>();
         for (String locale : cldrFactory.getAvailableLanguages()) {
             CLDRFile file = cldrFactory.make(locale, true);
             StringBuilder sb = new StringBuilder("ListFormat.add(\"" + locale + "\"");
diff --git a/tools/java/org/unicode/cldr/tool/ExtractMessages.java b/tools/java/org/unicode/cldr/tool/ExtractMessages.java
index 296943d..ea2efc5 100644
--- a/tools/java/org/unicode/cldr/tool/ExtractMessages.java
+++ b/tools/java/org/unicode/cldr/tool/ExtractMessages.java
@@ -17,6 +17,7 @@
 import org.unicode.cldr.util.CldrUtility;
 import org.unicode.cldr.util.Factory;
 import org.unicode.cldr.util.Pair;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.PatternCache;
 import org.unicode.cldr.util.SimpleFactory;
 import org.unicode.cldr.util.StandardCodes;
@@ -45,7 +46,7 @@
         double startTime = System.currentTimeMillis();
         output = FileUtilities.openUTF8Writer(DIR, "additions.txt");
         int totalCount = 0;
-        Set<String> skipped = new TreeSet<String>();
+        Set<String> skipped = new TreeSet<>();
 
         try {
             String sourceDirectory = getProperty("SOURCE", null);
@@ -70,7 +71,7 @@
                     continue;
                 if (file.length() == 0)
                     continue;
-                String canonicalFile = file.getCanonicalPath();
+                String canonicalFile = PathUtilities.getNormalizedPathString(file);
                 if (!canonicalFile.endsWith(".xtb")) {
                     continue;
                 }
@@ -159,13 +160,14 @@
         return fileRegex;
     }
 
-    private static Map<String, Pair<String, DataHandler>> numericId_Id = new TreeMap<String, Pair<String, DataHandler>>();
+    private static Map<String, Pair<String, DataHandler>> numericId_Id = new TreeMap<>();
     private static Matcher numericIdMatcher = PatternCache.get("\\[@id=\"([^\"]+)\"\\]").matcher("");
     private static Factory cldrFactory = Factory.make(CLDRPaths.MAIN_DIRECTORY, ".*");
     private static CLDRFile english = cldrFactory.make("en", true);
 
     private static class EnglishHandler extends XMLFileReader.SimpleHandler {
 
+        @Override
         public void handlePathValue(String path, String value) {
             for (DataHandler handler : dataHandlers) {
                 if (handler.matches(path)) {
@@ -180,7 +182,7 @@
                         handler.missing.add(value);
                         return;
                     }
-                    numericId_Id.put(id, new Pair<String, DataHandler>(realID, handler));
+                    numericId_Id.put(id, new Pair<>(realID, handler));
                     // System.out.println(id + "\t" + path + "\t" + value);
                 }
             }
@@ -200,6 +202,7 @@
         CLDRFile cldrFile;
         boolean usesLatin;
 
+        @Override
         public void handlePathValue(String path, String value) {
             // //messagebundle/msg[@id="1907015897505457162"][@seq="71982"][@desc="Andorra is a display name for a timezone"][@xml:space="default"]
             value = value.trim();
@@ -305,7 +308,7 @@
 
     enum Type {
         LANGUAGE, REGION, CURRENCY, MONTH, MONTHSHORT, DAY, DAYSHORT, TIMEZONE
-    };
+    }
 
     static StandardCodes sc = StandardCodes.make();
     static DateFormatSymbols dfs = new DateFormatSymbols(ULocale.ENGLISH);
@@ -329,13 +332,13 @@
         // mostly stable
         private Matcher matcher;
         private Type type;
-        private Map<String, String> name_code = new TreeMap<String, String>();
+        private Map<String, String> name_code = new TreeMap<>();
         // private Map<String,String> code_name = new TreeMap();
-        private Set<String> missing = new TreeSet<String>();
+        private Set<String> missing = new TreeSet<>();
 
         // changes with each locale, must call reset
         private Relation<String, String> id_to_value = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
-        private Map<String, String> id_to_cldrValue = new TreeMap<String, String>();
+        private Map<String, String> id_to_cldrValue = new TreeMap<>();
         private CasingAction forceCasing = CasingAction.NONE;
 
         public void reset(CLDRFile cldrFile) {
@@ -651,6 +654,7 @@
             return name_code.get(value);
         }
 
+        @Override
         public int compareTo(DataHandler o) {
             throw new IllegalArgumentException();
         }
diff --git a/tools/java/org/unicode/cldr/tool/FallbackIterator.java b/tools/java/org/unicode/cldr/tool/FallbackIterator.java
index 28204f4..134ec3d 100644
--- a/tools/java/org/unicode/cldr/tool/FallbackIterator.java
+++ b/tools/java/org/unicode/cldr/tool/FallbackIterator.java
@@ -24,7 +24,7 @@
         public FallbackRule(String string) {
             String[] data = string.split(";");
             boolean first = true;
-            List<String> strings = new ArrayList<String>();
+            List<String> strings = new ArrayList<>();
             for (String datum : data) {
                 if (first) {
                     matcher = PatternCache.get(datum).matcher("");
@@ -42,7 +42,7 @@
         }
 
         public List<String> getAdditions() {
-            List<String> results = new ArrayList<String>(additions.length);
+            List<String> results = new ArrayList<>(additions.length);
             results.add(source);
             for (String addition : additions) {
                 String copy = addition;
@@ -55,18 +55,19 @@
             return results;
         }
 
+        @Override
         public String toString() {
             return "{" + matcher.toString() + ", " + Arrays.asList(additions) + "}";
         }
     }
 
-    private static final List<FallbackIterator.FallbackRule> FALLBACK_LIST = new ArrayList<FallbackIterator.FallbackRule>();
-    private static final List<FallbackIterator.FallbackRule> CANONICALIZE_LIST = new ArrayList<FallbackIterator.FallbackRule>();
-    private static final List<FallbackIterator.FallbackRule> DECANONICALIZE_LIST = new ArrayList<FallbackIterator.FallbackRule>();
+    private static final List<FallbackIterator.FallbackRule> FALLBACK_LIST = new ArrayList<>();
+    private static final List<FallbackIterator.FallbackRule> CANONICALIZE_LIST = new ArrayList<>();
+    private static final List<FallbackIterator.FallbackRule> DECANONICALIZE_LIST = new ArrayList<>();
 
     private enum Type {
         canonicalize, fallback, decanonicalize
-    };
+    }
 
     static {
         // TODO add "JP" (ja_JP_JP) "TH" (th_TH_TH) "NY" (no_NO_NY)
@@ -76,18 +77,18 @@
 
             "canonicalize", // mechanically generated
 
-            // grandfathered
+            // Language tags marked as “Type: grandfathered” in BCP 47.
             "art-lojban;jbo",
-            "cel-gaulish;xcg", // Grandfathered code with special replacement: cel-gaulish
-            "en-GB-oed;en-GB-x-oed", // Grandfathered code with special replacement: en-GB-oed
+            "cel-gaulish;xcg", // Special replacement: cel-gaulish
+            "en-GB-oed;en-GB-x-oed", // Special replacement: en-GB-oed
             "i-ami;ami",
             "i-bnn;bnn",
-            "i-default;und", // Grandfathered code with special replacement: i-default
-            "i-enochian;x-enochian", // Grandfathered code with special replacement: i-enochian
+            "i-default;und", // Special replacement: i-default
+            "i-enochian;x-enochian", // Special replacement: i-enochian
             "i-hak;zh-hakka",
             "i-klingon;tlh",
             "i-lux;lb",
-            "i-mingo;see", // Grandfathered code with special replacement: i-mingo
+            "i-mingo;see", // Special replacement: i-mingo
             "i-navajo;nv",
             "i-pwn;pwn",
             "i-tao;tao",
@@ -104,7 +105,7 @@
             "zh-gan;gan",
             "zh-guoyu;zh-cmn",
             "zh-hakka;hak",
-            "zh-min;nan", // Grandfathered code with special replacement: zh-min
+            "zh-min;nan", // Special replacement: zh-min
             "zh-min-nan;nan",
             "zh-wuu;wuu",
             "zh-xiang;hsn",
@@ -225,7 +226,7 @@
     public FallbackIterator set(String source) {
         // all of this can be optimized later
         String original = source;
-        List<String> items = new ArrayList<String>();
+        List<String> items = new ArrayList<>();
         items.add(original);
         // canonicalize (normally in constructor)
         canonicalize: while (true) {
@@ -264,7 +265,7 @@
 
         // for each decanonicalize rule, add all premutations it generates
         for (FallbackIterator.FallbackRule rule : DECANONICALIZE_LIST) {
-            List<String> localExpanded = new ArrayList<String>();
+            List<String> localExpanded = new ArrayList<>();
             for (String localeItem : items) {
                 if (rule.matches(localeItem)) {
                     localExpanded.addAll(rule.getAdditions());
@@ -275,7 +276,7 @@
             items = localExpanded;
         }
         // if we didn't need to start with the original, we could skip this bit.
-        LinkedHashSet<String> results = new LinkedHashSet<String>();
+        LinkedHashSet<String> results = new LinkedHashSet<>();
         // results.add(original);
         results.addAll(items);
         iterator = results.iterator();
@@ -284,14 +285,17 @@
 
     // Matcher regularFallback = PatternCache.get("(.*)[-_][^-_]*").matcher("");
 
+    @Override
     public void remove() {
         throw new UnsupportedOperationException();
     }
 
+    @Override
     public boolean hasNext() {
         return iterator.hasNext();
     }
 
+    @Override
     public String next() {
         return iterator.next();
     }
diff --git a/tools/java/org/unicode/cldr/tool/FallbackIteratorDataGenerator.java b/tools/java/org/unicode/cldr/tool/FallbackIteratorDataGenerator.java
index c6efbcd..a4edf72 100644
--- a/tools/java/org/unicode/cldr/tool/FallbackIteratorDataGenerator.java
+++ b/tools/java/org/unicode/cldr/tool/FallbackIteratorDataGenerator.java
@@ -14,16 +14,16 @@
 
     public static void main(String[] args) {
         final StandardCodes sc = testInfo.getStandardCodes();
-        List<String> decanonicalizeList = new ArrayList<String>();
+        List<String> decanonicalizeList = new ArrayList<>();
         System.out.println();
         System.out.println("\t\t\"canonicalize\",\t\t// mechanically generated");
         System.out.println();
 
         for (String type : sc.getAvailableTypes()) {
             final boolean isLanguage = type.equals("language");
-            final boolean isGrandfathered = type.equals("grandfathered");
+            final boolean isLegacy = type.equals("legacy");
             final boolean isRegion = type.equals("territory");
-            final String canonicalizationFormat = isGrandfathered ? "\t\t\"%s;%s\","
+            final String canonicalizationFormat = isLegacy ? "\t\t\"%s;%s\","
                 : isLanguage ? "\t\t\"%s(-.*)?;%s$1\","
                     : isRegion ? "\t\t\"(.*-)%s(-.*)?;$1%s$2\","
                         : null;
@@ -42,8 +42,8 @@
 
                 if (canonicalValue == null || canonicalValue.length() == 0) {
                     // System.out.println("\t\t\\\\ skipping " + code);
-                    if (isGrandfathered) {
-                        System.out.println("\t\t// Grandfathered code with no replacement " + code);
+                    if (isLegacy) {
+                        System.out.println("\t\t// Legacy code with no replacement " + code);
                         continue;
                     } else {
                         continue;
@@ -55,10 +55,10 @@
                 }
                 System.out.format(canonicalizationFormat, code, canonicalValue);
                 if (special != null) {
-                    System.out.print("\t\t// Grandfathered code with special replacement: " + code);
+                    System.out.print("\t\t// Legacy code with special replacement: " + code);
                 }
                 System.out.println();
-                if (!isGrandfathered) {
+                if (!isLegacy) {
                     decanonicalizeList.add(String.format(canonicalizationFormat, canonicalValue, code));
                 }
             }
diff --git a/tools/java/org/unicode/cldr/tool/FilterFactory.java b/tools/java/org/unicode/cldr/tool/FilterFactory.java
index 0b04397..51492a2 100644
--- a/tools/java/org/unicode/cldr/tool/FilterFactory.java
+++ b/tools/java/org/unicode/cldr/tool/FilterFactory.java
@@ -49,7 +49,7 @@
     private String organization;
     private boolean modifyValues;
 
-    private List<Modifier> modifiers = new ArrayList<Modifier>();
+    private List<Modifier> modifiers = new ArrayList<>();
 
     /**
      * Creates a new Factory for filtering CLDRFiles.
@@ -151,7 +151,7 @@
 
         String parent = LocaleIDParser.getParent(rawFile.getLocaleID());
         CLDRFile resolvedParent = rawFactory.make(parent, true);
-        List<String> duplicatePaths = new ArrayList<String>();
+        List<String> duplicatePaths = new ArrayList<>();
         for (String xpath : rawFile) {
             if (xpath.startsWith("//ldml/identity")) {
                 continue;
@@ -159,9 +159,10 @@
             String value = rawFile.getStringValue(xpath);
             // Remove count="x" if the value is equivalent to count="other".
             if (xpath.contains("[@count=")) {
-                XPathParts parts = XPathParts.getInstance(xpath); // not frozen, for setAttribute
+                XPathParts parts = XPathParts.getFrozenInstance(xpath);
                 String count = parts.getAttributeValue(-1, "count");
                 if (!count.equals("other")) {
+                    parts = parts.cloneAsThawed();
                     parts.setAttribute(-1, "count", "other");
                     String otherPath = parts.toString();
                     if (value.equals(rawFile.getStringValue(otherPath))) {
@@ -223,7 +224,7 @@
      * Class for performing a specific type of data modification on a CLDRFile.
      */
     private abstract class Modifier {
-        protected List<ModifierEntry> entries = new ArrayList<ModifierEntry>();
+        protected List<ModifierEntry> entries = new ArrayList<>();
 
         public abstract void modifyFile(CLDRFile file);
 
@@ -233,7 +234,7 @@
          * @return the list of modifiers meant for the specified locale.
          */
         protected List<ModifierEntry> getModifiersForLocale(String locale) {
-            List<ModifierEntry> newFilters = new ArrayList<ModifierEntry>();
+            List<ModifierEntry> newFilters = new ArrayList<>();
             for (ModifierEntry filter : entries) {
                 if (filter.localeMatches(locale)) {
                     newFilters.add(filter);
@@ -327,7 +328,7 @@
      * Maps the value of XPaths onto other XPaths using regexes.
      */
     private class PathRegexModifier extends Modifier {
-        private RegexLookup<String> xpathLookup = new RegexLookup<String>();
+        private RegexLookup<String> xpathLookup = new RegexLookup<>();
 
         @Override
         public void addModifierEntry(ModifierEntry entry) {
@@ -338,7 +339,7 @@
         @Override
         public void modifyFile(CLDRFile file) {
             if (xpathLookup.size() > 0) {
-                Output<String[]> arguments = new Output<String[]>();
+                Output<String[]> arguments = new Output<>();
                 for (String xpath : file) {
                     String newValue = xpathLookup.get(xpath, null, arguments, null, null);
                     if (newValue != null) {
@@ -379,7 +380,7 @@
                 String oldValue = contents[1];
                 String newValue = contents[2];
                 // Process remaining options.
-                Map<String, String> options = new HashMap<String, String>();
+                Map<String, String> options = new HashMap<>();
                 for (int i = 3; i < contents.length; i++) {
                     String rawLine = contents[i];
                     int pos = rawLine.indexOf('=');
diff --git a/tools/java/org/unicode/cldr/tool/FindHardInheritance.java b/tools/java/org/unicode/cldr/tool/FindHardInheritance.java
index 0682f6a..8666366 100644
--- a/tools/java/org/unicode/cldr/tool/FindHardInheritance.java
+++ b/tools/java/org/unicode/cldr/tool/FindHardInheritance.java
@@ -21,14 +21,14 @@
         final int redundantCount;
         final int constructedCount;
         final int coverageCount;
-        
+
         final int regularCountCps;
         final int inheritedCountCps;
         final int redundantCountCps;
         final int constructedCountCps;
         final int coverageCountCps;
-        
-        public Info(int regularCount, int inheritedCount, int redundantCount, int constructedCount, int coverageCount, 
+
+        public Info(int regularCount, int inheritedCount, int redundantCount, int constructedCount, int coverageCount,
             int regularCountCps, int inheritedCountCps, int redundantCountCps, int constructedCountCps, int coverageCountCps) {
             this.regularCount = regularCount;
             this.inheritedCount = inheritedCount;
@@ -50,7 +50,7 @@
                 + "\t" + coverageCount + "\t" + coverageCountCps
                 ;
         }
-        static final String HEADER = 
+        static final String HEADER =
                     "count\tcps"
                 + "\tinher.\tcps"
                 + "\tredund.\tcps"
@@ -68,7 +68,7 @@
 //            System.out.println(localeId + "\t" + name);
 //        }
 //        if (true) return;
-        
+
         Map<String, Info> data = new LinkedHashMap<>();
         System.out.println(
             "dir."
@@ -100,18 +100,18 @@
         int constructedCount = 0;
         int inheritedCount = 0;
         int coverageCount = 0;
-        
+
         int redundantCountCps = 0;
         int regularCountCps = 0;
         int constructedCountCps = 0;
         int inheritedCountCps = 0;
         int coverageCountCps = 0;
-        
+
         boolean allConstructed = "annotationsDerived".equals(dir);
         CoverageLevel2 coverage = CoverageLevel2.getInstance(localeId);
         CLDRFile cldrFile = factory.make(localeId, true, DraftStatus.contributed);
         CLDRFile unresolvedCldrFile = factory.make(localeId, false, DraftStatus.contributed);
-        
+
         for (String path : cldrFile) {
             if (path.startsWith("//ldml/identity/")) {
                 continue;
@@ -141,7 +141,7 @@
                 regularCountCps+=cps;
             }
         }
-        Info info = new Info(regularCount, inheritedCount, redundantCount, constructedCount, coverageCount, 
+        Info info = new Info(regularCount, inheritedCount, redundantCount, constructedCount, coverageCount,
             regularCountCps, inheritedCountCps, redundantCountCps, constructedCountCps, coverageCountCps);
         return info;
     }
diff --git a/tools/java/org/unicode/cldr/tool/FindPluralDifferences.java b/tools/java/org/unicode/cldr/tool/FindPluralDifferences.java
index 8f99fac..ea1494a 100644
--- a/tools/java/org/unicode/cldr/tool/FindPluralDifferences.java
+++ b/tools/java/org/unicode/cldr/tool/FindPluralDifferences.java
@@ -29,7 +29,7 @@
         x.set(3, 6);
         x.set(9);
         x.set(11, 13);
-        Map<String, BitSet> foo = new TreeMap<String, BitSet>();
+        Map<String, BitSet> foo = new TreeMap<>();
         foo.put("x", x);
         FindPluralDifferences.show(foo);
 
@@ -78,7 +78,7 @@
                 System.out.println("Modifications:");
 
                 for (String locale : oldLocales) {
-                    Map<String, BitSet> results = new TreeMap<String, BitSet>();
+                    Map<String, BitSet> results = new TreeMap<>();
                     PluralInfo oldPluralInfo = supplementalOld.getPlurals(pluralType, locale);
                     PluralRules oldRules = oldPluralInfo.getPluralRules();
                     PluralInfo newPluralInfo = supplementalNew.getPlurals(pluralType, locale);
diff --git a/tools/java/org/unicode/cldr/tool/FindPreferredHours.java b/tools/java/org/unicode/cldr/tool/FindPreferredHours.java
index 8c7390f..ce8b929 100644
--- a/tools/java/org/unicode/cldr/tool/FindPreferredHours.java
+++ b/tools/java/org/unicode/cldr/tool/FindPreferredHours.java
@@ -22,7 +22,7 @@
 import org.unicode.cldr.util.SupplementalDataInfo.PopulationData;
 import org.unicode.cldr.util.With;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.text.DateTimePatternGenerator.FormatParser;
 import com.ibm.icu.text.DateTimePatternGenerator.VariableField;
@@ -33,7 +33,7 @@
     private static final CLDRFile ENGLISH = INFO.getEnglish();
     private static final UnicodeSet DIGITS = new UnicodeSet("[0-9]").freeze();
 
-    private static final Set<Character> ONLY24 = Collections.unmodifiableSet(new LinkedHashSet<Character>(Arrays
+    private static final Set<Character> ONLY24 = Collections.unmodifiableSet(new LinkedHashSet<>(Arrays
         .asList('H')));
 
     private final static Map<String, Set<Character>> OVERRIDE_ALLOWED = Builder
@@ -112,7 +112,7 @@
         final Relation<String, Hours> lang2Hours = Relation.of(new TreeMap<String, Set<Hours>>(), TreeSet.class);
         final Factory factory = INFO.getCldrFactory();
         final FormatParser formatDateParser = new FormatParser();
-        final LikelySubtags likely2Max = new LikelySubtags(INFO.getSupplementalDataInfo());
+        final LikelySubtags likely2Max = new LikelySubtags();
 
         for (final String locale : factory.getAvailable()) {
             if (locale.equals("root")) {
@@ -149,7 +149,7 @@
 
         // gather data per region
 
-        Map<String, Relation<Character, String>> region2Preferred2locales = new TreeMap<String, Relation<Character, String>>();
+        Map<String, Relation<Character, String>> region2Preferred2locales = new TreeMap<>();
         Relation<String, Character> region2Allowed = Relation.of(new TreeMap<String, Set<Character>>(), TreeSet.class);
         final LanguageTagParser ltp = new LanguageTagParser();
 
@@ -196,7 +196,7 @@
                 if (preferredSet.size() == 1) {
                     overrides.append(region + " didn't need override!!\n");
                 } else {
-                    LinkedHashSet<Entry<Character, String>> oldValues = new LinkedHashSet<Entry<Character, String>>();
+                    LinkedHashSet<Entry<Character, String>> oldValues = new LinkedHashSet<>();
                     StringBuilder oldValuesString = new StringBuilder();
                     for (Entry<Character, String> x : preferredSet.keyValueSet()) {
                         if (!x.getKey().equals(resolvedValue)) {
@@ -212,7 +212,7 @@
                 }
             }
 
-            Set<Character> allAllowed = new TreeSet<Character>();
+            Set<Character> allAllowed = new TreeSet<>();
             Character preferred = null;
 
             for (Entry<Character, Set<String>> pref : preferredSet.keyValuesSet()) {
@@ -244,7 +244,7 @@
             }
             String subcontinent = Containment.getSubcontinent(region);
             String continent = Containment.getContinent(region);
-            String tag = CollectionUtilities.join(preferredSet.keySet(), ",");
+            String tag = Joiner.on(",").join(preferredSet.keySet());
             if (tag.equals("h")) {
                 tag += "*";
             }
@@ -270,9 +270,9 @@
                 + preferredAndAllowedHour.preferred
                 + "\""
                 + " allowed=\""
-                + CollectionUtilities.join(preferredAndAllowedHour.allowed, " ")
+                + Joiner.on(" ").join(preferredAndAllowedHour.allowed)
                 + "\""
-                + " regions=\"" + CollectionUtilities.join(regions, " ") + "\""
+                + " regions=\"" + Joiner.on(" ").join(regions) + "\""
                 + "/>");
         }
         System.out.println("    </timeData>");
diff --git a/tools/java/org/unicode/cldr/tool/FindWidths.java b/tools/java/org/unicode/cldr/tool/FindWidths.java
index d51e64f..a6eaad3 100644
--- a/tools/java/org/unicode/cldr/tool/FindWidths.java
+++ b/tools/java/org/unicode/cldr/tool/FindWidths.java
@@ -45,8 +45,8 @@
         nf.setMaximumFractionDigits(0);
         CLDRFile english = testInfo.getEnglish();
         Factory phf = PathHeader.getFactory(english);
-        Map<PathHeader, Integer> englishWidths = new HashMap<PathHeader, Integer>();
-        Map<PathHeader, Data> maxWidths = new TreeMap<PathHeader, Data>();
+        Map<PathHeader, Integer> englishWidths = new HashMap<>();
+        Map<PathHeader, Data> maxWidths = new TreeMap<>();
         Set<String> sampleLocales = testInfo.getStandardCodes().getLocaleCoverageLocales("google");
 
         for (String path : english) {
diff --git a/tools/java/org/unicode/cldr/tool/FixDelimiters.java b/tools/java/org/unicode/cldr/tool/FixDelimiters.java
index a21c4ad..448dc25 100644
--- a/tools/java/org/unicode/cldr/tool/FixDelimiters.java
+++ b/tools/java/org/unicode/cldr/tool/FixDelimiters.java
@@ -37,7 +37,7 @@
             System.out.println(entry);
         }
         Factory factory = SimpleFactory.make(CLDRPaths.MAIN_DIRECTORY, ".*");
-        Set<String> remainder = new LinkedHashSet<String>(Data.locales2delimiters.keySet());
+        Set<String> remainder = new LinkedHashSet<>(Data.locales2delimiters.keySet());
 
         String[] paths = {
             "//ldml/delimiters/quotationStart",
@@ -98,13 +98,14 @@
             end = quotes.group(2);
         }
 
+        @Override
         public String toString() {
             return start + "...." + end;
         }
     }
 
     static class Data {
-        static Map<String, Row.R2<Quotes, Quotes>> locales2delimiters = new LinkedHashMap<String, Row.R2<Quotes, Quotes>>();
+        static Map<String, Row.R2<Quotes, Quotes>> locales2delimiters = new LinkedHashMap<>();
         static Matcher localeString = PatternCache.get(".*\\((.*)\\)").matcher("");
         static {
             final String instructionFile = "delimiterFixes.txt";
diff --git a/tools/java/org/unicode/cldr/tool/FixTransformNames.java b/tools/java/org/unicode/cldr/tool/FixTransformNames.java
index 45e3bd6..99f4562 100644
--- a/tools/java/org/unicode/cldr/tool/FixTransformNames.java
+++ b/tools/java/org/unicode/cldr/tool/FixTransformNames.java
@@ -32,12 +32,12 @@
         new FixTransformNames().run(args);
     }
 
-    Map<String, String> fieldToCode = new HashMap<String, String>();
-    Map<String, String> oldToNewVariant = new HashMap<String, String>();
-    Map<String, String> fieldToVariant = new HashMap<String, String>();
-    Map<String, String> targetToCode = new HashMap<String, String>();
+    Map<String, String> fieldToCode = new HashMap<>();
+    Map<String, String> oldToNewVariant = new HashMap<>();
+    Map<String, String> fieldToVariant = new HashMap<>();
+    Map<String, String> targetToCode = new HashMap<>();
 
-    Set<String> languageCodes = new HashSet<String>();
+    Set<String> languageCodes = new HashSet<>();
 
     private void run(String[] args) {
         CLDRFile file = testInfo.getEnglish();
@@ -78,7 +78,7 @@
             <transformName type="x-Jamo">Jamo</transformName>
             <transformName type="x-Pinyin">Pinyin</transformName>
             <transformName type="x-Publishing">Publishing</transformName>
-        
+
         ??Accents   [Any-Accents]
         ??ConjoiningJamo    [Latin-ConjoiningJamo]
         ??Fullwidth [Fullwidth-Halfwidth]
@@ -96,17 +96,17 @@
         ??Title [az-Title, el-Title, lt-Title, nl-Title, tr-Title]
         ??Traditional   [Simplified-Traditional]
         ??Upper [az-Upper, el-Upper, lt-Upper, tr-Upper]
-        
+
          */
 
         //CLDRTransforms transforms = CLDRTransforms.getInstance();
         Relation<String, String> missing = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
-        Set<String> found = new TreeSet<String>();
-        Map<String, String> allFields = new TreeMap<String, String>();
-        Map<String, String> specialFields = new TreeMap<String, String>();
-        Map<String, String> allVariants = new TreeMap<String, String>();
+        Set<String> found = new TreeSet<>();
+        Map<String, String> allFields = new TreeMap<>();
+        Map<String, String> specialFields = new TreeMap<>();
+        Map<String, String> allVariants = new TreeMap<>();
 
-        Set<String> internal = new TreeSet<String>();
+        Set<String> internal = new TreeSet<>();
         Set<String> cldrIds = getCldrIds(internal);
 
         for (String id : CLDRTransforms.getAvailableIds()) {
@@ -122,7 +122,7 @@
                 System.out.println("*Missing:\t" + id);
             }
         }
-        Set<String> icuOnlyIds = new TreeSet<String>();
+        Set<String> icuOnlyIds = new TreeSet<>();
         for (Enumeration<String> x = Transliterator.getAvailableIDs(); x.hasMoreElements();) {
             String icuId = x.nextElement();
             if (!cldrIds.contains(icuId)) {
@@ -269,7 +269,7 @@
     }
 
     private Set<String> getCldrIds(Set<String> internal) {
-        Set<String> result = new LinkedHashSet<String>();
+        Set<String> result = new LinkedHashSet<>();
         for (String s : CLDRTransforms.getAvailableIds()) {
             //String dir;
             ParsedTransformID directionInfo = new ParsedTransformID();
diff --git a/tools/java/org/unicode/cldr/tool/FormattedFileWriter.java b/tools/java/org/unicode/cldr/tool/FormattedFileWriter.java
index 1e7d7b9..a0ff08d 100644
--- a/tools/java/org/unicode/cldr/tool/FormattedFileWriter.java
+++ b/tools/java/org/unicode/cldr/tool/FormattedFileWriter.java
@@ -135,6 +135,7 @@
         return this;
     }
 
+    @Override
     public void close() {
         String contents = out.toString();
         if (contents.isEmpty()) {
@@ -172,7 +173,7 @@
     public static void copyIncludeHtmls (String targetDirectory) {
         copyIncludeHtmls(targetDirectory, false);
     }
-    
+
     public static void copyIncludeHtmls (String targetDirectory, boolean addPrevVersion) {
         String[] replacements = {
             "%version%", ToolConstants.CHART_DISPLAY_VERSION + (addPrevVersion ? " – " + ToolConstants.PREV_CHART_VERSION_WITH0 : ""),
@@ -186,10 +187,12 @@
         return showDate ? CldrUtility.isoFormatDateOnly(new Date()) : "";
     }
 
+    @Override
     public void write(char[] cbuf, int off, int len) throws IOException {
         out.write(cbuf, off, len);
     }
 
+    @Override
     public void flush() throws IOException {
         out.flush();
     }
diff --git a/tools/java/org/unicode/cldr/tool/GenerateAliases.java b/tools/java/org/unicode/cldr/tool/GenerateAliases.java
index cdcd97e..6afc0a6 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateAliases.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateAliases.java
@@ -27,7 +27,7 @@
     }
 
     static class Builder {
-        Map<String, String> aliasMap = new LinkedHashMap<String, String>();
+        Map<String, String> aliasMap = new LinkedHashMap<>();
         Factory factory = Factory.make(CLDRPaths.MAIN_DIRECTORY, ".*");
 
         SupplementalDataInfo dataInfo = SupplementalDataInfo.getInstance();
@@ -57,7 +57,7 @@
                 }
             }
 
-            Map<String, String> likely = new TreeMap<String, String>();
+            Map<String, String> likely = new TreeMap<>();
 
             // get all the combinations
             for (String max : likelySubtags.getToMaximized().values()) {
@@ -100,8 +100,6 @@
                     System.out.println("missing" + "\t" + localeID);
                 }
             }
-
-            // System.out.println(CollectionUtilities.join(aliasMap.entrySet(), "\n"));
         }
 
         private void addToLikely(Map<String, String> likely) {
@@ -223,7 +221,7 @@
          */
 
         private Set<String> addExtras(String language, Relation<String, String> goodToBadLanguages) {
-            Set<String> languages = new TreeSet<String>();
+            Set<String> languages = new TreeSet<>();
             languages.add(language);
             Set<String> badLanguages = goodToBadLanguages.get(language);
             if (badLanguages != null) {
@@ -232,7 +230,7 @@
             return languages;
         }
 
-        Map<String, Boolean> wholeAliasCache = new HashMap<String, Boolean>();
+        Map<String, Boolean> wholeAliasCache = new HashMap<>();
 
         private boolean isWholeAlias(Factory factory, String localeID) {
             Boolean result = wholeAliasCache.get(localeID);
diff --git a/tools/java/org/unicode/cldr/tool/GenerateAllCharts.java b/tools/java/org/unicode/cldr/tool/GenerateAllCharts.java
index 8199ba4..2517be7 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateAllCharts.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateAllCharts.java
@@ -13,7 +13,7 @@
         FormattedFileWriter.copyIncludeHtmls(CLDRPaths.CHART_DIRECTORY);
 
         ShowLanguages.main(args);
-        
+
         new ChartAnnotations().writeChart(null);
         new ChartSubdivisionNames().writeChart(null);
         GenerateBcp47Text.main(args);
@@ -22,8 +22,9 @@
         //GenerateTransformCharts.main(args);
         ShowKeyboards.main(args);
         ChartDelta.main(args);
+        ChartDelta.main(args, true); // churn
         ChartCollation.main(args);
-        
+
         VerifyCompactNumbers.main(args);
         VerifyZones.main(args);
         DateTimeFormats.main(args);
diff --git a/tools/java/org/unicode/cldr/tool/GenerateApproximateWidths.java b/tools/java/org/unicode/cldr/tool/GenerateApproximateWidths.java
index 93bf61a..7d0be54 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateApproximateWidths.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateApproximateWidths.java
@@ -43,6 +43,7 @@
     private BufferedImage bimg;
     private String string = "𝛛";
 
+    @Override
     public void paint(Graphics g) {
         Dimension d = getSize();
         if (bimg == null || bimg.getWidth() != d.width || bimg.getHeight() != d.height) {
@@ -71,7 +72,7 @@
         try {
             PrintWriter out = FileUtilities.openUTF8Writer(CLDRPaths.GEN_DIRECTORY + "widths/", "ApproximateWidth.txt");
             // TODO Auto-generated method stub
-            UnicodeMap<Integer> map = new UnicodeMap<Integer>();
+            UnicodeMap<Integer> map = new UnicodeMap<>();
             Widths widths = new Widths(g, new Font("Serif", 0, 100), new Font("SansSerif", 0, 100));
 
             UnicodeSet CHECK = new UnicodeSet("[[:^c:][:cc:][:cf:]]");
@@ -101,7 +102,7 @@
             out.println("# ApproximateWidth\n" +
                 "# @missing: 0000..10FFFF; " + defaultWidth);
 
-            Set<Integer> values = new TreeSet<Integer>(map.values());
+            Set<Integer> values = new TreeSet<>(map.values());
             for (Integer integer0 : values) {
                 if (integer0 == null) {
                     continue;
@@ -263,14 +264,17 @@
         demo.init();
         Frame f = new Frame("Frame");
         f.addWindowListener(new WindowAdapter() {
+            @Override
             public void windowClosing(WindowEvent e) {
                 System.exit(0);
             }
 
+            @Override
             public void windowDeiconified(WindowEvent e) {
                 demo.start();
             }
 
+            @Override
             public void windowIconified(WindowEvent e) {
                 demo.stop();
             }
diff --git a/tools/java/org/unicode/cldr/tool/GenerateAttributeList.java b/tools/java/org/unicode/cldr/tool/GenerateAttributeList.java
index 7aae971..cfc4e89 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateAttributeList.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateAttributeList.java
@@ -25,6 +25,7 @@
 import org.unicode.cldr.util.CldrUtility;
 import org.unicode.cldr.util.DtdData;
 import org.unicode.cldr.util.Factory;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.PatternCache;
 import org.unicode.cldr.util.StandardCodes;
 import org.unicode.cldr.util.TransliteratorUtilities;
@@ -37,9 +38,9 @@
 import org.xml.sax.ext.DeclHandler;
 
 public class GenerateAttributeList {
-    Map<String, Map<String, Set<String>[]>> element_attribute_valueSet = new TreeMap<String, Map<String, Set<String>[]>>();
-    Set<String> allElements = new TreeSet<String>();
-    Map<String, String> defaults = new HashMap<String, String>();
+    Map<String, Map<String, Set<String>[]>> element_attribute_valueSet = new TreeMap<>();
+    Set<String> allElements = new TreeSet<>();
+    Map<String, String> defaults = new HashMap<>();
 
     public GenerateAttributeList(Factory cldrFactory) throws IOException {
         addFromStandardCodes();
@@ -104,7 +105,7 @@
 
     private void addFromDirectory(String directory) throws IOException {
         File dir = new File(directory);
-        directory = dir.getCanonicalPath();
+        directory = PathUtilities.getNormalizedPathString(dir);
         String[] files = dir.list();
         for (int i = 0; i < files.length; ++i) {
             if (files[i].startsWith(".#")) continue;
@@ -156,13 +157,13 @@
         }
         // now add
         Map<String, Set<String>[]> attribute_valueSet = element_attribute_valueSet.get(element);
-        if (attribute_valueSet == null) element_attribute_valueSet.put(element, attribute_valueSet = new TreeMap<String, Set<String>[]>());
+        if (attribute_valueSet == null) element_attribute_valueSet.put(element, attribute_valueSet = new TreeMap<>());
         Set<String>[] valueSets = attribute_valueSet.get(attribute);
         if (valueSets == null) {
             Comparator<String> c = DtdData.getAttributeValueComparator(element, attribute);
             valueSets = new Set[2];
-            valueSets[0] = new TreeSet<String>(c);
-            valueSets[1] = new TreeSet<String>();
+            valueSets[0] = new TreeSet<>(c);
+            valueSets[1] = new TreeSet<>();
             attribute_valueSet.put(attribute, valueSets);
         }
         try {
@@ -211,8 +212,8 @@
                 String defaultKey = element + "|" + attribute;
                 pw.print(toString(valueSets[0], defaultKey));
                 pw.println("</td><td>");
-                Set<String> toRemove = new TreeSet<String>(valueSets[0]);
-                Set<String> remainder = new TreeSet<String>(valueSets[1]);
+                Set<String> toRemove = new TreeSet<>(valueSets[0]);
+                Set<String> remainder = new TreeSet<>(valueSets[1]);
                 remainder.removeAll(toRemove);
                 pw.print(toString(remainder, defaultKey));
                 pw.println("</td></tr>");
@@ -251,6 +252,7 @@
 
         Matcher idmatcher = PatternCache.get("[a-zA-Z][-_a-zA-Z0-9]*").matcher("");
 
+        @Override
         public void attributeDecl(String eName, String aName, String type, String mode, String value)
             throws SAXException {
             // System.out.println("Attribute\t" + eName + "\t" + aName + "\t" + type + "\t" + mode + "\t" + value);
@@ -269,6 +271,7 @@
          *
          * @see org.xml.sax.ext.DeclHandler#elementDecl(java.lang.String, java.lang.String)
          */
+        @Override
         public void elementDecl(String name, String model) throws SAXException {
             // TODO Auto-generated method stub
 
@@ -279,6 +282,7 @@
          *
          * @see org.xml.sax.ext.DeclHandler#internalEntityDecl(java.lang.String, java.lang.String)
          */
+        @Override
         public void internalEntityDecl(String name, String value) throws SAXException {
             // TODO Auto-generated method stub
 
@@ -289,6 +293,7 @@
          *
          * @see org.xml.sax.ext.DeclHandler#externalEntityDecl(java.lang.String, java.lang.String, java.lang.String)
          */
+        @Override
         public void externalEntityDecl(String name, String publicId, String systemId) throws SAXException {
             // TODO Auto-generated method stub
 
@@ -302,6 +307,7 @@
          *
          * @see org.xml.sax.ContentHandler#endDocument()
          */
+        @Override
         public void endDocument() throws SAXException {
             // TODO Auto-generated method stub
 
@@ -312,6 +318,7 @@
          *
          * @see org.xml.sax.ContentHandler#startDocument()
          */
+        @Override
         public void startDocument() throws SAXException {
             // TODO Auto-generated method stub
 
@@ -322,6 +329,7 @@
          *
          * @see org.xml.sax.ContentHandler#characters(char[], int, int)
          */
+        @Override
         public void characters(char[] ch, int start, int length) throws SAXException {
             // TODO Auto-generated method stub
 
@@ -332,6 +340,7 @@
          *
          * @see org.xml.sax.ContentHandler#ignorableWhitespace(char[], int, int)
          */
+        @Override
         public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
             // TODO Auto-generated method stub
 
@@ -342,6 +351,7 @@
          *
          * @see org.xml.sax.ContentHandler#endPrefixMapping(java.lang.String)
          */
+        @Override
         public void endPrefixMapping(String prefix) throws SAXException {
             // TODO Auto-generated method stub
 
@@ -352,6 +362,7 @@
          *
          * @see org.xml.sax.ContentHandler#skippedEntity(java.lang.String)
          */
+        @Override
         public void skippedEntity(String name) throws SAXException {
             // TODO Auto-generated method stub
 
@@ -362,6 +373,7 @@
          *
          * @see org.xml.sax.ContentHandler#setDocumentLocator(org.xml.sax.Locator)
          */
+        @Override
         public void setDocumentLocator(Locator locator) {
             // TODO Auto-generated method stub
 
@@ -372,6 +384,7 @@
          *
          * @see org.xml.sax.ContentHandler#processingInstruction(java.lang.String, java.lang.String)
          */
+        @Override
         public void processingInstruction(String target, String data) throws SAXException {
             // TODO Auto-generated method stub
 
@@ -382,6 +395,7 @@
          *
          * @see org.xml.sax.ContentHandler#startPrefixMapping(java.lang.String, java.lang.String)
          */
+        @Override
         public void startPrefixMapping(String prefix, String uri) throws SAXException {
             // TODO Auto-generated method stub
 
@@ -392,6 +406,7 @@
          *
          * @see org.xml.sax.ContentHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
          */
+        @Override
         public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
             // TODO Auto-generated method stub
 
@@ -403,6 +418,7 @@
          * @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String,
          * org.xml.sax.Attributes)
          */
+        @Override
         public void startElement(String namespaceURI, String localName, String qName, Attributes attributes)
             throws SAXException {
             if (attributes == null) return;
@@ -417,4 +433,4 @@
     public Map<String, Map<String, Set<String>[]>> getElement_attribute_valueSet() {
         return element_attribute_valueSet;
     }
-}
\ No newline at end of file
+}
diff --git a/tools/java/org/unicode/cldr/tool/GenerateBcp47Bits.java b/tools/java/org/unicode/cldr/tool/GenerateBcp47Bits.java
index 0935059..b37481f 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateBcp47Bits.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateBcp47Bits.java
@@ -74,7 +74,7 @@
      */
     private static void writeBits(final Collection<String> source, StringBitTransform transform, String indent,
         long[] testStatic) {
-        Set<String> codes = new TreeSet<String>(source);
+        Set<String> codes = new TreeSet<>(source);
 
         // Transform into bits
         Bits bits = new Bits(transform.getLimit());
@@ -101,7 +101,7 @@
 
         // Verify that the sets are the same afterwards
         if (QUICK) System.out.println(bits);
-        Set<String> verifySet = new TreeSet<String>();
+        Set<String> verifySet = new TreeSet<>();
         for (int i = 0; i < transform.getLimit(); ++i) {
             if (!bits.get(i)) continue;
             String verify = transform.fromBit(i);
@@ -241,6 +241,7 @@
             return -1;
         }
 
+        @Override
         public String toString() {
             StringBuilder result = new StringBuilder("[");
             int limit = bits.length;
@@ -272,7 +273,7 @@
     static class Bcp47StringBitTransform implements StringBitTransform {
         enum Type {
             LANGUAGE, REGION
-        };
+        }
 
         Type type;
         int limit;
@@ -282,13 +283,15 @@
             limit = type == Type.LANGUAGE ? 26 * 26 + 26 * 26 * 26 : 26 * 26 + 1000;
         }
 
+        @Override
         public int getLimit() {
             return limit;
         }
 
-        static final UnicodeSet alpha = (UnicodeSet) new UnicodeSet("[a-z]").freeze();
-        static final UnicodeSet num = (UnicodeSet) new UnicodeSet("[0-9]").freeze();
+        static final UnicodeSet alpha = new UnicodeSet("[a-z]").freeze();
+        static final UnicodeSet num = new UnicodeSet("[0-9]").freeze();
 
+        @Override
         public int toBit(String string) {
             string = UCharacter.toLowerCase(ULocale.ENGLISH, string);
             switch (string.length()) {
@@ -314,6 +317,7 @@
             }
         }
 
+        @Override
         public String fromBit(int bit) {
             StringBuilder result = new StringBuilder();
             if (bit < 0) {
diff --git a/tools/java/org/unicode/cldr/tool/GenerateBcp47Tests.java b/tools/java/org/unicode/cldr/tool/GenerateBcp47Tests.java
index b2a479c..5154d42 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateBcp47Tests.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateBcp47Tests.java
@@ -29,7 +29,7 @@
         System.out.println("#Tests");
         Relation<String, String> extension2Keys = info.getBcp47Extension2Keys();
         Relation<String, String> keys2subtypes = info.getBcp47Keys();
-        Set<String> deprecatedSet = new LinkedHashSet<String>();
+        Set<String> deprecatedSet = new LinkedHashSet<>();
         for (Entry<String, Set<String>> extensionKeys : extension2Keys.keyValuesSet()) {
             String extension = extensionKeys.getKey();
             Set<String> keys = extensionKeys.getValue();
diff --git a/tools/java/org/unicode/cldr/tool/GenerateBcp47Text.java b/tools/java/org/unicode/cldr/tool/GenerateBcp47Text.java
index a1a5e27..6d56d92 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateBcp47Text.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateBcp47Text.java
@@ -10,7 +10,7 @@
 import org.unicode.cldr.draft.FileUtilities;
 import org.unicode.cldr.util.SupplementalDataInfo;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
@@ -90,7 +90,7 @@
     }
 
     private void showField(PrintWriter out, String title, Collection<String> set) {
-        showField(out, title, set == null || set.isEmpty() ? null : CollectionUtilities.join(set, ", "));
+        showField(out, title, set == null || set.isEmpty() ? null : Joiner.on(", ").join(set));
     }
 
     private void showField(PrintWriter out, String title, String item) {
diff --git a/tools/java/org/unicode/cldr/tool/GenerateBirth.java b/tools/java/org/unicode/cldr/tool/GenerateBirth.java
index 48abfb0..8a0460f 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateBirth.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateBirth.java
@@ -28,6 +28,7 @@
 import org.unicode.cldr.util.Factory;
 import org.unicode.cldr.util.LanguageTagParser;
 import org.unicode.cldr.util.Pair;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.PatternCache;
 import org.unicode.cldr.util.SimpleFactory;
 import org.unicode.cldr.util.StringId;
@@ -79,7 +80,7 @@
 
         String filePattern = myOptions.get("file").getValue();
 
-        ArrayList<Factory> list = new ArrayList<Factory>();
+        ArrayList<Factory> list = new ArrayList<>();
         for (CldrVersion version : VERSIONS) {
             if (version == CldrVersion.unknown) {
                 continue;
@@ -87,7 +88,7 @@
             List<File> paths = version.getPathsForFactory();
 //            String base = version.getBaseDirectory();
 //            File[] paths = version.compareTo(CldrVersion.v27_0) > 0 ? // warning, order is reversed
-//                new File[] { new File(base + "common/main/") } : 
+//                new File[] { new File(base + "common/main/") } :
 //                    new File[] { new File(base + "common/main/"), new File(base + "common/annotations/") };
 
             System.out.println(version + ", " + paths);
@@ -137,14 +138,14 @@
         // Set up the binary data files for all others
 
         File file = new File(dataDirectory + "/" + OutdatedPaths.OUTDATED_DATA);
-        final String outputDataFile = file.getCanonicalPath();
+        final String outputDataFile = PathUtilities.getNormalizedPathString(file);
         System.out.println("Writing data: " + outputDataFile);
         DataOutputStream dataOut = new DataOutputStream(new FileOutputStream(file));
         dataOut.writeUTF(OutdatedPaths.FORMAT_KEY);
 
         // Load and process all the locales
 
-        TreeMap<String, Set<String>> localeToNewer = new TreeMap<String, Set<String>>();
+        TreeMap<String, Set<String>> localeToNewer = new TreeMap<>();
         LanguageTagParser ltp = new LanguageTagParser();
         for (String fileName : factories[0].getAvailable()) {
             if (fileName.equals("en")) {
@@ -175,7 +176,7 @@
         // Doublecheck the data
 
         OutdatedPaths outdatedPaths = new OutdatedPaths(dataDirectory);
-        Set<String> needPrevious = new TreeSet<String>();
+        Set<String> needPrevious = new TreeSet<>();
         int errorCount = 0;
         for (Entry<String, Set<String>> localeAndNewer : localeToNewer.entrySet()) {
             String locale = localeAndNewer.getKey();
@@ -215,7 +216,7 @@
         final String locale;
         static final Pattern TYPE = PatternCache.get("\\[@type=\"([^\"]*)\"");
         final Matcher typeMatcher = TYPE.matcher("");
-        Set<String> emptyPrevious = new HashSet<String>();
+        Set<String> emptyPrevious = new HashSet<>();
 
         Births(String file) {
             locale = file;
@@ -231,7 +232,7 @@
                 }
             }
             birthToPaths = Relation.of(new TreeMap<CldrVersion, Set<String>>(), TreeSet.class);
-            pathToBirthCurrentPrevious = new HashMap<String, Row.R3<CldrVersion, String, String>>();
+            pathToBirthCurrentPrevious = new HashMap<>();
             for (String xpath : files[0]) {
                 xpath = xpath.intern();
                 if (xpath.contains("[@type=\"ar\"]")) {
@@ -277,7 +278,7 @@
         public void writeBirthValues(String file) throws IOException {
             DataOutputStream dataOut = new DataOutputStream(new FileOutputStream(file));
             dataOut.writeUTF(OutdatedPaths.FORMAT_KEY);
-            System.out.println("Writing data: " + new File(file).getCanonicalPath());
+            System.out.println("Writing data: " + PathUtilities.getNormalizedPathString(file));
             dataOut.writeInt(pathToBirthCurrentPrevious.size());
 
             // Load and process all the locales
@@ -310,8 +311,8 @@
 
             out.println("Loc\tVersion\tValue\tPrevValue\tEVersion\tEValue\tEPrevValue\tPath");
 
-            Set<String> newer = new HashSet<String>();
-            HashMap<Long, String> sanityCheck = new HashMap<Long, String>();
+            Set<String> newer = new HashSet<>();
+            HashMap<Long, String> sanityCheck = new HashMap<>();
             CldrVersion onlyNewerVersion = null;
             String otherValue = "n/a";
             String olderOtherValue = "n/a";
diff --git a/tools/java/org/unicode/cldr/tool/GenerateCasingChart.java b/tools/java/org/unicode/cldr/tool/GenerateCasingChart.java
index b17af7e..255ef74 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateCasingChart.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateCasingChart.java
@@ -22,7 +22,6 @@
 import org.unicode.cldr.util.XPathParts;
 
 import com.google.common.base.Splitter;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.text.DisplayContext;
 import com.ibm.icu.text.LocaleDisplayNames;
 import com.ibm.icu.text.UnicodeSet;
@@ -58,7 +57,7 @@
         <contextTransformUsage type="month-standalone-except-narrow">
             <contextTransform type="stand-alone">titlecase-firstword</contextTransform>
         </contextTransformUsage>
-    
+
      */
     public static void main(String[] args) {
         check(ULocale.ENGLISH);
@@ -101,7 +100,7 @@
             Level level = CLDRConfig.getInstance().getStandardCodes().getLocaleCoverageLevel("cldr", locale);
             boolean hasCasedLetters = changesUpper.containsSome(exemplars);
             Set<String> items = new LinkedHashSet<>();
-            CollectionUtilities.addAll(cldrFile.iterator("//ldml/contextTransforms"), items);
+            cldrFile.iterator("//ldml/contextTransforms").forEachRemaining(items::add);
             if (!hasCasedLetters) {
                 if (items.size() != 0) {
                     System.out.println(locale + "Uncased language has context!!!");
diff --git a/tools/java/org/unicode/cldr/tool/GenerateChangeChart.java b/tools/java/org/unicode/cldr/tool/GenerateChangeChart.java
index 5af8dbd..dedcd93 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateChangeChart.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateChangeChart.java
@@ -335,6 +335,7 @@
             return title;
         }
 
+        @Override
         public void close() throws IOException {
             out.write("</div>");
             PrintWriter pw2 = org.unicode.cldr.draft.FileUtilities.openUTF8Writer(dir, filename);
@@ -345,10 +346,12 @@
             pw2.close();
         }
 
+        @Override
         public void write(char[] cbuf, int off, int len) throws IOException {
             out.write(cbuf, off, len);
         }
 
+        @Override
         public void flush() throws IOException {
             out.flush();
         }
diff --git a/tools/java/org/unicode/cldr/tool/GenerateCldrCollationTests.java b/tools/java/org/unicode/cldr/tool/GenerateCldrCollationTests.java
deleted file mode 100644
index af55fb4..0000000
--- a/tools/java/org/unicode/cldr/tool/GenerateCldrCollationTests.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Created on May 19, 2005
- * Copyright (C) 2004-2011, Unicode, Inc., International Business Machines Corporation, and others.
- * For terms of use, see http://www.unicode.org/terms_of_use.html
- */
-package org.unicode.cldr.tool;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-import org.unicode.cldr.icu.CollationMapper;
-import org.unicode.cldr.icu.IcuData;
-import org.unicode.cldr.util.LocaleIDParser;
-import org.unicode.cldr.util.Log;
-
-import com.ibm.icu.text.Collator;
-import com.ibm.icu.text.RuleBasedCollator;
-import com.ibm.icu.text.Transliterator;
-import com.ibm.icu.util.ULocale;
-
-public class GenerateCldrCollationTests {
-    String sourceDir;
-    Set<String> validLocales = new TreeSet<String>();
-    Map<String, Object> ulocale_rules = new TreeMap<String, Object>(GenerateCldrTests.ULocaleComparator);
-    Map<String, Map<String, RuleBasedCollator>> locale_types_rules = new TreeMap<String, Map<String, RuleBasedCollator>>();
-    Map<RuleBasedCollator, RuleBasedCollator> collation_collation = new HashMap<RuleBasedCollator, RuleBasedCollator>();
-    RuleBasedCollator emptyCollator = (RuleBasedCollator) Collator.getInstance(new ULocale(""));
-
-    public Set<String> getAvailableSet() {
-        return ulocale_rules.keySet();
-    }
-
-    public RuleBasedCollator getInstance(String locale) {
-        return (RuleBasedCollator) ulocale_rules.get(locale);
-    }
-
-    void show() {
-        Log.logln("Showing Locales");
-        Log.logln("Unique Collators: " + collation_collation.size());
-        for (Iterator it2 = ulocale_rules.keySet().iterator(); it2.hasNext();) {
-            ULocale locale = (ULocale) it2.next();
-            RuleBasedCollator col = (RuleBasedCollator) ulocale_rules.get(locale);
-            Log.logln("\t" + locale + ", " + col.getRules());
-        }
-    }
-
-    GenerateCldrCollationTests(String sourceDir, String localeRegex, Set<String> locales) throws Exception {
-        this.sourceDir = sourceDir;
-        Set<String> s = GenerateCldrTests.getMatchingXMLFiles(sourceDir, localeRegex);
-        for (Iterator<String> it = s.iterator(); it.hasNext();) {
-            getCollationRules(it.next());
-        }
-
-        // now fixup the validLocales, adding in what they inherit
-        // TODO, add check: validSubLocales are masked by intervening locales.
-        for (Iterator<String> it = validLocales.iterator(); it.hasNext();) {
-            String locale = it.next();
-            Map<String, RuleBasedCollator> types_rules = locale_types_rules.get(locale);
-            if (types_rules != null)
-                Log.logln("Weird: overlap in validLocales: " + locale);
-            else {
-                for (String parentlocale = LocaleIDParser.getSimpleParent(locale); parentlocale != null; parentlocale = LocaleIDParser
-                    .getSimpleParent(parentlocale)) {
-                    types_rules = locale_types_rules.get(parentlocale);
-                    if (types_rules != null) {
-                        locale_types_rules.put(locale, types_rules);
-                        break;
-                    }
-                }
-            }
-        }
-        // now generate the @-style locales
-        ulocale_rules.put("root", Collator.getInstance(ULocale.ROOT));
-
-        for (Iterator<String> it = locale_types_rules.keySet().iterator(); it.hasNext();) {
-            String locale = it.next();
-            Map<String, RuleBasedCollator> types_rules = locale_types_rules.get(locale);
-            for (Iterator<String> it2 = types_rules.keySet().iterator(); it2.hasNext();) {
-                String type = it2.next();
-                // TODO fix HACK
-                if (type.equals("unihan")) {
-                    if (!locale.startsWith("zh")) continue;
-                }
-                RuleBasedCollator col = (RuleBasedCollator) types_rules.get(type);
-                String name = type.equals("standard") ? locale : locale + "@collation=" + type;
-                ulocale_rules.put(name, col);
-            }
-        }
-        // now flesh out
-        // Collator root = Collator.getInstance(ULocale.ROOT);
-        for (Iterator<String> it = locales.iterator(); it.hasNext();) {
-            String locale = it.next();
-            if (ulocale_rules.get(locale) != null) continue;
-            String parent = LocaleIDParser.getSimpleParent(locale); // GenerateCldrTests.getParent(locale);
-            if (parent == null) continue;
-            try {
-                ulocale_rules.put(locale, ulocale_rules.get(parent));
-            } catch (RuntimeException e) {
-                throw e;
-            }
-        }
-    }
-
-    static Transliterator fromHex = Transliterator.getInstance("hex-any");
-
-    private void getCollationRules(String locale) throws Exception {
-        System.out.println("Loading collation:\t" + locale);
-        CollationMapper mapper = new CollationMapper(sourceDir, null);
-        StringBuilder stringBuilder = new StringBuilder();
-        TreeMap<String, RuleBasedCollator> types_rules = new TreeMap<String, RuleBasedCollator>();
-        IcuData[] dataList = mapper.fillFromCldr(locale);
-        IcuData icuData = dataList[0];
-        for (String rbPath : icuData.keySet()) {
-            if (!rbPath.endsWith("/Sequence")) continue;
-            // remove the \ u's, because they blow up
-            stringBuilder.setLength(0);
-            for (String line : icuData.get(rbPath).get(0)) {
-                stringBuilder.append(line);
-            }
-            String originalRules = stringBuilder.toString();
-            String rules = fromHex.transliterate(originalRules);
-            String name = rbPath.split("/")[2];
-            RuleBasedCollator fixed = generateCollator(locale, name, rules);
-            if (fixed != null) {
-                Log.logln("Rules for: " + locale + ", " + name);
-                Log.logln(rules);
-                if (!rules.equals(originalRules)) {
-                    Log.logln("Original Rules from Ram: ");
-                    Log.logln(originalRules);
-                }
-                types_rules.put(name, fixed);
-            }
-            locale_types_rules.put(locale, types_rules);
-        }
-        // now get the valid sublocales
-        for (int i = 1; i < dataList.length; i++) {
-            IcuData subLocale = dataList[i];
-            Log.logln("Valid Sub Locale: " + subLocale.getName());
-            validLocales.add(subLocale.getName());
-        }
-    }
-
-    /**
-     * @param locale
-     * @param current
-     * @param foo
-     * @param rules
-     */
-    private RuleBasedCollator generateCollator(String locale, String current, String rules) {
-        RuleBasedCollator fixed = null;
-        try {
-            if (rules.equals(""))
-                fixed = emptyCollator;
-            else {
-                rules = GenerateCldrTests.replace(rules, "[optimize[", "[optimize [");
-                rules = GenerateCldrTests.replace(rules, "[suppressContractions[", "[suppressContractions [");
-                RuleBasedCollator col = new RuleBasedCollator(rules);
-                fixed = (RuleBasedCollator) collation_collation.get(col);
-                if (fixed == null) {
-                    collation_collation.put(col, col);
-                    fixed = col;
-                }
-            }
-        } catch (Exception e) {
-            Log.logln("***Cannot create collator from: " + locale + ", " + current + ", " + rules);
-            e.printStackTrace(Log.getLog());
-            RuleBasedCollator coll = (RuleBasedCollator) Collator.getInstance(new ULocale(locale));
-            String oldrules = coll.getRules();
-            Log.logln("Old ICU4J: " + oldrules);
-            Log.logln("Equal?: " + oldrules.equals(rules));
-        }
-        return fixed;
-    }
-}
diff --git a/tools/java/org/unicode/cldr/tool/GenerateCldrDateTimeTests.java b/tools/java/org/unicode/cldr/tool/GenerateCldrDateTimeTests.java
deleted file mode 100644
index a2e4982..0000000
--- a/tools/java/org/unicode/cldr/tool/GenerateCldrDateTimeTests.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Created on May 19, 2005
- * Copyright (C) 2004-2005, Unicode, Inc., International Business Machines Corporation, and others.
- * For terms of use, see http://www.unicode.org/terms_of_use.html
- */
-package org.unicode.cldr.tool;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-import org.unicode.cldr.util.CLDRFile;
-import org.unicode.cldr.util.Factory;
-import org.unicode.cldr.util.ICUServiceBuilder;
-import org.unicode.cldr.util.Log;
-
-import com.ibm.icu.text.UnicodeSet;
-import com.ibm.icu.util.ULocale;
-
-class GenerateCldrDateTimeTests {
-    Map<ULocale, UnicodeSet> ulocale_exemplars = new TreeMap<ULocale, UnicodeSet>(GenerateCldrTests.ULocaleComparator);
-    Map<UnicodeSet, UnicodeSet> uniqueExemplars = new HashMap<UnicodeSet, UnicodeSet>();
-    Set<ULocale> locales = new TreeSet<ULocale>(GenerateCldrTests.ULocaleComparator);
-
-    UnicodeSet getExemplarSet(ULocale locale) {
-        return ulocale_exemplars.get(locale);
-    }
-
-    void show() {
-        Log.logln("Showing Locales");
-        Log.logln("Unique Exemplars: " + uniqueExemplars.size());
-        for (Iterator<ULocale> it2 = ulocale_exemplars.keySet().iterator(); it2.hasNext();) {
-            ULocale locale = it2.next();
-            UnicodeSet us = getExemplarSet(locale);
-            Log.logln("\t" + locale + ", " + us);
-        }
-    }
-
-    static final ULocale ROOT = new ULocale("root"); // since CLDR has different root.
-    private Factory cldrFactory;
-    ICUServiceBuilder icuServiceBuilder;
-
-    GenerateCldrDateTimeTests(String sourceDir, String localeRegex, boolean doResolved) {
-        this.cldrFactory = Factory.make(sourceDir, ".*");
-        icuServiceBuilder = new ICUServiceBuilder();
-        Set<String> s = GenerateCldrTests.getMatchingXMLFiles(sourceDir, localeRegex);
-        for (Iterator<String> it = s.iterator(); it.hasNext();) {
-            getInfo(it.next(), doResolved);
-        }
-        // now do inheritance manually
-        for (Iterator<ULocale> it = locales.iterator(); it.hasNext();) {
-            ULocale locale = it.next();
-            UnicodeSet ex = (UnicodeSet) ulocale_exemplars.get(locale);
-            if (ex != null) continue;
-            for (ULocale parent = locale.getFallback(); parent != null; parent = parent.getFallback()) {
-                ULocale fixedParent = parent.getLanguage().length() == 0 ? ROOT : parent;
-                ex = (UnicodeSet) ulocale_exemplars.get(fixedParent);
-                if (ex == null) continue;
-                ulocale_exemplars.put(locale, ex);
-                break;
-            }
-        }
-
-    }
-
-    void getInfo(String locale, boolean doResolved) {
-        System.out.println("Getting info for: " + locale);
-        locales.add(new ULocale(locale));
-        CLDRFile cldrFile = cldrFactory.make(locale, doResolved);
-        // Node node = LDMLUtilities.getNode(doc, "//ldml/characters/exemplarCharacters");
-        String cpath = "//ldml/characters/exemplarCharacters";
-        String path = cldrFile.getFullXPath(cpath);
-        if (path == null) return;
-        // if (path.indexOf("[@draft=") >= 0) System.out.println("Skipping draft: " + locale + ",\t" + path);
-        String exemplars = cldrFile.getStringValue(cpath);
-        UnicodeSet exemplarSet = new UnicodeSet(exemplars);
-        UnicodeSet fixed = (UnicodeSet) uniqueExemplars.get(exemplarSet);
-        if (fixed == null) {
-            uniqueExemplars.put(exemplarSet, exemplarSet);
-            fixed = exemplarSet;
-        }
-        ulocale_exemplars.put(new ULocale(locale), fixed);
-    }
-
-    // ========== DATES ==========
-
-    /*
-     * Equator DateEquator = new Equator() {
-     *//**
-       * Must both be ULocales
-       */
-    /*
-     * public boolean equals(Object o1, Object o2) {
-     * ULocale loc1 = (ULocale) o1;
-     * ULocale loc2 = (ULocale) o2;
-     * for (int i = 0; i < ICUServiceBuilder.LIMIT_DATE_FORMAT_INDEX; ++i) {
-     * for (int j = 0; j < ICUServiceBuilder.LIMIT_DATE_FORMAT_INDEX; ++j) {
-     * if (i == 0 && j == 0) continue; // skip null case
-     * DateFormat df1 = icuServiceBuilder.getDateFormat(loc1.toString(), i, j);
-     * NumberFormat nf = df1.getNumberFormat();
-     * nf.setCurrency(ICUServiceBuilder.NO_CURRENCY);
-     * df1.setNumberFormat(nf);
-     * DateFormat df2 = icuServiceBuilder.getDateFormat(loc2.toString(), i, j);
-     * nf = df2.getNumberFormat();
-     * nf.setCurrency(ICUServiceBuilder.NO_CURRENCY);
-     * df2.setNumberFormat(nf);
-     * if (!df1.equals(df2)) {
-     * df1.equals(df2);
-     * return false;
-     * }
-     * }
-     * }
-     * return true;
-     * }
-     * };
-     */
-
-    /*
-     * Equator ZoneEquator = new Equator() {
-     *
-     * public boolean equals(Object o1, Object o2) {
-     * ULocale loc1 = (ULocale) o1;
-     * ULocale loc2 = (ULocale) o2;
-     * // locales are equivalent they have the same zone resources.
-     * CLDRFile cldrFile1 = cldrFactory.make(loc1.toString(),true);
-     * CLDRFile cldrFile2 = cldrFactory.make(loc1.toString(),true);
-     * for (int i = 0; i < ICUServiceBuilder.LIMIT_DATE_FORMAT_INDEX; ++i) {
-     * for (int j = 0; j < ICUServiceBuilder.LIMIT_DATE_FORMAT_INDEX; ++j) {
-     * if (i == 0 && j == 0) continue; // skip null case
-     * DateFormat df1 = icuServiceBuilder.getDateFormat(loc1.toString(), i, j);
-     * NumberFormat nf = df1.getNumberFormat();
-     * nf.setCurrency(ICUServiceBuilder.NO_CURRENCY);
-     * df1.setNumberFormat(nf);
-     * DateFormat df2 = icuServiceBuilder.getDateFormat(loc2.toString(), i, j);
-     * nf = df2.getNumberFormat();
-     * nf.setCurrency(ICUServiceBuilder.NO_CURRENCY);
-     * df2.setNumberFormat(nf);
-     * if (!df1.equals(df2)) {
-     * df1.equals(df2);
-     * return false;
-     * }
-     * }
-     * }
-     * return false;
-     * }
-     * };
-     */
-    // ========== NUMBERS ==========
-
-    /*
-     * <numbers>
-     * -
-     * <symbols>
-     * <decimal>.</decimal>
-     * <group>,</group>
-     * <list>;</list>
-     * <percentSign>%</percentSign>
-     * <nativeZeroDigit>0</nativeZeroDigit>
-     * <patternDigit>#</patternDigit>
-     * <plusSign>+</plusSign>
-     * <minusSign>-</minusSign>
-     * <exponential>E</exponential>
-     * <perMille>\u2030</perMille>
-     * <infinity>\u221E</infinity>
-     * <nan>NaN</nan>
-     * </symbols>
-     * -
-     * <decimalFormats>
-     * -
-     * <decimalFormatLength>
-     * -
-     * <decimalFormat>
-     * <pattern>#,##0.###</pattern>
-     */
-
-    /*
-     * Equator NumberEquator = new Equator() {
-     *//**
-       * Must both be ULocales
-       */
-    /*
-     * public boolean equals(Object o1, Object o2) {
-     * ULocale loc1 = (ULocale) o1;
-     * ULocale loc2 = (ULocale) o2;
-     * for (int i = 0; i < ICUServiceBuilder.LIMIT_NUMBER_INDEX; ++i) {
-     * NumberFormat nf1 = icuServiceBuilder.getNumberFormat(loc1.toString(), i);
-     * NumberFormat nf2 = icuServiceBuilder.getNumberFormat(loc2.toString(), i);
-     * boolean result = nf1.equals(nf2);
-     * if (!result) {
-     * return false;
-     * }
-     * }
-     * return true;
-     * }
-     * };
-     */
-
-    /**
-     *
-     */
-    public ICUServiceBuilder getICUServiceBuilder() {
-        return icuServiceBuilder;
-    }
-}
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/tool/GenerateCldrTests.java b/tools/java/org/unicode/cldr/tool/GenerateCldrTests.java
deleted file mode 100644
index fc4b537..0000000
--- a/tools/java/org/unicode/cldr/tool/GenerateCldrTests.java
+++ /dev/null
@@ -1,1174 +0,0 @@
-/*
- **********************************************************************
- * Copyright (c) 2002-2011, International Business Machines
- * Corporation and others.  All Rights Reserved.
- **********************************************************************
- * Author: Mark Davis
- **********************************************************************
- */
-package org.unicode.cldr.tool;
-
-import java.io.File;
-import java.io.PrintWriter;
-import java.text.ParseException;
-import java.text.ParsePosition;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-import java.util.regex.Matcher;
-
-import org.unicode.cldr.draft.FileUtilities;
-import org.unicode.cldr.util.Builder;
-import org.unicode.cldr.util.CLDRFile;
-import org.unicode.cldr.util.CLDRFile.DraftStatus;
-import org.unicode.cldr.util.CLDRPaths;
-import org.unicode.cldr.util.CldrUtility;
-import org.unicode.cldr.util.Factory;
-import org.unicode.cldr.util.ICUServiceBuilder;
-import org.unicode.cldr.util.LanguageTagParser;
-import org.unicode.cldr.util.Log;
-import org.unicode.cldr.util.PatternCache;
-import org.unicode.cldr.util.SortedBag;
-import org.unicode.cldr.util.TimezoneFormatter;
-import org.unicode.cldr.util.TransliteratorUtilities;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-
-import com.ibm.icu.dev.tool.UOption;
-import com.ibm.icu.dev.util.UnicodeMap;
-import com.ibm.icu.impl.Relation;
-import com.ibm.icu.lang.UCharacter;
-import com.ibm.icu.text.Collator;
-import com.ibm.icu.text.DateFormat;
-import com.ibm.icu.text.DecimalFormat;
-import com.ibm.icu.text.Normalizer;
-import com.ibm.icu.text.RuleBasedCollator;
-import com.ibm.icu.text.SimpleDateFormat;
-import com.ibm.icu.text.UTF16;
-import com.ibm.icu.text.UnicodeSet;
-import com.ibm.icu.text.UnicodeSetIterator;
-import com.ibm.icu.util.ULocale;
-
-//import org.unicode.cldr.tool.GenerateCldrDateTimeTests;
-
-/**
- * Generated tests for CLDR.
- *
- * @author medavis
- */
-
-public class GenerateCldrTests {
-
-    protected static final boolean METAZONES_WORK = false;
-
-    // static private PrintWriter log;
-    PrintWriter out;
-
-    private static final int HELP1 = 0, HELP2 = 1, SOURCEDIR = 2, DESTDIR = 3,
-        LOGDIR = 4, MATCH = 5, NOT_RESOLVED = 6, LANGUAGES = 7,
-        SHOW = 8;
-
-    private static final UOption[] options = {
-        UOption.HELP_H(),
-        UOption.HELP_QUESTION_MARK(),
-        UOption.SOURCEDIR().setDefault(CLDRPaths.COMMON_DIRECTORY),
-        UOption.DESTDIR().setDefault(CLDRPaths.GEN_DIRECTORY + "/test/"),
-        UOption.create("log", 'l', UOption.REQUIRES_ARG).setDefault(CLDRPaths.GEN_DIRECTORY),
-        UOption.create("match", 'm', UOption.REQUIRES_ARG).setDefault(".*"),
-        UOption.create("notresolved", 'n', UOption.NO_ARG),
-        UOption.create("languages", 'g', UOption.NO_ARG),
-        // "C:\\ICU4J\\icu4j\\src\\com\\ibm\\icu\\dev\\tool\\cldr\\"),
-        UOption.create("show", 's', UOption.NO_ARG), };
-
-    private static final String VERSION = CLDRFile.GEN_VERSION;
-
-    GenerateCldrCollationTests cldrCollations;
-
-    static String logDir = null, destDir = null;
-
-    public static boolean hasLocalizedLanguageFor(String locale,
-        String otherLocale) {
-        String lang = new LanguageTagParser().set(otherLocale).getLanguage();
-        String localizedVersion = english.getName(locale);
-        return !lang.equals(localizedVersion);
-    }
-
-    public static boolean hasLocalizedCountryFor(String locale,
-        String otherLocale) {
-        String country = new LanguageTagParser().set(otherLocale).getRegion();
-        if (country.equals(""))
-            return true;
-        String localizedVersion = english.getName(CLDRFile.TERRITORY_NAME, locale);
-        return !country.equals(localizedVersion);
-    }
-
-    public static void main(String[] args) throws Exception {
-        double deltaTime = System.currentTimeMillis();
-        UOption.parseArgs(args, options);
-        Log.setLog(options[LOGDIR].value, "log.txt");
-        // log = FileUtilities.openUTF8Writer(options[LOGDIR].value, "log.txt");
-        try {
-            if (options[LANGUAGES].doesOccur) {
-                GenerateStatistics.generateSize(
-                    options[GenerateCldrTests.SOURCEDIR].value + "main/",
-                    options[GenerateCldrTests.LOGDIR].value,
-                    options[MATCH].value, true);
-                return;
-            }
-            // compareAvailable();
-
-            // if (true) return;
-            // System.out.println(createCaseClosure(new
-            // UnicodeSet("[a{bc}{def}{oss}]")));
-            // System.out.println(createCaseClosure(new
-            // UnicodeSet("[a-z\u00c3\u0178{aa}]")));
-            GenerateCldrTests t = new GenerateCldrTests();
-            // t.generate(new ULocale("hu"), null);
-            t.generate(options[MATCH].value);
-        } finally {
-            Log.close();
-            deltaTime = System.currentTimeMillis() - deltaTime;
-            System.out.println("Elapsed: " + deltaTime / 1000.0 + " seconds");
-            System.out.println("Done");
-        }
-    }
-
-    /*
-     * private static void compareAvailable() { String[] cols =
-     * Collator.getAvailableULocales(); Locale[] alocs =
-     * NumberFormat.getAvailableLocales(); Set sCols = filter(cols); Set sLocs =
-     * filter(alocs); Set oldSLocs = new TreeSet(sCols); sLocs.removeAll(sCols);
-     * log.println("main - collation"); showLocales(sLocs);
-     * sCols.removeAll(oldSLocs); log.println();
-     * log.println("collation - main"); showLocales(sCols); }
-     */
-
-    /**
-     *
-     */
-    /*
-     * private static void checkLocaleNames() {Stringe[] locales =
-     * String.getAvailableLocales(); for (int i = 0; i < locales.length; ++i) {
-     * if (!hasLocalizedCountryFor(String.ENGLISH, locales[i]) ||
-     * !hasLocalizedLanguageFor(String.ENGLISH, locales[i]) ||
-     * !hasLocalizedCountryFor(locales[i], locales[i]) ||
-     * !hasLocalizedLanguageFor(locales[i], locales[i])) {
-     * Log.getLog().print("FAILURE\t"); } else {
-     * Log.getLog().print("       \t"); } Log.logln(locales[i] + "\t" +
-     * locales[i].getDisplayName(String.ENGLISH) + "\t" +
-     * locales[i].getDisplayName(locales[i])); } }
-     */
-    /**
-     * @param sLocs
-     */
-    private static void showLocales(Set<String> sLocs) {
-        for (Iterator<String> it = sLocs.iterator(); it.hasNext();) {
-            String s = it.next();
-            Log.logln(s + "\t" + ULocale.getDisplayLanguage(s, "en"));
-        }
-    }
-
-    /**
-     * @param cols
-     * @return
-     */
-    private static Set<String> filter(Object[] cols) {
-        Set<String> result = new TreeSet<String>();
-        for (int i = 0; i < cols.length; ++i) {
-            String s = cols[i].toString();
-            if (s.indexOf('_') >= 0)
-                continue;
-            result.add(s);
-        }
-        return result;
-    }
-
-    Set<String> addULocales(Object[] objects, Set<String> target) {
-        for (int i = 0; i < objects.length; ++i) {
-            target.add(objects[i].toString());
-        }
-        return target;
-    }
-
-    LanguageTagParser ltp = new LanguageTagParser();
-
-    private void addLocale(String locale) {
-        String lang;
-        try {
-            lang = ltp.set(locale).getLanguageScript();
-            // lang = locale.getLanguage();
-            if (lang.length() == 0 || lang.equals("root"))
-                return; // skip root
-        } catch (RuntimeException e) {
-            return; // illegal locale name, must be supplemental
-        }
-        // ULocale parent = new ULocale(lang);
-        // System.out.println(item + ", " + parent);
-        parentToLocales.put(lang, locale);
-        /*
-         * RuleBasedCollator col = cldrCollations.getInstance(item); if (col ==
-         * null) { System.out.println("No collator for: " + item); } String
-         * rules = col.getRules(); //
-         * ((RuleBasedCollator)Collator.getInstance(item)).getRules();
-         * rulesToLocales.add(rules, item); localesToRules.put(item, rules);
-         */
-    }
-
-    Set<String> collationLocales = new TreeSet<String>(); // =ULocaleComparator
-    // addULocales(Collator.getAvailableULocales(),
-    // new
-    // TreeSet(ULocaleComparator));
-
-    // Set numberLocales = addULocales(NumberFormat.getAvailableLocales(), new
-    // TreeSet(ULocaleComparator));
-    // Set dateLocales = addULocales(DateFormat.getAvailableLocales(), new
-    // TreeSet(ULocaleComparator));
-    Set<String> allLocales = new TreeSet<String>(); // ULocaleComparator
-
-    // Map localesToRules = new HashMap();
-
-    // Relation rulesToLocales = new Relation(new TreeMap(ULocaleComparator),TreeSet.class);
-
-    Relation<String, String> parentToLocales = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
-
-    /*
-     * void getLocaleList() { collationLocales = new TreeSet(ULocaleComparator);
-     * collationLocales.addAll(cldrCollations.getAvailableSet());
-     *
-     * collationLocales = addULocales(new String[] { // HACK "ga", "nl", "pt",
-     * "de@collation=phonebook", "es@collation=traditional",
-     * "hi@collation=direct", "zh@collation=pinyin", "zh@collation=stroke",
-     * "zh@collation=traditional", }, collationLocales);
-     *
-     * allLocales.addAll(collationLocales); allLocales.addAll(numberLocales);
-     * allLocales.addAll(dateLocales); // HACK // get all collations with same
-     * rules
-     *
-     * for (Iterator it = allLocales.iterator(); it.hasNext();) {
-     * addLocale((ULocale) it.next()); }
-     *
-     * String[] others = new String[] { "de@collation=phonebook",
-     * "es@collation=traditional", "hi@collation=direct", "zh@collation=pinyin",
-     * "zh@collation=stroke", "zh@collation=traditional", }; for (int i = 0; i <
-     * others.length; ++i) { addLocale(new ULocale(others[i])); }
-     *
-     * }
-     */
-
-    // GenerateCldrDateTimeTests cldrOthers;
-    Factory mainCldrFactory;
-
-    ICUServiceBuilder icuServiceBuilder;
-
-    private static CLDRFile english;
-
-    // static Transform<String,ULocale> TO_LOCALE = new Transform<String,ULocale>(){
-    // public ULocale transform(String source) {
-    // return new ULocale(source);
-    // }
-    // };
-
-    void generate(String pat) throws Exception {
-        mainCldrFactory = Factory.make(options[SOURCEDIR].value + "main"
-            + File.separator, pat);
-        english = mainCldrFactory.make("en", true);
-        Factory collationCldrFactory = Factory.make(options[SOURCEDIR].value
-            + "collation" + File.separator, pat);
-        //Factory supplementalCldrFactory = Factory.make(options[SOURCEDIR].value
-        //    + "supplemental" + File.separator, ".*");
-
-        // allLocales = Builder.with(allLocales)
-        // .addAll(mainCldrFactory.getAvailable(), TO_LOCALE)
-        // .addAll(collationCldrFactory.getAvailable(), TO_LOCALE)
-        // .freeze();
-        allLocales.addAll(mainCldrFactory.getAvailable());
-        if (!allLocales.containsAll(collationCldrFactory.getAvailable())) {
-            System.err.println("Collation locale that is not in main!\t"
-                + Builder.with(new TreeSet<String>(collationCldrFactory.getAvailable())).removeAll(allLocales).get());
-        }
-        allLocales.addAll(collationCldrFactory.getAvailable());
-        allLocales = Collections.unmodifiableSet(allLocales);
-
-        cldrCollations = new GenerateCldrCollationTests(options[SOURCEDIR].value
-            + "collation" + File.separator, pat, allLocales);
-        if (options[SHOW].doesOccur)
-            cldrCollations.show();
-
-        for (Iterator<String> it = cldrCollations.getAvailableSet().iterator(); it
-            .hasNext();) {
-            collationLocales.add(it.next());
-        }
-        if (!allLocales.containsAll(collationLocales)) {
-            System.err.println("Collation locale that is not in main!\t"
-                + Builder.with(new TreeSet<String>(collationLocales)).removeAll(allLocales).get());
-        }
-        collationLocales = allLocales;
-
-        // TODO HACK
-        // collationLocales.remove("ar_IN");
-        icuServiceBuilder = new ICUServiceBuilder();
-        /*
-         * cldrOthers = new GenerateCldrDateTimeTests(options[SOURCEDIR].value +
-         * "main" + File.separator, pat,
-         * !options[GenerateCldrTests.NOT_RESOLVED].doesOccur); if
-         * (options[SHOW].doesOccur) cldrOthers.show();
-         */
-        // getLocaleList();
-        for (Iterator<String> it = collationLocales.iterator(); it.hasNext();) {
-            addLocale(it.next());
-        }
-
-        Matcher m = PatternCache.get(pat).matcher("");
-        for (Iterator<String> it = parentToLocales.keySet().iterator(); it.hasNext();) {
-            String p = it.next();
-            if (!m.reset(p).matches())
-                continue;
-            generate2(p);
-        }
-    }
-
-    private void generate2(String locale) throws Exception {
-        System.out.println("Main Generation:\t" + locale);
-        out = FileUtilities.openUTF8Writer(options[DESTDIR].value, locale + ".xml");
-        out.println("<?xml version='1.0' encoding='UTF-8' ?>");
-        out.println(
-            // "<!DOCTYPE cldrTest SYSTEM 'http://www.unicode.org/cldr/dtd/1.5/cldrTest.dtd'>"
-            // +
-            "<!DOCTYPE cldrTest SYSTEM '../common/dtd/cldrTest.dtd'>");
-        out.println("<!-- For information, see readme.html -->");
-        out.println(" <cldrTest version='" + VERSION +
-            "' base='" + locale + "'>");
-        CLDRFile localeFile = mainCldrFactory.make(locale, true);
-        out.println(" <!-- "
-            + TransliteratorUtilities.toXML.transliterate(english.getName(locale)
-                + " [" + localeFile.getName(locale))
-            + "] -->");
-        generateItems(locale, allLocales, NumberShower);
-        generateItems(locale, allLocales, DateShower);
-        generateItems(locale, allLocales, ZoneFieldShower);
-        generateItems(locale, collationLocales, CollationShower);
-        out.println(" </cldrTest>");
-        out.close();
-        ToolUtilities.generateBat(options[SOURCEDIR].value + "test" + File.separator,
-            locale + ".xml", options[DESTDIR].value, locale + ".xml",
-            new CldrUtility.SimpleLineComparator(0));
-    }
-
-    /*
-     *
-     * // first pass through and get all the functional equivalents Map
-     * uniqueLocales = new TreeMap();
-     *
-     * String[] keywords = Collator.getKeywords(); boolean [] isAvailable = new
-     * boolean[1]; for (int i = 0; i < locales.length; ++i) { add(locales[i],
-     * uniqueLocales); if (true) continue; // TODO restore once Vladimir fixes
-     * for (int j = 0; j < keywords.length; ++j) { String[] values =
-     * Collator.getKeywordValues(keywords[j]); for (int k = 0; k <
-     * values.length; ++k) { // TODO -- for a full job, would do all
-     * combinations of different keywords! if (values[k].equals("standard"))
-     * continue; add(new ULocale(locales[i] + "@" + keywords[j] + "=" +
-     * values[k]), uniqueLocales); //ULocale other =
-     * Collator.getFunctionalEquivalent(keywords[j], locales[i], isAvailable); }
-     * } } for (int i = 0; i < extras.length; ++i) { add(new ULocale(extras[i]),
-     * uniqueLocales); } // items are now sorted by rules. So resort by locale
-     * Map toDo = new TreeMap(ULocaleComparator); for (Iterator it =
-     * uniqueLocales.keySet().iterator(); it.hasNext();) { Object rules =
-     * it.next(); Set s = (Set) uniqueLocales.get(rules); ULocale ulocale =
-     * (ULocale) s.iterator().next(); // get first one toDo.put(ulocale, s); }
-     * for (Iterator it = toDo.keySet().iterator(); it.hasNext();) { ULocale
-     * ulocale = (ULocale) it.next(); Set s = (Set) toDo.get(ulocale);
-     * generate(ulocale); }
-     */
-
-    /**
-     * add locale into list. Replace old if shorter
-     *
-     * @param locale
-     */
-    void add(String locale, Map<String, Set<String>> uniqueLocales) {
-        try {
-            RuleBasedCollator col = cldrCollations.getInstance(locale); // (RuleBasedCollator)
-            // Collator.getInstance(locale);
-            // for our purposes, separate locales if we are using different
-            // exemplars
-            String key = col.getRules() + "\uFFFF" + getExemplarSet(locale, 0, DraftStatus.unconfirmed);
-            Set<String> s = uniqueLocales.get(key);
-            if (s == null) {
-                s = new TreeSet<String>(ULocaleComparator);
-                uniqueLocales.put(key, s);
-            }
-            System.out.println("Adding " + locale);
-            s.add(locale);
-        } catch (Throwable e) { // skip
-            System.out.println("skipped " + locale);
-        }
-    }
-
-    /**
-     * Work-around
-     */
-    public UnicodeSet getExemplarSet(String locale, int options,
-        DraftStatus minimalDraftStatus) {
-        String n = locale.toString();
-        int pos = n.indexOf('@');
-        if (pos >= 0)
-            locale = n.substring(0, pos);
-        CLDRFile cldrFile = mainCldrFactory.make(locale.toString(), true,
-            minimalDraftStatus);
-        String v = cldrFile.getStringValue("//ldml/characters/exemplarCharacters");
-        UnicodeSet result = new UnicodeSet(v);
-        v = cldrFile
-            .getStringValue("//ldml/characters/exemplarCharacters[@type=\"auxiliary\"]");
-        if (v != null) {
-            result.addAll(new UnicodeSet(v));
-        }
-        if (options == 0)
-            result.closeOver(UnicodeSet.CASE);
-        return result;
-    }
-
-    public static final Comparator<Object> ULocaleComparator = new Comparator<Object>() {
-        public int compare(Object o1, Object o2) {
-            return o1.toString().compareTo(o2.toString());
-        }
-    };
-
-    /*
-     * public interface Equator { public boolean equals(Object o1, Object o2); }
-     */
-    @SuppressWarnings("rawtypes")
-    static boolean intersects(Collection a, Collection b) {
-        for (Iterator it = a.iterator(); it.hasNext();) {
-            if (b.contains(it.next()))
-                return true;
-        }
-        return false;
-    }
-
-    /*
-     * static Collection extract(Object x, Collection a, Equator e, Collection
-     * output) { List itemsToRemove = new ArrayList(); for (Iterator it =
-     * a.iterator(); it.hasNext();) { Object item = it.next(); if (e.equals(x,
-     * item)) { itemsToRemove.add(item); // have to do this because iterator may
-     * not allow output.add(item); } } a.removeAll(itemsToRemove); return
-     * output; }
-     */
-    class ResultsPrinter {
-        private Set<Map> listOfSettings = new LinkedHashSet<Map>();
-
-        private transient LinkedHashMap<String, String> settings = new LinkedHashMap<String, String>();
-
-        ResultsPrinter() {
-        }
-
-        ResultsPrinter(ResultsPrinter rpIncludeDraft, ResultsPrinter rpNoDraft) {
-            Set<Map> listOfSettings1 = rpIncludeDraft.getListOfSettings();
-            Set<Map> listOfSettings2 = rpNoDraft.getListOfSettings();
-            if (listOfSettings1.size() != listOfSettings2.size()) {
-                throw new InternalError("can't combine");
-            }
-            Iterator<Map> it1 = listOfSettings1.iterator();
-            Iterator<Map> it2 = listOfSettings2.iterator();
-            while (it1.hasNext()) {
-                Map settings1 = it1.next();
-                Map settings2 = it2.next();
-                if (settings1.equals(settings2)) {
-                    settings1.put("draft", "unconfirmed approved");
-                    addToListOfSettings(settings1);
-                } else {
-                    // they should only differ by result!
-                    settings1.put("draft", "unconfirmed");
-                    addToListOfSettings(settings1);
-                    settings2.put("draft", "approved");
-                    addToListOfSettings(settings2);
-                }
-            }
-        }
-
-        private void addToListOfSettings(Map settings1) {
-            for (Object key : settings1.keySet()) {
-                if (key == null || settings1.get(key) == null) {
-                    throw new IllegalArgumentException("null key or value in settings.");
-                }
-            }
-            listOfSettings.add(settings1);
-        }
-
-        void set(String name, String value) {
-            if (name == null || value == null) {
-                throw new IllegalArgumentException("null key or value in settings.");
-            }
-            settings.put(name, value);
-        }
-
-        void setResult(String result) {
-            if (result == null) {
-                throw new IllegalArgumentException("null key or value in settings.");
-            }
-            settings.put("result", result);
-            addToListOfSettings((Map) settings.clone());
-        }
-
-        void print() {
-            Map oldSettings = new TreeMap();
-            for (Iterator it2 = getListOfSettings().iterator(); it2.hasNext();) {
-                Map settings = (Map) it2.next();
-                String result = (String) settings.get("result");
-                out.print("   <result");
-                for (Iterator it = settings.keySet().iterator(); it.hasNext();) {
-                    Object key = it.next();
-                    if (key.equals("result"))
-                        continue;
-                    Object value = settings.get(key);
-                    if (!value.equals(oldSettings.get(key))) {
-                        out.print(" " + key + "='"
-                            + TransliteratorUtilities.toXML.transliterate(value.toString())
-                            + "'");
-                    }
-                }
-                out.println(">" + TransliteratorUtilities.toXML.transliterate(result)
-                    + "</result>");
-                oldSettings = settings;
-            }
-        }
-
-        public boolean equals(Object other) {
-            try {
-                ResultsPrinter that = (ResultsPrinter) other;
-                return getListOfSettings().equals(that.getListOfSettings());
-            } catch (Exception e) {
-                return false;
-            }
-        }
-
-        public int hashCode() {
-            throw new IllegalArgumentException();
-        }
-
-        /**
-         *
-         */
-
-        private void setListOfSettings(Set listOfSettings) {
-            this.listOfSettings = listOfSettings;
-        }
-
-        private Set<Map> getListOfSettings() {
-            return Collections.unmodifiableSet(listOfSettings);
-        }
-    }
-
-    abstract class DataShower {
-        abstract ResultsPrinter show(String first_locale, DraftStatus minimalDraftStatus);
-
-        ResultsPrinter show(String first) throws Exception {
-            ResultsPrinter rpIncludeDraft = show(first, DraftStatus.unconfirmed);
-            ResultsPrinter rpNoDraft = show(first, DraftStatus.approved);
-            return new ResultsPrinter(rpIncludeDraft, rpNoDraft);
-        }
-
-        abstract String getElement();
-    }
-
-    interface DataShower2 {
-        void show(ULocale first, Collection others) throws Exception;
-    }
-
-    private void generateItems(String locale, Collection<String> onlyLocales,
-        DataShower generator) throws Exception {
-        Set<String> sublocales = new TreeSet<String>(); // ULocaleComparator
-        sublocales.add(locale);
-        sublocales.addAll(parentToLocales.getAll(locale));
-        sublocales.retainAll(onlyLocales);
-        Map<String, ResultsPrinter> locale_results = new TreeMap<String, ResultsPrinter>(ULocaleComparator);
-        for (Iterator<String> it = sublocales.iterator(); it.hasNext();) {
-            String current = it.next();
-            locale_results.put(current, generator.show(current));
-        }
-        // do it this way so that the locales stay in order
-        Set<String> matchingLocales = new TreeSet<String>(ULocaleComparator);
-        while (sublocales.size() != 0) {
-            String first = sublocales.iterator().next();
-            ResultsPrinter r = locale_results.get(first);
-            for (Iterator<String> it = sublocales.iterator(); it.hasNext();) {
-                String other = it.next();
-                ResultsPrinter r2 = locale_results.get(other);
-                if (r2.equals(r))
-                    matchingLocales.add(other);
-            }
-            showLocales(generator.getElement(), matchingLocales);
-            r.print();
-            out.println("  </" + generator.getElement() + ">");
-            sublocales.removeAll(matchingLocales);
-            matchingLocales.clear();
-        }
-        //Comparator c;
-    }
-
-    public void showLocales(String elementName, Collection<String> others) {
-        // System.out.println(elementName + ": " + locale);
-        out.println("  <" + elementName + " ");
-        StringBuffer comment = new StringBuffer();
-        if (others != null && others.size() != 0) {
-            out.print("locales='");
-            boolean first = true;
-            for (Iterator<String> it = others.iterator(); it.hasNext();) {
-                if (first)
-                    first = false;
-                else {
-                    out.print(" ");
-                    comment.append("; ");
-                }
-                String loc = it.next();
-                out.print(loc);
-                comment.append(english.getName(loc) + " ["
-                    + getNativeName(loc) + "]");
-            }
-            out.print("'");
-        }
-        out.println(">");
-        out.println("<!-- "
-            + TransliteratorUtilities.toXML.transliterate(comment.toString())
-            + " -->");
-    }
-
-    private String getNativeName(String loc) {
-        int atPos = loc.indexOf('@');
-        String keywords = "";
-        if (atPos >= 0) {
-            keywords = loc.substring(atPos + 1);
-            loc = loc.substring(0, atPos);
-        }
-        return mainCldrFactory.make(loc, true).getName(loc) + "@" + keywords;
-    }
-
-    DataShower ZoneFieldShower = new DataShower() {
-
-        // Set zones = new
-        // TreeSet(sc.getAvailableCodes("tzid"));
-        List<String> zones = Arrays.asList(new String[] { "America/Los_Angeles",
-            "America/Argentina/Buenos_Aires", "America/Buenos_Aires",
-            "America/Havana", "Australia/ACT", "Australia/Sydney", "Europe/London",
-            "Europe/Moscow", "Etc/GMT+3" });
-
-        String[] perZoneSamples = { "Z", "ZZZZ", "z", "zzzz", "v", "vvvv", "V", "VVVV" };
-
-        String[] dates = { "2004-01-15T12:00:00Z", "2004-07-15T12:00:00Z" };
-
-        public ResultsPrinter show(String first, DraftStatus minimalDraftStatus) {
-            TimezoneFormatter tzf = new TimezoneFormatter(mainCldrFactory, first
-                .toString(), minimalDraftStatus);
-            ResultsPrinter rp = new ResultsPrinter();
-            if (!METAZONES_WORK) {
-                return rp;
-            }
-            // TODO Auto-generated
-            // method stub
-            ParsePosition parsePosition = new ParsePosition(0);
-            for (Iterator<String> it = zones.iterator(); it.hasNext();) {
-                String tzid = it.next();
-                rp.set("zone", tzid);
-                for (int j = 0; j < dates.length; ++j) {
-                    String date = dates[j];
-                    Date datetime;
-                    try {
-                        datetime = ICUServiceBuilder.isoDateParse(date);
-                    } catch (ParseException e1) {
-                        throw new IllegalArgumentException(e1);
-                    }
-                    rp.set("date", dates[j]);
-                    for (int i = 0; i < perZoneSamples.length; ++i) {
-                        try {
-                            String pattern = perZoneSamples[i];
-                            if (!METAZONES_WORK && (pattern.contains("z") || pattern.contains("V"))) {
-                                continue;
-                            }
-                            rp.set("field", pattern);
-                            String formatted = tzf.getFormattedZone(tzid, pattern, datetime.getTime(), false);
-                            parsePosition.setIndex(0);
-                            String parsed = tzf.parse(formatted, parsePosition);
-                            if (parsed == null) {
-                                // for
-                                // debugging
-                                formatted = tzf.getFormattedZone(tzid, pattern, datetime.getTime(), false);
-                                parsePosition.setIndex(0);
-                                parsed = tzf.parse(formatted, parsePosition);
-                            }
-                            rp.set("parse", parsed);
-                            rp.setResult(formatted);
-                        } catch (RuntimeException e) {
-                            throw (IllegalArgumentException) new IllegalArgumentException(
-                                "Failure in " + first).initCause(e);
-                        }
-                    }
-                }
-            }
-            return rp;
-            /*
-             * Date datetime = ICUServiceBuilder .isoDateParse (samples[j]);
-             * rp.set("input", ICUServiceBuilder .isoDateFormat (datetime));
-             */
-        }
-
-        public String getElement() {
-            return "zoneFields";
-        }
-    };
-
-    DataShower DateShower = new DataShower() {
-        public ResultsPrinter show(String locale, DraftStatus minimalDraftStatus) {
-            String[] samples = { "1900-01-31T00:00:00Z", "1909-02-28T00:00:01Z",
-                "1918-03-26T00:59:59Z", "1932-04-24T01:00:00Z",
-                "1945-05-20T01:00:01Z", "1952-06-18T11:59:59Z",
-                "1973-07-16T12:00:00Z", "1999-08-14T12:00:01Z",
-                "2000-09-12T22:59:59Z", "2001-10-08T23:00:00Z",
-                "2004-11-04T23:00:01Z", "2010-12-01T23:59:59Z", };
-            CLDRFile cldrFile = mainCldrFactory.make(locale.toString(), true,
-                minimalDraftStatus);
-            icuServiceBuilder.setCldrFile(cldrFile);
-            ResultsPrinter rp = new ResultsPrinter();
-            for (int j = 0; j < samples.length; ++j) {
-                Date datetime;
-                try {
-                    datetime = ICUServiceBuilder.isoDateParse(samples[j]);
-                } catch (ParseException e) {
-                    throw new IllegalArgumentException(e);
-                }
-                rp.set("input", ICUServiceBuilder.isoDateFormat(datetime));
-                for (int i = 0; i < ICUServiceBuilder.LIMIT_DATE_FORMAT_INDEX; ++i) {
-                    rp.set("dateType", ICUServiceBuilder.getDateNames(i));
-                    for (int k = 0; k < ICUServiceBuilder.LIMIT_DATE_FORMAT_INDEX; ++k) {
-                        if (i == 0 && k == 0)
-                            continue;
-                        DateFormat df = icuServiceBuilder.getDateFormat("gregorian", i, k);
-                        String pattern = ((SimpleDateFormat) df).toPattern();
-                        if (!METAZONES_WORK && (pattern.contains("z") || pattern.contains("V"))) {
-                            continue;
-                        }
-                        rp.set("timeType", ICUServiceBuilder.getDateNames(k));
-                        if (false && i == 2 && k == 0) {
-                            System.out.println("debug: date "
-                                + icuServiceBuilder.getDateNames(i) + ", time "
-                                + icuServiceBuilder.getDateNames(k) + " = "
-                                + df.format(datetime));
-                        }
-                        rp.setResult(df.format(datetime));
-                    }
-                }
-            }
-            return rp;
-        }
-
-        public String getElement() {
-            return "date";
-        }
-    };
-
-    DataShower NumberShower = new DataShower() {
-        public ResultsPrinter show(String locale, DraftStatus minimalDraftStatus) {
-            CLDRFile cldrFile = mainCldrFactory.make(locale.toString(), true,
-                minimalDraftStatus);
-            icuServiceBuilder.setCldrFile(cldrFile);
-
-            double[] samples = { 0, 0.01, -0.01, 1, -1, 123.456, -123.456, 123456.78,
-                -123456.78, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY,
-                Double.NaN };
-            ResultsPrinter rp = new ResultsPrinter();
-            for (int j = 0; j < samples.length; ++j) {
-                double sample = samples[j];
-                rp.set("input", String.valueOf(sample));
-                for (int i = 0; i < ICUServiceBuilder.LIMIT_NUMBER_INDEX; ++i) {
-                    rp.set("numberType", icuServiceBuilder.getNumberNames(i));
-                    DecimalFormat nf = icuServiceBuilder.getNumberFormat(i);
-                    String formatted = nf.format(sample);
-                    if (formatted.indexOf("NaNNaN") >= 0) {
-                        formatted = nf.format(sample); // for
-                        // debugging
-                    }
-                    rp.setResult(formatted);
-                }
-            }
-            return rp;
-        }
-
-        public String getElement() {
-            return "number";
-        }
-    };
-
-    // ========== COLLATION ==========
-
-    /*
-     * Equator CollationEquator = new Equator() {
-     *//**
-       * Must both be ULocales
-       */
-    /*
-     * public boolean equals(Object o1, Object o2) { try { ULocale loc1 =
-     * (ULocale) o1; ULocale loc2 = (ULocale) o2; if (loc1.equals(loc2)) return
-     * true; return
-     * cldrCollations.getInstance(loc1).equals(cldrCollations.getInstance
-     * (loc2)); } catch (RuntimeException e) { System.out.println("Failed on: "
-     * + o1 + " ;\t" + o2); throw e; } } };
-     */static ULocale zhHack = new ULocale("zh"); // FIXME
-    // hack
-    // for
-    // zh
-
-    DataShower CollationShower = new DataShower() {
-        public ResultsPrinter show(String locale, DraftStatus minimalDraftStatus) {
-            // if
-            // (locale.equals(zhHack))
-            // return;
-
-            Collator col = cldrCollations.getInstance(locale); // Collator.getInstance(locale);
-
-            UnicodeSet tailored = new UnicodeSet();
-            if (col != null) {
-                tailored = col.getTailoredSet();
-                if (new LanguageTagParser().set(locale).getLanguage().equals("zh")) {
-                    tailored.addAll(new UnicodeSet("[[a-z]-[v]]"));
-                    Log.logln("HACK for Pinyin");
-                }
-                tailored = createCaseClosure(tailored);
-                tailored = nfc(tailored);
-            } else {
-                System.out.println("No collation for: " + locale);
-                col = cldrCollations.getInstance("root");
-            }
-            // System.out.println(tailored.toPattern(true));
-
-            UnicodeSet exemplars = getExemplarSet(locale, UnicodeSet.CASE,
-                minimalDraftStatus);
-            // add all the exemplars
-
-            exemplars = createCaseClosure(exemplars);
-            exemplars = nfc(exemplars);
-            // System.out.println(exemplars.toPattern(true));
-            tailored.addAll(exemplars);
-            // UnicodeSet
-            // tailoredMinusHan = new
-            // UnicodeSet(tailored).removeAll(SKIP_COLLATION_SET);
-            if (!exemplars.containsAll(tailored)) {
-                // BagFormatter bf =
-                // new
-                // BagFormatter();
-                Log.logln("In Tailored, but not Exemplar; Locale: " + locale + "\t"
-                    + english.getName(locale));
-                Log.logln(new UnicodeSet(tailored).removeAll(exemplars)
-                    .toPattern(false));
-                // bf.(log,"tailored",
-                // tailored,
-                // "exemplars",
-                // exemplars);
-                Log.getLog().flush();
-            }
-            tailored.addAll(new UnicodeSet("[\\ .02{12}]"));
-            tailored.removeAll(SKIP_COLLATION_SET);
-
-            SortedBag bag = new SortedBag(col);
-            return doCollationResult(col, tailored, bag);
-        }
-
-        public String getElement() {
-            return "collation";
-        }
-    };
-
-    /*
-     * public void show(ULocale locale, Collection others) {
-     * showLocales("collation", others);
-     *
-     * Collator col = cldrCollations.getInstance(locale); //
-     * Collator.getInstance(locale);
-     *
-     * UnicodeSet tailored = col.getTailoredSet(); if
-     * (locale.getLanguage().equals("zh")) { tailored.addAll(new
-     * UnicodeSet("[[a-z]-[v]]")); log.println("HACK for Pinyin"); } tailored =
-     * createCaseClosure(tailored); tailored = nfc(tailored);
-     * //System.out.println(tailored.toPattern(true));
-     *
-     * UnicodeSet exemplars = getExemplarSet(locale, UnicodeSet.CASE); // add
-     * all the exemplars if (false) for (Iterator it = others.iterator();
-     * it.hasNext(); ) { exemplars.addAll(getExemplarSet((ULocale)it.next(),
-     * UnicodeSet.CASE)); }
-     *
-     * exemplars = createCaseClosure(exemplars); exemplars = nfc(exemplars);
-     * //System.out.println(exemplars.toPattern(true));
-     * tailored.addAll(exemplars); //UnicodeSet tailoredMinusHan = new
-     * UnicodeSet(tailored).removeAll(SKIP_COLLATION_SET); if
-     * (!exemplars.containsAll(tailored)) { //BagFormatter bf = new
-     * BagFormatter(); log.println("In Tailored, but not Exemplar; Locale: " +
-     * locale + "\t" + locale.getDisplayName()); log.println(new
-     * UnicodeSet(tailored).removeAll(exemplars).toPattern(false));
-     * //bf.(log,"tailored", tailored, "exemplars", exemplars); log.flush(); }
-     * tailored.addAll(new UnicodeSet("[\\ .02{12}]"));
-     * tailored.removeAll(SKIP_COLLATION_SET);
-     *
-     * SortedBag bag = new SortedBag(col); doCollationResult(col, tailored,
-     * bag); out.println("  </collation>"); }};
-     */
-    static final UnicodeSet SKIP_COLLATION_SET = new UnicodeSet(
-        "[[:script=han:][:script=hangul:]-[\u4e00-\u4eff \u9f00-\u9fff \uac00-\uacff \ud700-\ud7ff]]");
-
-    /**
-     * @param col
-     * @param tailored
-     * @param bag
-     */
-    private ResultsPrinter doCollationResult(Collator col, UnicodeSet tailored,
-        SortedBag bag) {
-        for (UnicodeSetIterator usi = new UnicodeSetIterator(tailored); usi.next();) {
-            String s = usi.getString();
-            bag.add('x' + s);
-            bag.add('X' + s);
-            bag.add('x' + s + 'x');
-        }
-        // out.println("   <set locale='" + locale + "'/>");
-        /*
-         * if (others != null) for (Iterator it = others.iterator();
-         * it.hasNext(); ) { ULocale uloc = (ULocale) it.next(); if
-         * (uloc.equals(locale)) continue; out.println("   <other locale='" +
-         * uloc + "'/>"); }
-         */
-        String last = "";
-        boolean needEquals = false;
-        StringBuffer tempResult = new StringBuffer(CldrUtility.LINE_SEPARATOR);
-        for (Iterator<String> it = bag.iterator(); it.hasNext();) {
-            String s = it.next();
-            if (col.compare(s, last) != 0) {
-                if (needEquals)
-                    tempResult.append(last).append(CldrUtility.LINE_SEPARATOR);
-                needEquals = false;
-                last = s;
-            } else {
-                needEquals = true;
-            }
-            tempResult.append(TransliteratorUtilities.toXML.transliterate(s)).append(
-                CldrUtility.LINE_SEPARATOR);
-        }
-        ResultsPrinter result = new ResultsPrinter();
-        result.setResult(tempResult.toString());
-        return result;
-    }
-
-    static public Set<String> getMatchingXMLFiles(String dir, String localeRegex) {
-        Matcher m = PatternCache.get(localeRegex).matcher("");
-        Set<String> s = new TreeSet<String>();
-        File[] files = new File(dir).listFiles();
-        for (int i = 0; i < files.length; ++i) {
-            String name = files[i].getName();
-            if (!name.endsWith(".xml"))
-                continue;
-            if (name.startsWith("supplementalData"))
-                continue;
-            String locale = name.substring(0, name.length() - 4); // drop .xml
-            if (!locale.equals("root") && !m.reset(locale).matches())
-                continue;
-            s.add(locale);
-        }
-        return s;
-    }
-
-    /*
-     * public static boolean isDraft(Node node) { for (; node.getNodeType() !=
-     * Node.DOCUMENT_NODE; node = node.getParentNode()){ NamedNodeMap attributes
-     * = node.getAttributes(); if (attributes == null) continue; for (int i = 0;
-     * i < attributes.getLength(); ++i) { Node attribute = attributes.item(i);
-     * if (attribute.getNodeName().equals("draft") &&
-     * attribute.getNodeValue().equals("true")) return true; } } return false; }
-     */
-    public static String getXPath(Node node) {
-        StringBuffer xpathFragment = new StringBuffer();
-        StringBuffer xpath = new StringBuffer();
-        for (; node.getNodeType() != Node.DOCUMENT_NODE; node = node
-            .getParentNode()) {
-            xpathFragment.setLength(0);
-            xpathFragment.append('/').append(node.getNodeName());
-            NamedNodeMap attributes = node.getAttributes();
-            if (attributes != null) {
-                for (int i = 0; i < attributes.getLength(); ++i) {
-                    Node attribute = attributes.item(i);
-                    xpathFragment.append("[@").append(attribute.getNodeName())
-                        .append('=').append(attribute.getNodeValue()).append(']');
-                }
-            }
-            xpath.insert(0, xpathFragment);
-        }
-        xpath.insert(0, '/');
-        return xpath.toString();
-    }
-
-    public static String replace(String source, String pattern, String replacement) {
-        // dumb code for now
-        for (int pos = source.indexOf(pattern, 0); pos >= 0; pos = source.indexOf(
-            pattern, pos + 1)) {
-            source = source.substring(0, pos) + replacement
-                + source.substring(pos + pattern.length());
-        }
-        return source;
-    }
-
-    public static interface Apply {
-        String apply(String source);
-    }
-
-    static UnicodeSet apply(UnicodeSet source, Apply apply) {
-        UnicodeSet target = new UnicodeSet();
-        for (UnicodeSetIterator usi = new UnicodeSetIterator(source); usi.next();) {
-            String s = usi.getString();
-            target.add(apply.apply(s));
-        }
-        return target;
-    }
-
-    static UnicodeSet nfc(UnicodeSet source) {
-        return apply(source, new Apply() {
-            public String apply(String source) {
-                return Normalizer.compose(source, false);
-            }
-        });
-    }
-
-    public static interface CloseCodePoint {
-        /**
-         * @param cp
-         *            code point to get closure for
-         * @param toAddTo
-         *            Unicode set for the closure
-         * @return toAddTo (for chaining)
-         */
-        UnicodeSet close(int cp, UnicodeSet toAddTo);
-    }
-
-    public static UnicodeSet createCaseClosure(UnicodeSet source) {
-        UnicodeSet target = new UnicodeSet();
-        for (UnicodeSetIterator usi = new UnicodeSetIterator(source); usi.next();) {
-            String s = usi.getString();
-            UnicodeSet temp = createClosure(s, CCCP);
-            if (temp == null)
-                target.add(s);
-            else
-                target.addAll(temp);
-        }
-        return target;
-    }
-
-    public static class UnicodeSetComparator implements Comparator<Object> {
-        UnicodeSetIterator ait = new UnicodeSetIterator();
-
-        UnicodeSetIterator bit = new UnicodeSetIterator();
-
-        public int compare(Object o1, Object o2) {
-            if (o1 == o2)
-                return 0;
-            if (o1 == null)
-                return -1;
-            if (o2 == null)
-                return 1;
-            UnicodeSet a = (UnicodeSet) o1;
-            UnicodeSet b = (UnicodeSet) o2;
-            if (a.size() != b.size()) {
-                return a.size() < b.size() ? -1 : 1;
-            }
-            ait.reset(a);
-            bit.reset(b);
-            while (ait.nextRange()) {
-                bit.nextRange();
-                if (ait.codepoint != bit.codepoint) {
-                    return ait.codepoint < bit.codepoint ? -1 : 1;
-                }
-                if (ait.codepoint == UnicodeSetIterator.IS_STRING) {
-                    int result = ait.string.compareTo(bit.string);
-                    if (result != 0)
-                        return result;
-                } else if (ait.codepointEnd != bit.codepointEnd) {
-                    return ait.codepointEnd < bit.codepointEnd ? -1 : 1;
-                }
-            }
-            return 0;
-        }
-    }
-
-    public static final CloseCodePoint CCCP = new CloseCodePoint() {
-        Locale locale = Locale.ENGLISH;
-
-        UnicodeSet NONE = new UnicodeSet();
-
-        UnicodeMap<UnicodeSet> map = new UnicodeMap<UnicodeSet>(); // new
-
-        // UnicodeSetComparator()
-
-        public UnicodeSet close(int cp, UnicodeSet toAddTo) {
-            UnicodeSet result = map.getValue(cp);
-            if (result == null) {
-                result = new UnicodeSet();
-                result.add(cp);
-                String s = UCharacter.toLowerCase(locale, UTF16.valueOf(cp));
-                result.add(s);
-                s = UCharacter.toUpperCase(locale, UTF16.valueOf(cp));
-                result.add(s);
-                s = UCharacter.toTitleCase(locale, UTF16.valueOf(cp), null);
-                result.add(s);
-                // special hack
-                if (result.contains("SS"))
-                    result.add("sS").add("ss");
-                if (result.size() == 1)
-                    result = NONE;
-                map.put(cp, result);
-            }
-            if (result != NONE)
-                toAddTo.addAll(result);
-            else
-                toAddTo.add(cp);
-            return toAddTo;
-        }
-    };
-
-    public static UnicodeSet createClosure(String source, CloseCodePoint closer) {
-        return createClosure(source, 0, closer);
-    }
-
-    public static UnicodeSet createClosure(String source, int position,
-        CloseCodePoint closer) {
-        UnicodeSet result = new UnicodeSet();
-        // if at end, return empty set
-        if (position >= source.length())
-            return result;
-        int cp = UTF16.charAt(source, position);
-        // if last character, return its set
-        int endPosition = position + UTF16.getCharCount(cp);
-        if (endPosition >= source.length())
-            return closer.close(cp, result);
-        // otherwise concatenate its set with the remainder
-        UnicodeSet remainder = createClosure(source, endPosition, closer);
-        return createAppend(closer.close(cp, result), remainder);
-    }
-
-    /**
-     * Produce the result of appending each element of this to each element of
-     * other. That is, [a{cd}] + [d{ef}] => [{ad}{aef}{cdd}{cdef}]
-     */
-    public static UnicodeSet createAppend(UnicodeSet a, UnicodeSet b) {
-        UnicodeSet target = new UnicodeSet();
-        for (UnicodeSetIterator usi = new UnicodeSetIterator(a); usi.next();) {
-            String s = usi.getString();
-            for (UnicodeSetIterator usi2 = new UnicodeSetIterator(b); usi2.next();) {
-                String s2 = usi2.getString();
-                target.add(s + s2);
-            }
-        }
-        return target;
-    }
-}
diff --git a/tools/java/org/unicode/cldr/tool/GenerateComparison.java b/tools/java/org/unicode/cldr/tool/GenerateComparison.java
index c81b900..2779139 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateComparison.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateComparison.java
@@ -16,11 +16,11 @@
 import org.unicode.cldr.util.Counter;
 import org.unicode.cldr.util.EscapingUtilities;
 import org.unicode.cldr.util.Factory;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.PrettyPath;
 import org.unicode.cldr.util.SimpleFactory;
 import org.unicode.cldr.util.Timer;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
 import com.ibm.icu.text.Collator;
@@ -36,6 +36,7 @@
     static class EnglishRowComparator implements Comparator<R2<String, String>> {
         private static Comparator<String> unicode = new UTF16.StringComparator(true, false, 0);
 
+        @Override
         public int compare(R2<String, String> arg0, R2<String, String> arg1) {
             int result = collator.compare(arg0.get0(), arg1.get0());
             if (result != 0) return result;
@@ -61,16 +62,19 @@
         format = NumberFormat.getNumberInstance();
         format.setGroupingUsed(true);
 
-        Counter<String> totalCounter = new Counter<String>();
+        Counter<String> totalCounter = new Counter<>();
 
         // Get the args
 
-        String oldDirectory = CldrUtility.getProperty("oldDirectory", new File(CLDRPaths.BASE_DIRECTORY,
-            "common/main").getCanonicalPath() + "/");
-        String newDirectory = CldrUtility.getProperty("newDirectory", new File(CLDRPaths.BASE_DIRECTORY,
-            "../cldr-release-1-7/common/main").getCanonicalPath() + "/");
-        String changesDirectory = CldrUtility.getProperty("changesDirectory", new File(CLDRPaths.CHART_DIRECTORY
-            + "/changes/").getCanonicalPath()
+        String oldDirectory = CldrUtility.getProperty("oldDirectory", PathUtilities.getNormalizedPathString(new File(
+                CLDRPaths.BASE_DIRECTORY,
+            "common/main")) + "/");
+        String newDirectory = CldrUtility.getProperty("newDirectory", PathUtilities.getNormalizedPathString(new File(
+                CLDRPaths.BASE_DIRECTORY,
+            "../cldr-release-1-7/common/main")) + "/");
+        String changesDirectory = CldrUtility.getProperty("changesDirectory", PathUtilities
+                .getNormalizedPathString(CLDRPaths.CHART_DIRECTORY
+            + "/changes/")
             + "/");
 
         String filter = CldrUtility.getProperty("localeFilter", ".*");
@@ -87,9 +91,9 @@
 
         Set<String> oldList = oldFactory.getAvailableLanguages();
         Set<String> newList = newFactory.getAvailableLanguages();
-        Set<String> unifiedList = new HashSet<String>(oldList);
+        Set<String> unifiedList = new HashSet<>(oldList);
         unifiedList.addAll(newList);
-        Set<R2<String, String>> pairs = new TreeSet<R2<String, String>>();
+        Set<R2<String, String>> pairs = new TreeSet<>();
         for (String code : unifiedList) {
             pairs.add(Row.of(english.getName(code), code));
         }
@@ -98,7 +102,7 @@
         int totalDifferences = 0;
         int differences = 0;
 
-        Set<R2<String, String>> indexInfo = new TreeSet<R2<String, String>>(ENG);
+        Set<R2<String, String>> indexInfo = new TreeSet<>(ENG);
 
         // iterate through those
         for (R2<String, String> pair : pairs) {
@@ -162,12 +166,12 @@
 
             Set<String> paths;
             try {
-                paths = new HashSet<String>();
-                CollectionUtilities.addAll(oldFile.iterator(), paths);
+                paths = new HashSet<>();
+                oldFile.forEach(paths::add);
                 if (oldList.contains(locale)) {
                     paths.addAll(oldFile.getExtraPaths());
                 }
-                CollectionUtilities.addAll(newFile.iterator(), paths);
+                newFile.forEach(paths::add);
                 if (newList.contains(locale)) {
                     paths.addAll(newFile.getExtraPaths());
                 }
@@ -206,7 +210,7 @@
                 .addColumn("Status").setSortPriority(4).setCellAttributes("class=\"{0}\"")
                 .addColumn("Old" + localeDisplayName).setCellAttributes("class='old'")
                 .addColumn("New" + localeDisplayName).setCellAttributes("class='new'");
-            Counter<String> fileCounter = new Counter<String>();
+            Counter<String> fileCounter = new Counter<>();
 
             for (String path : paths) {
                 if (path.contains("/alias") || path.contains("/identity")) {
diff --git a/tools/java/org/unicode/cldr/tool/GenerateCoverageLevels.java b/tools/java/org/unicode/cldr/tool/GenerateCoverageLevels.java
index 8a9c32c..8a2273d 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateCoverageLevels.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateCoverageLevels.java
@@ -98,7 +98,7 @@
         String locale = "en";
         Set<String> sorted = Builder.with(new TreeSet<String>()).addAll(cldrFile.iterator())
             .addAll(cldrFile.getExtraPaths()).get();
-        Set<R3<Level, String, Inheritance>> items = new TreeSet<R3<Level, String, Inheritance>>(new RowComparator());
+        Set<R3<Level, String, Inheritance>> items = new TreeSet<>(new RowComparator());
         for (String path : sorted) {
             if (path.endsWith("/alias")) {
                 continue;
@@ -121,6 +121,7 @@
 
     private static class RowComparator implements Comparator<R3<Level, String, Inheritance>> {
 
+        @Override
         public int compare(R3<Level, String, Inheritance> o1, R3<Level, String, Inheritance> o2) {
             int result = o1.get0().compareTo(o2.get0());
             if (result != 0) return result;
@@ -166,7 +167,7 @@
         Inheritance lastInheritance;
         int count = 0;
 
-        TreeMap<String, Relation<String, String>> differences = new TreeMap<String, Relation<String, String>>();
+        TreeMap<String, Relation<String, String>> differences = new TreeMap<>();
 
         R5<Level, Inheritance, Integer, String, TreeMap<String, Relation<String, String>>> add(
             R3<Level, String, Inheritance> next) {
@@ -192,7 +193,7 @@
             R5<Level, Inheritance, Integer, String, TreeMap<String, Relation<String, String>>> results = Row.of(
                 lastLevel, lastInheritance, count - 1, lastParts.toString().replace("/", "\u200B/"), differences);
             lastParts = nextParts;
-            differences = new TreeMap<String, Relation<String, String>>();
+            differences = new TreeMap<>();
             nextParts = new XPathParts();
             lastLevel = level;
             lastInheritance = inherited;
@@ -213,7 +214,7 @@
         }
 
         private XPathParts setNewParts(String path) {
-            XPathParts parts = XPathParts.getInstance(path); // not frozen, for removeElement
+            XPathParts parts = XPathParts.getFrozenInstance(path).cloneAsThawed(); // not frozen, for removeElement
             if (path.startsWith("//ldml/dates/timeZoneNames/metazone")
                 || path.startsWith("//ldml/dates/timeZoneNames/zone")) {
                 String element = nextParts.getElement(-1);
@@ -284,12 +285,12 @@
         decimal.setMaximumFractionDigits(2);
         percent.setMaximumFractionDigits(2);
         NumberFormat integer = NumberFormat.getIntegerInstance();
-        Set<String> localesFound = new TreeSet<String>();
+        Set<String> localesFound = new TreeSet<>();
 
         // get list of locales
         LocaleLevelData mapLevelData = new LocaleLevelData();
-        TreeSet<String> mainAvailableSource = new TreeSet<String>(cldrFactory.getAvailable());
-        TreeSet<String> mainAvailable = new TreeSet<String>();
+        TreeSet<String> mainAvailableSource = new TreeSet<>(cldrFactory.getAvailable());
+        TreeSet<String> mainAvailable = new TreeSet<>();
         Relation<String, String> localeToVariants = Relation.of(new HashMap(), HashSet.class);
         for (String locale : mainAvailableSource) {
             if (localeFilter.skipLocale(locale, localeToVariants)) {
@@ -299,8 +300,8 @@
         }
 
         System.out.println("gathering rbnf data");
-        Set<String> ordinals = new TreeSet<String>();
-        Set<String> spellout = new TreeSet<String>();
+        Set<String> ordinals = new TreeSet<>();
+        Set<String> spellout = new TreeSet<>();
         localesFound.clear();
         for (String locale : rbnfFactory.getAvailable()) {
             if (localeFilter.skipLocale(locale, null)) continue;
@@ -316,7 +317,7 @@
         }
 
         System.out.println("gathering plural data");
-        localesFound = new TreeSet<String>(supplementalData.getPluralLocales(PluralType.cardinal));
+        localesFound = new TreeSet<>(supplementalData.getPluralLocales(PluralType.cardinal));
         markData("Plurals", localesFound, mapLevelData, mainAvailable, PLURALS_LEVEL, PLURALS_WEIGHT,
             Row.of("//supplementalData/plurals", "UCA"));
 
@@ -481,6 +482,7 @@
             return result != LocaleStatus.BASE;
         }
 
+        @Override
         public LocaleStatus transform(String locale) {
             ltp.set(locale);
             if (checkAliases) {
@@ -503,6 +505,7 @@
     private static class BooleanLocaleFilter implements Transform<String, Boolean> {
         private final LocaleFilter filter = new LocaleFilter(false);
 
+        @Override
         public Boolean transform(String locale) {
             return filter.transform(locale) == LocaleStatus.BASE ? Boolean.TRUE : Boolean.FALSE;
         }
@@ -575,14 +578,14 @@
     }
 
     static class LevelData {
-        Counter<Level> missing = new Counter<Level>();
+        Counter<Level> missing = new Counter<>();
         Relation<Level, R2<String, String>> samples = Relation.of(new EnumMap<Level, Set<R2<String, String>>>(
             Level.class), LinkedHashSet.class);
-        Counter<Level> found = new Counter<Level>();
+        Counter<Level> found = new Counter<>();
     }
 
     static class LocaleLevelData {
-        Map<String, LevelData> locale_levelData = new TreeMap<String, LevelData>();
+        Map<String, LevelData> locale_levelData = new TreeMap<>();
 
         public LevelData get(String locale) {
             if (locale.equals("zh_Hans") || locale.equals("iw")) {
diff --git a/tools/java/org/unicode/cldr/tool/GenerateDayPeriods.java b/tools/java/org/unicode/cldr/tool/GenerateDayPeriods.java
index 2bc111f..801348c 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateDayPeriods.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateDayPeriods.java
@@ -28,7 +28,7 @@
     public static void main(String[] args) throws IOException {
         try (PrintWriter out = FileUtilities.openUTF8Writer(CLDRPaths.GEN_DIRECTORY + "/supplemental", "dayPeriods.xml")) {
             out.println(DtdType.supplementalData.header(MethodHandles.lookup().lookupClass())
-                + "\t<version number=\"$Revision" /* bypass SVN */ + "$\"/>");
+                + "\t<version number=\"$Revision" + "$\"/>");
             Factory factory = CLDRConfig.getInstance().getCldrFactory();
             for (Type type : Type.values()) {
                 out.println("\t<dayPeriodRuleSet"
diff --git a/tools/java/org/unicode/cldr/tool/GenerateDerivedAnnotations.java b/tools/java/org/unicode/cldr/tool/GenerateDerivedAnnotations.java
index 8c8416d..aaebeef 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateDerivedAnnotations.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateDerivedAnnotations.java
@@ -5,17 +5,24 @@
 import java.io.PrintWriter;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.TreeMap;
 import java.util.TreeSet;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.unicode.cldr.draft.FileUtilities;
 import org.unicode.cldr.test.DisplayAndInputProcessor;
+import org.unicode.cldr.tool.Option.Options;
+import org.unicode.cldr.tool.Option.Params;
 import org.unicode.cldr.util.Annotations;
 import org.unicode.cldr.util.Annotations.AnnotationSet;
 import org.unicode.cldr.util.CLDRConfig;
 import org.unicode.cldr.util.CLDRFile;
 import org.unicode.cldr.util.CLDRPaths;
+import org.unicode.cldr.util.CldrUtility;
 import org.unicode.cldr.util.Emoji;
 import org.unicode.cldr.util.Factory;
 import org.unicode.cldr.util.Level;
@@ -24,7 +31,10 @@
 import org.unicode.cldr.util.XPathParts.Comments.CommentType;
 
 import com.google.common.base.Joiner;
+import com.google.common.base.Splitter;
 import com.google.common.collect.ImmutableSortedSet;
+import com.ibm.icu.impl.Utility;
+import com.ibm.icu.impl.locale.XCldrStub.ImmutableMap;
 import com.ibm.icu.text.UnicodeSet;
 
 public class GenerateDerivedAnnotations {
@@ -38,24 +48,79 @@
         .add(Annotations.MISSING_MARKER)
         .freeze();
 
+    static Map<String,String> codepointToIsoCurrencyCode;
+    static {
+        final Splitter tabSplitter = Splitter.on('\t').trimResults();
+        Map<String,String> _codepointToIsoCurrencyCode = new TreeMap<>();
+        for (String line : FileUtilities.in(CldrUtility.class, "data/codepointToIsoCurrencyCode.tsv")) {
+            if (line.startsWith("#")) {
+                continue;
+            }
+            List<String> parts = tabSplitter.splitToList(line);
+            _codepointToIsoCurrencyCode.put(parts.get(0), parts.get(1));
+        }
+        codepointToIsoCurrencyCode = ImmutableMap.copyOf(_codepointToIsoCurrencyCode);
+    }
+
+    private enum MyOptions {
+        fileFilter(new Params().setHelp("filter files by dir/locale, eg: ^main/en$ or .*/en").setMatch(".*").setDefault(".*")),
+        missing(new Params().setHelp("only missing").setMatch("")),
+        ;
+
+        // BOILERPLATE TO COPY
+        final Option option;
+
+        private MyOptions(Params params) {
+            option = new Option(this, params);
+        }
+
+        private static Options myOptions = new Options();
+        static {
+            for (MyOptions option : MyOptions.values()) {
+                myOptions.add(option, option.option);
+            }
+        }
+
+        private static Set<String> parse(String[] args) {
+            return myOptions.parse(MyOptions.values()[0], args, true);
+        }
+    }
+
     public static void main(String[] args) throws IOException {
-        boolean missingOnly = args.length > 0 && args[0].equals("missing");
+        MyOptions.parse(args);
+
+        boolean missingOnly = MyOptions.missing.option.doesOccur();
         if (missingOnly) {
             System.out.println("With the 'missing' argument files will not be written, only the missing items will be written to the console");
         }
 
+        Matcher localeMatcher = Pattern.compile(MyOptions.fileFilter.option.getValue()).matcher("");
         Joiner BAR = Joiner.on(" | ");
         AnnotationSet enAnnotations = Annotations.getDataSet("en");
         CLDRFile english = CLDR_CONFIG.getEnglish();
 
-        UnicodeSet derivables = new UnicodeSet(Emoji.getAllRgiNoES()).removeAll(enAnnotations.keySet()).freeze();
+        UnicodeSet derivables = new UnicodeSet(Emoji.getAllRgiNoES())
+            .addAll(codepointToIsoCurrencyCode.keySet())
+            .removeAll(enAnnotations.keySet())
+            .freeze();
+
+        for (String d : derivables) {
+            if (d.contains("💏🏻")) {
+                System.out.println(d + "\t" + Utility.hex(d));
+            }
+        }
+
         Map<String, UnicodeSet> localeToFailures = new LinkedHashMap<>();
         Set<String> locales = ImmutableSortedSet.copyOf(Annotations.getAvailable());
+        final Factory cldrFactory = CLDRConfig.getInstance().getCldrFactory();
 
         for (String locale : locales) {
             if ("root".equals(locale)) {
                 continue;
             }
+            if (!localeMatcher.reset(locale).matches()) {
+                continue;
+            }
             UnicodeSet failures = new UnicodeSet(Emoji.getAllRgiNoES());
             localeToFailures.put(locale, failures);
 
@@ -69,6 +134,7 @@
                 continue;
             }
             CLDRFile target = new CLDRFile(new SimpleXMLSource(locale));
+            CLDRFile main = null;
             DisplayAndInputProcessor DAIP = new DisplayAndInputProcessor(target);
             Exception[] internalException = new Exception[1];
 
@@ -80,6 +146,20 @@
                     shortName = annotations.getShortName(derivable);
                 } catch (Exception e) {
                 }
+
+                if (shortName == null) {
+                    String currencyCode = codepointToIsoCurrencyCode.get(derivable);
+                    if (currencyCode != null) {
+                        if (main == null) {
+                            main = cldrFactory.make(locale, true);
+                        }
+                        shortName = main.getName(CLDRFile.CURRENCY_NAME, currencyCode);
+                        if (shortName.contentEquals(currencyCode)) {
+                            shortName = null; // don't want fallback raw code
+                        }
+                    }
+                }
+
                 if (shortName == null || SKIP.containsSome(shortName)) {
                     continue; // missing
                 }
@@ -106,10 +186,10 @@
             failures.freeze();
             if (!failures.isEmpty()) {
                 Level level = CLDR_CONFIG.getStandardCodes().getLocaleCoverageLevel(Organization.cldr, locale);
-                System.out.println("Failures\t" + locale 
+                System.out.println("Failures\t" + locale
                     + "\t" + level
                     + "\t" + english.getName(locale)
-                    + "\t" + failures.size() 
+                    + "\t" + failures.size()
                     + "\t" + failures.toPattern(false));
             }
             if (missingOnly) {
@@ -124,6 +204,9 @@
             if ("root".equals(locale)) {
                 continue;
             }
+            if (!localeMatcher.reset(locale).matches()) {
+                continue;
+            }
             CLDRFile cldrFileUnresolved = factory.make(locale, false);
             CLDRFile cldrFileResolved = factory.make(locale, true);
             Set<String> toRemove = new TreeSet<>(); // TreeSet just makes debugging easier
@@ -163,4 +246,5 @@
         }
         System.out.println("Be sure to run CLDRModify passes afterwards, and generate transformed locales (like de-CH).");
     }
+
 }
diff --git a/tools/java/org/unicode/cldr/tool/GenerateEnglishChanged.java b/tools/java/org/unicode/cldr/tool/GenerateEnglishChanged.java
index f51fba2..eaae45f 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateEnglishChanged.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateEnglishChanged.java
@@ -28,7 +28,7 @@
 public class GenerateEnglishChanged {
     private static final CLDRConfig CLDR_CONFIG = CLDRConfig.getInstance();
     private static final File TRUNK_DIRECTORY = new File(CLDRPaths.BASE_DIRECTORY);
-// TODO 
+// TODO
     private static final File RELEASE_DIRECTORY = new File(CLDRPaths.ARCHIVE_DIRECTORY + "cldr-" + ToolConstants.LAST_RELEASE_VERSION + ".0" + "/");
 private static final boolean TRIAL = false;
 
@@ -86,7 +86,7 @@
             }
         }
         System.out.println("Errors: " + errorCount);
-        
+
         if (TRIAL) {
             String multipath = "(";
 
@@ -96,7 +96,7 @@
                 for (List<String> list : entry.getValue()) {
                     // prepare the data
                     if (store == null) {
-                        store = new ArrayList<Set<String>>();
+                        store = new ArrayList<>();
                         for (int i = 0; i < list.size(); ++i) {
                             store.add(new LinkedHashSet<String>());
                         }
@@ -118,7 +118,7 @@
                     String compressed = MinimizeRegex.compressWith(attrValues, alphabet);// (attrValues, alphabet);
                     //String compressed = MinimizeRegex.simplePattern(attrValues);// (attrValues, alphabet);
                     path = path.replaceFirst(placeholder, "(" + compressed + ")");
-                }                
+                }
                 multipath += "|" + path;
 
 
diff --git a/tools/java/org/unicode/cldr/tool/GenerateEnums.java b/tools/java/org/unicode/cldr/tool/GenerateEnums.java
index bd22596..22aff39 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateEnums.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateEnums.java
@@ -33,7 +33,7 @@
 import org.unicode.cldr.util.Validity.Status;
 import org.unicode.cldr.util.XPathParts;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.collect.ImmutableMap;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Utility;
 import com.ibm.icu.text.Collator;
@@ -58,12 +58,12 @@
 //    private Factory supplementalFactory = Factory.make(
 //        CLDRPaths.SUPPLEMENTAL_DIRECTORY, ".*");
 
-    private Set<String> cldrCodes = new TreeSet<String>();
+    private Set<String> cldrCodes = new TreeSet<>();
 
     // private Map enum_canonical = new TreeMap();
-    private Map<String, String> enum_alpha3 = new TreeMap<String, String>();
+    private Map<String, String> enum_alpha3 = new TreeMap<>();
 
-    private Map<String, String> enum_UN = new TreeMap<String, String>();
+    private Map<String, String> enum_UN = new TreeMap<>();
 
     // private Map enum_FIPS10 = new TreeMap();
 
@@ -78,9 +78,9 @@
 
     private Relation<String, String> unlimitedCurrencyCodes;
 
-    private Set<String> scripts = new TreeSet<String>();
+    private Set<String> scripts = new TreeSet<>();
 
-    private Set<String> languages = new TreeSet<String>();
+    private Set<String> languages = new TreeSet<>();
 
     public static void main(String[] args) throws IOException {
         GenerateEnums gen = new GenerateEnums();
@@ -111,12 +111,12 @@
         showGeneratedCommentStart(CODE_INDENT);
         compareSets("currencies from sup.data", currencyCodes, "valid currencies",
             validCurrencyCodes);
-        Set<String> unused = new TreeSet<String>(validCurrencyCodes);
+        Set<String> unused = new TreeSet<>(validCurrencyCodes);
         unused.removeAll(currencyCodes);
         showCurrencies(currencyCodes);
         Log.println();
         showCurrencies(unused);
-        Map<String, String> sorted = new TreeMap<String, String>(Collator
+        Map<String, String> sorted = new TreeMap<>(Collator
             .getInstance(ULocale.ENGLISH));
         for (String code : validCurrencyCodes) {
             if (unused.contains(code) && !code.equals("CLF"))
@@ -169,7 +169,7 @@
         Log.println();
 
         showGeneratedCommentStart(CODE_INDENT);
-        Map<String, String> code_replacements = new TreeMap<String, String>();
+        Map<String, String> code_replacements = new TreeMap<>();
         int len = "  /** Arabic */                                        Arab,"
             .length();
         for (Iterator<String> it = scripts.iterator(); it.hasNext();) {
@@ -328,7 +328,7 @@
         }
 
         BufferedReader codes = CldrUtility.getUTF8Data("UnMacroRegions.txt");
-        Map<String, String> macro_name = new TreeMap<String, String>();
+        Map<String, String> macro_name = new TreeMap<>();
         while (true) {
             String line = codes.readLine();
             if (line == null)
@@ -348,7 +348,7 @@
         codes.close();
 //        String values = supplementalDataInfo.getValidityInfo().get("$territory").get1().trim();
         Map<Status, Set<String>> validRegions = Validity.getInstance().getStatusToCodes(LstrType.region);
-        Set<String> regions = new TreeSet<String>();
+        Set<String> regions = new TreeSet<>();
         regions.addAll(validRegions.get(Status.regular));
         regions.addAll(validRegions.get(Status.macroregion));
 //        String[] validTerritories = values.split("\\s+");
@@ -372,9 +372,9 @@
         }
         checkDuplicates(enum_UN);
         checkDuplicates(enum_alpha3);
-        Set<String> availableCodes = new TreeSet<String>(sc.getAvailableCodes("territory"));
+        Set<String> availableCodes = new TreeSet<>(sc.getAvailableCodes("territory"));
         compareSets("RFC 4646", availableCodes, "CLDR", cldrCodes);
-        Set<String> missing = new TreeSet<String>(availableCodes);
+        Set<String> missing = new TreeSet<>(availableCodes);
         missing.removeAll(cldrCodes);
         // don't care list: "003"
         // missing.remove("003");
@@ -391,7 +391,7 @@
                 + missing);
         }
 
-        Set<String> UNValues = new TreeSet<String>(enum_UN.values());
+        Set<String> UNValues = new TreeSet<>(enum_UN.values());
 
         for (Iterator<String> it = macro_name.keySet().iterator(); it.hasNext();) {
             Object key = it.next();
@@ -421,7 +421,7 @@
             new SimpleDateFormat("yyyy-MM"), new SimpleDateFormat("yyyy"), };
         Date today = new Date();
         Date longAgo = new Date(1000 - 1900, 1, 1);
-        currencyCodes = new TreeSet<String>();
+        currencyCodes = new TreeSet<>();
         unlimitedCurrencyCodes = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class, null);
         for (Iterator<String> it = supplementalData
             .iterator("//supplementalData/currencyData/region"); it.hasNext();) {
@@ -451,7 +451,7 @@
             currencyCodes.add(code);
         }
 
-        validCurrencyCodes = new TreeSet<String>();
+        validCurrencyCodes = new TreeSet<>();
         Set<String> bcp47CurrencyCodes = supplementalDataInfo.getBcp47Keys().getAll("cu");
         for (String code : bcp47CurrencyCodes) {
             validCurrencyCodes.add(code.toUpperCase());
@@ -506,7 +506,7 @@
         // addContains(region, temp);
         // recursiveContainment.put(region, temp);
         // }
-        Set<String> startingFromWorld = new TreeSet<String>();
+        Set<String> startingFromWorld = new TreeSet<>();
         addContains("001", startingFromWorld);
         compareSets("World", startingFromWorld, "CLDR", cldrCodes);
         // generateContains();
@@ -525,13 +525,13 @@
         }
     }
 
-    Map<String, List<String>> containment = new TreeMap<String, List<String>>();
+    Map<String, List<String>> containment = new TreeMap<>();
 
     // Map recursiveContainment = new TreeMap();
 
     private void addContains(String string, Set<String> startingFromWorld) {
         startingFromWorld.add(string);
-        List<String> contained = (List<String>) containment.get(string);
+        List<String> contained = containment.get(string);
         if (contained == null)
             return;
         for (Iterator<String> it = contained.iterator(); it.hasNext();) {
@@ -567,18 +567,17 @@
         }
     }
 
-    Set<String> corrigendum = new TreeSet<String>(Arrays.asList(new String[] { "QE", "833",
+    Set<String> corrigendum = new TreeSet<>(Arrays.asList(new String[] { "QE", "833",
         "830", "172" })); // 003, 419
 
-    private Map extraNames = CollectionUtilities.asMap(new String[][] {
-        { "BU", "Burma" }, { "TP", "East Timor" }, { "YU", "Yugoslavia" },
-        { "ZR", "Zaire" }, { "CD", "Congo (Kinshasa, Democratic Republic)" },
-        { "CI", "Ivory Coast (Cote d'Ivoire)" },
-        { "FM", "Micronesia (Federated States)" },
-        { "TL", "East Timor (Timor-Leste)" },
-        // {"155","Western Europe"},
-
-    });
+    private ImmutableMap<String, String> extraNames = ImmutableMap.<String, String>builder()
+        .put("BU", "Burma").put("TP", "East Timor").put("YU", "Yugoslavia")
+        .put("ZR", "Zaire").put("CD", "Congo (Kinshasa, Democratic Republic)")
+        .put("CI", "Ivory Coast (Cote d'Ivoire)")
+        .put("FM", "Micronesia (Federated States)")
+        .put("TL", "East Timor (Timor-Leste)")
+        // .put("155", "Western Europe")
+        .build();
 
     private Set<String> currencyCodes;
 
@@ -599,9 +598,9 @@
         System.out.println();
         showGeneratedCommentStart(CODE_INDENT);
 
-        Set<String> reordered = new TreeSet<String>(new LengthFirstComparator());
+        Set<String> reordered = new TreeSet<>(new LengthFirstComparator());
         reordered.addAll(enum_UN.keySet());
-        Map<String, String> code_replacements = new TreeMap<String, String>();
+        Map<String, String> code_replacements = new TreeMap<>();
         int len = "  /** Polynesia */                                    UN061,"
             .length();
         for (Iterator<String> it = reordered.iterator(); it.hasNext();) {
@@ -631,7 +630,7 @@
                     .getName("territory", territory));
             // remove all the ISO 639-3 until they are part of BCP 47
             // we need to remove in earlier pass so we have the count
-            Set<String> languages = new TreeSet<String>();
+            Set<String> languages = new TreeSet<>();
             for (String language : supplementalDataInfo
                 .getLanguagesForTerritoryWithPopulationData(territory)) {
                 if (Iso639Data.getSource(language) == Iso639Data.Source.ISO_639_3) {
@@ -668,7 +667,7 @@
         showGeneratedCommentStart(DATA_INDENT);
         // addInfo(RegionCode.US, 840, "USA", "US", "US/XX", ....); ... are
         // containees
-        reordered = new TreeSet<String>(new DeprecatedAndLengthFirstComparator("territory"));
+        reordered = new TreeSet<>(new DeprecatedAndLengthFirstComparator("territory"));
         reordered.addAll(enum_UN.keySet());
         for (Iterator<String> it = reordered.iterator(); it.hasNext();) {
             String region = it.next();
@@ -678,7 +677,7 @@
             // int un = Integer.parseInt((String) enum_UN.get(region)); // get around
             // dumb octal
             // syntax
-            String isoCode = (String) enum_alpha3.get(region);
+            String isoCode = enum_alpha3.get(region);
             if (isoCode == null)
                 continue;
             Log.println(DATA_INDENT + "add(" + quote(isoCode) + ", " + "RegionCode."
@@ -696,7 +695,7 @@
             // String cldrName = region.length() < 5 ? region : region.substring(2); // fix
             // UN
             // name
-            int un = Integer.parseInt((String) enum_UN.get(region), 10); // get
+            int un = Integer.parseInt(enum_UN.get(region), 10); // get
             // around
             // dumb
             // octal
@@ -716,7 +715,7 @@
             if (newCode != null)
                 continue;
 
-            int un = Integer.parseInt((String) enum_UN.get(region), 10); // get
+            int un = Integer.parseInt(enum_UN.get(region), 10); // get
             // around
             // dumb
             // octal
@@ -773,6 +772,7 @@
     }
 
     public final static class LengthFirstComparator implements Comparator<Object> {
+        @Override
         public int compare(Object a, Object b) {
             String as = a.toString();
             String bs = b.toString();
@@ -791,6 +791,7 @@
             this.type = type;
         }
 
+        @Override
         public int compare(Object a, Object b) {
             String as = a.toString();
             String bs = b.toString();
@@ -834,7 +835,7 @@
         XPathParts parts = XPathParts.getFrozenInstance(path);
         String replacement = parts.findAttributeValue("territoryAlias", "replacement");
         if (replacement == null) {
-            return "";            
+            return "";
         }
         return replacement;
     }
@@ -887,7 +888,7 @@
     private String getEnglishName(String codeName) {
         if (codeName.length() > 3)
             codeName = codeName.substring(2); // fix UN name
-        String name = (String) extraNames.get(codeName);
+        String name = extraNames.get(codeName);
         if (name != null)
             return name;
         name = english.getName(CLDRFile.TERRITORY_NAME, codeName);
@@ -902,7 +903,7 @@
         List<String> list = sc.getFullData("territory", codeName);
         if (list == null)
             return null;
-        return (String) list.get(0);
+        return list.get(0);
     }
 
     private String enumName(String codeName) {
diff --git a/tools/java/org/unicode/cldr/tool/GenerateG2xG2.java b/tools/java/org/unicode/cldr/tool/GenerateG2xG2.java
index 0f59716..e3fd328 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateG2xG2.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateG2xG2.java
@@ -47,16 +47,16 @@
         root = cldrFactory.make("root", true);
         StandardCodes sc = StandardCodes.make();
         Map<Organization, Map<String, Level>> type_code_value = sc.getLocaleTypes();
-        Set<String> sourceSet = new TreeSet<String>();
-        Set<String> targetLanguageSet = new TreeSet<String>();
+        Set<String> sourceSet = new TreeSet<>();
+        Set<String> targetLanguageSet = new TreeSet<>();
         targetLanguageSet.add("no");
         addPriority("G2", "nn");
         addPriority("G2", "no");
         targetLanguageSet.add("nn");
-        Set<String> targetScriptSet = new TreeSet<String>();
-        Set<String> targetRegionSet = new TreeSet<String>();
-        Set<String> targetTZSet = new TreeSet<String>();
-        Set<String> targetCurrencySet = new TreeSet<String>();
+        Set<String> targetScriptSet = new TreeSet<>();
+        Set<String> targetRegionSet = new TreeSet<>();
+        Set<String> targetTZSet = new TreeSet<>();
+        Set<String> targetCurrencySet = new TreeSet<>();
         for (Organization type : type_code_value.keySet()) {
             Map<String, Level> code_value = type_code_value.get(type);
             if (!type.equals(Organization.ibm)) continue;
@@ -85,7 +85,7 @@
         }
         // set the priorities for territories
         Map<String, List<String>> worldBankInfo = sc.getWorldBankInfo();
-        Set<String> euCodes = new HashSet<String>(Arrays.asList(new String[] { "AT", "BE", "CY", "CZ", "DK", "EE",
+        Set<String> euCodes = new HashSet<>(Arrays.asList(new String[] { "AT", "BE", "CY", "CZ", "DK", "EE",
             "FI", "FR", "DE", "GR", "HU", "IT", "LV", "LT", "LU", "MT", "NL", "PL", "PT", "SI", "ES", "SE", "GB" }));
         for (String countryCode : worldBankInfo.keySet()) {
             if (priorityMap.get(countryCode) == null) continue; // only use ones we already have: defaults G4
@@ -191,7 +191,7 @@
 
     private static boolean showLocales(int choice) throws Exception {
         ULocale desiredDisplayLocale = ULocale.ENGLISH;
-        Set<String> testSet = new TreeSet<String>();
+        Set<String> testSet = new TreeSet<>();
         StandardCodes sc = StandardCodes.make();
         {
             Set<String> countries = sc.getGoodAvailableCodes("territory");
@@ -224,11 +224,11 @@
         } else {
             boolean USE_3066bis = choice == 2;
             // produce random list of RFC3066 language tags
-            Set<String> grandfathered = sc.getAvailableCodes("grandfathered");
-            List<String> language_subtags = new ArrayList<String>(sc.getGoodAvailableCodes("language"));
-            List<String> script_subtags = new ArrayList<String>(sc.getGoodAvailableCodes("script"));
-            List<String> region_subtags = new ArrayList<String>(sc.getGoodAvailableCodes("territory"));
-            for (String possibility : grandfathered) {
+            Set<String> legacy = sc.getAvailableCodes("legacy");
+            List<String> language_subtags = new ArrayList<>(sc.getGoodAvailableCodes("language"));
+            List<String> script_subtags = new ArrayList<>(sc.getGoodAvailableCodes("script"));
+            List<String> region_subtags = new ArrayList<>(sc.getGoodAvailableCodes("territory"));
+            for (String possibility : legacy) {
                 System.out.println(possibility);
                 if (new ULocale(possibility).getScript().length() != 0) {
                     System.out.println("\tAdding");
@@ -271,12 +271,12 @@
 
     private static void showExample(RuleBasedCollator col) {
         String samples = "a A b B \u5416 \u93CA \u516b \u7C3F";
-        Set<String> s = new TreeSet<String>(col);
+        Set<String> s = new TreeSet<>(col);
         s.addAll(Arrays.asList(samples.split(" ")));
         System.out.println(com.ibm.icu.impl.Utility.escape(s.toString()));
     }
 
-    static Map<String, String> priorityMap = new TreeMap<String, String>();
+    static Map<String, String> priorityMap = new TreeMap<>();
 
     static void addPriority(String priority, String code) {
         if (code.length() == 0) return;
@@ -290,7 +290,7 @@
         int missingCount;
     }
 
-    static Map<String, Totals> totalMap = new TreeMap<String, Totals>();
+    static Map<String, Totals> totalMap = new TreeMap<>();
 
     static void checkItems(PrintWriter pw, String sourceLocale, CLDRFile sourceData, int type, Set<String> targetItemSet) {
         for (Iterator<String> it2 = targetItemSet.iterator(); it2.hasNext();) {
@@ -369,7 +369,7 @@
 
     private static List<String> getCurrency(String territory) {
         if (territory_currency == null) {
-            territory_currency = new TreeMap<String, List<String>>();
+            territory_currency = new TreeMap<>();
             Factory cldrFactory = Factory.make(CLDRPaths.MAIN_DIRECTORY, ".*");
             CLDRFile supp = cldrFactory.make(CLDRFile.SUPPLEMENTAL_NAME, false);
             for (String path : supp) {
@@ -388,7 +388,7 @@
                         }
                         List<String> info = territory_currency.get(iso3166);
                         if (info == null) {
-                            territory_currency.put(iso3166, info = new ArrayList<String>());
+                            territory_currency.put(iso3166, info = new ArrayList<>());
                         }
                         info.add(iso4217);
                     }
diff --git a/tools/java/org/unicode/cldr/tool/GenerateIndexCharacters.java b/tools/java/org/unicode/cldr/tool/GenerateIndexCharacters.java
index 1a53cf8..2250d8e 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateIndexCharacters.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateIndexCharacters.java
@@ -39,7 +39,7 @@
         ULocale uLocale = new ULocale(locale);
         Collator collator = Collator.getInstance(uLocale);
         collator.setStrength(Collator.PRIMARY); // TODO: ought to build the collator from CLDR instead of from ICU.
-        AlphabeticIndex<String> index = new AlphabeticIndex<String>(uLocale);
+        AlphabeticIndex<String> index = new AlphabeticIndex<>(uLocale);
         index.clearRecords();
         UnicodeSet indexLabels = cFile.getExemplarSet("index", WinningChoice.WINNING);
         if (indexLabels != null && indexLabels.size() > 0) {
diff --git a/tools/java/org/unicode/cldr/tool/GenerateItemCounts.java b/tools/java/org/unicode/cldr/tool/GenerateItemCounts.java
index 845db6c..6ebae34 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateItemCounts.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateItemCounts.java
@@ -32,6 +32,7 @@
 import org.unicode.cldr.util.DtdData.Element;
 import org.unicode.cldr.util.DtdType;
 import org.unicode.cldr.util.PathStarrer;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.PatternCache;
 import org.unicode.cldr.util.RegexUtilities;
 import org.unicode.cldr.util.SupplementalDataInfo;
@@ -42,8 +43,8 @@
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
 
+import com.google.common.base.Joiner;
 import com.google.common.base.Splitter;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
@@ -54,7 +55,7 @@
     private static final SupplementalDataInfo SUPPLEMENTAL_DATA_INFO = CLDRConfig.getInstance().getSupplementalDataInfo();
     private static final boolean SKIP_ORDERING = true;
     private static final String OUT_DIRECTORY = CLDRPaths.GEN_DIRECTORY + "/itemcount/"; // CldrUtility.MAIN_DIRECTORY;
-    private Map<String, List<StackTraceElement>> cantRead = new TreeMap<String, List<StackTraceElement>>();
+    private Map<String, List<StackTraceElement>> cantRead = new TreeMap<>();
     static {
         System.err.println("Probably obsolete tool");
     }
@@ -115,7 +116,7 @@
                     : CLDRPaths.ARCHIVE_DIRECTORY + "/" + dir;
                 boolean isFinal = dir == DIRECTORIES[DIRECTORIES.length - 1];
 
-                String fulldir = new File(pathname).getCanonicalPath();
+                String fulldir = PathUtilities.getNormalizedPathString(pathname);
                 String prefix = (MyOptions.rawfilter.option.doesOccur() ? "filtered_" : "");
                 String fileKey = dir.replace("/", "_");
                 try (
@@ -280,7 +281,7 @@
                     + "\t" + noOccur);
             }
             out.println("\nERRORS/WARNINGS");
-            out.println(CollectionUtilities.join(errors, "\n"));
+            out.println(Joiner.on("\n").join(errors));
         }
     }
 
@@ -288,7 +289,7 @@
         Relation<String, String> elementPathToAttributes = Relation.of(new TreeMap<String, Set<String>>(),
             TreeSet.class);
         final PathStarrer PATH_STARRER = new PathStarrer().setSubstitutionPattern("*");
-        final Set<String> STARRED_PATHS = new TreeSet<String>();
+        final Set<String> STARRED_PATHS = new TreeSet<>();
         StringBuilder elementPath = new StringBuilder();
 
         public void add(String path) {
@@ -330,10 +331,10 @@
     static Pattern prefix = PatternCache.get("([^/]+/[^/]+)(.*)");
 
     static class Delta {
-        Counter<String> newCount = new Counter<String>();
-        Counter<String> deletedCount = new Counter<String>();
-        Counter<String> changedCount = new Counter<String>();
-        Counter<String> unchangedCount = new Counter<String>();
+        Counter<String> newCount = new Counter<>();
+        Counter<String> deletedCount = new Counter<>();
+        Counter<String> changedCount = new Counter<>();
+        Counter<String> unchangedCount = new Counter<>();
 
         void print(PrintWriter changesSummary, Set<String> prefixes) {
             changesSummary.println("Total"
@@ -423,15 +424,15 @@
         "([a-z]{2,3})(?:[_-]([A-Z][a-z]{3}))?(?:[_-]([a-zA-Z0-9]{2,3}))?([_-][a-zA-Z0-9]{1,8})*");
 
     public static void doSummary() throws IOException {
-        Map<String, R4<Counter<String>, Counter<String>, Counter<String>, Counter<String>>> key_release_count = new TreeMap<String, R4<Counter<String>, Counter<String>, Counter<String>, Counter<String>>>();
+        Map<String, R4<Counter<String>, Counter<String>, Counter<String>, Counter<String>>> key_release_count = new TreeMap<>();
         Matcher countryLocale = LOCALE_PATTERN.matcher("");
-        List<String> releases = new ArrayList<String>();
+        List<String> releases = new ArrayList<>();
         Pattern releaseNumber = PatternCache.get("count_(?:.*-(\\d+(\\.\\d+)*)|trunk)\\.txt");
         // int releaseCount = 1;
         Relation<String, String> release_keys = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
         Relation<String, String> localesToPaths = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
-        Set<String> writtenLanguages = new TreeSet<String>();
-        Set<String> countries = new TreeSet<String>();
+        Set<String> writtenLanguages = new TreeSet<>();
+        Set<String> countries = new TreeSet<>();
 
         File[] listFiles = new File(OUT_DIRECTORY).listFiles();
         // find the most recent version
@@ -471,7 +472,7 @@
             VersionInfo vi = VersionInfo.getInstance(releaseNum);
             boolean captureData = vi.equals(mostRecentVersion);
             releases.add(releaseNum);
-            BufferedReader in = FileUtilities.openUTF8Reader("", subdir.getCanonicalPath());
+            BufferedReader in = FileUtilities.openUTF8Reader("", PathUtilities.getNormalizedPathString(subdir));
             while (true) {
                 String line = in.readLine();
                 if (line == null) break;
@@ -563,7 +564,7 @@
         summary2.println("#Countries:\t" + countries.size());
         summary2.println("#Locales:\t" + localesToPaths.size());
         for (Entry<String, Set<String>> entry : localesToPaths.keyValuesSet()) {
-            summary2.println(entry.getKey() + "\t" + CollectionUtilities.join(entry.getValue(), "\t"));
+            summary2.println(entry.getKey() + "\t" + Joiner.on("\t").join(entry.getValue()));
         }
         summary2.close();
     }
@@ -676,7 +677,10 @@
         }
 
         private String fixKeyPath(String path) {
-            XPathParts parts = XPathParts.getInstance(path); // not frozen, for addAttribute
+            XPathParts parts = XPathParts.getFrozenInstance(path);
+            if (!SKIP_ORDERING) {
+                parts = parts.cloneAsThawed();
+            }
             for (int i = 0; i < parts.size(); ++i) {
                 String element = parts.getElement(i);
                 if (!SKIP_ORDERING) {
@@ -724,16 +728,19 @@
     }
 
     static class MyErrorHandler implements ErrorHandler {
+        @Override
         public void error(SAXParseException exception) throws SAXException {
             System.out.println("\nerror: " + XMLFileReader.showSAX(exception));
             throw exception;
         }
 
+        @Override
         public void fatalError(SAXParseException exception) throws SAXException {
             System.out.println("\nfatalError: " + XMLFileReader.showSAX(exception));
             throw exception;
         }
 
+        @Override
         public void warning(SAXParseException exception) throws SAXException {
             System.out.println("\nwarning: " + XMLFileReader.showSAX(exception));
             throw exception;
diff --git a/tools/java/org/unicode/cldr/tool/GenerateKaraList.java b/tools/java/org/unicode/cldr/tool/GenerateKaraList.java
index f06f721..a3e17e9 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateKaraList.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateKaraList.java
@@ -97,7 +97,7 @@
     private static void printCodes(PrintWriter log, Set<String> locales, Set<String> availableCodes, int choice) {
         boolean hasAbbreviation = choice == CLDRFile.CURRENCY_NAME;
         // boolean skipDraft = true;
-        Set<String> errors = new HashSet<String>();
+        Set<String> errors = new HashSet<>();
         for (Iterator<String> it = availableCodes.iterator(); it.hasNext();) {
             String id = it.next();
             String ename = english.getName(choice, id);
diff --git a/tools/java/org/unicode/cldr/tool/GenerateLanguageContainment.java b/tools/java/org/unicode/cldr/tool/GenerateLanguageContainment.java
index 73bcd84..44fe547 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateLanguageContainment.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateLanguageContainment.java
@@ -33,6 +33,7 @@
 import org.unicode.cldr.util.Validity;
 import org.unicode.cldr.util.Validity.Status;
 
+import com.google.common.base.Joiner;
 import com.google.common.base.Splitter;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableMultimap;
@@ -42,7 +43,6 @@
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Multimaps;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Row.R2;
 import com.ibm.icu.util.ICUUncheckedIOException;
 
@@ -242,7 +242,7 @@
         System.out.println("Checking " + "he" + "\t" + Containment.getAllDirected(childToParent, "he"));
 
         PrintWriter out = new PrintWriter(System.out);
-        print(out, parentToChild, new ArrayList<String>(Arrays.asList("mul")));
+        print(out, parentToChild, new ArrayList<>(Arrays.asList("mul")));
         System.out.println(out);
         SimpleXMLSource xmlSource = new SimpleXMLSource("languageGroup");
         xmlSource.setNonInheriting(true); // should be gotten from DtdType...
@@ -291,10 +291,8 @@
         if (base.equals("und")) {
             // skip, no good info
         } else {
-            newFile.add("//" + DtdType.supplementalData + "/languageGroups/languageGroup[@parent=\"" + base + "\"]", CollectionUtilities.join(children, " "));
-//            System.out.println("\t<languageGroup parent='" 
-//                + base + "'>" 
-//                + CollectionUtilities.join(children, " ") + "</languageGroup>");
+            newFile.add("//" + DtdType.supplementalData + "/languageGroups/languageGroup[@parent=\"" + base + "\"]",
+                Joiner.on(" ").join(children));
         }
         for (String child : children) {
             printXML(newFile, parentToChild, child);
@@ -390,9 +388,9 @@
 //        }
 //        String last = chain.get(0);
 //        for (int i = 1; i < chain.size(); ++i) {
-//            String item = chain.get(i); 
+//            String item = chain.get(i);
 //            if (!COLLECTIONS.contains(item)) {
-//                chain.set(i, item.equals("zh") ? "zhx" : ""); 
+//                chain.set(i, item.equals("zh") ? "zhx" : "");
 //                DROPPED_PARENTS_TO_CHILDREN.put(item, last);
 //            } else {
 //                last = item;
diff --git a/tools/java/org/unicode/cldr/tool/GenerateLanguageData.java b/tools/java/org/unicode/cldr/tool/GenerateLanguageData.java
index 25013c0..1cadb08 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateLanguageData.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateLanguageData.java
@@ -53,7 +53,7 @@
             Set<String> all = Iso639Data.getAvailable();
             newEn.addComment("//ldml", "by " +
                 GenerateLanguageData.class.getSimpleName() +
-                " from Iso639Data v" + iso639Data.getVersion() + " on " + new java.util.Date()
+                " from Iso639Data v" + Iso639Data.getVersion() + " on " + new java.util.Date()
                 + " - " + all.size() + " codes.",
                 CommentType.PREBLOCK);
             System.out.println(all.size() + " ISO 639 codes to process");
@@ -81,7 +81,7 @@
         }
 
         // Set<String> languageRegistryCodes = sc.getAvailableCodes("language");
-        Set<String> languageCodes = new TreeSet<String>(Iso639Data.getAvailable());
+        Set<String> languageCodes = new TreeSet<>(Iso639Data.getAvailable());
 
         System.out.println("Macrolanguages");
         for (String languageCode : languageCodes) {
@@ -96,7 +96,7 @@
             // //+ "\t" + iso639Data.getType(languageCode)
             // + "\t" + Utility.join(iso639Data.getNames(languageCode),"; ")
             // );
-            for (String suffix : new TreeSet<String>(suffixes)) {
+            for (String suffix : new TreeSet<>(suffixes)) {
                 System.out.println(
                     languageCode
                         + "\t" + (bcp47languages.contains(languageCode) ? "4646" : "new")
diff --git a/tools/java/org/unicode/cldr/tool/GenerateLanguageMatches.java b/tools/java/org/unicode/cldr/tool/GenerateLanguageMatches.java
index 5ad0293..5c019b5 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateLanguageMatches.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateLanguageMatches.java
@@ -66,7 +66,7 @@
             }
 
             // Filter out what is in LanguageInfo already
-            
+
             if (desiredToSupported.containsEntry(locale, macroLanguage)) {
                 continue;
             }
@@ -97,6 +97,7 @@
     }
 
     static final Transform<String, String> MENU = new Transform<String, String>() {
+        @Override
         public String transform(@SuppressWarnings("unused") String source) {
             return "menu";
         }
diff --git a/tools/java/org/unicode/cldr/tool/GenerateLikelySubtagTests.java b/tools/java/org/unicode/cldr/tool/GenerateLikelySubtagTests.java
index 469d0fa..bca5d40 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateLikelySubtagTests.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateLikelySubtagTests.java
@@ -39,7 +39,7 @@
         if (OUTPUT_STYLE == OutputStyle.C) {
             writeTestLine2("FROM", "ADD-LIKELY", "REMOVE-LIKELY");
         }
-        Set<String> testedAlready = new HashSet<String>();
+        Set<String> testedAlready = new HashSet<>();
 
         for (final String from : likelySubtags.keySet()) {
             final String to = likelySubtags.get(from);
diff --git a/tools/java/org/unicode/cldr/tool/GenerateLocaleIDTestData.java b/tools/java/org/unicode/cldr/tool/GenerateLocaleIDTestData.java
new file mode 100644
index 0000000..51dc383
--- /dev/null
+++ b/tools/java/org/unicode/cldr/tool/GenerateLocaleIDTestData.java
@@ -0,0 +1,47 @@
+package org.unicode.cldr.tool;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.unicode.cldr.util.CLDRPaths;
+import org.unicode.cldr.util.CldrUtility;
+import org.unicode.cldr.util.LsrvCanonicalizer;
+import org.unicode.cldr.util.LsrvCanonicalizer.TestDataTypes;
+import org.unicode.cldr.util.StandardCodes.LstrType;
+import org.unicode.cldr.util.TempPrintWriter;
+
+public class GenerateLocaleIDTestData {
+    static final LsrvCanonicalizer rrs = LsrvCanonicalizer.getInstance();
+
+    public static void main(String[] args) throws IOException {
+        try (TempPrintWriter pw = TempPrintWriter.openUTF8Writer(CLDRPaths.TEST_DATA + "localeIdentifiers", "localeCanonicalization.txt")) {
+            pw.println("# Test data for locale identifier canonicalization");
+            pw.println(CldrUtility.getCopyrightString("#  "));
+            pw.println("#\n"
+                + "# Format:\n"
+                + "# <source locale identifier>\t;\t<expected canonicalized locale identifier>\n"
+                + "#\n"
+                + "# The data lines are divided into 4 sets:\n"
+                + "#   " + LsrvCanonicalizer.TestDataTypes.explicit + ":    a short list of explicit test cases.\n"
+                + "#   " + LsrvCanonicalizer.TestDataTypes.fromAliases + ": test cases generated from the alias data.\n"
+                + "#   " + LsrvCanonicalizer.TestDataTypes.decanonicalized + ": test cases generated by reversing the normalization process.\n"
+                + "#   " + LsrvCanonicalizer.TestDataTypes.withIrrelevants + ": test cases generated from the others by adding irrelevant fields where possible,\n"
+                + "#                           to ensure that the canonicalization implementation is not sensitive to irrelevant fields. These include:\n"
+                + "#     Language: " + rrs.getIrrelevantField(LstrType.language) + "\n"
+                + "#     Script:   " + rrs.getIrrelevantField(LstrType.script) + "\n"
+                + "#     Region:   " + rrs.getIrrelevantField(LstrType.region) + "\n"
+                + "#     Variant:  " + rrs.getIrrelevantField(LstrType.variant) + "\n"
+                + "######\n\n");
+            for (Entry<TestDataTypes, Map<String, String>> mainEntry : rrs.getTestData(null).entrySet()) {
+                TestDataTypes type = mainEntry.getKey();
+                pw.println("\n# " + type + "\n");
+                for (Entry<String, String> entry : mainEntry.getValue().entrySet()) {
+                    String toTest = entry.getKey();
+                    String expected = entry.getValue();
+                    pw.println(toTest + "\t;\t" + expected);
+                }
+            }
+        }
+    }
+}
diff --git a/tools/java/org/unicode/cldr/tool/GenerateMaximalLocales.java b/tools/java/org/unicode/cldr/tool/GenerateMaximalLocales.java
index 9cf9cb8..3b5441d 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateMaximalLocales.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateMaximalLocales.java
@@ -22,6 +22,7 @@
 import org.unicode.cldr.draft.ScriptMetadata;
 import org.unicode.cldr.draft.ScriptMetadata.Info;
 import org.unicode.cldr.util.Builder;
+import org.unicode.cldr.util.CLDRConfig;
 import org.unicode.cldr.util.CLDRFile;
 import org.unicode.cldr.util.CLDRLocale;
 import org.unicode.cldr.util.CLDRPaths;
@@ -34,6 +35,7 @@
 import org.unicode.cldr.util.LanguageTagParser;
 import org.unicode.cldr.util.LocaleIDParser;
 import org.unicode.cldr.util.Log;
+import org.unicode.cldr.util.Organization;
 import org.unicode.cldr.util.PatternCache;
 import org.unicode.cldr.util.SimpleFactory;
 import org.unicode.cldr.util.StandardCodes;
@@ -43,9 +45,9 @@
 import org.unicode.cldr.util.SupplementalDataInfo.OfficialStatus;
 import org.unicode.cldr.util.SupplementalDataInfo.PopulationData;
 
+import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
@@ -79,7 +81,7 @@
 
     enum OutputStyle {
         PLAINTEXT, C, C_ALT, XML
-    };
+    }
 
     private static OutputStyle OUTPUT_STYLE = OutputStyle.valueOf(CldrUtility.getProperty("OutputStyle", "XML", "XML")
         .toUpperCase());
@@ -98,6 +100,7 @@
         new File(CLDRPaths.EXEMPLARS_DIRECTORY) };
 
     private static Factory factory = SimpleFactory.make(list, ".*");
+    private static Factory mainFactory = CLDRConfig.getInstance().getCldrFactory();
     private static SupplementalDataInfo supplementalData = SupplementalDataInfo
         .getInstance(CLDRPaths.SUPPLEMENTAL_DIRECTORY);
     private static StandardCodes standardCodes = StandardCodes.make();
@@ -119,7 +122,7 @@
     private static final ImmutableSet<String> deprecatedISONotInLST = ImmutableSet.of("scc", "scr");
 
     /**
-     * This is the simplest way to override, by supplying the max value. 
+     * This is the simplest way to override, by supplying the max value.
      * It gets a very low weight, so doesn't override any stronger value.
      */
     private static final String[] MAX_ADDITIONS = new String[] {
@@ -284,6 +287,7 @@
         { "mis_Medf", "mis_Medf_NG" },
 
         { "ku_Yezi", "ku_Yezi_GE" },
+        { "und_EU", "en_Latn_IE" },
     });
 
     /**
@@ -306,7 +310,7 @@
         { "und", "Latn" }, // Ultimate fallback
     };
 
-    private static Map<String, String> localeToScriptCache = new TreeMap<String, String>();
+    private static Map<String, String> localeToScriptCache = new TreeMap<>();
     static {
         for (String language : standardCodes.getAvailableCodes("language")) {
             Map<String, String> info = standardCodes.getLangData("language", language);
@@ -338,7 +342,7 @@
 
         printDefaultLanguagesAndScripts();
 
-        Map<String, String> toMaximized = new TreeMap<String, String>();
+        Map<String, String> toMaximized = new TreeMap<>();
 
         tryDifferentAlgorithm(toMaximized);
 
@@ -366,7 +370,7 @@
         Map<String, String> oldLikely = SupplementalDataInfo.getInstance().getLikelySubtags();
         Set<String> changes = compareMapsAndFixNew("*WARNING* Likely Subtags: ", oldLikely, toMaximized, "ms_Arab",
             "ms_Arab_ID");
-        System.out.println(CollectionUtilities.join(changes, "\n"));
+        System.out.println(Joiner.on("\n").join(changes));
 
         if (OUTPUT_STYLE == OutputStyle.C_ALT) {
             doAlt(toMaximized);
@@ -487,6 +491,7 @@
             return pop;
         }
 
+        @Override
         public int compareTo(RowData o) {
             // TODO Auto-generated method stub
             int result = os.compareTo(o.os);
@@ -496,10 +501,12 @@
             return name.compareTo(o.name);
         }
 
+        @Override
         public boolean equals(Object o) {
             return 0 == compareTo((RowData) o);
         }
 
+        @Override
         public int hashCode() {
             throw new UnsupportedOperationException();
         }
@@ -510,8 +517,8 @@
         final int minTotalPopulation = 10000000;
         final int minTerritoryPopulation = 1000000;
         final double minTerritoryPercent = 1.0 / 3;
-        Map<String, Set<RowData>> languageToReason = new TreeMap<String, Set<RowData>>();
-        Counter<String> languageToLiteratePopulation = new Counter<String>();
+        Map<String, Set<RowData>> languageToReason = new TreeMap<>();
+        Counter<String> languageToLiteratePopulation = new Counter<>();
         NumberFormat nf = NumberFormat.getIntegerInstance(ULocale.ENGLISH);
         nf.setGroupingUsed(true);
         LanguageTagParser ltp = new LanguageTagParser();
@@ -525,9 +532,10 @@
          *
          * B. X is an exception explicitly approved by the committee or X has minimal
          * language coverage‡ in CLDR itself.
+         * C. The language is in the CLDR-target locales
          */
         OfficialStatus minimalStatus = OfficialStatus.official_regional; // OfficialStatus.de_facto_official;
-        Map<String, String> languages = new TreeMap<String, String>();
+        Map<String, String> languages = new TreeMap<>();
         for (String language : standardCodes.getAvailableCodes("language")) {
             String path = CLDRFile.getKey(CLDRFile.LANGUAGE_NAME, language);
             String result = english.getStringValue(path);
@@ -539,6 +547,9 @@
             System.out.println(language + "\t" + languages.get(language));
         }
 
+        // also CLDR-target locales
+        final Set<String> CLDRMainLanguages = new TreeSet<>(StandardCodes.make().getLocaleCoverageLocales(Organization.cldr));
+        
         for (String territory : supplementalData.getTerritoriesWithPopulationData()) {
             PopulationData territoryPop = supplementalData.getPopulationDataForTerritory(territory);
             double territoryPopulation = territoryPop.getLiteratePopulation();
@@ -568,6 +579,9 @@
                     && literatePopulation > minTerritoryPercent * territoryPopulation) {
                     add = true;
                 }
+                if (add == false && CLDRMainLanguages.contains(language)) {
+                    add = true;
+                }
                 if (add) {
                     add(languageToReason, language, territory, status, literatePopulation);
                     // Add the containing regions
@@ -625,7 +639,7 @@
 
         // now list them
 
-        Set<String> others = new TreeSet<String>();
+        Set<String> others = new TreeSet<>();
         others.addAll(standardCodes.getGoodAvailableCodes("language"));
         others.removeAll(languageToReason.keySet());
         System.out.println("\nIncluded Languages:\t" + languageToReason.keySet().size());
@@ -643,7 +657,7 @@
     }
 
     private static void showLanguages(Set<String> others, Map<String, Set<RowData>> languageToReason) {
-        Set<String> sorted = new TreeSet<String>(Collator.getInstance(ULocale.ENGLISH));
+        Set<String> sorted = new TreeSet<>(Collator.getInstance(ULocale.ENGLISH));
         for (String language : others) {
             sorted.add(getLanguageName(language, languageToReason));
         }
@@ -687,14 +701,14 @@
         String territory = english.getName("territory", territoryRaw) + " [" + territoryRaw + "]";
         Set<RowData> set = languageToReason.get(language);
         if (set == null) {
-            languageToReason.put(language, set = new TreeSet<RowData>());
+            languageToReason.put(language, set = new TreeSet<>());
         }
         set.add(new RowData(status, territory, population));
     }
 
     private static void printDefaultContent(Map<String, String> toMaximized) throws IOException {
 
-        Set<String> defaultLocaleContent = new TreeSet<String>();
+        Set<String> defaultLocaleContent = new TreeSet<>();
 
         // go through all the cldr locales, and add default contents
         // now computed from toMaximized
@@ -703,7 +717,7 @@
         LanguageTagParser ltp = new LanguageTagParser();
 
         // System.out.println(maximize("az_Latn_AZ", toMaximized));
-        Set<String> hasScript = new TreeSet<String>();
+        Set<String> hasScript = new TreeSet<>();
 
         // first get a mapping to children
         for (String locale : available) {
@@ -724,13 +738,17 @@
         }
 
         // Suppress script for locales for which we only have one locale in common/main. See ticket #7834.
-        Set<String> suppressScriptLocales = new HashSet<String>(Arrays.asList(
+        Set<String> suppressScriptLocales = new HashSet<>(Arrays.asList(
             "bm_ML", "en_US", "ha_NG", "iu_CA", "ms_MY", "mn_MN",
             "byn_ER", "ff_SN", "dyo_SN", "kk_KZ", "ku_TR", "ky_KG", "ml_IN", "so_SO", "sw_TZ", "wo_SN", "yo_NG", "dje_NE",
-            "blt_VN"));
+            "blt_VN",
+            "hi_IN",
+            "nv_US",
+            "doi_IN"
+            ));
 
         // if any have a script, then throw out any that don't have a script (unless they're specifically included.)
-        Set<String> toRemove = new TreeSet<String>();
+        Set<String> toRemove = new TreeSet<>();
         for (String locale : hasScript) {
             toRemove.clear();
             Set<String> children = toChildren.getAll(locale);
@@ -740,7 +758,7 @@
                 }
             }
             if (toRemove.size() != 0) {
-                System.out.println("Removing:\t" + locale + "\t" + toRemove + "\tfrom\t" + children);
+                System.out.println("\tRemoving:\t" + locale + "\t" + toRemove + "\tfrom\t" + children);
                 toChildren.removeAll(locale, toRemove);
             }
         }
@@ -753,7 +771,7 @@
                 continue;
             }
             Set<String> children = toChildren.getAll(locale);
-            Map<String, String> debugStuff = new TreeMap<String, String>();
+            Map<String, String> debugStuff = new TreeMap<>();
             for (String child : children) {
                 String maximizedChild = maximize(child, toMaximized);
                 if (maximized.equals(maximizedChild)) {
@@ -832,18 +850,18 @@
 
     private static class MaxData {
         Relation<String, Row.R3<Double, String, String>> languages = Relation.of(new TreeMap<String, Set<Row.R3<Double, String, String>>>(), TreeSet.class);
-        Map<String, Counter<String>> languagesToScripts = new TreeMap<String, Counter<String>>();
-        Map<String, Counter<String>> languagesToRegions = new TreeMap<String, Counter<String>>();
+        Map<String, Counter<String>> languagesToScripts = new TreeMap<>();
+        Map<String, Counter<String>> languagesToRegions = new TreeMap<>();
 
         Relation<String, Row.R3<Double, String, String>> scripts = Relation.of(new TreeMap<String, Set<Row.R3<Double, String, String>>>(), TreeSet.class);
-        Map<String, Counter<String>> scriptsToLanguages = new TreeMap<String, Counter<String>>();
-        Map<String, Counter<String>> scriptsToRegions = new TreeMap<String, Counter<String>>();
+        Map<String, Counter<String>> scriptsToLanguages = new TreeMap<>();
+        Map<String, Counter<String>> scriptsToRegions = new TreeMap<>();
 
         Relation<String, Row.R3<Double, String, String>> regions = Relation.of(new TreeMap<String, Set<Row.R3<Double, String, String>>>(), TreeSet.class);
-        Map<String, Counter<String>> regionsToLanguages = new TreeMap<String, Counter<String>>();
-        Map<String, Counter<String>> regionsToScripts = new TreeMap<String, Counter<String>>();
+        Map<String, Counter<String>> regionsToLanguages = new TreeMap<>();
+        Map<String, Counter<String>> regionsToScripts = new TreeMap<>();
 
-        Map<String, Counter<Row.R2<String, String>>> containersToLanguage = new TreeMap<String, Counter<Row.R2<String, String>>>();
+        Map<String, Counter<Row.R2<String, String>>> containersToLanguage = new TreeMap<>();
         Relation<String, Row.R4<Double, String, String, String>> containersToLangRegion = Relation.of(
             new TreeMap<String, Set<Row.R4<Double, String, String, String>>>(), TreeSet.class);
 
@@ -891,7 +909,7 @@
                     containersToLangRegion.put(container, Row.of(order, language, script, region));
                     Counter<R2<String, String>> data = containersToLanguage.get(container);
                     if (data == null) {
-                        containersToLanguage.put(container, data = new Counter<R2<String, String>>());
+                        containersToLanguage.put(container, data = new Counter<>());
                     }
                     data.add(Row.of(language, script), (long) (double) order);
 
@@ -923,7 +941,7 @@
         // Set<Row.R3<String,String,String>,Double> rowsToCounts = new TreeMap();
         MaxData maxData = new MaxData();
         Set<String> cldrLocales = factory.getAvailable();
-        Set<String> otherTerritories = new TreeSet<String>(standardCodes.getGoodAvailableCodes("territory"));
+        Set<String> otherTerritories = new TreeSet<>(standardCodes.getGoodAvailableCodes("territory"));
 
         // process all the information to get the top values for each triple.
         // each of the combinations of 1 or 2 components gets to be a key.
@@ -995,7 +1013,7 @@
             String language = entry.getKey();
             final Collection<String> values = entry.getValue();
             if (values.size() != 1) {
-                continue; // skip, no either way 
+                continue; // skip, no either way
             }
             Set<R3<Double, String, String>> old = maxData.languages.get(language);
             if (!maxData.languages.containsKey(language)) {
@@ -1047,16 +1065,16 @@
             R3<Double, String, String> value = maxData.languages.getAll(language).iterator().next();
             final Comparable<String> script = value.get1();
             final Comparable<String> region = value.get2();
-            add(language, language + "_" + script + "_" + region, toMaximized, "L->SR", Override.REPLACE_EXISTING,
+            add(language, language + "_" + script + "_" + region, toMaximized, "L->SR", LocaleOverride.REPLACE_EXISTING,
                 SHOW_ADD);
         }
         for (String language : maxData.languagesToScripts.keySet()) {
             String script = maxData.languagesToScripts.get(language).getKeysetSortedByCount(true).iterator().next();
-            add(language, language + "_" + script, toMaximized, "L->S", Override.REPLACE_EXISTING, SHOW_ADD);
+            add(language, language + "_" + script, toMaximized, "L->S", LocaleOverride.REPLACE_EXISTING, SHOW_ADD);
         }
         for (String language : maxData.languagesToRegions.keySet()) {
             String region = maxData.languagesToRegions.get(language).getKeysetSortedByCount(true).iterator().next();
-            add(language, language + "_" + region, toMaximized, "L->R", Override.REPLACE_EXISTING, SHOW_ADD);
+            add(language, language + "_" + region, toMaximized, "L->R", LocaleOverride.REPLACE_EXISTING, SHOW_ADD);
         }
 
         for (String script : maxData.scripts.keySet()) {
@@ -1064,15 +1082,15 @@
             final Comparable<String> language = value.get1();
             final Comparable<String> region = value.get2();
             add("und_" + script, language + "_" + script + "_" + region, toMaximized, "S->LR",
-                Override.REPLACE_EXISTING, SHOW_ADD);
+                LocaleOverride.REPLACE_EXISTING, SHOW_ADD);
         }
         for (String script : maxData.scriptsToLanguages.keySet()) {
             String language = maxData.scriptsToLanguages.get(script).getKeysetSortedByCount(true).iterator().next();
-            add("und_" + script, language + "_" + script, toMaximized, "S->L", Override.REPLACE_EXISTING, SHOW_ADD);
+            add("und_" + script, language + "_" + script, toMaximized, "S->L", LocaleOverride.REPLACE_EXISTING, SHOW_ADD);
         }
         for (String script : maxData.scriptsToRegions.keySet()) {
             String region = maxData.scriptsToRegions.get(script).getKeysetSortedByCount(true).iterator().next();
-            add("und_" + script, "und_" + script + "_" + region, toMaximized, "S->R", Override.REPLACE_EXISTING,
+            add("und_" + script, "und_" + script + "_" + region, toMaximized, "S->R", LocaleOverride.REPLACE_EXISTING,
                 SHOW_ADD);
         }
 
@@ -1081,15 +1099,15 @@
             final Comparable<String> language = value.get1();
             final Comparable<String> script = value.get2();
             add("und_" + region, language + "_" + script + "_" + region, toMaximized, "R->LS",
-                Override.REPLACE_EXISTING, SHOW_ADD);
+                LocaleOverride.REPLACE_EXISTING, SHOW_ADD);
         }
         for (String region : maxData.regionsToLanguages.keySet()) {
             String language = maxData.regionsToLanguages.get(region).getKeysetSortedByCount(true).iterator().next();
-            add("und_" + region, language + "_" + region, toMaximized, "R->L", Override.REPLACE_EXISTING, SHOW_ADD);
+            add("und_" + region, language + "_" + region, toMaximized, "R->L", LocaleOverride.REPLACE_EXISTING, SHOW_ADD);
         }
         for (String region : maxData.regionsToScripts.keySet()) {
             String script = maxData.regionsToScripts.get(region).getKeysetSortedByCount(true).iterator().next();
-            add("und_" + region, "und_" + script + "_" + region, toMaximized, "R->S", Override.REPLACE_EXISTING,
+            add("und_" + region, "und_" + script + "_" + region, toMaximized, "R->S", LocaleOverride.REPLACE_EXISTING,
                 SHOW_ADD);
         }
 
@@ -1114,7 +1132,7 @@
             if (skipLanguages != null
                 && skipLanguages.contains(language)) {
                 add("und_" + region, language + "_" + script + "_" + region, toMaximized, "R*->LS",
-                    Override.REPLACE_EXISTING, SHOW_ADD);
+                    LocaleOverride.REPLACE_EXISTING, SHOW_ADD);
                 continue;
             }
 
@@ -1124,7 +1142,7 @@
                 final Comparable<String> script2 = e.get2();
                 if (language2.equals(language) && script2.equals(script)) {
                     add("und_" + region, language + "_" + script + "_" + e.get3(), toMaximized, "R*->LS",
-                        Override.REPLACE_EXISTING, SHOW_ADD);
+                        LocaleOverride.REPLACE_EXISTING, SHOW_ADD);
                     break;
                 }
             }
@@ -1136,7 +1154,7 @@
             final Comparable<String> script = languageScript.get1();
             final Comparable<String> region = value.get1();
             add(language + "_" + script, language + "_" + script + "_" + region, toMaximized, "LS->R",
-                Override.REPLACE_EXISTING, SHOW_ADD);
+                LocaleOverride.REPLACE_EXISTING, SHOW_ADD);
         }
 
         for (R2<String, String> scriptRegion : maxData.scriptRegions.keySet()) {
@@ -1145,7 +1163,7 @@
             final Comparable<String> region = scriptRegion.get1();
             final Comparable<String> language = value.get1();
             add("und_" + script + "_" + region, language + "_" + script + "_" + region, toMaximized, "SR->L",
-                Override.REPLACE_EXISTING, SHOW_ADD);
+                LocaleOverride.REPLACE_EXISTING, SHOW_ADD);
         }
 
         for (R2<String, String> languageRegion : maxData.languageRegions.keySet()) {
@@ -1154,26 +1172,26 @@
             final Comparable<String> region = languageRegion.get1();
             final Comparable<String> script = value.get1();
             add(language + "_" + region, language + "_" + script + "_" + region, toMaximized, "LR->S",
-                Override.REPLACE_EXISTING, SHOW_ADD);
+                LocaleOverride.REPLACE_EXISTING, SHOW_ADD);
         }
 
         // get the script info from metadata as fallback
 
-        TreeSet<String> sorted = new TreeSet<String>(ScriptMetadata.getScripts());
+        TreeSet<String> sorted = new TreeSet<>(ScriptMetadata.getScripts());
         for (String script : sorted) {
             Info i = ScriptMetadata.getInfo(script);
             String likelyLanguage = i.likelyLanguage;
             String originCountry = i.originCountry;
             final String result = likelyLanguage + "_" + script + "_" + originCountry;
             add("und_" + script, result, toMaximized, "S->LR•",
-                Override.KEEP_EXISTING, SHOW_ADD);
+                LocaleOverride.KEEP_EXISTING, SHOW_ADD);
             add(likelyLanguage, result, toMaximized, "L->SR•",
-                Override.KEEP_EXISTING, SHOW_ADD);
+                LocaleOverride.KEEP_EXISTING, SHOW_ADD);
         }
 
         // add overrides
         for (String key : LANGUAGE_OVERRIDES.keySet()) {
-            add(key, LANGUAGE_OVERRIDES.get(key), toMaximized, "OVERRIDE", Override.REPLACE_EXISTING, true);
+            add(key, LANGUAGE_OVERRIDES.get(key), toMaximized, "OVERRIDE", LocaleOverride.REPLACE_EXISTING, true);
         }
     }
 
@@ -1187,7 +1205,7 @@
 
     private static void doAlt(Map<String, String> toMaximized) {
         // TODO Auto-generated method stub
-        Map<String, String> temp = new TreeMap<String, String>();
+        Map<String, String> temp = new TreeMap<>();
         for (String locale : toMaximized.keySet()) {
             String target = toMaximized.get(locale);
             temp.put(toAlt(locale, true), toAlt(target, true));
@@ -1326,11 +1344,11 @@
     // }
     // }
 
-    enum Override {
+    enum LocaleOverride {
         KEEP_EXISTING, REPLACE_EXISTING
     }
 
-    private static void add(String key, String value, Map<String, String> toAdd, String kind, Override override,
+    private static void add(String key, String value, Map<String, String> toAdd, String kind, LocaleOverride override,
         boolean showAction) {
         if (key.equals(DEBUG_ADD_KEY)) {
             System.out.println("*debug*");
@@ -1338,16 +1356,16 @@
         String oldValue = toAdd.get(key);
         if (oldValue == null) {
             if (showAction) {
-                System.out.println("Adding:\t\t" + getName(key) + "\t=>\t" + getName(value) + "\t\t\t\t" + kind);
+                System.out.println("\tAdding:\t\t" + getName(key) + "\t=>\t" + getName(value) + "\t\t\t\t" + kind);
             }
-        } else if (override == Override.KEEP_EXISTING || value.equals(oldValue)) {
+        } else if (override == LocaleOverride.KEEP_EXISTING || value.equals(oldValue)) {
             // if (showAction) {
             // System.out.println("Skipping:\t" + key + "\t=>\t" + value + "\t\t\t\t" + kind);
             // }
             return;
         } else {
             if (showAction) {
-                System.out.println("Replacing:\t" + getName(key) + "\t=>\t" + getName(value) + "\t, was\t" + getName(oldValue) + "\t\t" + kind);
+                System.out.println("\tReplacing:\t" + getName(key) + "\t=>\t" + getName(value) + "\t, was\t" + getName(oldValue) + "\t\t" + kind);
             }
         }
         toAdd.put(key, value);
@@ -1577,7 +1595,7 @@
                 + "</supplementalData>";
         out.println(header);
         boolean first = true;
-        Set<String> keys = new TreeSet<String>(new LocaleStringComparator());
+        Set<String> keys = new TreeSet<>(new LocaleStringComparator());
         keys.addAll(fluffup.keySet());
         for (String printingLocale : keys) {
             String printingTarget = fluffup.get(printingLocale);
@@ -1716,7 +1734,7 @@
     public static void minimize(Map<String, String> fluffup) {
         LanguageTagParser parser = new LanguageTagParser();
         LanguageTagParser targetParser = new LanguageTagParser();
-        Set<String> removals = new TreeSet<String>();
+        Set<String> removals = new TreeSet<>();
         while (true) {
             removals.clear();
             for (String locale : fluffup.keySet()) {
@@ -2025,7 +2043,7 @@
         }
         scriptBits.clear(UScript.COMMON);
         scriptBits.clear(UScript.INHERITED);
-        Set<String> scripts = new TreeSet<String>();
+        Set<String> scripts = new TreeSet<>();
         for (int j = 0; j < scriptBits.size(); ++j) {
             if (scriptBits.get(j)) {
                 scripts.add(UScript.getShortName(j));
@@ -2053,39 +2071,39 @@
     // };
 
     static void showDefaultContentDifferencesAndFix(Set<String> defaultLocaleContent) {
-        Set<String> errors = new LinkedHashSet<String>();
+        Set<String> errors = new LinkedHashSet<>();
         Map<String, String> oldDefaultContent = SupplementalDataInfo.makeLocaleToDefaultContents(
             ConvertLanguageData.supplementalData.getDefaultContentLocales(), new TreeMap<String, String>(), errors);
         if (!errors.isEmpty()) {
-            System.out.println(CollectionUtilities.join(errors, "\n"));
+            System.out.println(Joiner.on("\n").join(errors));
             errors.clear();
         }
         Map<String, String> newDefaultContent = SupplementalDataInfo.makeLocaleToDefaultContents(defaultLocaleContent,
             new TreeMap<String, String>(), errors);
         if (!errors.isEmpty()) {
-            System.out.println("Default Content errors: " + CollectionUtilities.join(errors, "\n"));
+            System.out.println("Default Content errors: " + Joiner.on("\n").join(errors));
             errors.clear();
         }
         Set<String> changes = compareMapsAndFixNew("*WARNING* Default Content: ", oldDefaultContent, newDefaultContent,
             "ar", "ar_001");
-        System.out.println(CollectionUtilities.join(changes, "\n"));
+        System.out.println(Joiner.on("\n").join(changes));
         defaultLocaleContent.clear();
         defaultLocaleContent.addAll(newDefaultContent.values());
         newDefaultContent = SupplementalDataInfo.makeLocaleToDefaultContents(defaultLocaleContent,
             new TreeMap<String, String>(), errors);
         if (!errors.isEmpty()) {
-            System.out.println("***New Errors: " + CollectionUtilities.join(errors, "\n"));
+            System.out.println("***New Errors: " + Joiner.on("\n").join(errors));
         }
     }
 
     private static Set<String> compareMapsAndFixNew(String title,
         Map<String, String> oldContent,
         Map<String, String> newContent, String... allowedOverrideValues) {
-        Map<String, String> allowedOverrideValuesTest = new HashMap<String, String>();
+        Map<String, String> allowedOverrideValuesTest = new HashMap<>();
         for (int i = 0; i < allowedOverrideValues.length; i += 2) {
             allowedOverrideValuesTest.put(allowedOverrideValues[i], allowedOverrideValues[i + 1]);
         }
-        Set<String> changes = new TreeSet<String>();
+        Set<String> changes = new TreeSet<>();
         for (String parent : Builder.with(new TreeSet<String>()).addAll(newContent.keySet())
             .addAll(oldContent.keySet()).get()) {
             String oldValue = oldContent.get(parent);
@@ -2141,6 +2159,7 @@
         LanguageTagParser ltp0 = new LanguageTagParser();
         LanguageTagParser ltp1 = new LanguageTagParser();
 
+        @Override
         public int compare(String arg0, String arg1) {
             ltp0.set(arg0);
             ltp1.set(arg1);
diff --git a/tools/java/org/unicode/cldr/tool/GeneratePluralConfirmation.java b/tools/java/org/unicode/cldr/tool/GeneratePluralConfirmation.java
index 8b7fa9b..652829e 100644
--- a/tools/java/org/unicode/cldr/tool/GeneratePluralConfirmation.java
+++ b/tools/java/org/unicode/cldr/tool/GeneratePluralConfirmation.java
@@ -40,7 +40,7 @@
         for (String uLocale : new TreeSet<>(prf.getLocales())) {
             for (PluralRules.PluralType type : PluralRules.PluralType.values()) {
                 for (Count count : Count.values()) {
-                    String pattern = prf.getSamplePattern(uLocale, type, count);
+                    String pattern = PluralRulesFactory.getSamplePattern(uLocale, type, count);
                     if (pattern.contains("{no pattern available}")) {
                         continue;
                     }
@@ -71,7 +71,7 @@
             }
             EnumSet<Count> counts = EnumSet.noneOf(Count.class);
             for (Count count : Count.VALUES) {
-                String pat = prf.getSamplePattern(loc, ICU_ORDINAL, count);
+                String pat = PluralRulesFactory.getSamplePattern(loc, ICU_ORDINAL, count);
                 if (pat != null && !pat.contains("{no pattern available}")) {
                     counts.add(count);
                 }
@@ -81,13 +81,13 @@
                 System.out.format("%s\t%s\t%s\t%s\n", loc, "missing", "n/a", "n/a");
                 break;
             case 1: {
-                String pat = prf.getSamplePattern(loc, ICU_ORDINAL, Count.other);
+                String pat = PluralRulesFactory.getSamplePattern(loc, ICU_ORDINAL, Count.other);
                 System.out.format("%s\t%s\t%s\t%s\n", loc, "constant", Count.other, "n/a");
             }
                 break;
             default:
                 for (Count count : counts) {
-                    String pat = prf.getSamplePattern(loc, ICU_ORDINAL, count);
+                    String pat = PluralRulesFactory.getSamplePattern(loc, ICU_ORDINAL, count);
                     System.out.format("%s\t%s\t%s\t%s\n", loc, "multiple", count, pat);
                 }
                 break;
@@ -185,7 +185,7 @@
             for (Entry<Count, Set<FixedDecimal>> entry : soFar.keyValuesSet()) {
                 Count count = entry.getKey();
                 for (FixedDecimal fd : entry.getValue()) {
-                    String pattern = prf.getSamplePattern(locale, type.standardType, count);
+                    String pattern = PluralRulesFactory.getSamplePattern(locale, type.standardType, count);
                     buffer.append(locale + "\t" + type + "\t" + count + "\t" + fd + "\t«" + pattern.replace("{0}", String.valueOf(fd)) + "»\n");
                 }
                 buffer.append("\n");
diff --git a/tools/java/org/unicode/cldr/tool/GeneratePluralList.java b/tools/java/org/unicode/cldr/tool/GeneratePluralList.java
index 7940679..7121bbc 100644
--- a/tools/java/org/unicode/cldr/tool/GeneratePluralList.java
+++ b/tools/java/org/unicode/cldr/tool/GeneratePluralList.java
@@ -48,7 +48,7 @@
         this.out = out;
     }
 
-    private Map<String, Map<String, String>> localesToNouns = new HashMap<String, Map<String, String>>();
+    private Map<String, Map<String, String>> localesToNouns = new HashMap<>();
 
     private void loadNouns() throws IOException {
         BufferedReader reader = FileReaders.openFile(GeneratePluralList.class, "fractionnum.csv");
@@ -59,7 +59,7 @@
             String format = fields[5];
             Map<String, String> nouns = localesToNouns.get(locale);
             if (nouns == null) {
-                localesToNouns.put(locale, nouns = new HashMap<String, String>());
+                localesToNouns.put(locale, nouns = new HashMap<>());
             }
             nouns.put(count, format);
         }
@@ -70,7 +70,7 @@
         private Set<String> list3;
 
         public ExampleManager() {
-            list3 = new HashSet<String>();
+            list3 = new HashSet<>();
         }
 
         public void add(String example) {
@@ -102,11 +102,11 @@
         // Setup.
         Count[] digits = new Count[1000];
         // 0 is always considered a plural type even if the plural rules say otherwise.
-        Set<Count> missingTypes = new HashSet<Count>();
+        Set<Count> missingTypes = new HashSet<>();
         for (String keyword : rules.getKeywords()) {
             missingTypes.add(Count.valueOf(keyword));
         }
-        Map<String, List<Integer>> integerMap = new HashMap<String, List<Integer>>();
+        Map<String, List<Integer>> integerMap = new HashMap<>();
         digits[0] = Count.zero;
         missingTypes.remove(Count.zero);
         put(integerMap, "zero", 0);
@@ -147,9 +147,9 @@
         int limit = (int) Math.pow(10, numDigits);
 
         // Generate all examples.
-        Map<String, String> exampleMap = new HashMap<String, String>();
-        Map<String, ExampleManager> positionedExamples = new HashMap<String, ExampleManager>();
-        Set<String> allKeywords = new HashSet<String>(rules.getKeywords());
+        Map<String, String> exampleMap = new HashMap<>();
+        Map<String, ExampleManager> positionedExamples = new HashMap<>();
+        Set<String> allKeywords = new HashSet<>(rules.getKeywords());
         allKeywords.add("zero");
         allKeywords.retainAll(integerMap.keySet());
         List<Integer> values;
@@ -181,7 +181,7 @@
         }
 
         // Output examples to file.
-        Set<String> finalExamples = new TreeSet<String>(new Comparator<String>() {
+        Set<String> finalExamples = new TreeSet<>(new Comparator<String>() {
             @Override
             public int compare(String arg0, String arg1) {
                 String[] forms1 = arg1.split("\\|");
@@ -212,7 +212,7 @@
     private static <A, B> void put(Map<A, List<B>> map, A key, B value) {
         List<B> list = map.get(key);
         if (list == null) {
-            map.put(key, list = new ArrayList<B>());
+            map.put(key, list = new ArrayList<>());
         }
         list.add(value);
     }
diff --git a/tools/java/org/unicode/cldr/tool/GeneratePluralRanges.java b/tools/java/org/unicode/cldr/tool/GeneratePluralRanges.java
index 5732b90..35264d9 100644
--- a/tools/java/org/unicode/cldr/tool/GeneratePluralRanges.java
+++ b/tools/java/org/unicode/cldr/tool/GeneratePluralRanges.java
@@ -1,8 +1,9 @@
 package org.unicode.cldr.tool;
 
+import static com.google.common.collect.Comparators.lexicographical;
+
 import java.lang.invoke.MethodHandles;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Comparator;
 import java.util.EnumSet;
 import java.util.LinkedHashSet;
@@ -29,7 +30,7 @@
 import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo.Count;
 import org.unicode.cldr.util.TempPrintWriter;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.text.DecimalFormat;
 import com.ibm.icu.text.MessageFormat;
@@ -56,7 +57,7 @@
     private void generateSamples(CLDRFile english, Factory factory) {
         //Map<ULocale, PluralRulesFactory.SamplePatterns> samples = PluralRulesFactory.getLocaleToSamplePatterns();
         // add all the items with plural ranges
-        Set<String> sorted = new TreeSet<String>(SUPPLEMENTAL.getPluralRangesLocales());
+        Set<String> sorted = new TreeSet<>(SUPPLEMENTAL.getPluralRangesLocales());
         // add the core locales
 //        sorted.addAll(StandardCodes.make().getLocaleCoverageLocales("google", EnumSet.of(Level.MODERN)));
         sorted.addAll(StandardCodes.make().getLocaleCoverageLocales(Organization.cldr, EnumSet.of(Level.MODERN)));
@@ -110,7 +111,7 @@
             locale = "he";
         }
         //Map<ULocale, PluralRulesFactory.SamplePatterns> samples = PluralRulesFactory.getLocaleToSamplePatterns();
-        List<RangeSample> list = new ArrayList<RangeSample>();
+        List<RangeSample> list = new ArrayList<>();
         PluralInfo pluralInfo = SUPPLEMENTAL.getPlurals(locale);
         Set<Count> counts = pluralInfo.getCounts();
         PluralRanges pluralRanges = SUPPLEMENTAL.getPluralRanges(locale);
@@ -131,8 +132,8 @@
 //            }
 //        }
 
-        Output<FixedDecimal> maxSample = new Output<FixedDecimal>();
-        Output<FixedDecimal> minSample = new Output<FixedDecimal>();
+        Output<FixedDecimal> maxSample = new Output<>();
+        Output<FixedDecimal> minSample = new Output<>();
 
         ICUServiceBuilder icusb = new ICUServiceBuilder();
         icusb.setCldrFile(cldrFile);
@@ -220,21 +221,21 @@
     private final SupplementalDataInfo SUPPLEMENTAL;
     private final PluralRulesFactory prf;
 
-    public static final Comparator<Set<String>> STRING_SET_COMPARATOR = new SetComparator<String, Set<String>>();
-    public static final Comparator<Set<Count>> COUNT_SET_COMPARATOR = new SetComparator<Count, Set<Count>>();
-
-    static final class SetComparator<T extends Comparable<T>, U extends Set<T>> implements Comparator<U> {
-        public int compare(U o1, U o2) {
-            return CollectionUtilities.compare((Collection<T>) o1, (Collection<T>) o2);
-        }
-    };
+    // Ordering by size-of-set first, and then lexicographically, with a final tie-break on the
+    // string representation.
+    private static final Comparator<Set<String>> STRING_SET_COMPARATOR =
+        Comparator.<Set<String>, Integer>comparing(Set::size)
+            .thenComparing(lexicographical(Comparator.<String>naturalOrder()));
+    private static final Comparator<Set<Count>> COUNT_SET_COMPARATOR =
+        Comparator.<Set<Count>, Integer>comparing(Set::size)
+            .thenComparing(lexicographical(Comparator.<Count>naturalOrder()));
 
     public void reformatPluralRanges() {
-        Map<Set<Count>, Relation<Set<String>, String>> seen = new TreeMap<Set<Count>, Relation<Set<String>, String>>(COUNT_SET_COMPARATOR);
+        Map<Set<Count>, Relation<Set<String>, String>> seen = new TreeMap<>(COUNT_SET_COMPARATOR);
         try (TempPrintWriter out = TempPrintWriter.openUTF8Writer(CLDRPaths.SUPPLEMENTAL_DIRECTORY,"pluralRanges.xml")) {
-            out.println(DtdType.supplementalData.header(MethodHandles.lookup().lookupClass()) + 
-                "\t<version number=\"$Revision$\" />\n" + 
-                "\t<plurals>" 
+            out.println(DtdType.supplementalData.header(MethodHandles.lookup().lookupClass()) +
+                "\t<version number=\"$Revision$\" />\n" +
+                "\t<plurals>"
                 );
             for (String locale : SUPPLEMENTAL.getPluralRangesLocales()) {
 
@@ -258,16 +259,17 @@
                 item.put(s, locale);
             }
             for (Entry<Set<Count>, Relation<Set<String>, String>> entry0 : seen.entrySet()) {
-                out.println("\n<!-- " + CollectionUtilities.join(entry0.getKey(), ", ") + " -->");
+                out.println("\n<!-- " + Joiner.on(", ").join(entry0.getKey()) + " -->");
                 for (Entry<Set<String>, Set<String>> entry : entry0.getValue().keyValuesSet()) {
-                    out.println("\t\t<pluralRanges locales=\"" + CollectionUtilities.join(entry.getValue(), " ") + "\">");
+                    out.println("\t\t<pluralRanges locales=\"" + Joiner.on(" ")
+                        .join(entry.getValue()) + "\">");
                     for (String line : entry.getKey()) {
                         out.println("\t\t\t" + line);
                     }
                     out.println("\t\t</pluralRanges>");
                 }
             }
-            out.println("\t</plurals>\n" + 
+            out.println("\t</plurals>\n" +
                 "</supplementalData>");
         }
     }
@@ -278,7 +280,7 @@
 
     public Set<String> reformat(PluralRanges pluralRanges, Set<Count> counts) {
         Set<String> s;
-        s = new LinkedHashSet<String>();
+        s = new LinkedHashSet<>();
         // first determine the general principle
 
         //        EnumSet<RangeStrategy> strategy = EnumSet.allOf(RangeStrategy.class);
@@ -317,11 +319,11 @@
     }
 
     Set<String> minimize(PluralRanges pluralRanges, PluralInfo pluralInfo) {
-        Set<String> result = new LinkedHashSet<String>();
+        Set<String> result = new LinkedHashSet<>();
         // make it easier to manage
         PluralRanges.Matrix matrix = new PluralRanges.Matrix();
-        Output<FixedDecimal> maxSample = new Output<FixedDecimal>();
-        Output<FixedDecimal> minSample = new Output<FixedDecimal>();
+        Output<FixedDecimal> maxSample = new Output<>();
+        Output<FixedDecimal> minSample = new Output<>();
         for (Count s : Count.VALUES) {
             for (Count e : Count.VALUES) {
                 if (!pluralInfo.rangeExists(s, e, minSample, maxSample)) {
@@ -349,7 +351,7 @@
                     endDone.add(end);
                 }
             }
-            Output<Boolean> emit = new Output<Boolean>();
+            Output<Boolean> emit = new Output<>();
             for (Count start : pluralInfo.getCounts()) {
                 Count r = matrix.startSame(start, endDone, emit);
                 if (r != null
diff --git a/tools/java/org/unicode/cldr/tool/GenerateProductionData.java b/tools/java/org/unicode/cldr/tool/GenerateProductionData.java
index 5a77e68..bb41a39 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateProductionData.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateProductionData.java
@@ -59,7 +59,7 @@
     static final Set<String> NON_XML = ImmutableSet.of("dtd", "properties", "testData", "uca");
     static final Set<String> COPY_ANYWAY = ImmutableSet.of("casing", "collation"); // don't want to "clean up", makes format difficult to use
     static final SupplementalDataInfo SDI = CLDRConfig.getInstance().getSupplementalDataInfo();
-    
+
     static final Multimap<String, Pair<String, String>> localeToSubdivisionsToMigrate = TreeMultimap.create();
 
     enum MyOptions {
@@ -96,7 +96,7 @@
             .setDefault("true")
             .setMatch("true|false")),
         verbose(new Params()
-            .setHelp("verbose debugging messages")), 
+            .setHelp("verbose debugging messages")),
         Debug(new Params()
             .setHelp("debug")),
         fileMatch(new Params()
@@ -182,9 +182,9 @@
         }
         @Override
         public String toString() {
-            return 
+            return
                 "files=" + files
-                + (removed + retained + remaining == 0 ? "" 
+                + (removed + retained + remaining == 0 ? ""
                     : "; removed=" + removed
                     + "; retained=" + retained
                     + "; remaining=" + remaining);
@@ -202,11 +202,11 @@
      * @param destinationFile
      * @param factory
      * @param isLdmlDtdType
-     * @param stats 
+     * @param stats
      * @param hasChildren
      * @return true if the file is an ldml file with empty content.
      */
-    private static boolean copyFilesAndReturnIsEmpty(File sourceFile, File destinationFile, 
+    private static boolean copyFilesAndReturnIsEmpty(File sourceFile, File destinationFile,
         Factory factory, boolean isLdmlDtdType, Stats stats) {
         if (sourceFile.isDirectory()) {
 
@@ -255,7 +255,7 @@
                 }
             }
             stats.showNonZero("\tTOTAL:\t");
-            // if there are empty ldml files, AND we aren't in /main/, 
+            // if there are empty ldml files, AND we aren't in /main/,
             // then remove any without children
             if (!emptyLocales.isEmpty() && !sourceFile.getName().equals("main")) {
                 Set<String> childless = getChildless(emptyLocales, factory.getAvailable());
@@ -279,7 +279,7 @@
             boolean isRoot = localeId.equals("root");
             String directoryName = sourceFile.getParentFile().getName();
             boolean isSubdivisionDirectory = "subdivisions".equals(directoryName);
-            
+
             CLDRFile cldrFileUnresolved = factory.make(localeId, false);
             CLDRFile cldrFileResolved = factory.make(localeId, true);
             boolean gotOne = false;
@@ -287,7 +287,7 @@
             Set<String> toRetain = new TreeSet<>();
             Output<String> pathWhereFound = new Output<>();
             Output<String> localeWhereFound = new Output<>();
-            
+
             boolean isArabicSpecial = localeId.equals("ar") || localeId.startsWith("ar_");
 
             String debugPath = null; // "//ldml/units/unitLength[@type=\"short\"]/unit[@type=\"power-kilowatt\"]/displayName";
@@ -315,7 +315,7 @@
                         continue;
                     }
                 }
-                
+
                 // special case for Arabic defaultNumberingSystem
                 if (isArabicSpecial && xpath.contains("/defaultNumberingSystem")) {
                     toRetain.add(xpath);
@@ -324,11 +324,11 @@
                 // remove items that are the same as their bailey values. This also catches Inheritance Marker
 
                 String bailey = cldrFileResolved.getConstructedBaileyValue(xpath, pathWhereFound, localeWhereFound);
-                if (value.equals(bailey) 
-                    && (!ADD_SIDEWAYS 
+                if (value.equals(bailey)
+                    && (!ADD_SIDEWAYS
                         || pathEqualsOrIsAltVariantOf(xpath, pathWhereFound.value))
-                    && (!ADD_ROOT 
-                        || (!Objects.equals(XMLSource.ROOT_ID, localeWhereFound.value) 
+                    && (!ADD_ROOT
+                        || (!Objects.equals(XMLSource.ROOT_ID, localeWhereFound.value)
                             && !Objects.equals(XMLSource.CODE_FALLBACK_ID, localeWhereFound.value)))) {
                     toRemove.add(xpath);
                     continue;
@@ -366,7 +366,7 @@
                     }
                 }
 
-                // check to see if we might need to flesh out datetime. 
+                // check to see if we might need to flesh out datetime.
                 // TODO Should be done in the converter tool!!
                 if (ADD_DATETIME && isDateTimePath(xpath)) {
                     toRetain.addAll(dateTimePaths(xpath));
@@ -422,8 +422,8 @@
                 outCldrFile.removeAll(toRemove, false);
                 if (DEBUG) {
                     for (String xpath : toRemove) {
-                        System.out.println(localeId + ": removing: «" 
-                            + cldrFileUnresolved.getStringValue(xpath) 
+                        System.out.println(localeId + ": removing: «"
+                            + cldrFileUnresolved.getStringValue(xpath)
                             + "», " + xpath);
                     }
                 }
@@ -439,7 +439,7 @@
                     } else {
                         if (DEBUG) {
                             String oldValue = cldrFileUnresolved.getStringValue(xpath);
-                            System.out.println("Restoring: «" + oldValue + "» ⇒ «" + value 
+                            System.out.println("Restoring: «" + oldValue + "» ⇒ «" + value
                                 + "»\t" + xpath);
                         }
                         outCldrFile.add(xpath, value);
@@ -498,7 +498,7 @@
         if (desiredPath.contains("type=\"en_GB\"") && desiredPath.contains("alt=")) {
             int debug = 0;
         }
-        if (foundPath == null) { 
+        if (foundPath == null) {
             // We can do this, because the bailey value has already been checked
             // Since it isn't null, a null indicates a constructed alt value
             return true;
@@ -534,7 +534,7 @@
     }
 
     private static boolean isDateTimePath(String xpath) {
-        return xpath.startsWith("//ldml/dates/calendars/calendar") 
+        return xpath.startsWith("//ldml/dates/calendars/calendar")
             && xpath.contains("FormatLength[@type=");
     }
 
@@ -561,7 +561,7 @@
         for (String locale : available) {
             String parent = LocaleIDParser.getParent(locale);
             if (parent != null) {
-                parent2child.put(parent, locale); 
+                parent2child.put(parent, locale);
             }
         }
 
@@ -578,13 +578,13 @@
     /**
      * Recursively checks that all children are empty (including that there are no children)
      * @param name
-     * @param emptyLocales 
+     * @param emptyLocales
      * @param parent2child
      * @return
      */
     private static boolean allChildrenAreEmpty(
-        String locale, 
-        Set<String> emptyLocales, 
+        String locale,
+        Set<String> emptyLocales,
         Multimap<String, String> parent2child) {
 
         Collection<String> children = parent2child.get(locale);
diff --git a/tools/java/org/unicode/cldr/tool/GenerateScriptMetadata.java b/tools/java/org/unicode/cldr/tool/GenerateScriptMetadata.java
index a953734..82f449d 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateScriptMetadata.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateScriptMetadata.java
@@ -11,7 +11,7 @@
 import org.unicode.cldr.util.CLDRPaths;
 import org.unicode.cldr.util.FileCopier;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R3;
 import com.ibm.icu.impl.Utility;
@@ -25,14 +25,14 @@
 //        FileUtilities.appendFile(GenerateScriptMetadata.class, "GenerateScriptMetadata.txt", out);
         FileCopier.copy(GenerateScriptMetadata.class, "GenerateScriptMetadata.txt", out);
 
-        Set<R3<Integer, String, Info>> sorted = new TreeSet<R3<Integer, String, Info>>();
+        Set<R3<Integer, String, Info>> sorted = new TreeSet<>();
         for (String script : ScriptMetadata.getScripts()) {
             Info i = ScriptMetadata.getInfo(script);
             R3<Integer, String, Info> r = Row.of(i.rank, script, i);
             sorted.add(r);
         }
         if (ScriptMetadata.errors.size() > 0) {
-            System.err.println(CollectionUtilities.join(ScriptMetadata.errors, "\n\t"));
+            System.err.println(Joiner.on("\n\t").join(ScriptMetadata.errors));
             //throw new IllegalArgumentException();
         }
         VersionInfo currentUnicodeVersion = UCharacter.getUnicodeVersion();
diff --git a/tools/java/org/unicode/cldr/tool/GenerateSeedDurations.java b/tools/java/org/unicode/cldr/tool/GenerateSeedDurations.java
index f0125f5..5f641c5 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateSeedDurations.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateSeedDurations.java
@@ -46,7 +46,7 @@
     public static void main(String[] args) {
         Factory cldrFactory = testInfo.getCldrFactory();
         String[] data = new String[4];
-        Set<String> warnings = new LinkedHashSet<String>();
+        Set<String> warnings = new LinkedHashSet<>();
         for (String locale : cldrFactory.getAvailableLanguages()) {
             CLDRFile cldrFile = cldrFactory.make(locale, true);
             String localeString = locale + "\t" + testInfo.getEnglish().getName(locale);
diff --git a/tools/java/org/unicode/cldr/tool/GenerateSidewaysView.java b/tools/java/org/unicode/cldr/tool/GenerateSidewaysView.java
index 2434c85..9e7a457 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateSidewaysView.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateSidewaysView.java
@@ -143,7 +143,7 @@
         UCA = new org.unicode.cldr.util.MultiComparator(UCA2, new UTF16.StringComparator(true, false, 0));
     }
 
-    private static Map<PathHeader, Map<String, Set<String>>> path_value_locales = new TreeMap<PathHeader, Map<String, Set<String>>>();
+    private static Map<PathHeader, Map<String, Set<String>>> path_value_locales = new TreeMap<>();
     private static long startTime = System.currentTimeMillis();
 
     static RuleBasedCollator standardCollation = (RuleBasedCollator) Collator.getInstance(ULocale.ENGLISH);
@@ -309,14 +309,6 @@
             .format((System.currentTimeMillis() - startTime) / 1000.0));
     }
 
-    // static Comparator UCA;
-    // static {
-    // RuleBasedCollator UCA2 = (RuleBasedCollator) Collator.getInstance(ULocale.ROOT);
-    // UCA2.setNumericCollation(true);
-    // UCA2.setStrength(UCA2.IDENTICAL);
-    // UCA = new CollectionUtilities.MultiComparator(UCA2, new UTF16.StringComparator(true, false, 0) );
-    // }
-
     static final String[][] EXEMPLARS = {
         { "//ldml/characters/exemplarCharacters", "main", "Main Exemplars" },
         { "//ldml/characters/exemplarCharacters[@type=\"punctuation\"]", "punctuation", "Punctuation Exemplars" },
@@ -334,7 +326,7 @@
 
         // TODO change logic so that aux characters characters work well.
 
-        Map<String, UnicodeMap<Set<String>>> script_UnicodeMap = new TreeMap<String, UnicodeMap<Set<String>>>();
+        Map<String, UnicodeMap<Set<String>>> script_UnicodeMap = new TreeMap<>();
         // UnicodeMap mapping = new UnicodeMap();
         UnicodeSet stuffToSkip = new UnicodeSet("[:Han:]");
 
@@ -371,12 +363,12 @@
                 if (script == null) {
                     script = UScript.getName(UScript.UNKNOWN);
                 }
-                Set<String> temp = new HashSet<String>();
+                Set<String> temp = new HashSet<>();
                 temp.add(locale);
                 checkTr(script_UnicodeMap);
                 UnicodeMap<Set<String>> mapping = script_UnicodeMap.get(script);
                 if (mapping == null) {
-                    script_UnicodeMap.put(script, mapping = new UnicodeMap<Set<String>>());
+                    script_UnicodeMap.put(script, mapping = new UnicodeMap<>());
                 }
                 checkTr(script_UnicodeMap);
                 mapping.composeWith(exemplars, temp, setComposer);
@@ -413,9 +405,9 @@
             return; // skip these
         }
         // find out all the locales and all the characters
-        Set<String> allLocales = new TreeSet<String>(UCA);
-        Set<String> allChars = new TreeSet<String>(UCA);
-        Set<String> allStrings = new TreeSet<String>(UCA);
+        Set<String> allLocales = new TreeSet<>(UCA);
+        Set<String> allChars = new TreeSet<>(UCA);
+        Set<String> allStrings = new TreeSet<>(UCA);
         for (Set<String> locales : mapping.getAvailableValues()) {
             allLocales.addAll(locales);
             UnicodeSet unicodeSet = mapping.keySet(locales);
@@ -602,20 +594,21 @@
     // }
 
     static UnicodeMap.Composer<Set<String>> setComposer = new UnicodeMap.Composer<Set<String>>() {
+        @Override
         public Set<String> compose(int codepoint, String string, Set<String> a, Set<String> b) {
             if (a == null) {
                 return b;
             } else if (b == null) {
                 return a;
             } else {
-                TreeSet<String> result = new TreeSet<String>(a);
+                TreeSet<String> result = new TreeSet<>(a);
                 result.addAll(b);
                 return result;
             }
         }
     };
 
-    static Map<String, String> LOCALE_TO_SCRIPT = new HashMap<String, String>();
+    static Map<String, String> LOCALE_TO_SCRIPT = new HashMap<>();
 
     private static void loadInformation(Factory cldrFactory) {
         Set<String> alllocales = cldrFactory.getAvailable();
@@ -671,12 +664,12 @@
                 }
                 Map<String, Set<String>> value_locales = path_value_locales.get(cleanPath);
                 if (value_locales == null) {
-                    path_value_locales.put(cleanPath, value_locales = new TreeMap<String, Set<String>>(
+                    path_value_locales.put(cleanPath, value_locales = new TreeMap<>(
                         standardCollation));
                 }
                 Set<String> locales = value_locales.get(value);
                 if (locales == null) {
-                    value_locales.put(value, locales = new TreeSet<String>());
+                    value_locales.put(value, locales = new TreeSet<>());
                 }
                 locales.add(localeID + postFix[0]);
             }
@@ -693,7 +686,7 @@
     static PathHeader.Factory pathHeaderFactory;
 
     /**
-     * 
+     *
      * @param path
      * @param localePrefix
      * @return
@@ -706,13 +699,13 @@
     }
 
     private static String removeAttributes(String xpath, Set<String> skipAttributes) {
-        XPathParts parts = XPathParts.getInstance(xpath); // not frozen, for removeAttributes
+        XPathParts parts = XPathParts.getFrozenInstance(xpath).cloneAsThawed(); // not frozen, for removeAttributes
         removeAttributes(parts, skipAttributes);
         return parts.toString();
     }
 
     /**
-     * 
+     *
      * @param parts
      * @param skipAttributes
      */
@@ -727,7 +720,7 @@
         }
     }
 
-    static Set<String> skipSet = new HashSet<String>(Arrays.asList("draft", "alt"));
+    static Set<String> skipSet = new HashSet<>(Arrays.asList("draft", "alt"));
 
     static Status status = new Status();
 
@@ -747,7 +740,7 @@
             return value;
         }
         if (value.length() == 0) {
-            XPathParts parts = XPathParts.getInstance(fullPath); // not frozen, for removeAttributes
+            XPathParts parts = XPathParts.getFrozenInstance(fullPath).cloneAsThawed(); // not frozen, for removeAttributes
             removeAttributes(parts, skipSet);
             int limit = parts.size();
             value = parts.toString(limit - 1, limit);
@@ -847,7 +840,7 @@
 
     private static void finishAll(PrintWriter out, PrintWriter tsvFile) {
         // TODO Auto-generated method stub
-        tsvFile.println("# EOF");
+        //tsvFile.println("# EOF");
         tsvFile.close();
     }
 }
diff --git a/tools/java/org/unicode/cldr/tool/GenerateStatistics.java b/tools/java/org/unicode/cldr/tool/GenerateStatistics.java
index 618f07e..74c6c49 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateStatistics.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateStatistics.java
@@ -55,10 +55,10 @@
         //String dir = logDir + "main" + File.separator;
         // DraftChecker dc = new DraftChecker(dir);
         english = factory.make("en", true);
-        Set<String> languages = new TreeSet<String>(col), countries = new TreeSet<String>(col), draftLanguages = new TreeSet<String>(
-            col), draftCountries = new TreeSet<String>(col);
-        Set<Object> nativeLanguages = new TreeSet<Object>(), nativeCountries = new TreeSet<Object>(), draftNativeLanguages = new TreeSet<Object>(),
-            draftNativeCountries = new TreeSet<Object>();
+        Set<String> languages = new TreeSet<>(col), countries = new TreeSet<>(col), draftLanguages = new TreeSet<>(
+            col), draftCountries = new TreeSet<>(col);
+        Set<Object> nativeLanguages = new TreeSet<>(), nativeCountries = new TreeSet<>(), draftNativeLanguages = new TreeSet<>(),
+            draftNativeCountries = new TreeSet<>();
         int localeCount = 0;
         int draftLocaleCount = 0;
 
@@ -117,7 +117,7 @@
      */
     private static Set<String> removeSingleLanguagesWhereWeHaveScripts(Set<String> contents) {
         StandardCodes sc = StandardCodes.make();
-        contents = new TreeSet<String>(contents); // make writable
+        contents = new TreeSet<>(contents); // make writable
         if (false && HACK) {
             contents.add("bs_Latn");
             contents.add("bs_Cyrl");
@@ -125,7 +125,7 @@
             contents.add("bs_Cyrl_BA");
         }
         // find the languages with scripts
-        Set<String> toRemove = new HashSet<String>();
+        Set<String> toRemove = new HashSet<>();
         if (HACK) toRemove.add("sh");
 
         for (Iterator<String> it = contents.iterator(); it.hasNext();) {
@@ -189,8 +189,8 @@
             s.add(llist);
         }
 
-        Set<String> titleSet = new TreeSet<String>(col);
-        Set<String> qualifierSet = new TreeSet<String>(col);
+        Set<String> titleSet = new TreeSet<>(col);
+        Set<String> qualifierSet = new TreeSet<>(col);
 
         for (Iterator<String> it = sb.keySet().iterator(); it.hasNext();) {
             String englishName = it.next();
@@ -332,6 +332,7 @@
             contents = new Object[] { englishName, locale, localName };
         }
 
+        @Override
         public int compareTo(Object o) {
             return comp.compare(contents, ((LanguageList) o).contents);
         }
@@ -353,8 +354,8 @@
         if (notitlecase) return in;
         String result = UCharacter.toTitleCase(new ULocale(localeID), in, null);
         if (HACK) {
-            result = GenerateCldrTests.replace(result, "U.s.", "U.S.");
-            result = GenerateCldrTests.replace(result, "S.a.r.", "S.A.R.");
+            result = result.replace("U.s.", "U.S.");
+            result = result.replace("S.a.r.", "S.A.R.");
         }
         return result;
     }
@@ -405,7 +406,7 @@
         return name;
     }
 
-    static Map<String, String> fixCountryNames = new HashMap<String, String>();
+    static Map<String, String> fixCountryNames = new HashMap<>();
     static {
         fixCountryNames.put("\u0408\u0443\u0433\u043E\u0441\u043B\u0430\u0432\u0438\u0458\u0430",
             "\u0421\u0440\u0431\u0438\u0458\u0430 \u0438 \u0426\u0440\u043D\u0430 \u0413\u043E\u0440\u0430");
@@ -416,7 +417,7 @@
 
     public static class DraftChecker {
         String dir;
-        Map<String, Object> cache = new HashMap<String, Object>();
+        Map<String, Object> cache = new HashMap<>();
         Object TRUE = new Object();
         Object FALSE = new Object();
 
diff --git a/tools/java/org/unicode/cldr/tool/GenerateSubdivisions.java b/tools/java/org/unicode/cldr/tool/GenerateSubdivisions.java
index bd27ccd..ec3018f 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateSubdivisions.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateSubdivisions.java
@@ -31,7 +31,7 @@
 
 
     // TODO: consider whether to use the last archive directory to generate
-    // There are pros and cons. 
+    // There are pros and cons.
     // Pros are that we don't introduce "fake" deprecated elements that are introduced and deprecated during the 6 month CLDR cycle
     // Cons are that we may have to repeat work
 
@@ -99,8 +99,8 @@
 
         SubdivisionSet sdset1 = new SubdivisionSet(GenerateSubdivisions.ISO_SUBDIVISION_CODES);
         SubDivisionExtractor sdset = new SubDivisionExtractor(sdset1,
-            SubdivisionInfo.VALIDITY_FORMER, 
-            SubdivisionInfo.SUBDIVISION_ALIASES_FORMER, 
+            SubdivisionInfo.VALIDITY_FORMER,
+            SubdivisionInfo.SUBDIVISION_ALIASES_FORMER,
             SubdivisionInfo.formerRegionToSubdivisions);
 
         try (PrintWriter pw = FileUtilities.openUTF8Writer(CLDRPaths.GEN_DIRECTORY, "subdivision/subdivisions.xml")) {
diff --git a/tools/java/org/unicode/cldr/tool/GenerateSupplementalZoneData.java b/tools/java/org/unicode/cldr/tool/GenerateSupplementalZoneData.java
index 762fa7f..817252a 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateSupplementalZoneData.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateSupplementalZoneData.java
@@ -26,7 +26,7 @@
      */
     public static void main(String[] args) throws Exception {
         ZoneParser zp = new ZoneParser();
-        Set<String> tzids = new TreeSet<String>();
+        Set<String> tzids = new TreeSet<>();
         tzids.addAll(zp.getZoneData().keySet());
         // Add POSIX legacy IDs
         tzids.add("EST5EDT");
diff --git a/tools/java/org/unicode/cldr/tool/GenerateTempDateData.java b/tools/java/org/unicode/cldr/tool/GenerateTempDateData.java
index 7c6b2c9..6ef1185 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateTempDateData.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateTempDateData.java
@@ -95,6 +95,7 @@
      * }
      */
     static class RBundle extends ListResourceBundle {
+        @Override
         protected Object[][] getContents() {
             // TODO Auto-generated method stub
             return null;
diff --git a/tools/java/org/unicode/cldr/tool/GenerateTransform.java b/tools/java/org/unicode/cldr/tool/GenerateTransform.java
index daf91ef..2c6cb05 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateTransform.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateTransform.java
@@ -35,13 +35,13 @@
         + "transforms"
         + File.separator;
 
-    private final Set<Pair<String, String>> pairs = new TreeSet<Pair<String, String>>(
+    private final Set<Pair<String, String>> pairs = new TreeSet<>(
         new MyComparator(ULocale.ROOT));
-    private final Map<String, String> source_target = new LinkedHashMap<String, String>();
-    private final Map<String, String> target_source = new LinkedHashMap<String, String>();
+    private final Map<String, String> source_target = new LinkedHashMap<>();
+    private final Map<String, String> target_source = new LinkedHashMap<>();
     private final UnicodeContext addDotBetween = new UnicodeContext();
     private final UnicodeContext removeDot = new UnicodeContext();
-    private final Map<String, String> target_retarget = new LinkedHashMap<String, String>();
+    private final Map<String, String> target_retarget = new LinkedHashMap<>();
 
     private boolean sourceCased = false;
     private boolean targetCased = false;
@@ -217,6 +217,7 @@
             collator.setStrength(Collator.IDENTICAL);
         }
 
+        @Override
         public int compare(Pair<String, String> arg0, Pair<String, String> arg1) {
             int result = arg0.getFirst().length()
                 - arg1.getFirst().length();
@@ -234,7 +235,7 @@
     }
 
     static class UnicodeContext {
-        Map<String, UnicodeSet> first_second = new LinkedHashMap<String, UnicodeSet>();
+        Map<String, UnicodeSet> first_second = new LinkedHashMap<>();
 
         void add(String a, String b) {
             UnicodeSet second = first_second.get(a);
@@ -245,7 +246,7 @@
         }
 
         Set<UnicodeSet[]> get() {
-            Map<UnicodeSet, UnicodeSet> second_first = new LinkedHashMap<UnicodeSet, UnicodeSet>();
+            Map<UnicodeSet, UnicodeSet> second_first = new LinkedHashMap<>();
             for (String first : first_second.keySet()) {
                 UnicodeSet second = first_second.get(first);
                 UnicodeSet firstSet = second_first.get(second);
@@ -254,7 +255,7 @@
                 }
                 firstSet.add(first);
             }
-            Set<UnicodeSet[]> result = new LinkedHashSet<UnicodeSet[]>();
+            Set<UnicodeSet[]> result = new LinkedHashSet<>();
             for (UnicodeSet second : second_first.keySet()) {
                 UnicodeSet first = second_first.get(second);
                 result.add(new UnicodeSet[] { first, second });
@@ -299,10 +300,12 @@
             output.setLength(0);
         }
 
+        @Override
         public String toString() {
             return output.toString();
         }
 
+        @Override
         public void handlePathValue(String path, String value) {
             if (path.indexOf("/comment") >= 0) {
                 if (!value.trim().startsWith("#"))
diff --git a/tools/java/org/unicode/cldr/tool/GenerateTransformCharts.java b/tools/java/org/unicode/cldr/tool/GenerateTransformCharts.java
index 57bf22c..d8e7bef 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateTransformCharts.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateTransformCharts.java
@@ -72,7 +72,7 @@
     // Latin Arabic Bengali Cyrillic Devanagari Greek Greek/UNGEGN Gujarati Gurmukhi Hangul Hebrew Hiragana Kannada
     // Katakana Malayalam Oriya Tamil Telugu Thai
 
-    static Map<String, UnicodeSet> scriptExtras = new HashMap<String, UnicodeSet>();
+    static Map<String, UnicodeSet> scriptExtras = new HashMap<>();
     static {
         scriptExtras.put("Arab", new UnicodeSet("[\u0660-\u0669]"));
         scriptExtras.put("Hang", TestTransformsSimple.getRepresentativeHangul());
@@ -353,7 +353,7 @@
             + "For more information, see below.</blockquote>");
         index.flush();
         index.println("<ul>");
-        Set<String> nonScripts = new TreeSet<String>(Arrays.asList("ConjoiningJamo", "InterIndic", "Han",
+        Set<String> nonScripts = new TreeSet<>(Arrays.asList("ConjoiningJamo", "InterIndic", "Han",
             "el", "Jamo", "JapaneseKana", "Korean", "NumericPinyin", "ThaiLogical", "ThaiSemi"));
         try {
 //            SimpleEquivalenceClass ec = new SimpleEquivalenceClass(UCA);
@@ -486,15 +486,15 @@
 //            return;
 //        }
         CLDRTransforms.ParsedTransformID parsedID = new CLDRTransforms.ParsedTransformID();
-        Set<String> ids = new TreeSet<String>();
-        Map<String, UnicodeSet> id_unmapped = new HashMap<String, UnicodeSet>();
-        Map<String, Map<String, String>> id_noRoundTrip = new HashMap<String, Map<String, String>>();
-        Set<String> latinItems = new TreeSet<String>(UCA);
+        Set<String> ids = new TreeSet<>();
+        Map<String, UnicodeSet> id_unmapped = new HashMap<>();
+        Map<String, Map<String, String>> id_noRoundTrip = new HashMap<>();
+        Set<String> latinItems = new TreeSet<>(UCA);
 
-        Map<String, String> nonLatinToLatin = new TreeMap<String, String>(UCA);
-        Set<String> totalLatin = new TreeSet<String>();
-        Map<String, Map<String, Map<String, Boolean>>> latinToTaggedNonLatin = new TreeMap<String, Map<String, Map<String, Boolean>>>(UCA);
-        Map<String, Map<String, Map<String, Boolean>>> nonLatinToLatinTagged = new TreeMap<String, Map<String, Map<String, Boolean>>>(UCA);
+        Map<String, String> nonLatinToLatin = new TreeMap<>(UCA);
+        Set<String> totalLatin = new TreeSet<>();
+        Map<String, Map<String, Map<String, Boolean>>> latinToTaggedNonLatin = new TreeMap<>(UCA);
+        Map<String, Map<String, Map<String, Boolean>>> nonLatinToLatinTagged = new TreeMap<>(UCA);
 
         UnicodeSet totalNonLatinSet = new UnicodeSet();
 
@@ -514,7 +514,7 @@
             // }
             UnicodeSet nonLatinUnmapped = new UnicodeSet();
             id_unmapped.put(id, nonLatinUnmapped);
-            Map<String, String> noRoundTrip = new TreeMap<String, String>(UCA);
+            Map<String, String> noRoundTrip = new TreeMap<>(UCA);
             id_noRoundTrip.put(id, noRoundTrip);
             ids.add(parsedID.toString());
             UnicodeSet nonLatinUnicodeSet = getNonLatinSet(script, scriptCode);
@@ -776,13 +776,13 @@
         Map<String, Map<String, Map<String, Boolean>>> xToTagToYToRoundtrip, boolean fromNonLatinToLatin,
         String scriptChoice, UnicodeSet totalNonLatinSet) {
 
-        Set<String> extras = new TreeSet<String>(UCA);
+        Set<String> extras = new TreeSet<>(UCA);
         for (UnicodeSetIterator it = new UnicodeSetIterator(totalNonLatinSet); it.next();) {
             extras.add(it.getString());
         }
 
         // find the ids that actually occur
-        Set<String> ids = new TreeSet<String>(UCA);
+        Set<String> ids = new TreeSet<>(UCA);
         for (String x : xToTagToYToRoundtrip.keySet()) {
             ids.addAll(xToTagToYToRoundtrip.get(x).keySet());
         }
@@ -945,6 +945,7 @@
 
     @SuppressWarnings({ "rawtypes", "unchecked" })
     static public class CollectionOfComparablesComparator implements Comparator {
+        @Override
         public int compare(Object o1, Object o2) {
             if (o1 == null) {
                 if (o2 == null) return 0;
@@ -973,6 +974,7 @@
     }
 
     static class ReverseComparator implements Comparator<Object> {
+        @Override
         public int compare(Object o1, Object o2) {
             String a = o1.toString();
             char a1 = a.charAt(0);
diff --git a/tools/java/org/unicode/cldr/tool/GenerateUnicodeCounts.java b/tools/java/org/unicode/cldr/tool/GenerateUnicodeCounts.java
index 13fe4e3..3d56af6 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateUnicodeCounts.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateUnicodeCounts.java
@@ -8,8 +8,8 @@
 
 public class GenerateUnicodeCounts {
     public static void main(String[] args) {
-        UnicodeMap<VersionInfo> ages = new UnicodeMap<VersionInfo>();
-        UnicodeMap<String> scripts = new UnicodeMap<String>();
+        UnicodeMap<VersionInfo> ages = new UnicodeMap<>();
+        UnicodeMap<String> scripts = new UnicodeMap<>();
         UnicodeSet us = new UnicodeSet("[[:cn:][:cs:][:co:]]").complement();
         for (String s : us) {
             int i = s.codePointAt(0);
diff --git a/tools/java/org/unicode/cldr/tool/GenerateValidityXml.java b/tools/java/org/unicode/cldr/tool/GenerateValidityXml.java
index 55db9b6..1eecefd 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateValidityXml.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateValidityXml.java
@@ -128,7 +128,7 @@
             Status oldStatus = get(currency);
             if (oldStatus == null || newStatus.compareTo(oldStatus) < 0) {
                 put(currency, newStatus);
-            }            
+            }
         }
     }
 
@@ -148,7 +148,7 @@
             try (TempPrintWriter output = TempPrintWriter.openUTF8Writer(CLDRPaths.COMMON_DIRECTORY, "validity/" + type + ".xml")) {
                 adder.target = output;
                 output.append(DtdType.supplementalData.header(MethodHandles.lookup().lookupClass())
-                    + "\t<version number=\"$Revision" /*hack to stop SVN changing this*/ + "$\"/>\n"
+                    + "\t<version number=\"$Revision" + "$\"/>\n"
                     + "\t<idValidity>\n");
                 for (Entry<Status, Collection<String>> entry2 : subtypeMap.asMap().entrySet()) {
                     Validity.Status subtype = entry2.getKey();
@@ -321,7 +321,7 @@
                     switch (code) {
                     case "Aran":
                     case "Qaag":
-                    case "Zsye": 
+                    case "Zsye":
                     case "Zanb":
                     case "Zinh":
                     case "Zyyy":
@@ -329,7 +329,7 @@
                         break;
                     default:
                         switch (subtype) {
-                        case private_use: 
+                        case private_use:
                             if (code.compareTo("Qaaq") < 0) {
                                 subtype = Validity.Status.reserved;
                             }
diff --git a/tools/java/org/unicode/cldr/tool/GenerateXMB.java b/tools/java/org/unicode/cldr/tool/GenerateXMB.java
index 6e66428..f7dd199 100644
--- a/tools/java/org/unicode/cldr/tool/GenerateXMB.java
+++ b/tools/java/org/unicode/cldr/tool/GenerateXMB.java
@@ -67,7 +67,7 @@
 import org.xml.sax.SAXParseException;
 import org.xml.sax.XMLReader;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
@@ -94,7 +94,7 @@
         DATE = dateFormat.format(new Date());
     }
     static final String stock = "en|ar|de|es|fr|it|ja|ko|nl|pl|ru|th|tr|pt|zh|zh_Hant|bg|ca|cs|da|el|fa|fi|fil|hi|hr|hu|id|lt|lv|ro|sk|sl|sr|sv|uk|vi|he|nb|et|ms|am|bn|gu|is|kn|ml|mr|sw|ta|te|ur|eu|gl|af|zu|en_GB|es_419|pt_PT|fr_CA|zh_Hant_HK";
-    private static final HashSet<String> REGION_LOCALES = new HashSet<String>(Arrays.asList(stock.split("\\|")));
+    private static final HashSet<String> REGION_LOCALES = new HashSet<>(Arrays.asList(stock.split("\\|")));
 
     final static Options myOptions = new Options("In normal usage, you set the -t option for the target.")
         .add("target", ".*", CLDRPaths.TMP_DIRECTORY + "dropbox/xmb/",
@@ -119,7 +119,7 @@
     // static Matcher contentMatcher;
     static Matcher pathMatcher;
     static RegexLookup<String> pathFindRemover = new RegexLookup<String>().loadFromFile(GenerateXMB.class,
-        "xmbSkip.txt");; // .compile("//ldml/dates/calendars/calendar\\[@type=\"(?!gregorian).*").matcher("");
+        "xmbSkip.txt"); // .compile("//ldml/dates/calendars/calendar\\[@type=\"(?!gregorian).*").matcher("");
     static PrettyPath prettyPath = new PrettyPath();
     static int errors = 0;
     static Relation<String, String> path2errors = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
@@ -129,7 +129,7 @@
 
     public static final boolean DEBUG = false;
 
-    private static final HashSet<String> SKIP_LOCALES = new HashSet<String>(
+    private static final HashSet<String> SKIP_LOCALES = new HashSet<>(
         Arrays.asList(new String[] { "en", "root" }));
 
     public static String DTD_VERSION;
@@ -140,7 +140,7 @@
         BRACES, // e.g. {NAME}
         XML, // e.g. <ph name='NAME' />
         XML_EXAMPLE // e.g. <ph name='NAME' /><ex>EXAMPLE</ex>{0}</ph>
-    };
+    }
 
     public static void main(String[] args) throws Exception {
         myOptions.parse(args, true);
@@ -300,9 +300,9 @@
         log.close();
     }
 
-    static Output<String[]> matches = new Output<String[]>();
-    static List<String> failures = new ArrayList<String>();
-    static Output<Finder> matcherFound = new Output<Finder>();
+    static Output<String[]> matches = new Output<>();
+    static List<String> failures = new ArrayList<>();
+    static Output<Finder> matcherFound = new Output<>();
 
     enum PathStatus {
         SKIP, KEEP, MAYBE
@@ -316,7 +316,7 @@
         }
         String skipPath = pathFindRemover.get(path, null, matches, matcherFound, myFailures);
         if (myFailures != null && failures.size() != 0) {
-            System.out.println("Failures\n\t" + CollectionUtilities.join(failures, "\n\t"));
+            System.out.println("Failures\n\t" + Joiner.on("\n\t").join(failures));
             failures.clear();
         }
         if (skipPath == null || skipPath.equals("MAYBE")) {
@@ -374,7 +374,7 @@
     private static void showDefaultContents(String targetDir, CLDRFile english) throws IOException {
         PrintWriter out = FileUtilities.openUTF8Writer(targetDir + "/log/", "locales.txt");
         String[] locales = stock.split("\\|");
-        Set<R2<String, String>> sorted = new TreeSet<R2<String, String>>();
+        Set<R2<String, String>> sorted = new TreeSet<>();
         for (String locale : locales) {
             if (locale.isEmpty()) continue;
             String name = english.getName(locale);
@@ -440,7 +440,7 @@
 
         String extension = "xml";
         Relation<String, String> reasonsToPaths = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
-        Set<String> seenStarred = new HashSet<String>();
+        Set<String> seenStarred = new HashSet<>();
 
         Relation<String, Row.R2<PathInfo, String>> countItems = Relation.of(
             new TreeMap<String, Set<Row.R2<PathInfo, String>>>(), TreeSet.class);
@@ -647,10 +647,10 @@
         int wordCount = 0;
         PluralInfo pluralInfo = supplementalDataInfo.getPlurals(locale);
         int lineCount = 0;
-        Set<String> errorSet = new LinkedHashSet<String>();
+        Set<String> errorSet = new LinkedHashSet<>();
         for (Entry<String, Set<R2<PathInfo, String>>> entry : countItems.keyValuesSet()) {
             String countLessPath = entry.getKey();
-            Map<String, String> fullValues = new TreeMap<String, String>();
+            Map<String, String> fullValues = new TreeMap<>();
             PathInfo pathInfo = null;
             String value = null;
             for (R2<PathInfo, String> entry2 : entry.getValue()) {
@@ -924,7 +924,7 @@
 
         public Map<String, String> getPlaceholderReplacementsToOriginal() {
             if (placeholders == null) return null;
-            Map<String, String> placeholderOutput = new LinkedHashMap<String, String>();
+            Map<String, String> placeholderOutput = new LinkedHashMap<>();
             for (String id : placeholders.keySet()) {
                 placeholderOutput.put(id, getPlaceholderWithExample(id));
             }
@@ -988,6 +988,7 @@
             return path.compareTo(arg0.path);
         }
 
+        @Override
         public String toString() {
             return path;
         }
@@ -995,8 +996,8 @@
 
     static class EnglishInfo implements Iterable<PathInfo> {
 
-        final Map<String, PathInfo> pathToPathInfo = new TreeMap<String, PathInfo>();
-        final Map<Long, PathInfo> longToPathInfo = new HashMap<Long, PathInfo>();
+        final Map<String, PathInfo> pathToPathInfo = new TreeMap<>();
+        final Map<Long, PathInfo> longToPathInfo = new HashMap<>();
         final CLDRFile english;
 
         PathInfo getPathInfo(long hash) {
@@ -1022,9 +1023,9 @@
             this.english = english;
             // we don't want the fully resolved paths, but we do want the direct inheritance from root.
             //Status status = new Status();
-            Map<String, List<Set<String>>> starredPaths = new TreeMap<String, List<Set<String>>>();
+            Map<String, List<Set<String>>> starredPaths = new TreeMap<>();
 
-            HashSet<String> metazonePaths = new HashSet<String>();
+            HashSet<String> metazonePaths = new HashSet<>();
             // ^//ldml/dates/timeZoneNames/metazone\[@type="([^"]*)"]
             for (MetazoneInfo metazoneInfo : MetazoneInfo.METAZONE_LIST) {
                 for (String item : metazoneInfo.getTypes()) {
@@ -1035,7 +1036,7 @@
             }
 
             // TODO add short countries
-            HashSet<String> extraLanguages = new HashSet<String>();
+            HashSet<String> extraLanguages = new HashSet<>();
             // ldml/localeDisplayNames/languages/language[@type=".*"]
 
             for (String langId : PathDescription.EXTRA_LANGUAGES) {
@@ -1047,6 +1048,7 @@
                 .addAll(english)
                 .removeAll(
                     new Transform<String, Boolean>() {
+                        @Override
                         public Boolean transform(String source) {
                             return source.startsWith("//ldml/dates/timeZoneNames/metazone") ? Boolean.TRUE
                                 : Boolean.FALSE;
@@ -1055,14 +1057,14 @@
                 .get();
             sorted.addAll(metazonePaths);
             if (DEBUG) {
-                TreeSet<String> diffs = new TreeSet<String>(extraLanguages);
+                TreeSet<String> diffs = new TreeSet<>(extraLanguages);
                 diffs.removeAll(sorted);
                 System.out.println(diffs);
             }
             sorted.addAll(extraLanguages);
 
             // add the extra Count items.
-            Map<String, String> extras = new HashMap<String, String>();
+            Map<String, String> extras = new HashMap<>();
             Matcher m = COUNT_ATTRIBUTE.matcher("");
 
             for (String path : sorted) {
@@ -1080,7 +1082,7 @@
             sorted.addAll(extras.keySet());
 
             Relation<String, String> reasonsToPaths = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
-            Set<String> missingDescriptions = new TreeSet<String>();
+            Set<String> missingDescriptions = new TreeSet<>();
             //Output<String[]> pathArguments = new Output<String[]>();
 
             CoverageLevel2 coverageLevel = CoverageLevel2.getInstance("en");
@@ -1208,7 +1210,7 @@
 
     static final Set<String> HAS_DAYLIGHT;
     static {
-        Set<String> hasDaylightTemp = new HashSet<String>();
+        Set<String> hasDaylightTemp = new HashSet<>();
         Date date = new Date();
         main: for (String zoneId : sc.getCanonicalTimeZones()) {
             TimeZone zone = TimeZone.getTimeZone(zoneId);
@@ -1232,7 +1234,7 @@
     private static PrintWriter countFile;
     static {
         // start with certain special-case countries
-        Set<String> singularCountries = new HashSet<String>(
+        Set<String> singularCountries = new HashSet<>(
             Arrays.asList("CL EC ES NZ PT AQ FM GL KI UM PF".split(" ")));
 
         Map<String, Set<String>> countryToZoneSet = sc.getCountryToZoneSet();
@@ -1248,7 +1250,7 @@
                 continue;
             }
             // make a set of sets
-            List<TimeZone> initial = new ArrayList<TimeZone>();
+            List<TimeZone> initial = new ArrayList<>();
             for (String s : zones) {
                 initial.add(TimeZone.getTimeZone(s));
             }
@@ -1312,7 +1314,7 @@
         static final List<MetazoneInfo> METAZONE_LIST;
         static {
             // Set<String> zones = supplementalDataInfo.getCanonicalTimeZones();
-            ArrayList<MetazoneInfo> result = new ArrayList<MetazoneInfo>();
+            ArrayList<MetazoneInfo> result = new ArrayList<>();
 
             Map<String, String> zoneToCountry = sc.getZoneToCounty();
 
@@ -1341,6 +1343,7 @@
             METAZONE_LIST = Collections.unmodifiableList(result);
         }
 
+        @Override
         public String toString() {
             return sc.getZoneToCounty().get(golden)
                 + "\t" + metazoneId
@@ -1390,7 +1393,7 @@
             FileInputStream fis = new FileInputStream(file);
             XMLReader xmlReader = XMLFileReader.createXMLReader(false);
             xmlReader.setErrorHandler(new MyErrorHandler());
-            Map<String, String> data = new TreeMap<String, String>();
+            Map<String, String> data = new TreeMap<>();
             xmlReader.setContentHandler(new MyContentHandler(locale, data, info));
             InputSource is = new InputSource(fis);
             is.setSystemId(file);
@@ -1415,16 +1418,19 @@
     }
 
     static class MyErrorHandler implements ErrorHandler {
+        @Override
         public void error(SAXParseException exception) throws SAXException {
             System.out.println("\nerror: " + XMLFileReader.showSAX(exception));
             throw exception;
         }
 
+        @Override
         public void fatalError(SAXParseException exception) throws SAXException {
             System.out.println("\nfatalError: " + XMLFileReader.showSAX(exception));
             throw exception;
         }
 
+        @Override
         public void warning(SAXParseException exception) throws SAXException {
             System.out.println("\nwarning: " + XMLFileReader.showSAX(exception));
             throw exception;
@@ -1439,7 +1445,7 @@
         private StringBuilder currentText = new StringBuilder();
         private long lastId;
         private String lastPluralTag;
-        private Map<String, String> pluralTags = new LinkedHashMap<String, String>();
+        private Map<String, String> pluralTags = new LinkedHashMap<>();
         private Set<String> pluralKeywords;
 
         public MyContentHandler(ULocale locale, Map<String, String> data, EnglishInfo info) {
diff --git a/tools/java/org/unicode/cldr/tool/GeneratedPluralSamples.java b/tools/java/org/unicode/cldr/tool/GeneratedPluralSamples.java
index 0655846..4432c91 100644
--- a/tools/java/org/unicode/cldr/tool/GeneratedPluralSamples.java
+++ b/tools/java/org/unicode/cldr/tool/GeneratedPluralSamples.java
@@ -25,10 +25,11 @@
 import org.unicode.cldr.util.SupplementalDataInfo.PluralType;
 import org.unicode.cldr.util.TempPrintWriter;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Relation;
+import com.ibm.icu.text.FixedDecimal;
 import com.ibm.icu.text.PluralRules;
-import com.ibm.icu.text.PluralRules.FixedDecimal;
+import com.ibm.icu.text.PluralRules.Operand;
 
 /**
  * Regenerate the plural files. Related classes are:
@@ -46,7 +47,7 @@
     private static final int UNBOUNDED_LIMIT = 20;
     private static final String RANGE_SEPARATOR = "~";
     public static final String SEQUENCE_SEPARATOR = ", ";
-    
+
     static SupplementalDataInfo sInfo = CLDRConfig.getInstance().getSupplementalDataInfo(); // forward declaration
 
     static class Range implements Comparable<Range> {
@@ -127,11 +128,13 @@
             return b;
         }
 
+        @Override
         public String toString() {
             return format(new StringBuilder()).toString();
         }
     }
 
+
     private static void append(StringBuilder b, long startValue2, long visibleFractionDigitCount2) {
         int len = b.length();
         for (int i = 0; i < visibleFractionDigitCount2; ++i) {
@@ -155,11 +158,11 @@
      */
     static class Ranges {
         @SuppressWarnings("unchecked")
-        Set<Range>[] data = new Set[5];
+        Set<Range>[] data = new Set[10];
         int size = 0;
         {
             for (int i = 0; i < data.length; ++i) {
-                data[i] = new TreeSet<Range>();
+                data[i] = new TreeSet<>();
             }
         }
 
@@ -231,7 +234,7 @@
             Warning, Error
         }
 
-        Set<String> bounds = new TreeSet<String>();
+        Set<String> bounds = new TreeSet<>();
 
         public void add(Type type, String string) {
             if (string != null && !string.isEmpty()) {
@@ -254,16 +257,18 @@
     static class DataSample {
         int count;
         int countNoTrailing = -1;
-        final Set<Double> noTrailing = new TreeSet<Double>();
+        final Set<Double> noTrailing = new TreeSet<>();
         final Ranges samples = new Ranges();
-        final FixedDecimal[] digitToSample = new FixedDecimal[10];
+        final FixedDecimal[] digitToSample = new FixedDecimal[20];
         final PluralRules.SampleType sampleType;
+        final Set<FixedDecimal> exponentSamples = new TreeSet<>();
         private boolean isBounded;
 
         public DataSample(PluralRules.SampleType sampleType) {
             this.sampleType = sampleType;
         }
 
+        @Override
         public String toString() {
             Ranges samples2 = new Ranges(samples);
             for (FixedDecimal ni : digitToSample) {
@@ -271,10 +276,29 @@
                     samples2.add(ni);
                 }
             }
-            return samples2 + (isBounded ? "" : ", …");
+            return format(samples2) + (isBounded ? "" : ", …");
+        }
+
+        private String format(Ranges samples2) {
+            StringBuilder builder = new StringBuilder().append(samples2);
+            int max = 5;
+            for (FixedDecimal exponentSample : exponentSamples) {
+                if (builder.length() != 0) {
+                    builder.append(", ");
+                }
+                builder.append(exponentSample);
+                if (--max < 0) {
+                    break;
+                }
+            }
+            return builder.toString();
         }
 
         private void add(FixedDecimal ni) {
+            if (ni.getPluralOperand(Operand.e) != 0) {
+                exponentSamples.add(ni);
+                return;
+            }
             ++count;
             if (samples.size() < SAMPLE_LIMIT * 2) {
                 samples.add(ni);
@@ -293,17 +317,19 @@
             DataSample other = (DataSample) obj;
             return count == other.count
                 && samples.equals(other.samples)
-                && digitToSample.equals(other.digitToSample);
+                && digitToSample.equals(other.digitToSample)
+                && exponentSamples.equals(other.exponentSamples)
+                ;
         }
 
         @Override
         public int hashCode() {
             // TODO Auto-generated method stub
-            return count ^ samples.hashCode() ^ Arrays.asList(digitToSample).hashCode();
+            return count ^ samples.hashCode() ^ Arrays.asList(digitToSample).hashCode() ^ exponentSamples.hashCode();
         }
 
         public void freeze(String keyword, PluralRules rule) {
-            countNoTrailing = noTrailing.size();
+            countNoTrailing = noTrailing.size() + exponentSamples.size();
             //System.out.println(sampleType + ", " + keyword + ", " + countNoTrailing + ", " + rule);
             isBounded = computeBoundedWithSize(keyword, rule);
             if (countNoTrailing > 0) {
@@ -370,6 +396,7 @@
             }
         }
 
+        @Override
         public String toString() {
             String integersString = integers.toString();
             String decimalsString = type == PluralType.ordinal ? "" : decimals.toString();
@@ -440,33 +467,50 @@
         return result;
     }
 
-    private final TreeMap<String, DataSamples> keywordToData = new TreeMap<String, DataSamples>();
+    private final TreeMap<String, DataSamples> keywordToData = new TreeMap<>();
     private final PluralType type;
 
-    GeneratedPluralSamples(PluralInfo pluralInfo, PluralType type) {
+    GeneratedPluralSamples(PluralInfo pluralInfo, PluralType type, Set<String> equivalentLocales) {
         this.type = type;
-        PluralInfo pluralRule = pluralInfo;
+
         // 9999, powers; no decimals
-        collect(pluralRule, 10000, 0);
-        collect10s(pluralRule, 10000, 1000000, 0);
+        collect(pluralInfo, 0, 10_000, 0);
+        collect10s(pluralInfo, 10_000, 1_000_000, 0);
 
         if (type == PluralType.cardinal) {
-
             // 9999.9, powers .0
-            collect(pluralRule, 10000, 1);
-            collect10s(pluralRule, 10000, 1000000, 1);
+            collect(pluralInfo, 0, 10_000, 1);
+            collect10s(pluralInfo, 10_000, 1_000_000, 1);
 
             // 999.99, powers .00
-            collect(pluralRule, 1000, 2);
-            collect10s(pluralRule, 1000, 1000000, 2);
+            collect(pluralInfo, 0, 1000, 2);
+            collect10s(pluralInfo, 1000, 1_000_000, 2);
 
             // 99.999, powers .000
-            collect(pluralRule, 100, 3);
-            collect10s(pluralRule, 100, 1000000, 3);
+            collect(pluralInfo, 0, 100, 3);
+            collect10s(pluralInfo, 100, 1_000_000, 3);
 
             // 9.9999, powers .0000
-            collect(pluralRule, 10, 4);
-            collect10s(pluralRule, 10, 1000000, 4);
+            collect(pluralInfo, 0, 10, 4);
+            collect10s(pluralInfo, 10, 1_000_000, 4);
+
+            // add some exponent samples for French
+            // TODO check for any rule with exponent operand and do the same.
+            if (equivalentLocales.contains("fr")) {
+                final PluralRules pluralRules = pluralInfo.getPluralRules();
+                for (int i = 1; i < 15; ++i) {
+                    add(pluralRules, i, 0, 3);
+                    add(pluralRules, i, 0, 6);
+                    add(pluralRules, i, 0, 9);
+                    add(pluralRules, i+0.1, 1, 3);
+                    add(pluralRules, i+0.1, 1, 6);
+                    add(pluralRules, i+0.1, 1, 9);
+                    add(pluralRules, i+0.0001, 4, 3);
+                    add(pluralRules, i+0.0000001, 7, 6);
+                    add(pluralRules, i+0.0000000001, 10, 9);
+                }
+                int debug = 0;
+            }
         }
 
         for (Entry<String, DataSamples> entry : keywordToData.entrySet()) {
@@ -474,16 +518,16 @@
         }
     }
 
-    private void collect10s(PluralInfo pluralInfo, int start, int end, int decimals) {
+    private void collect10s(PluralInfo pluralInfo, long start, long end, int decimals) {
         double power = Math.pow(10, decimals);
         for (long i = start * (int) power; i <= end * (int) power; i *= 10) {
             add(pluralInfo, i / power, decimals);
         }
     }
 
-    private void collect(PluralInfo pluralInfo, int limit, int decimals) {
+    private void collect(PluralInfo pluralInfo, long start, long limit, int decimals) {
         double power = Math.pow(10, decimals);
-        for (int i = 0; i <= limit * (int) power; ++i) {
+        for (long i = start; i <= limit * (int) power; ++i) {
             add(pluralInfo, i / power, decimals);
         }
     }
@@ -497,6 +541,23 @@
         String keyword = pluralRules.select(ni);
 
         INFO.add(Info.Type.Warning, checkForDuplicates(pluralRules, ni));
+        add(pluralRules, keyword, ni);
+    }
+
+    public void add(final PluralRules pluralRules, double n, int v, int e) {
+        FixedDecimal ni = FixedDecimal.createWithExponent(n * Math.pow(10, e), v, e);
+        String keyword = pluralRules.select(ni);
+        System.out.println("{" + n + ", " + v + ", " + e + "} " + ni + " => " + keyword + ", " + (ni.getVisibleDecimalDigitCount() == 0 ? "integer" : "decimal"));
+        add(pluralRules, keyword, ni);
+    }
+
+//    public void add(PluralRules pluralRules, FixedDecimal ni) {
+//        String keyword = pluralRules.select(ni);
+//        System.out.println(ni + " => " + keyword + ", " + (ni.getVisibleDecimalDigitCount() == 0 ? "integer" : "decimal"));
+//        add(pluralRules, keyword, ni);
+//    }
+
+    public void add(PluralRules pluralRules, String keyword, FixedDecimal ni) {
         DataSamples data = keywordToData.get(keyword);
         if (data == null) {
             keywordToData.put(keyword, data = new DataSamples(keyword, pluralRules));
@@ -506,19 +567,20 @@
 
     public static String checkForDuplicates(PluralRules pluralRules, FixedDecimal ni) {
         // add test that there are no duplicates
-        Set<String> keywords = new LinkedHashSet<String>();
-        for (String keywordCheck : pluralRules.getKeywords()) {
-            if (pluralRules.matches(ni, keywordCheck)) {
-                keywords.add(keywordCheck);
-            }
-        }
-        if (!keywords.contains("other") || keywords.size() > 2) { // should be either {other, x} or {other}
-            String message = "";
-            for (String keywordCheck : keywords) {
-                message += keywordCheck + ": " + pluralRules.getRules(keywordCheck) + "; ";
-            }
-            return "Duplicate rules with " + ni + ":\t" + message;
-        }
+        // TODO restore when "CLDR-14206", "Fix CLDR code for FixedDecimal" is done
+//        Set<String> keywords = new LinkedHashSet<>();
+//        for (String keywordCheck : pluralRules.getKeywords()) {
+//            if (pluralRules.matches(ni, keywordCheck)) {
+//                keywords.add(keywordCheck);
+//            }
+//        }
+//        if (!keywords.contains("other") || keywords.size() > 2) { // should be either {other, x} or {other}
+//            String message = "";
+//            for (String keywordCheck : keywords) {
+//                message += keywordCheck + ": " + pluralRules.getRules(keywordCheck) + "; ";
+//            }
+//            return "Duplicate rules with " + ni + ":\t" + message;
+//        }
         return null;
     }
 
@@ -551,10 +613,8 @@
         }
     }
 
-    public static void main(String[] args) throws Exception {
+    public static void main(String[] args) {
         myOptions.parse(MyOptions.filter, args, true);
-        PluralRules test = PluralRules.parseDescription("one: n in 3,4 or f mod 5 in 3..4;");
-        System.out.println("Check: " + test);
 
         Matcher localeMatcher = !MyOptions.filter.option.doesOccur() ? null : PatternCache.get(MyOptions.filter.option.getValue()).matcher("");
         boolean fileFormat = true; //MyOptions.xml.option.doesOccur();
@@ -565,7 +625,7 @@
         int failureCount = 0;
 
         PluralRules pluralRules2 = PluralRules.createRules("one: n is 3..9; two: n is 7..12");
-        System.out.println("Check: " + checkForDuplicates(pluralRules2, new FixedDecimal(8)));
+        System.out.println("Check: " + checkForDuplicates(pluralRules2, new FixedDecimal("8e1")));
 
         for (PluralType type : PluralType.values()) {
             try (TempPrintWriter out = TempPrintWriter.openUTF8Writer(MyOptions.output.option.getValue(), type == PluralType.cardinal ? "plurals.xml" : "ordinals.xml")) {
@@ -587,8 +647,8 @@
                 }
 
                 // sort if necessary
-                Set<Entry<PluralInfo, Set<String>>> sorted = sortNew ? new LinkedHashSet<Entry<PluralInfo, Set<String>>>()
-                    : new TreeSet<Entry<PluralInfo, Set<String>>>(new HackComparator(type == PluralType.cardinal
+                Set<Entry<PluralInfo, Set<String>>> sorted = sortNew ? new LinkedHashSet<>()
+                    : new TreeSet<>(new HackComparator(type == PluralType.cardinal
                     ? WritePluralRules.HACK_ORDER_PLURALS : WritePluralRules.HACK_ORDER_ORDINALS));
                 for (Entry<PluralInfo, Set<String>> entry : seenAlready.keyValuesSet()) {
                     sorted.add(entry);
@@ -609,13 +669,20 @@
 
                     if (fileFormat) {
                         if (!keywords.equals(oldKeywords)) {
-                            out.println("\n        <!-- " + keywords.size() + ": " + CollectionUtilities.join(keywords, ",") + " -->\n");
+                            out.println("\n        <!-- " + keywords.size() + ": " + Joiner.on(",")
+                            .join(keywords) + " -->\n");
                             oldKeywords = keywords;
                         }
                         out.println(WritePluralRules.formatPluralRuleHeader(equivalentLocales));
                         System.out.println(type + "\t" + equivalentLocales);
                     }
-                    GeneratedPluralSamples samples = new GeneratedPluralSamples(pluralInfo, type);
+                    GeneratedPluralSamples samples;
+                    try {
+                        samples = new GeneratedPluralSamples(pluralInfo, type, equivalentLocales);
+                    } catch (Exception e) {
+                        out.dontReplaceFile();
+                        throw e;
+                    }
                     samplesToPlurals.put(samples, pluralInfo);
                     for (String keyword : keywords) {
                         Count count = Count.valueOf(keyword);
@@ -659,10 +726,11 @@
                         if (entry.getValue().size() == 1) {
                             continue;
                         }
-                        Set<String> remainder = new LinkedHashSet<String>(entry.getValue());
+                        Set<String> remainder = new LinkedHashSet<>(entry.getValue());
                         String first = remainder.iterator().next();
                         remainder.remove(first);
-                        System.err.println(type + "\tEQUIV:\t\t" + first + "\t≣\t" + CollectionUtilities.join(remainder, ", "));
+                        System.err.println(type + "\tEQUIV:\t\t" + first + "\t≣\t" + Joiner.on(", ")
+                        .join(remainder));
                     }
                     System.out.println();
                 }
diff --git a/tools/java/org/unicode/cldr/tool/GetChanges.java b/tools/java/org/unicode/cldr/tool/GetChanges.java
index 9fb4b6d..3c1e704 100644
--- a/tools/java/org/unicode/cldr/tool/GetChanges.java
+++ b/tools/java/org/unicode/cldr/tool/GetChanges.java
@@ -51,7 +51,7 @@
                 continue;
             }
             for (File commonSeed : commonSeedFiles) {
-                if (!commonSeed.isDirectory() 
+                if (!commonSeed.isDirectory()
                     || "dtd".equals(commonSeed.getName())) {
                     continue;
                 }
@@ -149,7 +149,7 @@
                 if (verbose) {
                     System.out.println(
                         dir
-                        +";\tnew\t" 
+                        +";\tnew\t"
                         + "\tlocale=" + localeID + ";"
                         + "\taction=add;"
                         + "\tpath=\t" + path
@@ -157,7 +157,7 @@
                         );
                 }
             } else {
-                // we do a lot of processing on the annotations, so most likely are just changes introduced by that. 
+                // we do a lot of processing on the annotations, so most likely are just changes introduced by that.
                 // So ignore for now
                 if (path.startsWith("//ldml/annotations")) {
                     continue;
@@ -220,8 +220,8 @@
         int totalCount = 0;
         int localeCount = 0;
 
-        Output<String> localeWhereFound = new Output<String>();
-        Output<String> pathWhereFound = new Output<String>();
+        Output<String> localeWhereFound = new Output<>();
+        Output<String> pathWhereFound = new Output<>();
 
         CLDRFile englishCldrFile = trunkFactory.make("en", false);
         final Set<String> paths = ImmutableSet.copyOf(englishCldrFile.iterator());
@@ -261,11 +261,11 @@
             } catch (Exception e) {
             }
 
-            Map<PathHeader, Data> results = new TreeMap<PathHeader, Data>();
+            Map<PathHeader, Data> results = new TreeMap<>();
 
             for (String xpath : paths) {
-                if (xpath.contains("fallbackRegionFormat") 
-                    || xpath.contains("exemplar") 
+                if (xpath.contains("fallbackRegionFormat")
+                    || xpath.contains("exemplar")
                     || xpath.contains("/identity")) {
                     continue;
                 }
@@ -311,19 +311,19 @@
             for (Entry<PathHeader, Data> entry : results.entrySet()) {
                 PathHeader ph = entry.getKey();
                 String englishValue = englishCldrFile.getStringValue(ph.getOriginalPath());
-                System.out.println(localeCount 
-                    + "\t" + ++itemCount 
-                    + "\t" + locale 
-                    + "\t" + english.getName(locale) 
-                    + "\t" + ph 
-                    + "\t«" + englishValue 
+                System.out.println(localeCount
+                    + "\t" + ++itemCount
+                    + "\t" + locale
+                    + "\t" + english.getName(locale)
+                    + "\t" + ph
+                    + "\t«" + englishValue
                     + "»\t" + entry.getValue());
             }
             totalCount += itemCount;
         }
         System.out.println("##Total:\t" + totalCount);
         for ( Entry<String, PathHeader> entry : missing.entries()) {
-            System.out.println(entry.getKey() + "\t" + entry.getValue()); 
+            System.out.println(entry.getKey() + "\t" + entry.getValue());
         }
     }
 
diff --git a/tools/java/org/unicode/cldr/tool/GetDescriptions.java b/tools/java/org/unicode/cldr/tool/GetDescriptions.java
index 02d73f4..1ac586d 100644
--- a/tools/java/org/unicode/cldr/tool/GetDescriptions.java
+++ b/tools/java/org/unicode/cldr/tool/GetDescriptions.java
@@ -19,19 +19,19 @@
 
     static Matcher matcher = PatternCache.get("([^,(]+)(,([^(]+))?(.*)").matcher("");
 
-    static Map<String, String> items = new TreeMap<String, String>();
+    static Map<String, String> items = new TreeMap<>();
     static int allCount = 1;
     static int commaCount = 1;
 
-    private static Map<String, Map<String, Set<String>>> name_type_codes = new TreeMap<String, Map<String, Set<String>>>();
+    private static Map<String, Map<String, Set<String>>> name_type_codes = new TreeMap<>();
 
-    private static Set<String> preCommas = new TreeSet<String>();
+    private static Set<String> preCommas = new TreeSet<>();
 
-    private static Set<String> postCommas = new TreeSet<String>();
+    private static Set<String> postCommas = new TreeSet<>();
 
-    private static Map<String, String> descriptionWithoutComments = new TreeMap<String, String>();
+    private static Map<String, String> descriptionWithoutComments = new TreeMap<>();
 
-    private static Set<String> uninvertedNames = new HashSet<String>();
+    private static Set<String> uninvertedNames = new HashSet<>();
 
     public static void main(String[] args) throws IOException {
         StandardCodes sc = StandardCodes.make();
@@ -200,9 +200,9 @@
         String code, String newDescriptionWithoutComment) {
         Map<String, Set<String>> type_codes = name_type_codes.get(newDescriptionWithoutComment);
         if (type_codes == null)
-            name_type_codes.put(newDescriptionWithoutComment, type_codes = new TreeMap<String, Set<String>>());
+            name_type_codes.put(newDescriptionWithoutComment, type_codes = new TreeMap<>());
         Set<String> codes = type_codes.get(type);
-        if (codes == null) type_codes.put(type, codes = new TreeSet<String>());
+        if (codes == null) type_codes.put(type, codes = new TreeSet<>());
         codes.add(code);
     }
 
@@ -216,7 +216,7 @@
         .matcher("");
 
     private static void checkInversion(PrintWriter commas, String type, String code, String[] parts) {
-        Set<String> items = new TreeSet<String>(Arrays.asList(parts));
+        Set<String> items = new TreeSet<>(Arrays.asList(parts));
         for (String item : items) {
             if (!directional.reset(item).matches()) {
                 continue;
diff --git a/tools/java/org/unicode/cldr/tool/GetLanguageData.java b/tools/java/org/unicode/cldr/tool/GetLanguageData.java
index 0c4bbe0..e820501 100644
--- a/tools/java/org/unicode/cldr/tool/GetLanguageData.java
+++ b/tools/java/org/unicode/cldr/tool/GetLanguageData.java
@@ -18,8 +18,8 @@
         .make(CLDRPaths.MAIN_DIRECTORY, ".*");
     CLDRFile english = cldrFactory.make("en", true);
     Set<String> euCountries = sdata.getContained("EU");
-    Counter<String> languageToGdp = new Counter<String>();
-    Counter<String> languageToPop = new Counter<String>();
+    Counter<String> languageToGdp = new Counter<>();
+    Counter<String> languageToPop = new Counter<>();
 
     public static void main(String[] args) {
         new GetLanguageData().run();
@@ -90,7 +90,7 @@
             }
             if (langUnknown > 0) {
                 languageToGdp.add("und", (long) (gdp * langUnknown / territoryPop));
-                languageToPop.add("und", (long) (langUnknown));
+                languageToPop.add("und", (langUnknown));
             }
         }
     }
diff --git a/tools/java/org/unicode/cldr/tool/IdToPath.java b/tools/java/org/unicode/cldr/tool/IdToPath.java
index 065e642..aa074f3 100644
--- a/tools/java/org/unicode/cldr/tool/IdToPath.java
+++ b/tools/java/org/unicode/cldr/tool/IdToPath.java
@@ -7,7 +7,7 @@
  * Do not manually edit this file.
  */
 public class IdToPath {
-    static final HashMap<String, String> map = new HashMap<String, String>();
+    static final HashMap<String, String> map = new HashMap<>();
 
     public static String getPath(String id) {
         return map.get(id);
diff --git a/tools/java/org/unicode/cldr/tool/KeymanCheck.java b/tools/java/org/unicode/cldr/tool/KeymanCheck.java
index 2669748..4ee747a 100644
--- a/tools/java/org/unicode/cldr/tool/KeymanCheck.java
+++ b/tools/java/org/unicode/cldr/tool/KeymanCheck.java
@@ -144,8 +144,8 @@
         for (String lang : langs) {
             PopulationData pop = getPopulationData(lang);
             System.out.println(
-//                ++count 
-//                 + "\t" + 
+//                ++count
+//                 + "\t" +
                 en.getName(lang)
                     + "\t" + lang
                     + "\t" + (pop != null ? (long) pop.getLiteratePopulation() : "-1")
diff --git a/tools/java/org/unicode/cldr/tool/LanguageCodeConverter.java b/tools/java/org/unicode/cldr/tool/LanguageCodeConverter.java
index f415f12..5d66a1b 100644
--- a/tools/java/org/unicode/cldr/tool/LanguageCodeConverter.java
+++ b/tools/java/org/unicode/cldr/tool/LanguageCodeConverter.java
@@ -24,9 +24,9 @@
 import com.ibm.icu.util.ULocale;
 
 public class LanguageCodeConverter {
-    private static Map<String, String> languageNameToCode = new TreeMap<String, String>();
-    private static Set<String> exceptionCodes = new TreeSet<String>();
-    private static Set<String> parseErrors = new LinkedHashSet<String>();
+    private static Map<String, String> languageNameToCode = new TreeMap<>();
+    private static Set<String> exceptionCodes = new TreeSet<>();
+    private static Set<String> parseErrors = new LinkedHashSet<>();
 
     private static Map<String, R2<List<String>, String>> languageAliases = CLDRConfig.getInstance().getSupplementalDataInfo().getLocaleAliasInfo()
         .get("language");
@@ -81,7 +81,7 @@
         // http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry
         Map<String, Map<String, Map<String, String>>> lstreg = StandardCodes.getLStreg();
         Map<String, Map<String, String>> languages = lstreg.get("language");
-        Set<String> validCodes = new HashSet<String>();
+        Set<String> validCodes = new HashSet<>();
 
         for (Entry<String, Map<String, String>> codeInfo : languages.entrySet()) {
             String code = codeInfo.getKey();
diff --git a/tools/java/org/unicode/cldr/tool/LikelySubtags.java b/tools/java/org/unicode/cldr/tool/LikelySubtags.java
index fef007e..7ac57c6 100644
--- a/tools/java/org/unicode/cldr/tool/LikelySubtags.java
+++ b/tools/java/org/unicode/cldr/tool/LikelySubtags.java
@@ -11,6 +11,7 @@
 
 import org.unicode.cldr.util.Builder;
 import org.unicode.cldr.util.LanguageTagParser;
+import org.unicode.cldr.util.LanguageTagParser.OutputOption;
 import org.unicode.cldr.util.SupplementalDataInfo;
 import org.unicode.cldr.util.SupplementalDataInfo.BasicLanguageData;
 import org.unicode.cldr.util.SupplementalDataInfo.BasicLanguageData.Type;
@@ -26,8 +27,9 @@
 
     private Map<String, String> toMaximized;
     private boolean favorRegion = false;
-    private SupplementalDataInfo supplementalDataInfo;
-    private Map<String, String> currencyToLikelyTerritory = new HashMap<String, String>();
+    private static SupplementalDataInfo supplementalDataInfo;
+    private static Map<String, String> currencyToLikelyTerritory;
+    private static final Object SYNC = new Object();
 
     /**
      * Create the likely subtags.
@@ -35,50 +37,43 @@
      * @param toMaximized
      */
     public LikelySubtags(Map<String, String> toMaximized) {
-        this(SupplementalDataInfo.getInstance(), toMaximized);
-    }
-
-    /**
-     * Create the likely subtags.
-     *
-     * @param toMaximized
-     */
-    public LikelySubtags(SupplementalDataInfo supplementalDataInfo) {
-        this(supplementalDataInfo, supplementalDataInfo.getLikelySubtags());
-    }
-
-    /**
-     * Create the likely subtags.
-     *
-     * @param toMaximized
-     */
-    public LikelySubtags(SupplementalDataInfo supplementalDataInfo, Map<String, String> toMaximized) {
-        this.supplementalDataInfo = supplementalDataInfo;
-        this.toMaximized = toMaximized;
-
-        Date now = new Date();
-        Set<Row.R2<Double, String>> sorted = new TreeSet<Row.R2<Double, String>>();
-        for (String territory : supplementalDataInfo.getTerritoriesWithPopulationData()) {
-            PopulationData pop = supplementalDataInfo.getPopulationDataForTerritory(territory);
-            double population = pop.getPopulation();
-            sorted.add(Row.of(-population, territory));
+        loadStaticVariables();
+        if (this.toMaximized == null) {
+            this.toMaximized = supplementalDataInfo.getLikelySubtags();
+        } else {
+            this.toMaximized = toMaximized;
         }
-        for (R2<Double, String> item : sorted) {
-            String territory = item.get1();
-            Set<CurrencyDateInfo> targetCurrencyInfo = supplementalDataInfo.getCurrencyDateInfo(territory);
-            if (targetCurrencyInfo == null) {
-                continue;
+    }
+
+    private static void loadStaticVariables() {
+        if (supplementalDataInfo != null && currencyToLikelyTerritory != null) {
+            return;
+        }
+        synchronized(SYNC) {
+            supplementalDataInfo = SupplementalDataInfo.getInstance();
+            currencyToLikelyTerritory = new HashMap<>();
+            Date now = new Date();
+            Set<Row.R2<Double, String>> sorted = new TreeSet<>();
+            for (String territory : supplementalDataInfo.getTerritoriesWithPopulationData()) {
+                PopulationData pop = supplementalDataInfo.getPopulationDataForTerritory(territory);
+                double population = pop.getPopulation();
+                sorted.add(Row.of(-population, territory));
             }
-            for (CurrencyDateInfo cdi : targetCurrencyInfo) {
-                String currency = cdi.getCurrency();
-                if (!currencyToLikelyTerritory.containsKey(currency) && cdi.getStart().before(now)
-                    && cdi.getEnd().after(now) && cdi.isLegalTender()) {
-                    currencyToLikelyTerritory.put(currency, territory);
+            for (R2<Double, String> item : sorted) {
+                String territory = item.get1();
+                Set<CurrencyDateInfo> targetCurrencyInfo = supplementalDataInfo.getCurrencyDateInfo(territory);
+                if (targetCurrencyInfo == null) {
+                    continue;
+                }
+                for (CurrencyDateInfo cdi : targetCurrencyInfo) {
+                    String currency = cdi.getCurrency();
+                    if (!currencyToLikelyTerritory.containsKey(currency) && cdi.getStart().before(now)
+                        && cdi.getEnd().after(now) && cdi.isLegalTender()) {
+                        currencyToLikelyTerritory.put(currency, territory);
+                    }
                 }
             }
         }
-        // System.out.println("Currency to Territory:\n\t" +
-        // CollectionUtilities.join(currencyToLikelyTerritory.entrySet(), "\n\t"));
     }
 
     /**
@@ -87,7 +82,7 @@
      * @param toMaximized
      */
     public LikelySubtags() {
-        this(SupplementalDataInfo.getInstance());
+        this(null);
     }
 
     public boolean isFavorRegion() {
@@ -225,7 +220,11 @@
 
     // TODO, optimize if needed by adding private routine that maximizes a LanguageTagParser instead of multiple parsings
     // TODO Old, crufty code, needs reworking.
-    public synchronized String minimize(String input) {
+    public String minimize(String input) {
+        return minimize(input, OutputOption.ICU_LCVARIANT);
+    }
+
+    public synchronized String minimize(String input, OutputOption oo) {
         String maximized = maximize(input, toMaximized);
         if (maximized == null) {
             return null;
@@ -262,7 +261,7 @@
                     .setVariants(variants)
                     .setExtensions(extensions)
                     .setLocaleExtensions(extensions)
-                    .toString();
+                    .toString(oo);
             }
         }
         return maximized;
diff --git a/tools/java/org/unicode/cldr/tool/ListCoverageLevels.java b/tools/java/org/unicode/cldr/tool/ListCoverageLevels.java
index a2cc163..64fed3a 100644
--- a/tools/java/org/unicode/cldr/tool/ListCoverageLevels.java
+++ b/tools/java/org/unicode/cldr/tool/ListCoverageLevels.java
@@ -30,6 +30,7 @@
 import org.unicode.cldr.util.StandardCodes;
 import org.unicode.cldr.util.SupplementalDataInfo;
 
+import com.google.common.base.Joiner;
 import com.google.common.collect.Comparators;
 import com.google.common.collect.ComparisonChain;
 import com.google.common.collect.ImmutableList;
@@ -37,7 +38,6 @@
 import com.google.common.collect.ImmutableSortedSet;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 
 public class ListCoverageLevels {
     public static void main(String[] args) {
@@ -50,7 +50,7 @@
         Factory mainAndAnnotationsFactory = config.getMainAndAnnotationsFactory();
 
         Set<String> toTest = sc.getLocaleCoverageLocales(Organization.cldr, EnumSet.allOf(Level.class));
-        // ImmutableSortedSet.of("it", "root", "ja"); 
+        // ImmutableSortedSet.of("it", "root", "ja");
         // mainAndAnnotationsFactory.getAvailable();
         final Set<CLDRLocale> ALL;
         {
@@ -61,12 +61,12 @@
 
         M4<Level, String, Attributes, Boolean> data = ChainedMap.of(
             new TreeMap<Level,Object>(),
-            new TreeMap<String,Object>(), 
+            new TreeMap<String,Object>(),
             new TreeMap<Attributes,Object>(),
             Boolean.class);
          M5<String, Level, CLDRLocale, List<String>, Boolean> starredToLevels = ChainedMap.of(
             new TreeMap<String,Object>(),
-            new TreeMap<Level,Object>(), 
+            new TreeMap<Level,Object>(),
             new TreeMap<CLDRLocale,Object>(),
             new HashMap<List<String>,Object>(),
             Boolean.class);
@@ -111,7 +111,7 @@
 //                starredToLevels.put(starred, level, cLoc, Boolean.TRUE);
 //            }
 //        }
-        
+
         System.out.println("ALL=" + getLocaleName(null, ALL));
 
         for (Entry<String, Map<Level, Map<CLDRLocale, Map<List<String>, Boolean>>>> entry : starredToLevels) {
@@ -137,7 +137,7 @@
                 String localeName = getLocaleName(ALL, locales);
                 items.add(level + ":" + (mixed ? "" : "°") + localeName);
             }
-            System.out.println(starred + "\t" + items.size() + "\t" + CollectionUtilities.join(items, " "));
+            System.out.println(starred + "\t" + items.size() + "\t" + Joiner.on(" ").join(items));
         }
         for (Level level : data.keySet()) {
             M3<String, Attributes, Boolean> data2 = data.get(level);
@@ -146,10 +146,10 @@
                 Multimap<String, List<String>> localesToAttrs = Attributes.getLocaleNameToAttributeList(ALL, attributes);
                 for (Entry<String, Collection<List<String>>> entry : localesToAttrs.asMap().entrySet()) {
                     Collection<List<String>> attrs = entry.getValue();
-                    System.out.println(level 
-                        + "\t" + starred 
-                        + "\t" + entry.getKey() 
-                        + "\t" + attrs.size() 
+                    System.out.println(level
+                        + "\t" + starred
+                        + "\t" + entry.getKey()
+                        + "\t" + attrs.size()
                         + "\t" + Attributes.compact(attrs, new StringBuilder()));
                 }
             }
@@ -160,12 +160,12 @@
         Function<Set<CLDRLocale>,String> remainderName = x -> {
             Set<CLDRLocale> y = new LinkedHashSet<>(all);
             y.removeAll(x);
-            return "AllLcs-(" + CollectionUtilities.join(y, "|") + ")";
+            return "AllLcs-(" + Joiner.on("|").join(y) + ")";
         };
-        return all == null ? CollectionUtilities.join(locales, "|")
-            : locales.equals(all) ? "AllLcs" 
+        return all == null ? Joiner.on("|").join(locales)
+            : locales.equals(all) ? "AllLcs"
                 : locales.size()*2 > all.size() ? remainderName.apply(locales)
-                    : CollectionUtilities.join(locales, "|");
+                    : Joiner.on("|").join(locales);
     }
 
     static class Attributes implements Comparable<Attributes>{
@@ -195,18 +195,8 @@
 //                Collection<List<String>> attrList = entry.getValue();
 //                Map<String, Map> map = getMap(attrList);
 //                getName(map, result);
-//            }            
+//            }
 //
-//
-////            localeNameToAttributeList.forEach((name,list) -> {
-////                if (result.length() != 0) {
-////                    result.append(' ');
-////                }
-////                result.append(name);
-////                if (!list.isEmpty()) {
-////                    result.append(':').append(CollectionUtilities.join(list, "|"));
-////                }
-////                });
 //            return result;
 //        }
 
@@ -266,7 +256,7 @@
             for (Iterable<T> list : source) {
                 Map<T, Map> top = items;
                 for (T item : list) {
-                    Map<T, Map> value = (Map<T, Map>) top.get(item);
+                    Map<T, Map> value = top.get(item);
                     if (value == null) {
                         top.put(item, value = new LinkedHashMap<>());
                     }
@@ -285,7 +275,8 @@
         }
         @Override
         public String toString() {
-            return attributes.isEmpty() ? cLoc.toString() : cLoc + "|" + CollectionUtilities.join(attributes, "|");
+            return attributes.isEmpty() ? cLoc.toString() : cLoc + "|" + Joiner.on("|")
+                .join(attributes);
         }
     }
 }
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/tool/ListRedundantUnicodeSets.java b/tools/java/org/unicode/cldr/tool/ListRedundantUnicodeSets.java
index e06e726..1fab28f 100644
--- a/tools/java/org/unicode/cldr/tool/ListRedundantUnicodeSets.java
+++ b/tools/java/org/unicode/cldr/tool/ListRedundantUnicodeSets.java
@@ -104,16 +104,16 @@
                     colExemplars.removeAll(forTranslit);
                 }
 
-                System.out.println(localeID 
+                System.out.println(localeID
                     + "\t" + localeCoverageLevel
-                    + "\t" + exemplarType 
+                    + "\t" + exemplarType
                     + "\t" + exemplarSet.strings().size()
                     + "\t" + (remaining.size() + forTranslit.size())
                     + "\t" + remaining
                     + "\t" + forTranslit
                     + "\t" + indexSet
                     + "\t" + colAndEx
-                    + "\t" + redundants 
+                    + "\t" + redundants
                     + "\t" + colExemplars.size()
                     );
             }
@@ -149,7 +149,7 @@
     }
 
     static final Normalizer2 nfkd = Normalizer2.getNFKDInstance();
-    static final Set<String> CAN_BE_COMPOSED; 
+    static final Set<String> CAN_BE_COMPOSED;
 
     static {
         Set<String> _toComposed = new TreeSet<>();
@@ -175,10 +175,10 @@
         .build();
     private static boolean isForTranslit(String locale, String s) {
         boolean result = CAN_BE_COMPOSED.contains(nfkd.normalize(s));
-        if (result && (NUKTA.containsSome(s) 
+        if (result && (NUKTA.containsSome(s)
             || TRANSLIT_CLUSTERS.containsEntry(locale, s))) {
             return true;
-        };
+        }
         return false;
     }
 }
diff --git a/tools/java/org/unicode/cldr/tool/ListUnits.java b/tools/java/org/unicode/cldr/tool/ListUnits.java
index 97406d1..8baea75 100644
--- a/tools/java/org/unicode/cldr/tool/ListUnits.java
+++ b/tools/java/org/unicode/cldr/tool/ListUnits.java
@@ -220,6 +220,7 @@
         final String path;
         final String value;
 
+        @Override
         public String toString() {
             return "locale=en"
                 + " ; action=add"
@@ -229,7 +230,7 @@
     }
 
     private static Set<String> getUnits(CLDRFile cldrFile, Task task, Map<String, Data> extra) {
-        Set<String> seen = new TreeSet<String>();
+        Set<String> seen = new TreeSet<>();
         for (String path : cldrFile) {
             if (!path.contains("/unit")) {
                 continue;
diff --git a/tools/java/org/unicode/cldr/tool/LocaleReplacements.java b/tools/java/org/unicode/cldr/tool/LocaleReplacements.java
index 958d2a1..af28516 100644
--- a/tools/java/org/unicode/cldr/tool/LocaleReplacements.java
+++ b/tools/java/org/unicode/cldr/tool/LocaleReplacements.java
@@ -20,7 +20,7 @@
 import org.unicode.cldr.util.StandardCodes;
 import org.unicode.cldr.util.SupplementalDataInfo;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
@@ -32,8 +32,8 @@
     /**
      * eg language, eng, <overlong,en>
      */
-    static Map<String, Map<String, Row.R2<Set<String>, String>>> type2item2replacementAndReason = new HashMap<String, Map<String, Row.R2<Set<String>, String>>>();
-    static Map<String, Relation<String, Row.R2<String, Set<String>>>> type2reason2itemAndreplacement = new TreeMap<String, Relation<String, Row.R2<String, Set<String>>>>();
+    static Map<String, Map<String, Row.R2<Set<String>, String>>> type2item2replacementAndReason = new HashMap<>();
+    static Map<String, Relation<String, Row.R2<String, Set<String>>>> type2reason2itemAndreplacement = new TreeMap<>();
     static Relation<String, String> fixed = Relation.of(new TreeMap<String, Set<String>>(), LinkedHashSet.class);
 
     public String get(String old, Output<String> reason) {
@@ -107,7 +107,7 @@
                     R2<Set<String>, String> replacementAndReason = entry2.getValue();
                     Set<String> replacements = replacementAndReason.get0();
                     //String reason = replacementAndReason.get1();
-                    Set<String> newReplacements = new LinkedHashSet<String>(replacements.size());
+                    Set<String> newReplacements = new LinkedHashSet<>(replacements.size());
                     boolean gotChange = false;
                     for (String oldRep : replacements) {
                         R2<Set<String>, String> newRepAndReason = item2replacementAndReason.get(oldRep);
@@ -169,7 +169,7 @@
         if (key == null) {
             return;
         }
-        if (type.equals("grandfathered") || type.equals("redundant")) {
+        if (type.equals("legacy") || type.equals("redundant")) {
             type = "language";
         }
 
@@ -181,7 +181,7 @@
 
         Map<String, R2<Set<String>, String>> item2replacementAndReason = type2item2replacementAndReason.get(type);
         if (item2replacementAndReason == null) {
-            type2item2replacementAndReason.put(type, item2replacementAndReason = new HashMap<String, R2<Set<String>, String>>());
+            type2item2replacementAndReason.put(type, item2replacementAndReason = new HashMap<>());
         }
 
         R2<Set<String>, String> oldReplacementAndReason = item2replacementAndReason.get(key);
@@ -197,7 +197,7 @@
                 return;
             }
         }
-        Set<String> list = new LinkedHashSet<String>(1);
+        Set<String> list = new LinkedHashSet<>(1);
         if (!preferredValue.isEmpty()) {
             list.add(preferredValue);
         }
@@ -208,8 +208,8 @@
         Map<String, Map<String, R2<List<String>, String>>> localeAliasInfo = SupplementalDataInfo.getInstance()
             .getLocaleAliasInfo();
 
-        Set<String> newStuff = new TreeSet<String>();
-        Set<String> oldStuff = new TreeSet<String>();
+        Set<String> newStuff = new TreeSet<>();
+        Set<String> oldStuff = new TreeSet<>();
         for (Entry<String, Relation<String, R2<String, Set<String>>>> entry : type2reason2itemAndreplacement.entrySet()) {
             String type = entry.getKey();
             for (Entry<String, R2<String, Set<String>>> entry2 : entry.getValue().entrySet()) {
@@ -218,7 +218,7 @@
                 String key = replacementAndReason.get0();
                 Set<String> replacements = replacementAndReason.get1();
                 final String message = type + "\t" + reason + "\t" + key + "\t"
-                    + CollectionUtilities.join(replacements, " ");
+                    + Joiner.on(" ").join(replacements);
                 // System.out.println(message);
                 newStuff.add(message);
             }
@@ -235,13 +235,13 @@
                 List<String> replacements = replacementAndReason.get0();
                 String reason = replacementAndReason.get1();
                 oldStuff.add(type + "\t" + reason + "\t" + item
-                    + "\t" + (replacements == null ? "" : CollectionUtilities.join(replacements, " ")));
+                    + "\t" + (replacements == null ? "" : Joiner.on(" ").join(replacements)));
             }
         }
-        Set<Row.R2<String, String>> merged = new TreeSet<Row.R2<String, String>>();
+        Set<Row.R2<String, String>> merged = new TreeSet<>();
 
-        Set<String> oldNotNew = Builder.with(new TreeSet<String>(oldStuff)).removeAll(newStuff).get();
-        Set<String> newNotOld = Builder.with(new TreeSet<String>(newStuff)).removeAll(oldStuff).get();
+        Set<String> oldNotNew = Builder.with(new TreeSet<>(oldStuff)).removeAll(newStuff).get();
+        Set<String> newNotOld = Builder.with(new TreeSet<>(newStuff)).removeAll(oldStuff).get();
         //Set<String> shared = Builder.with(new TreeSet<String>(oldStuff)).retainAll(newStuff).get();
         // for (String s : shared) {
         // merged.add(Row.of(s,"\tSAME"));
diff --git a/tools/java/org/unicode/cldr/tool/MakeAnnotationHistogram.java b/tools/java/org/unicode/cldr/tool/MakeAnnotationHistogram.java
index a6f22b5..49eb02b 100644
--- a/tools/java/org/unicode/cldr/tool/MakeAnnotationHistogram.java
+++ b/tools/java/org/unicode/cldr/tool/MakeAnnotationHistogram.java
@@ -16,7 +16,7 @@
 import com.ibm.icu.util.ULocale;
 
 public class MakeAnnotationHistogram {
-    private static final Integer ZERO = (Integer) 0;
+    private static final Integer ZERO = 0;
 
     public static void main(String[] args) {
         AnnotationSet english = Annotations.getDataSet("en");
diff --git a/tools/java/org/unicode/cldr/tool/MakeTransliterator.java b/tools/java/org/unicode/cldr/tool/MakeTransliterator.java
index 4302912..4c7c9d0 100644
--- a/tools/java/org/unicode/cldr/tool/MakeTransliterator.java
+++ b/tools/java/org/unicode/cldr/tool/MakeTransliterator.java
@@ -250,7 +250,7 @@
 
         Transliterator base = Transliterator.createFromRules("foo", coreRules, Transliterator.FORWARD);
         // build up the transliterator one length at a time.
-        List<String> newRules = new ArrayList<String>();
+        List<String> newRules = new ArrayList<>();
         StringBuilder buffer = new StringBuilder();
 
         int lastSourceLength = 1;
@@ -436,7 +436,7 @@
 
         sourceCharacters.addAll(source);
         targetCharacters.addAll(target);
-        store.put(source, new Pair<String, Long>(target, frequency));
+        store.put(source, new Pair<>(target, frequency));
         totalFrequency += frequency;
 
     }
@@ -606,6 +606,7 @@
      */
     static Comparator MyComparator = new Comparator() {
 
+        @Override
         public int compare(Object a, Object b) {
             String as = (String) a;
             String bs = (String) b;
@@ -681,7 +682,7 @@
     private static Transliterator coreBase;
 
     public static Map<String, String> getOverrides() throws IOException {
-        Map<String, String> result = new TreeMap<String, String>();
+        Map<String, String> result = new TreeMap<>();
         BufferedReader br = FileUtilities.openUTF8Reader(cldrDataDir, "internal_overrides.txt");
         try {
             int counter = 0;
diff --git a/tools/java/org/unicode/cldr/tool/MatchStrings.java b/tools/java/org/unicode/cldr/tool/MatchStrings.java
index 8186384..c1fc1df 100644
--- a/tools/java/org/unicode/cldr/tool/MatchStrings.java
+++ b/tools/java/org/unicode/cldr/tool/MatchStrings.java
@@ -33,6 +33,7 @@
             this.fixedIpa = fixedIpa.equals(ipa) ? ipa : fixedIpa; // make ==
         }
 
+        @Override
         public String toString() {
             return "{" + english + "/" + ipa + (fixedIpa == ipa ? "" : "/" + fixedIpa) + "}";
         }
@@ -85,7 +86,7 @@
     String ipa;
     List<Info> output;
     int highWater = 0;
-    List<Info> highWaterList = new ArrayList<Info>();
+    List<Info> highWaterList = new ArrayList<>();
     private int longestEnglish;
     private int longestIpa;
 
@@ -202,7 +203,7 @@
         return -1;
     }
 
-    List<Info> current = new ArrayList<Info>();
+    List<Info> current = new ArrayList<>();
 
     /**
      * Fix the IPA in a string
diff --git a/tools/java/org/unicode/cldr/tool/MinimizeRegex.java b/tools/java/org/unicode/cldr/tool/MinimizeRegex.java
index 179a9df..da98d7f 100644
--- a/tools/java/org/unicode/cldr/tool/MinimizeRegex.java
+++ b/tools/java/org/unicode/cldr/tool/MinimizeRegex.java
@@ -9,9 +9,9 @@
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
+import com.google.common.base.Joiner;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.lang.UCharacter;
 import com.ibm.icu.text.UnicodeSet;
 import com.ibm.icu.util.Output;
@@ -35,27 +35,27 @@
         //defaultArg = "aa|ace|ad[ay]|ain|al[et]|anp?|arp|ast|av|awa|ay|ma[dgik]|mdf|men|mh|mi[cn]|mni|mos|mu[ls]|mwl|myv";
         String regexString = args.length < 1 ? defaultArg : args[0];
         UnicodeSet set = new UnicodeSet(args.length < 2 ? "[:ascii:]" : args[1]);
-        
+
         System.out.println(defaultArg + "\n");
         Output<Set<String>> flattenedOut = new Output<>();
         String recompressed = compressWith(regexString, set, flattenedOut);
-        System.out.println(CollectionUtilities.join(flattenedOut.value,"|") + "\n");
+        System.out.println(Joiner.on("|").join(flattenedOut.value) + "\n");
         System.out.println(recompressed + "\n");
     }
 
     public static String compressWith(String regexString, UnicodeSet set) {
         return compressWith(regexString, set, null);
     }
-    
+
     public static String simplePattern(Collection<String> strings) {
         TreeSet<String> temp = new TreeSet<>(LENGTH_FIRST_COMPARE);
         temp.addAll(strings);
-        return CollectionUtilities.join(temp,"|");
+        return Joiner.on("|").join(temp);
     }
-    
+
     public static String compressWith(String regexString, UnicodeSet set, Output<Set<String>> flattenedOut) {
         Set<String> flattened = flatten(Pattern.compile(regexString), "", set);
-        String regexString2 = CollectionUtilities.join(flattened,"|");
+        String regexString2 = Joiner.on("|").join(flattened);
         Set<String> flattened2 = flatten(Pattern.compile(regexString2), "", set);
         if (!flattened2.equals(flattened)) {
             throw new IllegalArgumentException("Failed to compress: " + regexString + " using " + set + ", got " + regexString2);
@@ -135,11 +135,11 @@
         }
         switch (strings.size()) {
         case 0: throw new IllegalArgumentException();
-        case 1: 
+        case 1:
             isSingle.value = true;
             return strings.iterator().next() + (hasEmpty ? "?" : "");
         default:
-            String result = CollectionUtilities.join(strings, "|");
+            String result = Joiner.on("|").join(strings);
             if (hasEmpty) {
                 isSingle.value = true;
                 return '(' + result + ")?";
@@ -152,7 +152,7 @@
     public static TreeSet<String> flatten(Pattern pattern, String prefix, UnicodeSet set) {
         return flatten(pattern.matcher(""), prefix, set, new TreeSet<>(LENGTH_FIRST_COMPARE));
     }
-    
+
     private static TreeSet<String> flatten(Matcher matcher, String prefix, UnicodeSet set, TreeSet<String> results) {
         for (String s : set) {
             String trial = prefix + s;
diff --git a/tools/java/org/unicode/cldr/tool/Misc.java b/tools/java/org/unicode/cldr/tool/Misc.java
index a2486ac..fb2f81d 100644
--- a/tools/java/org/unicode/cldr/tool/Misc.java
+++ b/tools/java/org/unicode/cldr/tool/Misc.java
@@ -143,7 +143,7 @@
             english = cldrFactory.make("en", false);
             resolvedRoot = cldrFactory.make("root", true);
             if (options[MATCH].value.equals("group1")) options[MATCH].value = "(en|fr|de|it|es|pt|ja|ko|zh)";
-            Set<String> languages = new TreeSet<String>(cldrFactory.getAvailableLanguages());
+            Set<String> languages = new TreeSet<>(cldrFactory.getAvailableLanguages());
             // new Utility.MatcherFilter(options[MATCH].value).retainAll(languages);
             // new Utility.MatcherFilter("(sh|zh_Hans|sr_Cyrl)").removeAll(languages);
 
@@ -272,7 +272,7 @@
     // ICU info: http://oss.software.ibm.com/cvs/icu/~checkout~/icu/source/common/putil.c
     // search for "Mapping between Windows zone IDs"
 
-    static Set<String> priorities = new TreeSet<String>(Arrays.asList(new String[] { "en", "zh_Hans",
+    static Set<String> priorities = new TreeSet<>(Arrays.asList(new String[] { "en", "zh_Hans",
         "zh_Hant", "da", "nl", "fi", "fr", "de", "it",
         "ja", "ko", "nb", "pt_BR", "ru", "es", "sv", "ar", "bg", "ca",
         "hr", "cs", "et", "el", "he", "hi", "hu", "is", "id", "lv", "lt",
@@ -283,7 +283,7 @@
     private static void printAllZoneLocalizations() throws IOException {
         StandardCodes sc = StandardCodes.make();
         Set<String> zones = sc.getAvailableCodes("tzid");
-        Map<Integer, Map<String, Map<String, String>>> offset_zone_locale_name = new TreeMap<Integer, Map<String, Map<String, String>>>();
+        Map<Integer, Map<String, Map<String, String>>> offset_zone_locale_name = new TreeMap<>();
         for (Iterator<String> it2 = priorities.iterator(); it2.hasNext();) {
             String locale = it2.next();
             System.out.println(locale);
@@ -301,10 +301,10 @@
 
                     Map<String, Map<String, String>> zone_locale_name = offset_zone_locale_name.get(standardOffset);
                     if (zone_locale_name == null)
-                        offset_zone_locale_name.put(standardOffset, zone_locale_name = new TreeMap<String, Map<String, String>>());
+                        offset_zone_locale_name.put(standardOffset, zone_locale_name = new TreeMap<>());
 
                     Map<String, String> locale_name = zone_locale_name.get(zone);
-                    if (locale_name == null) zone_locale_name.put(zone, locale_name = new TreeMap<String, String>());
+                    if (locale_name == null) zone_locale_name.put(zone, locale_name = new TreeMap<>());
 
                     locale_name.put(locale, fullName);
                 }
@@ -400,7 +400,7 @@
      * @throws IOException
      */
     private static void printCurrentTimezoneLocalizations(Set<String> languages) throws IOException {
-        Set<String> rtlLanguages = new TreeSet<String>();
+        Set<String> rtlLanguages = new TreeSet<>();
         for (Iterator<String> it = languages.iterator(); it.hasNext();) {
             String language = it.next();
             CLDRFile desiredLocaleFile = cldrFactory.make(language, true);
@@ -441,15 +441,15 @@
         StandardCodes sc = StandardCodes.make();
         Map<String, String> zone_countries = sc.getZoneToCounty();
         Map<String, String> old_new = sc.getZoneLinkold_new();
-        Map<String, Set<String>> new_old = new TreeMap<String, Set<String>>(col);
-        Map<String, Set<String>> country_zones = new TreeMap<String, Set<String>>(col);
+        Map<String, Set<String>> new_old = new TreeMap<>(col);
+        Map<String, Set<String>> country_zones = new TreeMap<>(col);
         for (Iterator<String> it = zone_countries.keySet().iterator(); it.hasNext();) {
             String zone = it.next();
             new_old.put(zone, new TreeSet<String>(col));
             String country = zone_countries.get(zone);
             String name = english.getName("territory", country) + " (" + country + ")";
             Set<String> oldSet = country_zones.get(name);
-            if (oldSet == null) country_zones.put(name, oldSet = new TreeSet<String>(col));
+            if (oldSet == null) country_zones.put(name, oldSet = new TreeSet<>(col));
             oldSet.add(zone);
         }
         for (Iterator<String> it = old_new.keySet().iterator(); it.hasNext();) {
@@ -632,12 +632,12 @@
          */
         RuleBasedCollator col = (RuleBasedCollator) Collator.getInstance(new ULocale(locale));
         col.setNumericCollation(true);
-        Set<String> orderedAliases = new TreeSet<String>(col);
+        Set<String> orderedAliases = new TreeSet<>(col);
 
         Map<String, String> zone_countries = StandardCodes.make().getZoneToCounty();
         //Map<String, Set<String>> countries_zoneSet = StandardCodes.make().getCountryToZoneSet();
 
-        Map<String, String> reordered = new TreeMap<String, String>(col);
+        Map<String, String> reordered = new TreeMap<>(col);
         CLDRFile desiredLocaleFile = cldrFactory.make(locale, true);
 
         for (Iterator<String> it = zone_countries.keySet().iterator(); it.hasNext();) {
@@ -775,7 +775,7 @@
         Set<String> modernIDs = sc.getZoneData().keySet();
         System.out.println();
         System.out.println("Zones without countries");
-        TreeSet<String> temp = new TreeSet<String>(m2.keySet());
+        TreeSet<String> temp = new TreeSet<>(m2.keySet());
         temp.removeAll(modernIDs);
         System.out.println(temp);
 
@@ -821,11 +821,11 @@
         // Map rule_abbreviations = getAbbreviations(m);
 
         Map<String, List<RuleLine>> ruleID_Rules = sc.getZoneRuleID_rules();
-        Map<String, Set<String>> abb_zones = new TreeMap<String, Set<String>>();
+        Map<String, Set<String>> abb_zones = new TreeMap<>();
         m2 = sc.getZone_rules();
         for (Iterator<String> it = m2.keySet().iterator(); it.hasNext();) {
             String key = it.next();
-            Set<String> abbreviations = new TreeSet<String>();
+            Set<String> abbreviations = new TreeSet<>();
             // rule_abbreviations.put(key, abbreviations);
             ZoneLine lastZoneLine = null;
 
@@ -868,7 +868,7 @@
                     continue;
                 }
                 Set<String> zones = abb_zones.get(abb);
-                if (zones == null) abb_zones.put(abb, zones = new TreeSet<String>());
+                if (zones == null) abb_zones.put(abb, zones = new TreeSet<>());
                 zones.add(key);
             }
             System.out.println(key + " => " + XPathParts.NEWLINE + "\t"
@@ -901,7 +901,7 @@
     }
 
     private static Set<String> getAbbreviations(Map<String, List<RuleLine>> rules, ZoneLine lastZoneLine, ZoneLine zoneLine) {
-        Set<String> result = new TreeSet<String>();
+        Set<String> result = new TreeSet<>();
         List<RuleLine> ruleList = rules.get(zoneLine.rulesSave);
         for (Iterator<RuleLine> it2 = ruleList.iterator(); it2.hasNext();) {
             RuleLine ruleLine = it2.next();
@@ -934,14 +934,14 @@
         Set<String> territories = sc.getAvailableCodes("territory");
         Map<String, List<String>> zoneData = sc.getZoneData();
 
-        Set<String> s = new TreeSet<String>(sc.getTZIDComparator());
+        Set<String> s = new TreeSet<>(sc.getTZIDComparator());
         s.addAll(sc.getZoneData().keySet());
         int counter = 0;
         for (Iterator<String> it = s.iterator(); it.hasNext();) {
             String key = it.next();
             System.out.println(++counter + "\t" + key + "\t" + zoneData.get(key));
         }
-        Set<String> missing2 = new TreeSet<String>(sc.getZoneData().keySet());
+        Set<String> missing2 = new TreeSet<>(sc.getZoneData().keySet());
         missing2.removeAll(sc.getZoneToCounty().keySet());
         System.out.println(missing2);
         missing2.clear();
@@ -950,8 +950,8 @@
         System.out.println(missing2);
         if (true) return;
 
-        Map<String, Map<String, String>> country_city_data = new TreeMap<String, Map<String, String>>();
-        Map<String, String> territoryName_code = new HashMap<String, String>();
+        Map<String, Map<String, String>> country_city_data = new TreeMap<>();
+        Map<String, String> territoryName_code = new HashMap<>();
         Map<String, String> zone_to_country = sc.getZoneToCounty();
         for (Iterator<String> it = territories.iterator(); it.hasNext();) {
             String code = it.next();
@@ -963,7 +963,7 @@
             "NFD; [:m:]Remove; NFC");
         BufferedReader br = FileUtilities.openUTF8Reader("c:/data/", "cities.txt");
         counter = 0;
-        Set<String> missing = new TreeSet<String>();
+        Set<String> missing = new TreeSet<>();
         while (true) {
             String line = br.readLine();
             if (line == null) break;
@@ -980,7 +980,7 @@
             if (code == null) missing.add(country);
             Map<String, String> city_data = country_city_data.get(code);
             if (city_data == null) {
-                city_data = new TreeMap<String, String>();
+                city_data = new TreeMap<>();
                 country_city_data.put(code, city_data);
             }
             city_data.put(place2,
@@ -1041,7 +1041,7 @@
         }
 
         // territories
-        Map<String, Collection<String>> groups = new TreeMap<String, Collection<String>>();
+        Map<String, Collection<String>> groups = new TreeMap<>();
         for (Iterator<String> it = supp.iterator(); it.hasNext();) {
             String path = it.next();
             XPathParts parts = XPathParts.getFrozenInstance(supp.getFullXPath(path));
@@ -1053,11 +1053,11 @@
                 .splitList(attributes.get("contains"), ' ', true, new ArrayList<String>());
             groups.put(type, contents);
         }
-        Set<String> seen = new TreeSet<String>();
+        Set<String> seen = new TreeSet<>();
         printTimezonesToLocalize(log, desiredLocaleFile, groups, seen, col, false, english);
         StandardCodes sc = StandardCodes.make();
         Set<String> codes = sc.getAvailableCodes("territory");
-        Set<String> missing = new TreeSet<String>(codes);
+        Set<String> missing = new TreeSet<>(codes);
         missing.removeAll(seen);
         if (log != null) {
             log.close();
@@ -1074,8 +1074,8 @@
         CLDRFile english) throws IOException {
         @SuppressWarnings("unchecked")
         Set<String>[] missing = new Set[2];
-        missing[0] = new TreeSet<String>();
-        missing[1] = new TreeSet<String>(StandardCodes.make().getTZIDComparator());
+        missing[0] = new TreeSet<>();
+        missing[1] = new TreeSet<>(StandardCodes.make().getTZIDComparator());
         printWorldTimezoneCategorization(log, localization, groups, "001", 0, seen, col, showCode, zones_countrySet(),
             missing);
         if (missing[0].size() == 0 && missing[1].size() == 0) return;
@@ -1152,7 +1152,7 @@
         }
 
         if (log != null) log.println(">");
-        Map<String, String> reorder = new TreeMap<String, String>(col);
+        Map<String, String> reorder = new TreeMap<>(col);
         for (Iterator<String> it = s.iterator(); it.hasNext();) {
             key = it.next();
             String value = getName(localization, key, missing);
@@ -1207,14 +1207,14 @@
 
     static Map<String, Set<String>> zones_countrySet() {
         Map<String, List<String>> m = StandardCodes.make().getZoneData();
-        Map<String, Set<String>> result = new TreeMap<String, Set<String>>();
+        Map<String, Set<String>> result = new TreeMap<>();
         for (Iterator<String> it = m.keySet().iterator(); it.hasNext();) {
             String tzid = it.next();
             List<String> list = m.get(tzid);
             String country = list.get(2);
             Set<String> zones = result.get(country);
             if (zones == null) {
-                zones = new TreeSet<String>();
+                zones = new TreeSet<>();
                 result.put(country, zones);
             }
             zones.add(tzid);
@@ -1239,7 +1239,7 @@
         Factory cldrFactory = Factory.make(options[SOURCEDIR].value + "main\\", ".*");
         // CLDRKey.main(new String[]{"-mde.*"});
         Set<String> locales = cldrFactory.getAvailable();
-        Set<String> cldr = new TreeSet<String>();
+        Set<String> cldr = new TreeSet<>();
         LanguageTagParser parser = new LanguageTagParser();
         for (Iterator<String> it = locales.iterator(); it.hasNext();) {
             // if doesn't have exactly one _, skip
@@ -1250,7 +1250,7 @@
             cldr.add(locale.replace('_', '-'));
         }
 
-        Set<String> tex = new TreeSet<String>();
+        Set<String> tex = new TreeSet<>();
         while (true) {
             String line = in.readLine();
             if (line == null) break;
@@ -1259,10 +1259,10 @@
             int p = line.indexOf(' ');
             tex.add(line.substring(0, p));
         }
-        Set<String> inCldrButNotTex = new TreeSet<String>(cldr);
+        Set<String> inCldrButNotTex = new TreeSet<>(cldr);
         inCldrButNotTex.removeAll(tex);
         System.out.println(" inCldrButNotTex " + inCldrButNotTex);
-        Set<String> inTexButNotCLDR = new TreeSet<String>(tex);
+        Set<String> inTexButNotCLDR = new TreeSet<>(tex);
         inTexButNotCLDR.removeAll(cldr);
         System.out.println(" inTexButNotCLDR " + inTexButNotCLDR);
     }
diff --git a/tools/java/org/unicode/cldr/tool/Option.java b/tools/java/org/unicode/cldr/tool/Option.java
index a1b8b6e..b749cce 100644
--- a/tools/java/org/unicode/cldr/tool/Option.java
+++ b/tools/java/org/unicode/cldr/tool/Option.java
@@ -10,7 +10,7 @@
 
 import org.unicode.cldr.util.CLDRTool;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 
 /**
  * Simpler mechanism for handling options, where everything can be defined in one place.
@@ -123,7 +123,7 @@
     }
 
     public Option(Enum<?> optionEnumValue, String argumentPattern, String defaultArgument, String helpText) {
-        this(optionEnumValue, optionEnumValue.name(), (Character) (optionEnumValue.name().charAt(0)), Pattern.compile(argumentPattern), defaultArgument,
+        this(optionEnumValue, optionEnumValue.name(), (optionEnumValue.name().charAt(0)), Pattern.compile(argumentPattern), defaultArgument,
             helpText);
     }
 
@@ -162,7 +162,7 @@
         } else if (match instanceof Class) {
             try {
                 Enum[] valuesMethod = (Enum[]) ((Class) match).getMethod("values").invoke(null);
-                return Pattern.compile(CollectionUtilities.join(valuesMethod, "|"));
+                return Pattern.compile(Joiner.on("|").join(valuesMethod));
             } catch (Exception e) {
                 throw new IllegalArgumentException(e);
             }
@@ -172,6 +172,7 @@
 
     static final String PAD = "                    ";
 
+    @Override
     public String toString() {
         return "-" + flag
             + " (" + tag + ")"
@@ -210,10 +211,10 @@
     public static class Options implements Iterable<Option> {
 
         private String mainMessage;
-        final Map<String, Option> stringToValues = new LinkedHashMap<String, Option>();
-        final Map<Enum<?>, Option> enumToValues = new LinkedHashMap<Enum<?>, Option>();
-        final Map<Character, Option> charToValues = new LinkedHashMap<Character, Option>();
-        final Set<String> results = new LinkedHashSet<String>();
+        final Map<String, Option> stringToValues = new LinkedHashMap<>();
+        final Map<Enum<?>, Option> enumToValues = new LinkedHashMap<>();
+        final Map<Character, Option> charToValues = new LinkedHashMap<>();
+        final Set<String> results = new LinkedHashSet<>();
         {
             add("help", null, "Provide the list of possible options");
         }
diff --git a/tools/java/org/unicode/cldr/tool/PivotData.java b/tools/java/org/unicode/cldr/tool/PivotData.java
index eedbaa2..0922227 100644
--- a/tools/java/org/unicode/cldr/tool/PivotData.java
+++ b/tools/java/org/unicode/cldr/tool/PivotData.java
@@ -117,7 +117,7 @@
         // find all the unique paths that I have, where the value or fullpath is different from the parent.
         // AND the parent has the path
 
-        Set<String> uniquePaths = new TreeSet<String>();
+        Set<String> uniquePaths = new TreeSet<>();
         CLDRFile resolvedParent = factory.make(parentID, true);
         if (resolvedParent.getFullXPath("//ldml/alias", true) != null) {
             throw new IllegalArgumentException("File cannot be completely aliased: " + localeID);
diff --git a/tools/java/org/unicode/cldr/tool/PluralMinimalPairs.java b/tools/java/org/unicode/cldr/tool/PluralMinimalPairs.java
index 8022a7e..9142ec8 100644
--- a/tools/java/org/unicode/cldr/tool/PluralMinimalPairs.java
+++ b/tools/java/org/unicode/cldr/tool/PluralMinimalPairs.java
@@ -45,9 +45,12 @@
                 XPathParts parts = XPathParts.getFrozenInstance(path);
                 String sample = cldrFile.getStringValue(path);
                 String element = parts.getElement(-1);
-                PluralType type = "pluralMinimalPairs".equals(element) ? PluralType.CARDINAL
-                    : "ordinalMinimalPairs".equals(element) ? PluralType.ORDINAL
-                        : null;
+                PluralType type;
+                switch(element) {
+                case "pluralMinimalPairs": type = PluralType.CARDINAL; break;
+                case "ordinalMinimalPairs": type = PluralType.ORDINAL; break;
+                default: continue; // skip grammar, case
+                }
                 PluralInfo.Count category = PluralInfo.Count.valueOf(
                     parts.getAttributeValue(-1, type == PluralType.CARDINAL ? "count" : "ordinal"));
                 if (category == null || type == null) {
diff --git a/tools/java/org/unicode/cldr/tool/PluralRulesFactory.java b/tools/java/org/unicode/cldr/tool/PluralRulesFactory.java
index e922cdf..7b72ba2 100644
--- a/tools/java/org/unicode/cldr/tool/PluralRulesFactory.java
+++ b/tools/java/org/unicode/cldr/tool/PluralRulesFactory.java
@@ -29,20 +29,21 @@
 
     private final SupplementalDataInfo supplementalDataInfo;
 
+    @Override
     public abstract boolean hasOverride(ULocale locale);
 
     public enum Type {
         NORMAL, ALTERNATE
-    };
+    }
 
     public static PluralRulesFactory getInstance(SupplementalDataInfo supplementalDataInfo) {
         return getInstance(supplementalDataInfo, Type.NORMAL);
     }
 
-    private static ConcurrentHashMap<Pair<Type, String>, PluralRulesFactory> singletons = new ConcurrentHashMap<Pair<Type, String>, PluralRulesFactory>();
+    private static ConcurrentHashMap<Pair<Type, String>, PluralRulesFactory> singletons = new ConcurrentHashMap<>();
 
     public static PluralRulesFactory getInstance(SupplementalDataInfo supplementalDataInfo, Type type) {
-        Pair<Type, String> key = new Pair<Type, String>(type, supplementalDataInfo.getDirectory().getAbsolutePath());
+        Pair<Type, String> key = new Pair<>(type, supplementalDataInfo.getDirectory().getAbsolutePath());
         PluralRulesFactory prf = singletons.get(key);
         if (prf == null) {
             switch (type) {
@@ -196,7 +197,7 @@
 //                XPathParts parts = XPathParts.getFrozenInstance(path);
 //                String sample = cldrFile.getStringValue(path);
 //                String element = parts.getElement(-1);
-//                PluralType type = "pluralMinimalPairs".equals(element) ? PluralType.CARDINAL 
+//                PluralType type = "pluralMinimalPairs".equals(element) ? PluralType.CARDINAL
 //                    : "ordinalMinimalPairs".equals(element) ? PluralType.ORDINAL
 //                        : null;
 //                PluralInfo.Count category = PluralInfo.Count.valueOf(
@@ -219,7 +220,7 @@
         <ordinalMinimalPairs ordinal="two">Take the {0}nd right.</ordinalMinimalPairs>
         </minimalPairs>
         </numbers>
-        
+
          */
 //        }
 
@@ -291,7 +292,7 @@
         }
 //        LOCALE_TO_SAMPLE_PATTERNS = Collections.unmodifiableMap(temp);
 //        OVERRIDES = Collections.unmodifiableMap(tempOverrides);
-        EXTRA_SAMPLES = (Relation<ULocale, FixedDecimal>) tempSamples.freeze();
+        EXTRA_SAMPLES = tempSamples.freeze();
     }
 
     //    static String[][] OLDRULES = {
diff --git a/tools/java/org/unicode/cldr/tool/ReadSql.java b/tools/java/org/unicode/cldr/tool/ReadSql.java
index 858d41a..ffe342b 100644
--- a/tools/java/org/unicode/cldr/tool/ReadSql.java
+++ b/tools/java/org/unicode/cldr/tool/ReadSql.java
@@ -206,7 +206,7 @@
 
     static class Data {
         final String key;
-        final List<Items> dataItems = new ArrayList<Items>();
+        final List<Items> dataItems = new ArrayList<>();
         static Map<String, Data> map = new TreeMap<>();
 
         public Data(String key) {
diff --git a/tools/java/org/unicode/cldr/tool/ReadXMB.java b/tools/java/org/unicode/cldr/tool/ReadXMB.java
index 2f6d3a2..4b8202f 100644
--- a/tools/java/org/unicode/cldr/tool/ReadXMB.java
+++ b/tools/java/org/unicode/cldr/tool/ReadXMB.java
@@ -32,7 +32,7 @@
     }
 
     private static class CasingHandler extends XMLFileReader.SimpleHandler {
-        public Map<String, String> info = new LinkedHashMap<String, String>();
+        public Map<String, String> info = new LinkedHashMap<>();
         String path;
         String id;
         String value;
diff --git a/tools/java/org/unicode/cldr/tool/RegexModify.java b/tools/java/org/unicode/cldr/tool/RegexModify.java
index 3bb0df6..dc8d530 100644
--- a/tools/java/org/unicode/cldr/tool/RegexModify.java
+++ b/tools/java/org/unicode/cldr/tool/RegexModify.java
@@ -129,6 +129,7 @@
             return count;
         }
 
+        @Override
         public String apply(String line) {
             if (lineMatcher.reset(line).matches()) {
                 String oldLine = line;
diff --git a/tools/java/org/unicode/cldr/tool/RemoveEmptyCLDR.java b/tools/java/org/unicode/cldr/tool/RemoveEmptyCLDR.java
index 5756d47..dbbe23f 100644
--- a/tools/java/org/unicode/cldr/tool/RemoveEmptyCLDR.java
+++ b/tools/java/org/unicode/cldr/tool/RemoveEmptyCLDR.java
@@ -12,6 +12,7 @@
 import org.unicode.cldr.util.CLDRPaths;
 import org.unicode.cldr.util.LocaleIDParser;
 import org.unicode.cldr.util.Pair;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.XMLFileReader;
 
 import com.google.common.collect.BiMap;
@@ -39,18 +40,18 @@
                 }
                 main: for (File f : dirFile.listFiles()) {
                     List<Pair<String, String>> data = new ArrayList<>();
-                    String canonicalPath = f.getCanonicalPath();
-                    if (!canonicalPath.endsWith(".xml") || canonicalPath.endsWith("root.xml")) {
+                    String normalizedPath = PathUtilities.getNormalizedPathString(f);
+                    if (!normalizedPath.endsWith(".xml") || normalizedPath.endsWith("root.xml")) {
                         continue;
                     }
                     String name = f.getName();
                     name = name.substring(0,name.length()-4); // remove .xml
-                    XMLFileReader.loadPathValues(canonicalPath, data, false);
+                    XMLFileReader.loadPathValues(normalizedPath, data, false);
                     for (Pair<String, String> item : data) {
                         if (item.getFirst().contains("/identity")) {
                             continue;
                         }
-                        System.out.println(++counter + ") NOT-EMPTY: " + canonicalPath);
+                        System.out.println(++counter + ") NOT-EMPTY: " + normalizedPath);
                         addNameAndParents(nonEmpty, name);
                         continue main;
                     }
@@ -66,7 +67,7 @@
                 continue;
             }
             File file = entry.getValue();
-            System.out.println(++counter + ") Deleting: " + file.getCanonicalPath());
+            System.out.println(++counter + ") Deleting: " + PathUtilities.getNormalizedPathString(file));
             if (!PREFLIGHT) {
                 file.delete();
             }
diff --git a/tools/java/org/unicode/cldr/tool/RemoveEmptyCldrFiles.java b/tools/java/org/unicode/cldr/tool/RemoveEmptyCldrFiles.java
index 7e25b74..6dbc239 100644
--- a/tools/java/org/unicode/cldr/tool/RemoveEmptyCldrFiles.java
+++ b/tools/java/org/unicode/cldr/tool/RemoveEmptyCldrFiles.java
@@ -9,7 +9,7 @@
 
 public class RemoveEmptyCldrFiles {
     public static void main(String[] args) {
-        File[] paths = { 
+        File[] paths = {
             new File(CLDRPaths.ANNOTATIONS_DIRECTORY)
         };
         Factory factory = SimpleFactory.make(paths, ".*");
diff --git a/tools/java/org/unicode/cldr/tool/ScriptPopulations.java b/tools/java/org/unicode/cldr/tool/ScriptPopulations.java
index 4e20f31..d721018 100644
--- a/tools/java/org/unicode/cldr/tool/ScriptPopulations.java
+++ b/tools/java/org/unicode/cldr/tool/ScriptPopulations.java
@@ -23,9 +23,9 @@
         // iterate through the language populations, picking up the script
         SupplementalDataInfo info = supplementalDataInfo;
         LanguageTagParser languageTagParser = new LanguageTagParser();
-        Counter<String> langScriptLitPop = new Counter<String>();
-        Counter<String> scriptLitPop = new Counter<String>();
-        Map<String, OfficialStatus> bestStatus = new HashMap<String, OfficialStatus>();
+        Counter<String> langScriptLitPop = new Counter<>();
+        Counter<String> scriptLitPop = new Counter<>();
+        Map<String, OfficialStatus> bestStatus = new HashMap<>();
 
         for (String territory : info.getTerritoriesWithPopulationData()) {
             for (String language : info.getLanguagesForTerritoryWithPopulationData(territory)) {
diff --git a/tools/java/org/unicode/cldr/tool/SearchCLDR.java b/tools/java/org/unicode/cldr/tool/SearchCLDR.java
index b771fa0..56b4178 100644
--- a/tools/java/org/unicode/cldr/tool/SearchCLDR.java
+++ b/tools/java/org/unicode/cldr/tool/SearchCLDR.java
@@ -29,12 +29,12 @@
 import org.unicode.cldr.util.Level;
 import org.unicode.cldr.util.PathHeader;
 import org.unicode.cldr.util.PathHeader.BaseUrl;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.PatternCache;
 import org.unicode.cldr.util.SimpleFactory;
 import org.unicode.cldr.util.StandardCodes;
 
 import com.google.common.collect.ImmutableSet;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.util.ICUUncheckedIOException;
 import com.ibm.icu.util.Output;
 import com.ibm.icu.util.VersionInfo;
@@ -107,13 +107,12 @@
 
     public static void main(String[] args) {
         myOptions.parse(args, true);
-        // System.out.println("Arguments: " + CollectionUtilities.join(args, " "));
 
         long startTime = System.currentTimeMillis();
 
         String sourceDirectory = myOptions.get("source").getValue();
 
-        Output<Boolean> exclude = new Output<Boolean>();
+        Output<Boolean> exclude = new Output<>();
         fileMatcher = myOptions.get("file").getValue();
 
         pathMatcher = getMatcher(myOptions.get("path").getValue(), exclude);
@@ -144,9 +143,9 @@
             new File(CLDRPaths.MAIN_DIRECTORY),
             new File(sourceDirectory) };
 
-        Factory cldrFactory = SimpleFactory.make(paths, fileMatcher); 
+        Factory cldrFactory = SimpleFactory.make(paths, fileMatcher);
 
-        Set<String> locales = new TreeSet<String>(cldrFactory.getAvailable());
+        Set<String> locales = new TreeSet<>(cldrFactory.getAvailable());
 
         String rawVersion = myOptions.get("diff").getValue();
 
@@ -161,7 +160,7 @@
 
         String errorMatcherText = myOptions.get("Error").getValue();
         subtype = null;
-        checkCldr = null; 
+        checkCldr = null;
         if (errorMatcherText != null) {
             int errorSepPos = errorMatcherText.indexOf(':');
             if (errorSepPos >= 0) {
@@ -203,8 +202,8 @@
             Level organizationLevel = organization == null ? null
                 : StandardCodes.make().getLocaleCoverageLevel(organization, locale);
 
-            CLDRFile file = (CLDRFile) cldrFactory.make(locale, resolved);
-            CLDRFile resolvedFile = resolved == true ? file 
+            CLDRFile file = cldrFactory.make(locale, resolved);
+            CLDRFile resolvedFile = resolved == true ? file
                 : (CLDRFile) cldrFactory.make(locale, true);
             CLDRFile diffFile = null;
 
@@ -224,7 +223,7 @@
                 }
             }
 
-            Counter<Level> levelCounter = new Counter<Level>();
+            Counter<Level> levelCounter = new Counter<>();
             //CLDRFile parent = null;
             boolean headerShown = false;
 
@@ -234,7 +233,7 @@
 
             level = CoverageLevel2.getInstance(locale);
             Status status = new Status();
-            Set<PathHeader> sorted = new TreeSet<PathHeader>();
+            Set<PathHeader> sorted = new TreeSet<>();
             for (String path : file.fullIterable()) {
                 if (locale.equals("eo") && path.contains("type=\"MK\"")) {
                     int debug = 0;
@@ -300,7 +299,7 @@
                     for (CheckStatus item : result) {
                         if (item.getSubtype() == subtype) {
                             ++count;
-                        };
+                        }
                     }
                     if (count == 0) {
                         continue;
@@ -331,7 +330,7 @@
                     : file.getSourceLocaleID(path, status)
                     + (path.equals(status.pathWhereFound) ? "\t≣" : "\t" + status);
                 if (checkCldr != null) {
-                    SearchXml.show(ConfigOption.delete, locale, file.getDistinguishingXPath(fullPath, null), value, null, null, null);
+                    SearchXml.show(ConfigOption.delete, "", locale, CLDRFile.getDistinguishingXPath(fullPath, null), value, null, null, null);
                 } else {
                     showLine(showPath, showParent, showEnglish, resolved, locale,
                         path, fullPath, value,
@@ -351,7 +350,7 @@
                 }
             }
             if (localeCount != 0) {
-                System.out.println("# " + locale 
+                System.out.println("# " + locale
                     + " Total " + localeCount + " found");
             }
             System.out.flush();
@@ -366,16 +365,12 @@
         File[] newDirs = new File[sourceDirs.length];
         int item = 0;
         for (File s : sourceDirs) {
-            try {
-                String path = s.getCanonicalPath();
-                int baseLoc = path.lastIndexOf("/cldr/");
-                if (baseLoc < 0) {
-                    throw new ICUUncheckedIOException("source doesn't contain /cldr/");
-                }
-                newDirs[item++] = new File(base, path.substring(baseLoc + 5));
-            } catch (IOException e) { 
-                throw new ICUUncheckedIOException(e);
+            String path = PathUtilities.getNormalizedPathString(s);
+            int baseLoc = path.lastIndexOf("/cldr/");
+            if (baseLoc < 0) {
+                throw new ICUUncheckedIOException("source doesn't contain /cldr/");
             }
+            newDirs[item++] = new File(base, path.substring(baseLoc + 5));
         }
         return newDirs;
     }
@@ -396,10 +391,10 @@
             }
         }
         System.out.println("# "
-            + locale 
+            + locale
             + "\t⟪" + value + "⟫"
             + (showEnglish ? "\t⟪" + englishValue + "⟫" : "")
-            + (!showParent ? "" : CollectionUtilities.equals(value, parentValue) ? "\t≣" : "\t⟪" + parentValue + "⟫")
+            + (!showParent ? "" : Objects.equals(value, parentValue) ? "\t≣" : "\t⟪" + parentValue + "⟫")
             + "\t" + shortPath
             + (showPath ? "\t" + fullPath : "")
             + (resolved ? "\t" + resolvedSource : "")
@@ -438,4 +433,4 @@
         }
         return ImmutableSet.copyOf(result);
     }
-}
\ No newline at end of file
+}
diff --git a/tools/java/org/unicode/cldr/tool/SearchXml.java b/tools/java/org/unicode/cldr/tool/SearchXml.java
index ef21352..300d9e5 100644
--- a/tools/java/org/unicode/cldr/tool/SearchXml.java
+++ b/tools/java/org/unicode/cldr/tool/SearchXml.java
@@ -18,6 +18,7 @@
 import org.unicode.cldr.util.PathHeader;
 import org.unicode.cldr.util.PathHeader.BaseUrl;
 import org.unicode.cldr.util.PathStarrer;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.PatternCache;
 import org.unicode.cldr.util.SupplementalDataInfo;
 import org.unicode.cldr.util.XMLFileReader;
@@ -53,15 +54,15 @@
     private static boolean fileExclude = false;
     private static boolean unique = false;
     private static boolean groups = false;
-    private static Counter<String> uniqueData = new Counter<String>();
+    private static Counter<String> uniqueData = new Counter<>();
 
     private static String valuePattern;
     private static File comparisonDirectory;
     private static boolean recursive;
-    
+
     private static Counter<String> kountRegexMatches;
     private static Counter<String> starCounter;
-    private static final Set<String> ERRORS = new LinkedHashSet<String>();
+    private static final Set<String> ERRORS = new LinkedHashSet<>();
     private static final PathStarrer pathStarrer = new PathStarrer();
     private static PathHeader.Factory PATH_HEADER_FACTORY = null;
 
@@ -92,7 +93,7 @@
             System.out.println("#" + "Need Source Directory! ");
             return;
         }
-        Output<Boolean> exclude = new Output<Boolean>();
+        Output<Boolean> exclude = new Output<>();
         fileMatcher = getMatcher(myOptions.get("file").getValue(), exclude);
         fileExclude = exclude.value;
 
@@ -106,7 +107,7 @@
         valueExclude = exclude.value;
 
         if (myOptions.get("Star").doesOccur()) {
-            starCounter = new Counter<String>();
+            starCounter = new Counter<>();
         }
 
         if (pathMatcher != null && valueMatcher != null) {
@@ -124,7 +125,7 @@
         groups = myOptions.get("groups").doesOccur();
 
         countOnly = myOptions.get("count").doesOccur();
-        kountRegexMatches = myOptions.get("kount").doesOccur() ? new Counter<String>() : null;
+        kountRegexMatches = myOptions.get("kount").doesOccur() ? new Counter<>() : null;
 
         recursive = myOptions.get("recursive").doesOccur();
 
@@ -211,7 +212,7 @@
             }
 
             String fileName = file.getName();
-            String canonicalFile = file.getCanonicalPath();
+            String canonicalFile = PathUtilities.getNormalizedPathString(file);
 
             if (!fileName.endsWith(".xml")) {
                 continue;
@@ -254,7 +255,7 @@
         ListHandler listHandler = new ListHandler();
         XMLFileReader xfr = new XMLFileReader().setHandler(listHandler);
         try {
-            String fileName2 = directory.getCanonicalPath() + "/" + fileName;
+            String fileName2 = PathUtilities.getNormalizedPathString(directory) + "/" + fileName;
             xfr.read(fileName2, XMLFileReader.CONTENT_HANDLER
                 | XMLFileReader.ERROR_HANDLER, false);
         } catch (Exception e) {
@@ -271,6 +272,7 @@
         public Relation<String, String> data = Relation.of(new LinkedHashMap<String, Set<String>>(),
             LinkedHashSet.class);
 
+        @Override
         public void handlePathValue(String path, String value) {
             data.put(path, value);
         }
@@ -319,7 +321,7 @@
         CoverageLevel2 level = null;
         String firstMessage;
         String file;
-        Counter<Level> levelCounter = new Counter<Level>();
+        Counter<Level> levelCounter = new Counter<>();
         String canonicalFile = fileName;
         firstMessage = "* " + canonicalFile;
         file = canonicalFile;
@@ -341,7 +343,7 @@
             System.out.println();
         }
 
-        Set<String> keys = new LinkedHashSet<String>(source.keySet());
+        Set<String> keys = new LinkedHashSet<>(source.keySet());
         if (other != null) {
             keys.addAll(other.keySet());
         }
@@ -383,7 +385,7 @@
                         diffInfo.sameCount += values.size();
                     }
                     if (diff && showValues) {
-                        show(ConfigOption.add, file, null, null, path, values, otherValues);
+                        show(ConfigOption.add, filePath, file, null, null, path, values, otherValues);
                     }
                 }
             } else {
@@ -428,7 +430,7 @@
                                 }
                                 // http://st.unicode.org/cldr-apps/v#/en/Fields/59d8178ec2fe04ae
                                 if (!groups && pathHeaderInfo.isEmpty()) {
-                                    show(ConfigOption.add, file, null, null, path, Collections.singleton(value), null);
+                                    show(ConfigOption.add, filePath, file, null, null, path, Collections.singleton(value), null);
                                 } else {
                                     System.out.println("#?" +
                                         (recursive ? filePath + "\t" : "")
@@ -452,31 +454,33 @@
         }
     }
 
-    enum ConfigOption {delete, add, addNew, replace};
-    
-    public static void show(ConfigOption configOption, 
-        String localeOrFile, 
-        String match_path, 
-        String match_value, 
-        String new_path, 
-        Set<String> new_values, 
+    enum ConfigOption {delete, add, addNew, replace}
+
+    public static void show(ConfigOption configOption,
+        String fileParent,
+        String localeOrFile,
+        String match_path,
+        String match_value,
+        String new_path,
+        Set<String> new_values,
         Set<String> otherValues) {
         // locale= sv ; action=delete; value= YER ; path= //ldml/numbers/currencies/currency[@type="YER"]/symbol ;
 
         // locale=en ; action=delete ; path=/.*short.*/
 
         // locale=en ; action=add ; new_path=//ldml/localeDisplayNames/territories/territory[@type="PS"][@alt="short"] ; new_value=Palestine
-        // locale=  af     ; action=add ; new_path=        //ldml/dates/fields/field[@type="second"]/relative[@type="0"]    ; new_value=    nou  
+        // locale=  af     ; action=add ; new_path=        //ldml/dates/fields/field[@type="second"]/relative[@type="0"]    ; new_value=    nou
 
 
         int extensionPos = localeOrFile.lastIndexOf('.');
         String fileWithoutSuffix = extensionPos >= 0 ? localeOrFile.substring(0, extensionPos) : localeOrFile;
 
-        String values2 = new_values == null ? null 
-            : new_values.size() != 1 ? new_values.toString() 
+        String values2 = new_values == null ? null
+            : new_values.size() != 1 ? new_values.toString()
                 : new_values.iterator().next();
-        
-        System.out.println("locale=" + fileWithoutSuffix
+
+        System.out.println(fileParent
+            + ";\tlocale=" + fileWithoutSuffix
             + ";\taction=" + configOption
             + (match_value == null ? "" : ";\tvalue=" + escape(match_value))
             + (match_path == null ? "" : ";\tpath=" + match_path)
@@ -517,4 +521,4 @@
     //    static class StarCounter {
     //        Map<String,Counter<String>> data = new HashMap();
     //    }
-}
\ No newline at end of file
+}
diff --git a/tools/java/org/unicode/cldr/tool/ShowChildren.java b/tools/java/org/unicode/cldr/tool/ShowChildren.java
index 4d15f2d..76ae61d 100644
--- a/tools/java/org/unicode/cldr/tool/ShowChildren.java
+++ b/tools/java/org/unicode/cldr/tool/ShowChildren.java
@@ -15,18 +15,17 @@
 import org.unicode.cldr.util.LocaleIDParser;
 import org.unicode.cldr.util.PrettyPath;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 
 public class ShowChildren {
 
     public static void main(String[] args) {
-        System.out.println("Arguments: " + CollectionUtilities.join(args, " "));
+        System.out.println("Arguments: " + String.join(" ", args));
 
         long startTime = System.currentTimeMillis();
 
         Factory cldrFactory = Factory.make(CLDRPaths.MAIN_DIRECTORY, ".*");
-        Set<String> locales = new TreeSet<String>(cldrFactory.getAvailable());
+        Set<String> locales = new TreeSet<>(cldrFactory.getAvailable());
 
         Relation<String, String> parent2children = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
         LanguageTagParser ltp = new LanguageTagParser();
@@ -39,17 +38,17 @@
         PrettyPath prettyPath = new PrettyPath();
 
         final CLDRFile english = ToolConfig.getToolInstance().getEnglish();
-        Counter<String> deviations = new Counter<String>();
+        Counter<String> deviations = new Counter<>();
 
         for (Entry<String, Set<String>> entry : parent2children.keyValuesSet()) {
-            Map<String, Relation<String, String>> path2value2locales = new TreeMap<String, Relation<String, String>>();
+            Map<String, Relation<String, String>> path2value2locales = new TreeMap<>();
             String parent = entry.getKey();
             String parentName = english.getName(parent);
-            CLDRFile parentFile = (CLDRFile) cldrFactory.make(parent, true);
+            CLDRFile parentFile = cldrFactory.make(parent, true);
 
             Set<String> children = entry.getValue();
             for (String child : children) {
-                CLDRFile file = (CLDRFile) cldrFactory.make(child, false);
+                CLDRFile file = cldrFactory.make(child, false);
                 for (String path : file) {
                     if (path.startsWith("//ldml/identity")
                         || path.endsWith("/alias")
diff --git a/tools/java/org/unicode/cldr/tool/ShowData.java b/tools/java/org/unicode/cldr/tool/ShowData.java
index 943a7e2..3cebe52 100644
--- a/tools/java/org/unicode/cldr/tool/ShowData.java
+++ b/tools/java/org/unicode/cldr/tool/ShowData.java
@@ -38,8 +38,8 @@
 import org.unicode.cldr.util.StringId;
 import org.unicode.cldr.util.TransliteratorUtilities;
 
+import com.google.common.base.Joiner;
 import com.ibm.icu.dev.tool.UOption;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.lang.UScript;
 import com.ibm.icu.text.Collator;
@@ -123,10 +123,10 @@
             // .make(sourceDir.replace("incoming/vetted/","common/") + "../collation/", ".*");
             // ExtractCollationRules collationRules = new ExtractCollationRules();
 
-            locales = new TreeSet<String>(cldrFactory.getAvailable());
+            locales = new TreeSet<>(cldrFactory.getAvailable());
             new CldrUtility.MatcherFilter(options[MATCH].value).retainAll(locales);
             // Set paths = new TreeSet();
-            Set<PathHeader> prettySet = new TreeSet<PathHeader>();
+            Set<PathHeader> prettySet = new TreeSet<>();
 
             CLDRFile.Status status = new CLDRFile.Status();
             LocaleIDParser localeIDParser = new LocaleIDParser();
@@ -134,7 +134,7 @@
             //Map nonDistinguishingAttributes = new LinkedHashMap();
             //CLDRFile parent = null;
 
-            Map<PathHeader, Relation<String, String>> pathHeaderToValuesToLocale = new TreeMap<PathHeader, Relation<String, String>>();
+            Map<PathHeader, Relation<String, String>> pathHeaderToValuesToLocale = new TreeMap<>();
 
             Set<String> defaultContents = testInfo.getSupplementalDataInfo().getDefaultContentLocales();
 
@@ -166,7 +166,7 @@
             for (Entry<String, Set<String>> group : parentToChildren.keyValuesSet()) {
                 String locale = group.getKey();
                 Set<String> children = group.getValue();
-                Map<String, CLDRFile> sublocales = new TreeMap<String, CLDRFile>();
+                Map<String, CLDRFile> sublocales = new TreeMap<>();
 
                 boolean doResolved = localeIDParser.set(locale).getRegion().length() == 0;
                 String languageSubtag = localeIDParser.getLanguage();
@@ -178,13 +178,13 @@
 
                 // get all of the paths
                 Set<String> allPaths = new HashSet<>();
-                CollectionUtilities.addAll(file.iterator(), allPaths);
+                file.forEach(allPaths::add);
 
                 if (!locale.equals("root")) {
                     for (String childLocale : children) {
                         CLDRFile childCldrFile = cldrFactory.make(childLocale, false);
                         if (childCldrFile != null) {
-                            CollectionUtilities.addAll(childCldrFile.iterator(), allPaths);
+                            childCldrFile.forEach(allPaths::add);
                         }
                         sublocales.put(childLocale, childCldrFile);
                     }
@@ -294,8 +294,8 @@
 
                     for (Entry<String, CLDRFile> s : sublocales.entrySet()) {
                         String newChildValue = s.getValue().getStringValue(path);
-                        if (newChildValue == null 
-                            || CldrUtility.equals(newChildValue, value) 
+                        if (newChildValue == null
+                            || CldrUtility.equals(newChildValue, value)
                             || CldrUtility.INHERITANCE_MARKER.equals(newChildValue)) {
                             continue;
                         }
@@ -410,7 +410,7 @@
                         .append("</td><td class='v'>")
                         .append(DataShower.getPrettyValue(value.substring(breakPoint + 2)))
                         .append("</td><td>")
-                        .append(CollectionUtilities.join(s.getValue(), ", "))
+                        .append(Joiner.on(", ").join(s.getValue()))
                         .append("</td></tr>")
                         .append(System.lineSeparator());
                     addRow = true;
@@ -429,7 +429,7 @@
         final boolean noLocales = locales == null || locales.isEmpty();
         pw.println("<td"
             + (isExemplar ? " style='max-width:20%'" : "")
-            + (noLocales ? "" : " title='" + CollectionUtilities.join(locales, ", ") + "'")
+            + (noLocales ? "" : " title='" + Joiner.on(", ").join(locales) + "'")
             + (value == null ? "></i>n/a</i>" : " class='v'" + DataShower.getBidiStyle(value) + ">" + DataShower.getPrettyValue(value))
             + "</td>");
     }
@@ -448,8 +448,8 @@
 
     private static void getScripts() throws IOException {
         Set<String> locales = cldrFactory.getAvailableLanguages();
-        Set<String> scripts = new TreeSet<String>();
-        Map<String, Map<String, Set<String>>> script_name_locales = new TreeMap<String, Map<String, Set<String>>>();
+        Set<String> scripts = new TreeSet<>();
+        Map<String, Map<String, Set<String>>> script_name_locales = new TreeMap<>();
         PrintWriter out = FileUtilities.openUTF8Writer(CLDRPaths.GEN_DIRECTORY, "scriptNames.txt");
         for (Iterator<String> it = locales.iterator(); it.hasNext();) {
             String locale = it.next();
@@ -472,10 +472,10 @@
                 if (getScripts(name, scripts).contains(script)) {
                     Map<String, Set<String>> names_locales = script_name_locales.get(script);
                     if (names_locales == null)
-                        script_name_locales.put(script, names_locales = new TreeMap<String, Set<String>>());
+                        script_name_locales.put(script, names_locales = new TreeMap<>());
                     Set<String> localeSet = names_locales.get(name);
                     if (localeSet == null)
-                        names_locales.put(name, localeSet = new TreeSet<String>());
+                        names_locales.put(name, localeSet = new TreeSet<>());
                     localeSet.add(getLocaleNameAndCode(locale));
                 }
             }
@@ -489,7 +489,7 @@
         out.close();
     }
 
-    static Set<String> UnicodeScripts = Collections.unmodifiableSet(new TreeSet<String>(Arrays
+    static Set<String> UnicodeScripts = Collections.unmodifiableSet(new TreeSet<>(Arrays
         .asList(new String[] { "Arab", "Armn", "Bali", "Beng", "Bopo", "Brai",
             "Bugi", "Buhd", "Cans", "Cher", "Copt", "Cprt", "Cyrl", "Deva",
             "Dsrt", "Ethi", "Geor", "Glag", "Goth", "Grek", "Gujr", "Guru",
@@ -711,7 +711,7 @@
         // "$" //
         // + "Date" //
         // + "$") // odd style to keep CVS from substituting
-        ; // isoDateFormat.format(new Date())
+         // isoDateFormat.format(new Date())
         BufferedReader input = ToolUtilities.getUTF8Data("chart-template.html");
         StringBuffer result = new StringBuffer();
         while (true) {
diff --git a/tools/java/org/unicode/cldr/tool/ShowDtdDiffs.java b/tools/java/org/unicode/cldr/tool/ShowDtdDiffs.java
index ac66935..91aa011 100644
--- a/tools/java/org/unicode/cldr/tool/ShowDtdDiffs.java
+++ b/tools/java/org/unicode/cldr/tool/ShowDtdDiffs.java
@@ -17,7 +17,7 @@
 import org.unicode.cldr.util.DtdType;
 import org.unicode.cldr.util.SupplementalDataInfo;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 
 public class ShowDtdDiffs {
     static final SupplementalDataInfo SDI = CLDRConfig.getInstance().getSupplementalDataInfo();
@@ -153,7 +153,7 @@
             }
             names.add(name);
         }
-        return names.isEmpty() ? "" : CollectionUtilities.join(names, ", ");
+        return names.isEmpty() ? "" : Joiner.on(", ").join(names);
     }
 
     private static boolean isDeprecated(DtdType dtdType, String elementName, String attributeName) {
diff --git a/tools/java/org/unicode/cldr/tool/ShowKeyboards.java b/tools/java/org/unicode/cldr/tool/ShowKeyboards.java
index eb8f9d4..23a2b2d 100644
--- a/tools/java/org/unicode/cldr/tool/ShowKeyboards.java
+++ b/tools/java/org/unicode/cldr/tool/ShowKeyboards.java
@@ -42,7 +42,7 @@
 import org.unicode.cldr.util.TransliteratorUtilities;
 import org.unicode.cldr.util.UnicodeSetPrettyPrinter;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
@@ -117,12 +117,12 @@
     }
 
     public static void showRepertoire(Matcher idMatcher) {
-        Set<Exception> totalErrors = new LinkedHashSet<Exception>();
-        Set<Exception> errors = new LinkedHashSet<Exception>();
+        Set<Exception> totalErrors = new LinkedHashSet<>();
+        Set<Exception> errors = new LinkedHashSet<>();
         UnicodeSet controls = new UnicodeSet("[:Cc:]").freeze();
         // check what the characters are, excluding controls.
-        Map<Id, UnicodeSet> id2unicodeset = new TreeMap<Id, UnicodeSet>();
-        Set<String> totalModifiers = new LinkedHashSet<String>();
+        Map<Id, UnicodeSet> id2unicodeset = new TreeMap<>();
+        Set<String> totalModifiers = new LinkedHashSet<>();
         Relation<String, Id> locale2ids = Relation.of(new TreeMap<String, Set<Id>>(), TreeSet.class);
         LanguageTagCanonicalizer canonicalizer = new LanguageTagCanonicalizer();
         IdInfo idInfo = new IdInfo();
@@ -153,7 +153,8 @@
             }
         }
         if (totalErrors.size() != 0) {
-            System.out.println("Errors\t" + CollectionUtilities.join(totalErrors, System.lineSeparator() + "\t"));
+            System.out.println("Errors\t" + Joiner.on(System.lineSeparator() + "\t")
+                .join(totalErrors));
         }
         for (String item : totalModifiers) {
             System.out.println(item);
@@ -205,10 +206,10 @@
     }
 
     private static void showHtml(Matcher idMatcher) throws IOException {
-        Set<Exception> errors = new LinkedHashSet<Exception>();
+        Set<Exception> errors = new LinkedHashSet<>();
         Relation<String, Row.R3<String, String, String>> locale2keyboards = Relation.of(
             new TreeMap<String, Set<Row.R3<String, String, String>>>(), TreeSet.class);
-        Map<String, String> localeIndex = new TreeMap<String, String>();
+        Map<String, String> localeIndex = new TreeMap<>();
 
         for (String platformId : Keyboard.getPlatformIDs()) {
             //Platform p = Keyboard.getPlatform(platformId);
@@ -407,7 +408,7 @@
                 String keyString = key == Gesture.LONGPRESS ? "LP" : key.toString();
                 final V value = entry.getValue();
                 String valueString = value instanceof Collection
-                    ? CollectionUtilities.join((Collection) value, " ")
+                    ? Joiner.on(" ").join((Collection) value)
                     : value.toString();
                 hover.append(TransliteratorUtilities.toHTML.transform(keyString)).append("→")
                     .append(TransliteratorUtilities.toHTML.transform(valueString));
@@ -451,9 +452,9 @@
             .addColumn("Statistics").setCellAttributes("class='cell'")
             .addColumn("Characters").setSpanRows(true).setCellAttributes("class='cell'");
 
-        Map<String, UnicodeSet> commonSets = new HashMap<String, UnicodeSet>();
-        Counter<String> commonCount = new Counter<String>();
-        Set<String> commonDone = new HashSet<String>();
+        Map<String, UnicodeSet> commonSets = new HashMap<>();
+        Counter<String> commonCount = new Counter<>();
+        Set<String> commonDone = new HashSet<>();
 
         for (Entry<String, Set<Id>> localeAndIds : locale2ids.keyValuesSet()) {
             final String key = localeAndIds.getKey();
@@ -578,7 +579,7 @@
         {
             collator.setStrength(Collator.IDENTICAL);
             for (int i = 0; i < charToKeyboards.length; ++i) {
-                charToKeyboards[i] = new TreeMap<String, IdSet>(collator);
+                charToKeyboards[i] = new TreeMap<>(collator);
             }
         }
         IdSet allIds = new IdSet();
@@ -648,7 +649,7 @@
                 .addColumn("Code").setCellAttributes("class='c'")
                 .addColumn("Name").setCellAttributes("class='n'")
                 .addColumn("Keyboards").setSpanRows(true).setCellAttributes("class='k'");
-            Set<String> missingScripts = new TreeSet<String>();
+            Set<String> missingScripts = new TreeSet<>();
             UnicodeSet notNFKC = new UnicodeSet("[:nfkcqc=n:]");
             UnicodeSet COMMONINHERITED = new UnicodeSet("[[:sc=common:][:sc=inherited:]]");
 
@@ -737,7 +738,7 @@
     }
 
     private static String getInfo(Id keyboardId, UnicodeSet common, CLDRFile cldrFile) {
-        Counter<String> results = new Counter<String>();
+        Counter<String> results = new Counter<>();
         for (String s : common) {
             int first = s.codePointAt(0); // first char is good enough
             results.add(UScript.getShortName(UScript.getScript(first)), 1);
@@ -848,7 +849,7 @@
     }
 
     static class IdSet {
-        Map<String, Relation<String, String>> data = new TreeMap<String, Relation<String, String>>();
+        Map<String, Relation<String, String>> data = new TreeMap<>();
 
         public void add(Id id) {
             Relation<String, String> platform2variant = data.get(id.platform);
@@ -946,6 +947,7 @@
             return data.equals(((IdSet) other).data);
         }
 
+        @Override
         public int hashCode() {
             return data.hashCode();
         }
diff --git a/tools/java/org/unicode/cldr/tool/ShowLanguageData.java b/tools/java/org/unicode/cldr/tool/ShowLanguageData.java
index 92ff140..4e97caf 100644
--- a/tools/java/org/unicode/cldr/tool/ShowLanguageData.java
+++ b/tools/java/org/unicode/cldr/tool/ShowLanguageData.java
@@ -18,7 +18,7 @@
 
     public static void main(String[] args) {
 
-        Map<String, Counter<String>> map = new TreeMap<String, Counter<String>>();
+        Map<String, Counter<String>> map = new TreeMap<>();
 
         for (String language : data.getLanguagesForTerritoriesPopulationData()) {
             if (language.equals("und")) {
@@ -27,7 +27,7 @@
             for (String territory : data.getTerritoriesForPopulationData(language)) {
                 Counter<String> langCounter = map.get(territory);
                 if (langCounter == null) {
-                    map.put(territory, langCounter = new Counter<String>());
+                    map.put(territory, langCounter = new Counter<>());
                 }
                 PopulationData popData = data.getLanguageAndTerritoryPopulationData(language, territory);
                 OfficialStatus status = popData.getOfficialStatus();
diff --git a/tools/java/org/unicode/cldr/tool/ShowLanguages.java b/tools/java/org/unicode/cldr/tool/ShowLanguages.java
index 6b11496..908c945 100644
--- a/tools/java/org/unicode/cldr/tool/ShowLanguages.java
+++ b/tools/java/org/unicode/cldr/tool/ShowLanguages.java
@@ -63,10 +63,11 @@
 import org.unicode.cldr.util.TransliteratorUtilities;
 import org.unicode.cldr.util.XPathParts;
 
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Multimaps;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row.R2;
 import com.ibm.icu.impl.Row.R4;
@@ -130,7 +131,9 @@
             new ChartUnitConversions().writeChart(SUPPLEMENTAL_INDEX_ANCHORS);
             new ChartUnitPreferences().writeChart(SUPPLEMENTAL_INDEX_ANCHORS);
         }
-
+        if (ToolConstants.CHART_VERSION.compareTo("37") >= 0) {
+            new ChartGrammaticalForms().writeChart(SUPPLEMENTAL_INDEX_ANCHORS);
+        }
         // since we don't want these listed on the supplemental page, use null
 
         new ShowPlurals().printPlurals(english, null, pw, cldrFactory);
@@ -191,8 +194,8 @@
     }
 
     private static void writeSupplementalIndex(String filename, StringWriter sw) throws IOException {
-        String[] replacements = { 
-            "%date%", CldrUtility.isoFormatDateOnly(new Date()), 
+        String[] replacements = {
+            "%date%", CldrUtility.isoFormatDateOnly(new Date()),
             "%contents%", SUPPLEMENTAL_INDEX_ANCHORS.toString(),
             "%data%", sw.toString(),
             "%index%", "../index.html" };
@@ -228,7 +231,7 @@
             .addColumn("P", "class='target' title='primary'", null, "class='target'", true).setSortPriority(3);
 
         // get the codes so we can show the remainder
-        Set<String> remainingScripts = new TreeSet<String>(getScriptsToShow()); // StandardCodes.MODERN_SCRIPTS);
+        Set<String> remainingScripts = new TreeSet<>(getScriptsToShow()); // StandardCodes.MODERN_SCRIPTS);
         UnicodeSet temp = new UnicodeSet();
         for (String script : getScriptsToShow()) {
             temp.clear();
@@ -250,7 +253,7 @@
         remainingScripts.remove("Zzzz");
         remainingScripts.remove("Zyyy");
 
-        Set<String> remainingLanguages = new TreeSet<String>(getLanguagesToShow());
+        Set<String> remainingLanguages = new TreeSet<>(getLanguagesToShow());
         for (String language : getLanguagesToShow()) {
             Scope s = Iso639Data.getScope(language);
             Type t = Iso639Data.getType(language);
@@ -290,7 +293,7 @@
 
     }
 
-    static final Map<String, OfficialStatus> languageToBestStatus = new HashMap<String, OfficialStatus>();
+    static final Map<String, OfficialStatus> languageToBestStatus = new HashMap<>();
     static {
         for (String language : supplementalDataInfo.getLanguagesForTerritoriesPopulationData()) {
             Set<String> territories = supplementalDataInfo.getTerritoriesForPopulationData(language);
@@ -335,7 +338,7 @@
     }
 
     private static Set<String> getEnglishTypes(String type, int code) {
-        Set<String> result = new HashSet<String>(sc.getSurveyToolDisplayCodes(type));
+        Set<String> result = new HashSet<>(sc.getSurveyToolDisplayCodes(type));
         for (Iterator<String> it = english.getAvailableIterator(code); it.hasNext();) {
             XPathParts parts = XPathParts.getFrozenInstance(it.next());
             String newType = parts.getAttributeValue(-1, "type");
@@ -368,8 +371,8 @@
             .addColumn("Code", "class='target'", null, "class='target'", true);
 
         // get the codes so we can show the remainder
-        Set<String> remainingScripts = new TreeSet<String>(getScriptsToShow());
-        Set<String> remainingTerritories = new TreeSet<String>(sc.getGoodAvailableCodes("territory"));
+        Set<String> remainingScripts = new TreeSet<>(getScriptsToShow());
+        Set<String> remainingTerritories = new TreeSet<>(sc.getGoodAvailableCodes("territory"));
         UnicodeSet temp = new UnicodeSet();
         for (String script : getScriptsToShow()) {
             temp.clear();
@@ -391,7 +394,7 @@
         remainingScripts.remove("Zzzz");
         remainingScripts.remove("Zyyy");
 
-        Set<String> remainingLanguages = new TreeSet<String>(getLanguagesToShow());
+        Set<String> remainingLanguages = new TreeSet<>(getLanguagesToShow());
         for (String language : getLanguagesToShow()) {
             Scope s = Iso639Data.getScope(language);
             Type t = Iso639Data.getType(language);
@@ -413,7 +416,7 @@
                     // mainTerritories.add("ZZ");
                 }
 
-                TreeSet<String> mainScripts = new TreeSet<String>(basicData.getScripts());
+                TreeSet<String> mainScripts = new TreeSet<>(basicData.getScripts());
                 if (mainScripts.size() == 0) {
                     continue;
                 }
@@ -450,7 +453,7 @@
         }
         Set<String> territories = territoryFix.getAll(language);
         if (territories == null) {
-            territories = new TreeSet<String>();
+            territories = new TreeSet<>();
         }
         return territories;
     }
@@ -568,13 +571,13 @@
         .finishRow();
     }
 
-    static Map<String, String> fixScriptGif = CollectionUtilities.asMap(new String[][] {
-        { "hangul", "hangulsyllables" },
-        { "japanese", "hiragana" },
-        { "unknown or invalid script", "unknown" },
-        { "Hant", "Hant" },
-        { "Hans", "Hans" },
-    });
+    static ImmutableMap<String, String> fixScriptGif = ImmutableMap.<String, String>builder()
+        .put("hangul", "hangulsyllables")
+        .put("japanese", "hiragana")
+        .put("unknown or invalid script", "unknown")
+        .put("Hant", "Hant")
+        .put("Hans", "Hans")
+        .build();
 
     private static String getGifName(String script) {
         String temp = fixScriptGif.get(script);
@@ -641,13 +644,13 @@
     }
 
     static class LanguageInfo {
-        private static final Map<String, Map<String, String>> localeAliasInfo = new TreeMap<String, Map<String, String>>();
+        private static final Map<String, Map<String, String>> localeAliasInfo = new TreeMap<>();
 
         Multimap<String, String> language_scripts = TreeMultimap.create();
 
         Multimap<String, String> language_territories = TreeMultimap.create();
 
-        List<Map<String, String>> deprecatedItems = new ArrayList<Map<String, String>>();
+        List<Map<String, String>> deprecatedItems = new ArrayList<>();
 
         Multimap<String, String> territory_languages;
 
@@ -665,19 +668,19 @@
 
         Map<String, Set> territory_currency = new TreeMap<String, Set>(col);
 
-        Set<String> territoriesWithCurrencies = new TreeSet<String>();
+        Set<String> territoriesWithCurrencies = new TreeSet<>();
 
-        Set<String> currenciesWithTerritories = new TreeSet<String>();
+        Set<String> currenciesWithTerritories = new TreeSet<>();
 
-        Map<String, Map<String, Set<String>>> territoryData = new TreeMap<String, Map<String, Set<String>>>();
+        Map<String, Map<String, Set<String>>> territoryData = new TreeMap<>();
 
-        Set<String> territoryTypes = new TreeSet<String>();
+        Set<String> territoryTypes = new TreeSet<>();
 
         Map<String, LinkedHashSet<String>> charSubstitutions = new TreeMap<String, LinkedHashSet<String>>(col);
 
         String defaultDigits = null;
 
-        Map<String, Map<String, Object>> territoryLanguageData = new TreeMap<String, Map<String, Object>>();
+        Map<String, Map<String, Object>> territoryLanguageData = new TreeMap<>();
 
         private Relation<String, String> territoriesToModernCurrencies = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class,
             null);
@@ -881,8 +884,8 @@
                     String type = entry2.getKey();
                     R2<List<String>, String> replacementReason = entry2.getValue();
                     List<String> replacementList = replacementReason.get0();
-                    String replacement = replacementList == null ? null : CollectionUtilities
-                        .join(replacementList, " ");
+                    String replacement = replacementList == null ? null :
+                        Joiner.on(" ").join(replacementList);
                     String reason = replacementReason.get1();
                     if (element.equals("timezone")) {
                         element = "zone";
@@ -981,6 +984,7 @@
         }
 
         static final Comparator INVERSE_COMPARABLE = new Comparator() {
+            @Override
             public int compare(Object o1, Object o2) {
                 return ((Comparable) o2).compareTo(o1);
             }
@@ -1020,22 +1024,9 @@
             }
         }
 
-        // http://trac.edgewall.org/wiki/TracTickets#PresetValuesforNewTickets
-        // http://unicode.org/cldr/trac/newticket?summary=Fix_XXX
         private String addBug(int bugNumber, String text, String from, String subject, String body) {
-            String parameters = "";
-            // if (from != null && from.length() != 0) {
-            // parameters += "&from=" + urlEncode(from);
-            // }
-            if (body != null && body.length() != 0) {
-                parameters += "&amp;description=" + urlEncode(body);
-            }
-            if (subject != null && subject.length() != 0) {
-                parameters += "&amp;summary=" + urlEncode(subject);
-            }
-            if (parameters.length() != 0) parameters = "?" + parameters;
             return "<a target='_blank' href='" + CLDRURLS.CLDR_NEWTICKET_URL
-                + parameters + "'>" + text + "</a>";
+                + "'>" + text + "</a>";
         }
 
         private void showLanguageCountryInfo(PrintWriter pw) throws IOException {
@@ -1075,11 +1066,11 @@
                 // .addColumn("Territory Literacy", "class='target'", "{0,number,00.0}%", "class='targetRight'", true)
                 // .addColumn("Territory GDP (PPP)", "class='target'", "{0,number,#,##0}", "class='targetRight'", true)
                 ;
-            TreeSet<String> languages = new TreeSet<String>();
-            Collection<Comparable[]> data = new ArrayList<Comparable[]>();
+            TreeSet<String> languages = new TreeSet<>();
+            Collection<Comparable[]> data = new ArrayList<>();
             String msg = "<br><i>Please click on each country code</i>";
 
-            Collection<Comparable[]> plainData = new ArrayList<Comparable[]>();
+            Collection<Comparable[]> plainData = new ArrayList<>();
 
             for (String territoryCode : supplementalDataInfo.getTerritoriesWithPopulationData()) {
                 // PopulationData territoryData = supplementalDataInfo.getPopulationDataForTerritory(territoryCode);
@@ -1137,7 +1128,7 @@
             pw2.close();
             try (PrintWriter pw21plain = FileUtilities.openUTF8Writer(ffw.getDir(), ffw.getBaseFileName() + ".txt")) {
                 for (Comparable[] row : plainData) {
-                    pw21plain.println(CollectionUtilities.join(row, "\t"));
+                    pw21plain.println(Joiner.on("\t").join(row));
                 }
             }
         }
@@ -1183,7 +1174,7 @@
                 .addColumn("Code", "class='source'",
                     "<a href=\"http://www.unicode.org/cldr/data/common/main/{0}.xml\">{0}</a>", "class='source'", false);
             Map<Organization, Map<String, Level>> vendordata = sc.getLocaleTypes();
-            Set<String> locales = new TreeSet<String>();
+            Set<String> locales = new TreeSet<>();
             Set<Organization> vendors = new LinkedHashSet<>();
             Set<Organization> smallVendors = new LinkedHashSet<>();
 
@@ -1201,8 +1192,8 @@
                 locales.addAll(data.keySet());
             }
 
-            Collection<Comparable[]> data = new ArrayList<Comparable[]>();
-            List<String> list = new ArrayList<String>();
+            Collection<Comparable[]> data = new ArrayList<>();
+            List<String> list = new ArrayList<>();
             LanguageTagParser ltp = new LanguageTagParser();
             //String alias2 = getAlias("sh_YU");
 
@@ -1547,7 +1538,7 @@
                 return;
             LinkedHashSet<String> already = charSubstitutions.get(value);
             if (already == null)
-                charSubstitutions.put(value, already = new LinkedHashSet<String>(0));
+                charSubstitutions.put(value, already = new LinkedHashSet<>(0));
             already.add(substitute);
             Log.logln(hex(value, " ") + "; " + hex(substitute, " "));
         }
@@ -1584,11 +1575,11 @@
                 String territory = getName(CLDRFile.TERRITORY_NAME, territories[i], false);
                 Map<String, Set<String>> s = territoryData.get(territory);
                 if (s == null) {
-                    territoryData.put(territory, s = new TreeMap<String, Set<String>>());
+                    territoryData.put(territory, s = new TreeMap<>());
                 }
                 Set<String> ss = s.get(type);
                 if (ss == null) {
-                    s.put(type, ss = new TreeSet<String>());
+                    s.put(type, ss = new TreeSet<>());
                 }
                 ss.add(info);
             }
@@ -1644,7 +1635,7 @@
 
         public void showCorrespondances() {
             // show correspondances between language and script
-            Map<String, String> name_script = new TreeMap<String, String>();
+            Map<String, String> name_script = new TreeMap<>();
             for (Iterator<String> it = sc.getAvailableCodes("script").iterator(); it.hasNext();) {
                 String script = it.next();
                 String name = english.getName(CLDRFile.SCRIPT_NAME, script);
@@ -1658,7 +1649,7 @@
                  * : source == CLDRFile.LANGUAGE_NAME && target == CLDRFile.SCRIPT_NAME ? language_scripts
                  */}
             String delimiter = "\\P{L}+";
-            Map<String, String> name_language = new TreeMap<String, String>();
+            Map<String, String> name_language = new TreeMap<>();
             for (Iterator<String> it = sc.getAvailableCodes("language").iterator(); it.hasNext();) {
                 String language = it.next();
                 String names = english.getName(CLDRFile.LANGUAGE_NAME, language);
@@ -2112,7 +2103,7 @@
             if (contains == null) {
                 contains = sc.getCountryToZoneSet().get(start);
                 if (contains == null && depth == 3) {
-                    contains = new TreeSet<String>();
+                    contains = new TreeSet<>();
                     if (start.compareTo("A") >= 0) {
                         contains.add("<font color='red'>MISSING TZID</font>");
                     } else {
@@ -2129,7 +2120,7 @@
          *
          */
         public void printMissing(PrintWriter pw, int source, int table) {
-            Set<String> missingItems = new HashSet<String>();
+            Set<String> missingItems = new HashSet<>();
             String type = null;
             if (source == CLDRFile.TERRITORY_NAME) {
                 type = "territory";
@@ -2240,6 +2231,7 @@
         }
 
         Comparator territoryNameComparator = new Comparator() {
+            @Override
             public int compare(Object o1, Object o2) {
                 return col.compare(getName(CLDRFile.TERRITORY_NAME, (String) o1, false),
                     getName(CLDRFile.TERRITORY_NAME, (String) o2, false));
@@ -2249,14 +2241,14 @@
         static String[] stringArrayPattern = new String[0];
         static String[][] string2ArrayPattern = new String[0][];
 
-        public static Map<String, String> territoryAliases = new HashMap<String, String>();
+        public static Map<String, String> territoryAliases = new HashMap<>();
 
         public void printContains(PrintWriter index) throws IOException {
             String title = "Territory Containment (UN M.49)";
 
             PrintWriter pw = new PrintWriter(new FormattedFileWriter(null, title, null, SUPPLEMENTAL_INDEX_ANCHORS));
             // doTitle(pw, title);
-            List<String[]> rows = new ArrayList<String[]>();
+            List<String[]> rows = new ArrayList<>();
             printContains3("001", rows, new ArrayList<String>());
             TablePrinter tablePrinter = new TablePrinter()
                 .addColumn("World", "class='source'", null, "class='z0'", true).setSortPriority(0)
@@ -2377,7 +2369,7 @@
      */
     private static Map<String, Set<String>> getInverse(Map<String, Set<String>> language_territories) {
         // get inverse relation
-        Map<String, Set<String>> territory_languages = new TreeMap<String, Set<String>>();
+        Map<String, Set<String>> territory_languages = new TreeMap<>();
         for (Iterator<String> it = language_territories.keySet().iterator(); it.hasNext();) {
             String language = it.next();
             Set<String> territories = language_territories.get(language);
diff --git a/tools/java/org/unicode/cldr/tool/ShowLocaleCoverage.java b/tools/java/org/unicode/cldr/tool/ShowLocaleCoverage.java
index 737ae59..a3c21d5 100644
--- a/tools/java/org/unicode/cldr/tool/ShowLocaleCoverage.java
+++ b/tools/java/org/unicode/cldr/tool/ShowLocaleCoverage.java
@@ -66,6 +66,7 @@
 import org.unicode.cldr.util.VoteResolver.VoterInfo;
 import org.unicode.cldr.util.XPathParts;
 
+import com.google.common.base.Joiner;
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
@@ -73,18 +74,18 @@
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Ordering;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row.R2;
 import com.ibm.icu.lang.UCharacter;
 import com.ibm.icu.text.NumberFormat;
 import com.ibm.icu.text.UnicodeSet;
+import com.ibm.icu.util.ULocale;
 import com.ibm.icu.util.VersionInfo;
 
 public class ShowLocaleCoverage {
     private static final String VXML_CONSTANT = CLDRPaths.AUX_DIRECTORY + "voting/" + CLDRFile.GEN_VERSION + "/vxml/common/";
     private static final CLDRConfig CONFIG = CLDRConfig.getInstance();
-    private static final String TSV_MISSING_SUMMARY_HEADER = 
+    private static final String TSV_MISSING_SUMMARY_HEADER =
         "#Path Level"
             + "\t#Locales"
             + "\tLocales"
@@ -93,7 +94,7 @@
             + "\tHeader"
             + "\tCode"
             ;
-    private static final String TSV_LOCALE_COVERAGE_HEADER = 
+    private static final String TSV_LOCALE_COVERAGE_HEADER =
         "#Dir"
             + "\tCode"
             + "\tEnglish Name"
@@ -108,7 +109,7 @@
             + "\tCore\tMiss +UC"
             + "\tCore-Missing";
 
-    private static final String TSV_MISSING_HEADER = 
+    private static final String TSV_MISSING_HEADER =
         "#LCode"
             + "\tEnglish Name"
             + "\tScript"
@@ -131,7 +132,7 @@
             + "\tConfig Action"
             ;
     private static final String TSV_MISSING_BASIC_HEADER = "";
-    
+
     private static final boolean DEBUG = true;
     private static final char DEBUG_FILTER = 0; // use letter to only load locales starting with that letter
 
@@ -164,14 +165,14 @@
     enum MyOptions {
         filter(".+", ".*", "Filter the information based on id, using a regex argument."),
         //        draftStatus(".+", "unconfirmed", "Filter the information to a minimum draft status."),
-        chart(null, null, "chart only"), 
-        growth("true", "true", "Compute growth data"), 
-        organization(".+", null, "Only locales for organization"), 
+        chart(null, null, "chart only"),
+        growth("true", "true", "Compute growth data"),
+        organization(".+", null, "Only locales for organization"),
         version(".+",
-            LATEST, "To get different versions"), 
-        rawData(null, null, "Output the raw data from all coverage levels"), 
+            LATEST, "To get different versions"),
+        rawData(null, null, "Output the raw data from all coverage levels"),
         targetDir(".*",
-            CLDRPaths.GEN_DIRECTORY + "/statistics/", "target output file."), 
+            CLDRPaths.GEN_DIRECTORY + "/statistics/", "target output file."),
         directories("(.*:)?[a-z]+(,[a-z]+)*", "common",
             "Space-delimited list of main source directories: common,seed,exemplar.\n" +
             "Optional, <baseDir>:common,seed"),;
@@ -340,7 +341,7 @@
                 out.println();
                 first = false;
             }
-            out.println(entry.getKey() + "\t" + CollectionUtilities.join(entry.getValue(), "\t"));
+            out.println(entry.getKey() + "\t" + Joiner.on("\t").join(entry.getValue()));
         }
     }
 
@@ -352,7 +353,7 @@
         VersionInfo version;
         int year;
     }
-    
+
     // TODO merge this into ToolConstants, and have the version expressed as VersionInfo.
     static final List<ReleaseInfo> versionToYear;
     static {
@@ -512,9 +513,9 @@
 //                }
 //            }
             // END HACK
-            Counter<Level> foundCounter = new Counter<Level>();
-            Counter<Level> unconfirmedCounter = new Counter<Level>();
-            Counter<Level> missingCounter = new Counter<Level>();
+            Counter<Level> foundCounter = new Counter<>();
+            Counter<Level> unconfirmedCounter = new Counter<>();
+            Counter<Level> missingCounter = new Counter<>();
             Set<String> unconfirmedPaths = null;
             Relation<MissingStatus, String> missingPaths = null;
             unconfirmedPaths = new LinkedHashSet<>();
@@ -597,7 +598,7 @@
 
             fixCommonLocales();
 
-            System.out.println(CollectionUtilities.join(languageToRegion.keyValuesSet(), "\n"));
+            System.out.println(Joiner.on("\n").join(languageToRegion.keyValuesSet()));
 
             System.out.println("# Checking: " + availableLanguages);
 
@@ -616,7 +617,7 @@
 
             Relation<MissingStatus, String> missingPaths = Relation.of(new EnumMap<MissingStatus, Set<String>>(
                 MissingStatus.class), TreeSet.class, CLDRFile.getComparator(DtdType.ldml));
-            Set<String> unconfirmed = new TreeSet<String>(CLDRFile.getComparator(DtdType.ldml));
+            Set<String> unconfirmed = new TreeSet<>(CLDRFile.getComparator(DtdType.ldml));
 
             //Map<String, String> likely = testInfo.getSupplementalDataInfo().getLikelySubtags();
             Set<String> defaultContents = SUPPLEMENTAL_DATA_INFO.getDefaultContentLocales();
@@ -632,9 +633,9 @@
             //        System.out.println();
             // Factory pathHeaderFactory = PathHeader.getFactory(testInfo.getCldrFactory().make("en", true));
 
-            Counter<Level> foundCounter = new Counter<Level>();
-            Counter<Level> unconfirmedCounter = new Counter<Level>();
-            Counter<Level> missingCounter = new Counter<Level>();
+            Counter<Level> foundCounter = new Counter<>();
+            Counter<Level> unconfirmedCounter = new Counter<>();
+            Counter<Level> missingCounter = new Counter<>();
 
             List<Level> levelsToShow = new ArrayList<>(EnumSet.allOf(Level.class));
             levelsToShow.remove(Level.COMPREHENSIVE);
@@ -689,16 +690,16 @@
                 .setCellPattern("{0,number,0.0%}")
                 .setBreakSpans(true);
                 switch(level) {
-                case CORE: 
+                case CORE:
                     tablePrinter.setSortPriority(5).setSortAscending(false);
                     break;
-                case BASIC: 
+                case BASIC:
                     tablePrinter.setSortPriority(4).setSortAscending(false);
                     break;
-                case MODERATE: 
+                case MODERATE:
                     tablePrinter.setSortPriority(3).setSortAscending(false);
                     break;
-                case MODERN: 
+                case MODERN:
                     tablePrinter.setSortPriority(2).setSortAscending(false);
                     break;
                 }
@@ -706,7 +707,7 @@
                 //            .addColumn("∪ UC%", "class='target'", null, "class='targetRight'", true)
                 //            .setCellPattern("{0,number,0.0%}")
                 //            .setBreakSpans(true)
-                ;
+
             }
             tablePrinter.addColumn("Core Missing", "class='target'", null, "class='targetRight'", true)
             .setBreakSpans(true);
@@ -731,7 +732,7 @@
             for (String locale : availableLanguages) {
                 try {
                     if (locale.contains("supplemental") // for old versionsl
-                        || locale.startsWith("sr_Latn")) { 
+                        || locale.startsWith("sr_Latn")) {
                         continue;
                     }
                     if (locales != null && !locales.contains(locale)) {
@@ -849,7 +850,7 @@
                         .append('\t').append(script)
                         .append('\t').append(cldrLocaleLevelGoal.toString())
                         .append('\t').append(sublocales.size()+"");
-                        ;
+
                     }
 
                     //                String header = language
@@ -943,7 +944,7 @@
                             if (goalLevel.compareTo(foundLevel) >= 0) {
                                 String line = spreadsheetLine(locale, language, script, file.getStringValue(path), goalLevel, foundLevel, "n/a", path, file, vxmlCldrFile2, pathToLocale);
                                 tsv_missing.println(line);
-                            } 
+                            }
                         }
                     } else {
                         Level goalLevel = Level.BASIC;
@@ -959,17 +960,17 @@
                             Level foundLevel = coverageInfo.getCoverageLevel(path, locale);
                             if (goalLevel.compareTo(foundLevel) >= 0) {
                                 gatherStarred(path, starredCounter);
-                            } 
+                            }
                         }
                     }
 
                     tsv_missing_basic.println(TSV_MISSING_BASIC_HEADER);
                     for (R2<Long, String> starred : starredCounter.getEntrySetSortedByCount(false, null)) {
                         // PathHeader ph = pathHeaderFactory.fromPath(starred.get1());
-                        tsv_missing_basic.println(locale + "\t" + starred.get0() + "\t" + starred.get1());
+                        tsv_missing_basic.println(locale + "\t" + starred.get0() + "\t" + starred.get1().replace("\"*\"", "'*'"));
                     }
-                    
-                    for (Level level : levelsToShow) {   
+
+                    for (Level level : levelsToShow) {
                         long foundCount = foundCounter.get(level);
                         long unconfirmedCount = unconfirmedCounter.get(level);
                         long missingCount = missingCounter.get(level);
@@ -978,9 +979,9 @@
                         sumUnconfirmed += unconfirmedCount;
                         sumMissing += missingCount;
 
-                        confirmed.put(level, (int) sumFound);
+                        confirmed.put(level, sumFound);
                         //                    unconfirmedByLevel.put(level, (int)(foundCount + unconfirmedCount));
-                        totals.put(level, (int)(sumFound + sumUnconfirmed + sumMissing));
+                        totals.put(level, sumFound + sumUnconfirmed + sumMissing);
                     }
 
                     double modernTotal = totals.get(Level.MODERN);
@@ -1034,8 +1035,8 @@
                         //                            ;
                         //                    }
                     }
-                    String coreMissingString = 
-                        CollectionUtilities.join(coreMissing, ", ");
+                    String coreMissingString =
+                        Joiner.on(", ").join(coreMissing);
 
                     tablePrinter
                     .addCell(coreMissingString)
@@ -1048,8 +1049,6 @@
                         .append('\n');
                     }
 
-                    //out2.println(header + "\t" + coreValue + "\t" + CollectionUtilities.join(missing, ", "));
-
                     // Write missing paths (for >99% and specials
 
                     //                if (false) { // checkModernLocales.contains(locale)
@@ -1111,9 +1110,9 @@
                     localeSet = entry2.getValue();
                     String s = TSV_MISSING_SUMMARY_HEADER; // check for changes
                     tsv_missing_summary.println(
-                        level 
+                        level
                         + "\t" + localeSet.size()
-                        + "\t" + CollectionUtilities.join(localeSet, " ")
+                        + "\t" + Joiner.on(" ").join(localeSet)
                         + "\t" + phString
                         );
                 }
@@ -1252,30 +1251,38 @@
     static final VoterInfo dummyVoterInfo = new VoterInfo(Organization.cldr, org.unicode.cldr.util.VoteResolver.Level.vetter, "somename");
 
     static final UserInfo dummyUserInfo = new UserInfo() {
+        @Override
         public VoterInfo getVoterInfo() {
             return dummyVoterInfo;
         }
     };
     static final PathValueInfo dummyPathValueInfo = new PathValueInfo() {
         // pathValueInfo.getCoverageLevel().compareTo(Level.COMPREHENSIVE)
+        @Override
         public Collection<? extends CandidateInfo> getValues() {
             throw new UnsupportedOperationException();
         }
+        @Override
         public CandidateInfo getCurrentItem() {
             throw new UnsupportedOperationException();
         }
+        @Override
         public String getBaselineValue() {
             throw new UnsupportedOperationException();
         }
+        @Override
         public Level getCoverageLevel() {
             return Level.MODERN;
         }
+        @Override
         public boolean hadVotesSometimeThisRelease() {
             throw new UnsupportedOperationException();
         }
+        @Override
         public CLDRLocale getLocale() {
             throw new UnsupportedOperationException();
         }
+        @Override
         public String getXpath() {
             throw new UnsupportedOperationException();
         }
@@ -1303,8 +1310,8 @@
     public static void gatherStarred(String path, Counter<String> starredCounter) {
         starredCounter.add(new PathStarrer().setSubstitutionPattern("*").set(path), 1);
     }
-    
-    public static String spreadsheetLine(String locale, String language, String script, String nativeValue, Level cldrLocaleLevelGoal, 
+
+    public static String spreadsheetLine(String locale, String language, String script, String nativeValue, Level cldrLocaleLevelGoal,
         Level itemLevel, String status, String path, CLDRFile resolvedFile, CLDRFile vxmlCldrFile,
         Multimap<String, String> pathToLocale) {
         if (pathToLocale != null) {
@@ -1357,7 +1364,7 @@
 
 
         String s = TSV_MISSING_HEADER; // make sure in sync
-        String line = 
+        String line =
             language
             + "\t" + ENGLISH.getName(language)
             + "\t" + ENGLISH.getName("script", script)
@@ -1374,7 +1381,7 @@
             + "\t" + vxmlValue
             + "\t" + vxmlDraftStatus
             + "\t" + phString
-            + "\t" + PathHeader.getUrlForLocalePath(locale, path) 
+            + "\t" + PathHeader.getUrlForLocalePath(locale, path)
             + "\t" + config_text
             ;
         return line;
@@ -1383,55 +1390,10 @@
 
 
     private static String getIcuValue(String locale) {
-        return ICU_Locales.contains(locale) ? "ICU" : "";
+        return ICU_Locales.contains(new ULocale(locale)) ? "ICU" : "";
     }
 
-    static final Set<String> ICU_Locales = ImmutableSet.of("af", "af_NA", "af_ZA", "agq", "agq_CM", "ak", "ak_GH", "am", "am_ET", "ar", "ar_001", "ar_AE",
-        "ar_BH", "ar_DJ", "ar_DZ", "ar_EG", "ar_EH", "ar_ER", "ar_IL", "ar_IQ", "ar_JO", "ar_KM", "ar_KW", "ar_LB", "ar_LY", "ar_MA", "ar_MR", "ar_OM", "ar_PS",
-        "ar_QA", "ar_SA", "ar_SD", "ar_SO", "ar_SS", "ar_SY", "ar_TD", "ar_TN", "ar_YE", "ars", "as", "as_IN", "asa", "asa_TZ", "ast", "ast_ES", "az", "az_AZ",
-        "az_Cyrl", "az_Cyrl_AZ", "az_Latn", "az_Latn_AZ", "bas", "bas_CM", "be", "be_BY", "bem", "bem_ZM", "bez", "bez_TZ", "bg", "bg_BG", "bm", "bm_ML", "bn",
-        "bn_BD", "bn_IN", "bo", "bo_CN", "bo_IN", "br", "br_FR", "brx", "brx_IN", "bs", "bs_Cyrl", "bs_Cyrl_BA", "bs_Latn", "bs_Latn_BA", "bs_BA", "ca",
-        "ca_AD", "ca_ES", "ca_FR", "ca_IT", "ccp", "ccp_BD", "ccp_IN", "ce", "ce_RU", "cgg", "cgg_UG", "chr", "chr_US", "ckb", "ckb_IQ", "ckb_IR", "cs",
-        "cs_CZ", "cy", "cy_GB", "da", "da_DK", "da_GL", "dav", "dav_KE", "de", "de_AT", "de_BE", "de_CH", "de_DE", "de_IT", "de_LI", "de_LU", "dje", "dje_NE",
-        "dsb", "dsb_DE", "dua", "dua_CM", "dyo", "dyo_SN", "dz", "dz_BT", "ebu", "ebu_KE", "ee", "ee_GH", "ee_TG", "el", "el_CY", "el_GR", "en", "en_001",
-        "en_150", "en_AG", "en_AI", "en_AS", "en_AT", "en_AU", "en_BB", "en_BE", "en_BI", "en_BM", "en_BS", "en_BW", "en_BZ", "en_CA", "en_CC", "en_CH",
-        "en_CK", "en_CM", "en_CX", "en_CY", "en_DE", "en_DG", "en_DK", "en_DM", "en_ER", "en_FI", "en_FJ", "en_FK", "en_FM", "en_GB", "en_GD", "en_GG", "en_GH",
-        "en_GI", "en_GM", "en_GU", "en_GY", "en_HK", "en_IE", "en_IL", "en_IM", "en_IN", "en_IO", "en_JE", "en_JM", "en_KE", "en_KI", "en_KN", "en_KY", "en_LC",
-        "en_LR", "en_LS", "en_MG", "en_MH", "en_MO", "en_MP", "en_MS", "en_MT", "en_MU", "en_MW", "en_MY", "en_NA", "en_NF", "en_NG", "en_NL", "en_NR", "en_NU",
-        "en_NZ", "en_PG", "en_PH", "en_PK", "en_PN", "en_PR", "en_PW", "en_RH", "en_RW", "en_SB", "en_SC", "en_SD", "en_SE", "en_SG", "en_SH", "en_SI", "en_SL",
-        "en_SS", "en_SX", "en_SZ", "en_TC", "en_TK", "en_TO", "en_TT", "en_TV", "en_TZ", "en_UG", "en_UM", "en_US", "en_US_POSIX", "en_VC", "en_VG", "en_VI",
-        "en_VU", "en_WS", "en_ZA", "en_ZM", "en_ZW", "eo", "es", "es_003", "es_419", "es_AR", "es_BO", "es_BR", "es_BZ", "es_CL", "es_CO", "es_CR", "es_CU",
-        "es_DO", "es_EA", "es_EC", "es_ES", "es_GQ", "es_GT", "es_HN", "es_IC", "es_MX", "es_NI", "es_PA", "es_PE", "es_PH", "es_PR", "es_PY", "es_SV", "es_US",
-        "es_UY", "es_VE", "et", "et_EE", "eu", "eu_ES", "ewo", "ewo_CM", "fa", "fa_AF", "fa_IR", "ff", "ff_CM", "ff_GN", "ff_MR", "ff_SN", "fi", "fi_FI", "fil",
-        "fil_PH", "fo", "fo_DK", "fo_FO", "fr", "fr_BE", "fr_BF", "fr_BI", "fr_BJ", "fr_BL", "fr_CA", "fr_CD", "fr_CF", "fr_CG", "fr_CH", "fr_CI", "fr_CM",
-        "fr_DJ", "fr_DZ", "fr_FR", "fr_GA", "fr_GF", "fr_GN", "fr_GP", "fr_GQ", "fr_HT", "fr_KM", "fr_LU", "fr_MA", "fr_MC", "fr_MF", "fr_MG", "fr_ML", "fr_MQ",
-        "fr_MR", "fr_MU", "fr_NC", "fr_NE", "fr_PF", "fr_PM", "fr_RE", "fr_RW", "fr_SC", "fr_SN", "fr_SY", "fr_TD", "fr_TG", "fr_TN", "fr_VU", "fr_WF", "fr_YT",
-        "fur", "fur_IT", "fy", "fy_NL", "ga", "ga_IE", "gd", "gd_GB", "gl", "gl_ES", "gsw", "gsw_CH", "gsw_FR", "gsw_LI", "gu", "gu_IN", "guz", "guz_KE", "gv",
-        "gv_IM", "ha", "ha_GH", "ha_NE", "ha_NG", "haw", "haw_US", "he", "he_IL", "hi", "hi_IN", "hr", "hr_BA", "hr_HR", "hsb", "hsb_DE", "hu", "hu_HU", "hy",
-        "hy_AM", "ia", "ia_001", "id", "id_ID", "ig", "ig_NG", "ii", "ii_CN", "in", "in_ID", "is", "is_IS", "it", "it_CH", "it_IT", "it_SM", "it_VA", "iw",
-        "iw_IL", "ja", "ja_JP", "jgo", "jgo_CM", "jmc", "jmc_TZ", "jv", "jv_ID", "ka", "ka_GE", "kab", "kab_DZ", "kam", "kam_KE", "kde", "kde_TZ", "kea",
-        "kea_CV", "khq", "khq_ML", "ki", "ki_KE", "kk", "kk_KZ", "kkj", "kkj_CM", "kl", "kl_GL", "kln", "kln_KE", "km", "km_KH", "kn", "kn_IN", "ko", "ko_KP",
-        "ko_KR", "kok", "kok_IN", "ks", "ks_IN", "ksb", "ksb_TZ", "ksf", "ksf_CM", "ksh", "ksh_DE", "ku", "ku_TR", "kw", "kw_GB", "ky", "ky_KG", "lag",
-        "lag_TZ", "lb", "lb_LU", "lg", "lg_UG", "lkt", "lkt_US", "ln", "ln_AO", "ln_CD", "ln_CF", "ln_CG", "lo", "lo_LA", "lrc", "lrc_IQ", "lrc_IR", "lt",
-        "lt_LT", "lu", "lu_CD", "luo", "luo_KE", "luy", "luy_KE", "lv", "lv_LV", "mas", "mas_KE", "mas_TZ", "mer", "mer_KE", "mfe", "mfe_MU", "mg", "mg_MG",
-        "mgh", "mgh_MZ", "mgo", "mgo_CM", "mi", "mi_NZ", "mk", "mk_MK", "ml", "ml_IN", "mn", "mn_MN", "mo", "mr", "mr_IN", "ms", "ms_BN", "ms_MY", "ms_SG",
-        "mt", "mt_MT", "mua", "mua_CM", "my", "my_MM", "mzn", "mzn_IR", "naq", "naq_NA", "nb", "nb_NO", "nb_SJ", "nd", "nd_ZW", "nds", "nds_DE", "nds_NL", "ne",
-        "ne_IN", "ne_NP", "nl", "nl_AW", "nl_BE", "nl_BQ", "nl_CW", "nl_NL", "nl_SR", "nl_SX", "nmg", "nmg_CM", "nn", "nn_NO", "nnh", "nnh_CM", "no", "no_NO",
-        "nus", "nus_SS", "nyn", "nyn_UG", "om", "om_ET", "om_KE", "or", "or_IN", "os", "os_GE", "os_RU", "pa", "pa_Arab", "pa_Arab_PK", "pa_Guru", "pa_Guru_IN",
-        "pa_IN", "pa_PK", "pl", "pl_PL", "ps", "ps_AF", "pt", "pt_AO", "pt_BR", "pt_CH", "pt_CV", "pt_GQ", "pt_GW", "pt_LU", "pt_MO", "pt_MZ", "pt_PT", "pt_ST",
-        "pt_TL", "qu", "qu_BO", "qu_EC", "qu_PE", "rm", "rm_CH", "rn", "rn_BI", "ro", "ro_MD", "ro_RO", "rof", "rof_TZ", "root", "ru", "ru_BY", "ru_KG",
-        "ru_KZ", "ru_MD", "ru_RU", "ru_UA", "rw", "rw_RW", "rwk", "rwk_TZ", "sah", "sah_RU", "saq", "saq_KE", "sbp", "sbp_TZ", "sd", "sd_PK", "se", "se_FI",
-        "se_NO", "se_SE", "seh", "seh_MZ", "ses", "ses_ML", "sg", "sg_CF", "sh", "sh_BA", "sh_CS", "sh_YU", "shi", "shi_Latn", "shi_Latn_MA", "shi_Tfng",
-        "shi_Tfng_MA", "shi_MA", "si", "si_LK", "sk", "sk_SK", "sl", "sl_SI", "smn", "smn_FI", "sn", "sn_ZW", "so", "so_DJ", "so_ET", "so_KE", "so_SO", "sq",
-        "sq_AL", "sq_MK", "sq_XK", "sr", "sr_Cyrl", "sr_Cyrl_BA", "sr_Cyrl_ME", "sr_Cyrl_RS", "sr_Cyrl_CS", "sr_Cyrl_XK", "sr_Cyrl_YU", "sr_Latn", "sr_Latn_BA",
-        "sr_Latn_ME", "sr_Latn_RS", "sr_Latn_CS", "sr_Latn_XK", "sr_Latn_YU", "sr_BA", "sr_ME", "sr_RS", "sr_CS", "sr_YU", "sv", "sv_AX", "sv_FI", "sv_SE",
-        "sw", "sw_CD", "sw_KE", "sw_TZ", "sw_UG", "ta", "ta_IN", "ta_LK", "ta_MY", "ta_SG", "te", "te_IN", "teo", "teo_KE", "teo_UG", "tg", "tg_TJ", "th",
-        "th_TH", "ti", "ti_ER", "ti_ET", "tk", "tk_TM", "tl", "tl_PH", "to", "to_TO", "tr", "tr_CY", "tr_TR", "tt", "tt_RU", "twq", "twq_NE", "tzm", "tzm_MA",
-        "ug", "ug_CN", "uk", "uk_UA", "ur", "ur_IN", "ur_PK", "uz", "uz_AF", "uz_Arab", "uz_Arab_AF", "uz_Cyrl", "uz_Cyrl_UZ", "uz_Latn", "uz_Latn_UZ", "uz_UZ",
-        "vai", "vai_Latn", "vai_Latn_LR", "vai_LR", "vai_Vaii", "vai_Vaii_LR", "vi", "vi_VN", "vun", "vun_TZ", "wae", "wae_CH", "wo", "wo_SN", "xh", "xh_ZA",
-        "xog", "xog_UG", "yav", "yav_CM", "yi", "yi_001", "yo", "yo_BJ", "yo_NG", "yue", "yue_Hans", "yue_Hans_CN", "yue_Hant", "yue_Hant_HK", "zgh", "zgh_MA",
-        "zh", "zh_Hans", "zh_Hans_CN", "zh_Hans_HK", "zh_Hans_MO", "zh_Hans_SG", "zh_Hant", "zh_Hant_HK", "zh_Hant_MO", "zh_Hant_TW", "zh_CN", "zh_HK", "zh_MO",
-        "zh_SG", "zh_TW", "zu", "zu_ZA");
+    static final Set<ULocale> ICU_Locales = ImmutableSet.copyOf(ULocale.getAvailableLocales());
     private static CLDRURLS URLS = CONFIG.urls();
 
 }
diff --git a/tools/java/org/unicode/cldr/tool/ShowPathHeaderDescriptions.java b/tools/java/org/unicode/cldr/tool/ShowPathHeaderDescriptions.java
index c4e8092..d96f652 100644
--- a/tools/java/org/unicode/cldr/tool/ShowPathHeaderDescriptions.java
+++ b/tools/java/org/unicode/cldr/tool/ShowPathHeaderDescriptions.java
@@ -15,11 +15,11 @@
 import org.unicode.cldr.util.PathHeader.PageId;
 import org.unicode.cldr.util.PathHeader.SectionId;
 
+import com.google.common.base.Joiner;
 import com.google.common.collect.LinkedHashMultiset;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Multiset;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
 import com.ibm.icu.impl.Row.R3;
@@ -33,16 +33,16 @@
         PathHeader.Factory phf = PathHeader.getFactory(english);
 
         String localeToTest = "cs";
-        
+
         CLDRFile localeFile = factory.make(localeToTest, true);
         Multiset<String> sectionPageHeader = LinkedHashMultiset.create();
         Multiset<String> sectionPage = LinkedHashMultiset.create();
         Set<PathHeader> pathHeaders = new TreeSet<>();
         UnicodeSet emoji = new UnicodeSet("[:emoji:]");
-        
+
         for (String path : localeFile.fullIterable()) {
             if (emoji.containsSome(path)) {
-                
+
             }
             PathHeader pathHeader = phf.fromPath(path);
             if (pathHeader.getSectionId() == SectionId.Characters) {
@@ -139,7 +139,7 @@
 
         process(SphType.sph, sphv, done);
 
-        System.out.println(CollectionUtilities.join(urls, "\n"));
+        System.out.println(Joiner.on("\n").join(urls));
     }
 
     private static void showProgress(Set<String> done, Multimap<String, R3<SectionId, PageId, String>> valueToKey) {
@@ -160,7 +160,7 @@
             remaining.removeAll(done);
             if (remaining.size() == 1) {
                 String value = remaining.iterator().next();
-                if (type == type.s || type == type.p || type == type.sp) {
+                if (type == SphType.s || type == SphType.p || type == SphType.sp) {
                     done.add(value);
                 } else {
                     newDone.add(value);
diff --git a/tools/java/org/unicode/cldr/tool/ShowPlurals.java b/tools/java/org/unicode/cldr/tool/ShowPlurals.java
index bfcc4c9..710b627 100644
--- a/tools/java/org/unicode/cldr/tool/ShowPlurals.java
+++ b/tools/java/org/unicode/cldr/tool/ShowPlurals.java
@@ -19,7 +19,7 @@
 import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo.Count;
 import org.unicode.cldr.util.SupplementalDataInfo.PluralType;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Utility;
 import com.ibm.icu.text.NumberFormat;
 import com.ibm.icu.text.PluralRules;
@@ -101,7 +101,7 @@
         //Map<ULocale, PluralRulesFactory.SamplePatterns> samples = PluralRulesFactory.getLocaleToSamplePatterns();
         Set<String> cardinalLocales = supplementalDataInfo.getPluralLocales(PluralType.cardinal);
         Set<String> ordinalLocales = supplementalDataInfo.getPluralLocales(PluralType.ordinal);
-        Set<String> all = new LinkedHashSet<String>(cardinalLocales);
+        Set<String> all = new LinkedHashSet<>(cardinalLocales);
         all.addAll(ordinalLocales);
 
         LanguageTagCanonicalizer canonicalizer = new LanguageTagCanonicalizer();
@@ -221,7 +221,7 @@
     }
 
     private String getExamples(FixedDecimalSamples exampleList) {
-        return CollectionUtilities.join(exampleList.getSamples(), ", ") + (exampleList.bounded ? "" : ", …");
+        return Joiner.on(", ").join(exampleList.getSamples()) + (exampleList.bounded ? "" : ", …");
     }
 
     private String getSample(FixedDecimal numb, String samplePattern, NumberFormat nf) {
diff --git a/tools/java/org/unicode/cldr/tool/ShowRegionalVariants.java b/tools/java/org/unicode/cldr/tool/ShowRegionalVariants.java
index 78075d3..9a7ac95 100644
--- a/tools/java/org/unicode/cldr/tool/ShowRegionalVariants.java
+++ b/tools/java/org/unicode/cldr/tool/ShowRegionalVariants.java
@@ -200,7 +200,7 @@
                         + ENGLISH.getName(s.toString()));
                 }
 
-                ArrayList<CLDRFile> parentChain = new ArrayList<CLDRFile>();
+                ArrayList<CLDRFile> parentChain = new ArrayList<>();
                 for (CLDRLocale current = parent;;) {
                     parentChain.add(FACTORY.make(current.toString(), true));
                     CLDRLocale grand = current.getParent();
diff --git a/tools/java/org/unicode/cldr/tool/ShowStarredCoverage.java b/tools/java/org/unicode/cldr/tool/ShowStarredCoverage.java
index f9b30a3..f7db26a 100644
--- a/tools/java/org/unicode/cldr/tool/ShowStarredCoverage.java
+++ b/tools/java/org/unicode/cldr/tool/ShowStarredCoverage.java
@@ -44,10 +44,10 @@
 import org.unicode.cldr.util.XMLFileReader;
 import org.unicode.cldr.util.XPathParts;
 
+import com.google.common.base.Joiner;
 import com.google.common.base.Splitter;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row.R2;
 
@@ -332,7 +332,7 @@
             pathHeaders.add(ph);
             SurveyToolStatus stStatus = ph.getSurveyToolStatus();
             String starred = pathStarrer.set(path);
-            String attributes = CollectionUtilities.join(pathStarrer.getAttributes(), "|");
+            String attributes = Joiner.on("|").join(pathStarrer.getAttributes());
             levelToData.put(level, starred + "|" + stStatus + "|" + requiredVotes, attributes, Boolean.TRUE);
             counter.add(level, 1);
         }
@@ -350,7 +350,7 @@
                         count = 1;
                     }
                     if (true) {
-                        String samples = CollectionUtilities.join(attributes.keySet(), ", ");
+                        String samples = Joiner.on(", ").join(attributes.keySet());
                         if (samples.length() > 50) samples = samples.substring(0, 50) + "…";
                         System.out.println(count
                             + "\t" + level
@@ -427,12 +427,12 @@
                     badLines.add(written
                         + "\t" + name
                         + "\t" + languageFix.get(written).get0()
-                        + "\t" + CollectionUtilities.join(source, " "));
+                        + "\t" + Joiner.on(" ").join(source));
                     source = Collections.singleton(Source.alias);
                 }
                 System.out.println(written
                     + "\t" + name
-                    + "\t" + CollectionUtilities.join(source, " "));
+                    + "\t" + Joiner.on(" ").join(source));
             }
             for (String s : badLines) {
                 System.out.println("BAD:\t" + s);
diff --git a/tools/java/org/unicode/cldr/tool/ShowZoneEquivalences.java b/tools/java/org/unicode/cldr/tool/ShowZoneEquivalences.java
index 02cbdf6..fc171c1 100644
--- a/tools/java/org/unicode/cldr/tool/ShowZoneEquivalences.java
+++ b/tools/java/org/unicode/cldr/tool/ShowZoneEquivalences.java
@@ -46,14 +46,14 @@
         // System.out.println("in available? " + Arrays.asList(TimeZone.getAvailableIDs()).contains(tzid));
         // System.out.println(new TreeSet(Arrays.asList(TimeZone.getAvailableIDs())));
 
-        Set<String> needsTranslation = new TreeSet<String>(Arrays.asList(CountItems.needsTranslationString
+        Set<String> needsTranslation = new TreeSet<>(Arrays.asList(CountItems.needsTranslationString
             .split("[,]?\\s+")));
-        Set<String> singleCountries = new TreeSet<String>(
+        Set<String> singleCountries = new TreeSet<>(
             Arrays
                 .asList(
                     "Africa/Bamako America/Godthab America/Santiago America/Guayaquil     Asia/Shanghai Asia/Tashkent Asia/Kuala_Lumpur Europe/Madrid Europe/Lisbon Europe/London Pacific/Auckland Pacific/Tahiti"
                         .split("\\s")));
-        Set<String> defaultItems = new TreeSet<String>(
+        Set<String> defaultItems = new TreeSet<>(
             Arrays
                 .asList(
                     "Antarctica/McMurdo America/Buenos_Aires Australia/Sydney America/Sao_Paulo America/Toronto Africa/Kinshasa America/Santiago Asia/Shanghai America/Guayaquil Europe/Madrid Europe/London America/Godthab Asia/Jakarta Africa/Bamako America/Mexico_City Asia/Kuala_Lumpur Pacific/Auckland Europe/Lisbon Europe/Moscow Europe/Kiev America/New_York Asia/Tashkent Pacific/Tahiti Pacific/Kosrae Pacific/Tarawa Asia/Almaty Pacific/Majuro Asia/Ulaanbaatar Arctic/Longyearbyen Pacific/Midway"
@@ -61,7 +61,7 @@
 
         StandardCodes sc = StandardCodes.make();
         Collection<String> codes = sc.getGoodAvailableCodes("tzid");
-        TreeSet<String> extras = new TreeSet<String>();
+        TreeSet<String> extras = new TreeSet<>();
         Map<String, Set<String>> m = sc.getZoneLinkNew_OldSet();
         for (String code : codes) {
             Collection<String> s = m.get(code);
@@ -70,11 +70,11 @@
             extras.addAll(s);
         }
         extras.addAll(codes);
-        Set<String> icu4jTZIDs = new TreeSet<String>(Arrays.asList(TimeZone.getAvailableIDs()));
-        Set<String> diff2 = new TreeSet<String>(icu4jTZIDs);
+        Set<String> icu4jTZIDs = new TreeSet<>(Arrays.asList(TimeZone.getAvailableIDs()));
+        Set<String> diff2 = new TreeSet<>(icu4jTZIDs);
         diff2.removeAll(extras);
         System.out.println("icu4jTZIDs - StandardCodes: " + diff2);
-        diff2 = new TreeSet<String>(extras);
+        diff2 = new TreeSet<>(extras);
         diff2.removeAll(icu4jTZIDs);
         System.out.println("StandardCodes - icu4jTZIDs: " + diff2);
         ArrayComparator ac = new ArrayComparator(new Comparator[] {
@@ -85,8 +85,8 @@
         TreeSet<Object[]> country_inflection_names = new TreeSet<Object[]>(ac);
         PrintWriter out = FileUtilities.openUTF8Writer(CLDRPaths.GEN_DIRECTORY, "inflections.txt");
 
-        TreeMap<Integer, TreeSet<String>> minOffsetMap = new TreeMap<Integer, TreeSet<String>>();
-        TreeMap<Integer, TreeSet<String>> maxOffsetMap = new TreeMap<Integer, TreeSet<String>>();
+        TreeMap<Integer, TreeSet<String>> minOffsetMap = new TreeMap<>();
+        TreeMap<Integer, TreeSet<String>> maxOffsetMap = new TreeMap<>();
 
         for (Iterator<String> it = codes.iterator(); it.hasNext();) {
             String zoneID = it.next();
@@ -98,12 +98,12 @@
 
             TreeSet<String> s = minOffsetMap.get(zip.getMinOffset());
             if (s == null)
-                minOffsetMap.put(zip.getMinOffset(), s = new TreeSet<String>());
+                minOffsetMap.put(zip.getMinOffset(), s = new TreeSet<>());
             s.add(zone.getID());
 
             s = maxOffsetMap.get(zip.getMaxOffset());
             if (s == null)
-                maxOffsetMap.put(zip.getMaxOffset(), s = new TreeSet<String>());
+                maxOffsetMap.put(zip.getMaxOffset(), s = new TreeSet<>());
             s.add(zone.getID());
 
         }
diff --git a/tools/java/org/unicode/cldr/tool/SimpleLocaleParser.java b/tools/java/org/unicode/cldr/tool/SimpleLocaleParser.java
index ceb603a..a86ab5e 100644
--- a/tools/java/org/unicode/cldr/tool/SimpleLocaleParser.java
+++ b/tools/java/org/unicode/cldr/tool/SimpleLocaleParser.java
@@ -40,7 +40,7 @@
             " | ( x (?: [-_] [a-z 0-9]{1,8} )+ )"
             + // private use
             " | ( en [-_] GB [-_] oed"
-            + // grandfathered gorp
+            + // legacy gorp
             "   | i [-_] (?: ami | bnn | default | enochian | hak | klingon | lux | mingo | navajo | pwn | tao | tay | tsu )"
             +
             "   | no [-_] (?: bok | nyn )" +
@@ -89,7 +89,7 @@
         }
         language = root.group(1);
         if (language == null) {
-            language = root.group(8); // grandfathered
+            language = root.group(8); // marked as “Type: grandfathered” in BCP 47
             if (language == null) {
                 language = "und"; // placeholder for completely private use
             }
@@ -113,11 +113,11 @@
             // make uppercase for compatibility with CLDR.
             variants = Arrays.asList(variantSeparatorPattern.split(variantList.toUpperCase(Locale.ENGLISH)));
             // check for duplicate variants
-            if (new HashSet<String>(variants).size() != variants.size()) {
+            if (new HashSet<>(variants).size() != variants.size()) {
                 throw new IllegalArgumentException("Duplicate variants");
             }
         }
-        extensions = new LinkedHashMap<String, String>(); // group 5 are extensions, 6 is private use
+        extensions = new LinkedHashMap<>(); // group 5 are extensions, 6 is private use
         // extensions are a bit more complicated
         addExtensions(root.group(5), extensionPattern);
         addExtensions(root.group(6), privateUsePattern);
@@ -231,6 +231,7 @@
         return extensions;
     }
 
+    @Override
     public String toString() {
         return "{language=" + language
             + ", script=" + script
diff --git a/tools/java/org/unicode/cldr/tool/SubdivisionNames.java b/tools/java/org/unicode/cldr/tool/SubdivisionNames.java
index b516393..42f8cd7 100644
--- a/tools/java/org/unicode/cldr/tool/SubdivisionNames.java
+++ b/tools/java/org/unicode/cldr/tool/SubdivisionNames.java
@@ -41,7 +41,7 @@
     public SubdivisionNames(String locale, String... dirs) {
 
         // do inheritance
-        
+
         Map<String,String> builder = new TreeMap<>();
         while (true) {
             addSubdivisionNames(locale, builder, dirs);
@@ -50,8 +50,8 @@
                 break;
             }
             locale = parent;
-        };
-        
+        }
+
         subdivisionToName = ImmutableMap.copyOf(builder);
     }
 
@@ -126,7 +126,7 @@
     }
 
     public static boolean isRegionCode(String regionOrSubdivision) {
-        return regionOrSubdivision.length() == 2 
+        return regionOrSubdivision.length() == 2
             || (regionOrSubdivision.length() == 3 && regionOrSubdivision.compareTo("A") < 0);
     }
 
@@ -141,7 +141,7 @@
     public static boolean isOldSubdivisionCode(String item) {
         return item.length() > 4 && item.length() < 7 && OLD_SUBDIVISION.matcher(item).matches();
     }
-    
+
     public static void main(String[] args) {
          Factory annotations = CLDRConfig.getInstance().getAnnotationsFactory();
          for (String locale : annotations.getAvailable()) {
@@ -152,7 +152,7 @@
             <subdivision type="gbwls">Wales</subdivision>
 
               */
-             System.out.println(locale 
+             System.out.println(locale
                  + " gbeng=" + sd.get("gbeng")
                  + " gbsct=" + sd.get("gbsct")
                  + " gbwls=" + sd.get("gbwls")
diff --git a/tools/java/org/unicode/cldr/tool/SubdivisionNode.java b/tools/java/org/unicode/cldr/tool/SubdivisionNode.java
index 8c6c6c2..baed3e2 100644
--- a/tools/java/org/unicode/cldr/tool/SubdivisionNode.java
+++ b/tools/java/org/unicode/cldr/tool/SubdivisionNode.java
@@ -40,7 +40,7 @@
 import org.unicode.cldr.util.XPathParts;
 import org.unicode.cldr.util.XPathParts.Comments.CommentType;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row.R2;
 import com.ibm.icu.impl.Utility;
@@ -102,7 +102,7 @@
             new TreeMap<String, Object>(),
             new TreeMap<String, Object>(),
             String.class);
-        final Map<String, String> TO_COUNTRY_CODE = new TreeMap<String, String>();
+        final Map<String, String> TO_COUNTRY_CODE = new TreeMap<>();
         final Relation<String, String> ID_SAMPLE = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
         final Map<String, String> SUB_TO_CAT = new TreeMap<>();
         final Relation<String, String> REGION_CONTAINS = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
@@ -180,7 +180,7 @@
             "municipality"
         };
 
-        static final Pattern CRUFT_PATTERN = PatternCache.get("(?i)\\b" + CollectionUtilities.join(CRUFT, "|") + "\\b");
+        static final Pattern CRUFT_PATTERN = PatternCache.get("(?i)\\b" + String.join("|", CRUFT) + "\\b");
         static final Pattern BRACKETED = PatternCache.get("\\[.*\\]");
 
         static String clean(String input) {
@@ -270,7 +270,7 @@
             if (cldrName != null) {
                 return fixName(cldrName);
             }
-            
+
             Collection<String> oldAliases = SubdivisionInfo.subdivisionIdToOld.get(value);
             if (oldAliases != null) {
                 for (String oldAlias : oldAliases) {
@@ -475,13 +475,13 @@
 
     static class SubDivisionExtractor {
         final SubdivisionSet sdset;
-        final Validity validityFormer; 
+        final Validity validityFormer;
         final Map<String, R2<List<String>, String>> subdivisionAliasesFormer;
         final Relation<String, String> formerRegionToSubdivisions;
 
-        public SubDivisionExtractor(SubdivisionSet sdset, 
-            Validity validityFormer, 
-            Map<String, R2<List<String>, String>> subdivisionAliasesFormer, 
+        public SubDivisionExtractor(SubdivisionSet sdset,
+            Validity validityFormer,
+            Map<String, R2<List<String>, String>> subdivisionAliasesFormer,
             Relation<String, String> formerRegionToSubdivisions) {
             this.sdset = sdset;
             this.validityFormer = validityFormer;
@@ -501,7 +501,7 @@
              */
             output.append(
                 DtdType.supplementalData.header(MethodHandles.lookup().lookupClass())
-                + "\t<version number=\"$Revision" /*hack to stop SVN changing this*/ + "$\"/>\n"
+                + "\t<version number=\"$Revision" + "$\"/>\n"
                 + "\t<subdivisionContainment>\n");
             printXml(output, sdset.BASE, 0);
             output.append("\t</subdivisionContainment>\n</supplementalData>\n");
@@ -550,7 +550,7 @@
                 String reason = "deprecated";
                 R2<List<String>, String> aliasInfo = subdivisionAliasesFormer.get(toReplace);
                 if (aliasInfo != null) {
-                    replaceBy = aliasInfo.get0(); //  == null ? null : CollectionUtilities.join(aliasInfo.get0(), " ");
+                    replaceBy = aliasInfo.get0();
                     reason = aliasInfo.get1();
                     System.out.println("Adding former alias: " + toReplace + " => " + replaceBy);
                 } else {
@@ -573,7 +573,8 @@
             }
             output.append("<subdivisionAlias"
                 + " type=\"" + toReplace + "\""
-                + " replacement=\"" + (replaceBy == null ? toReplace.substring(0, 2) + "?" : CollectionUtilities.join(replaceBy, " ")) + "\""
+                + " replacement=\"" + (replaceBy == null ? toReplace.substring(0, 2) + "?" :
+                Joiner.on(" ").join(replaceBy)) + "\""
                 + " reason=\"" + reason + "\"/>"
                 + (replaceBy == null ? " <!- - " : " <!-- ")
                 + sdset.getBestName(toReplace, true) + " => " + (replaceBy == null ? "??" : getBestName(replaceBy, true)) + " -->"
@@ -653,7 +654,7 @@
                         output.append(ENGLISH_ICU.regionDisplayName(lastCC) + "\t\t\tEquals:\t" + countEqual.size() + "\t" + countEqual + "\n");
                     }
                     countEqual.clear();
-                    ;
+
                     lastCC = countryCode;
                 }
                 for (String value : entry.getValue()) {
diff --git a/tools/java/org/unicode/cldr/tool/TablePrinter.java b/tools/java/org/unicode/cldr/tool/TablePrinter.java
index ac7035b..a3a1cb3 100644
--- a/tools/java/org/unicode/cldr/tool/TablePrinter.java
+++ b/tools/java/org/unicode/cldr/tool/TablePrinter.java
@@ -41,10 +41,10 @@
         System.out.println(s);
     }
 
-    private List<Column> columns = new ArrayList<Column>();
+    private List<Column> columns = new ArrayList<>();
     private String tableAttributes;
     private transient Column[] columnsFlat;
-    private List<Comparable<Object>[]> rows = new ArrayList<Comparable<Object>[]>();
+    private List<Comparable<Object>[]> rows = new ArrayList<>();
     private String caption;
 
     public String getTableAttributes() {
@@ -171,7 +171,7 @@
         if (partialRow != null) {
             throw new IllegalArgumentException("Cannot add partial row before calling finishRow()");
         }
-        partialRow = new ArrayList<Comparable<Object>>();
+        partialRow = new ArrayList<>();
         return this;
     }
 
@@ -227,18 +227,19 @@
         return this;
     }
 
+    @Override
     public String toString() {
         return toTable();
     }
 
     public void toTsv(PrintWriter tsvFile) {
-        Comparable[][] sortedFlat = (Comparable[][]) (rows.toArray(new Comparable[rows.size()][]));
+        Comparable[][] sortedFlat = (rows.toArray(new Comparable[rows.size()][]));
         toTsvInternal(sortedFlat, tsvFile);
     }
 
     @SuppressWarnings("rawtypes")
     public String toTable() {
-        Comparable[][] sortedFlat = (Comparable[][]) (rows.toArray(new Comparable[rows.size()][]));
+        Comparable[][] sortedFlat = (rows.toArray(new Comparable[rows.size()][]));
         return toTableInternal(sortedFlat);
     }
 
@@ -248,6 +249,7 @@
         private BitSet ascending = new BitSet();
         Collator englishCollator = Collator.getInstance(ULocale.ENGLISH);
 
+        @Override
         @SuppressWarnings("unchecked")
         public int compare(T[] o1, T[] o2) {
             int result;
@@ -287,7 +289,7 @@
     }
 
     @SuppressWarnings("rawtypes")
-    ColumnSorter<Comparable> columnSorter = new ColumnSorter<Comparable>();
+    ColumnSorter<Comparable> columnSorter = new ColumnSorter<>();
     private boolean sort;
 
     public void toTsvInternal(@SuppressWarnings("rawtypes") Comparable[][] sortedFlat, PrintWriter tsvFile) {
diff --git a/tools/java/org/unicode/cldr/tool/ToolConstants.java b/tools/java/org/unicode/cldr/tool/ToolConstants.java
index 09a1272..0904e28 100644
--- a/tools/java/org/unicode/cldr/tool/ToolConstants.java
+++ b/tools/java/org/unicode/cldr/tool/ToolConstants.java
@@ -26,7 +26,7 @@
         release // for release version
     }
 
-    // TODO change this to a list of VersionInfos, add add in the ShowLocaleCoverage years.
+    // TODO change this to CldrVersion, add add in the ShowLocaleCoverage years.
     public static final List<String> CLDR_VERSIONS = ImmutableList.of(
         "1.1.1",
         "1.2",
@@ -56,10 +56,11 @@
         "35.0",
         "35.1",
         "36.0",
-        "36.1"
+        "36.1",
+        "37.0"
         // add to this once the release is final!
         );
-    public static final String DEV_VERSION = "37";
+    public static final String DEV_VERSION = "38";
 
     public static final Set<String> CLDR_RELEASE_VERSION_SET = ImmutableSet.copyOf(ToolConstants.CLDR_VERSIONS);
     public static final Set<String> CLDR_RELEASE_AND_DEV_VERSION_SET = ImmutableSet.<String>builder().addAll(CLDR_RELEASE_VERSION_SET).add(DEV_VERSION).build();
@@ -93,9 +94,9 @@
     public static final VersionInfo PREV_CHART_VI = VersionInfo.getInstance(PREV_CHART_VERSION);
     public static final String PREV_CHART_VERSION_WITH0 = PREV_CHART_VI.getVersionString(2, 2); // must have 1 decimal
 
-    public static final ChartStatus CHART_STATUS = ChartStatus.valueOf(CldrUtility.getProperty("CHART_STATUS", 
-        CLDR_RELEASE_VERSION_SET.contains(CHART_VERSION) 
-        ? "release" 
+    public static final ChartStatus CHART_STATUS = ChartStatus.valueOf(CldrUtility.getProperty("CHART_STATUS",
+        CLDR_RELEASE_VERSION_SET.contains(CHART_VERSION)
+        ? "release"
             : "beta"));
     public static final boolean BETA = CHART_STATUS == ChartStatus.beta;
 
diff --git a/tools/java/org/unicode/cldr/tool/ToolUtilities.java b/tools/java/org/unicode/cldr/tool/ToolUtilities.java
index 8b1f9fd..6f0fcbb 100644
--- a/tools/java/org/unicode/cldr/tool/ToolUtilities.java
+++ b/tools/java/org/unicode/cldr/tool/ToolUtilities.java
@@ -1,5 +1,7 @@
 package org.unicode.cldr.tool;
 
+import static org.unicode.cldr.util.PathUtilities.getNormalizedPathString;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
@@ -10,6 +12,7 @@
 import org.unicode.cldr.util.CldrUtility;
 import org.unicode.cldr.util.CldrUtility.LineComparer;
 import org.unicode.cldr.util.FileReaders;
+import org.unicode.cldr.util.PathUtilities;
 
 /**
  * Utilities for CLDR tools.
@@ -58,26 +61,25 @@
             if (!new File(sourceDir, sourceFile).exists()) {
                 File f = new File(batDir, batName);
                 if (f.exists()) {
-                    if (DEBUG_SHOW_BAT) System.out.println("*Deleting old " + f.getCanonicalPath());
+                    if (DEBUG_SHOW_BAT) System.out.println("*Deleting old " + getNormalizedPathString(f));
                     f.delete();
                 }
             } else if (!CldrUtility.areFileIdentical(fullSource, fullTarget, failureLines, lineComparer)) {
                 PrintWriter bat = FileUtilities.openUTF8Writer(batDir, batName);
                 try {
                     bat.println(CLDRPaths.COMPARE_PROGRAM + " " +
-                        new File(fullSource).getCanonicalPath() + " " +
-                        new File(fullTarget).getCanonicalPath());
+                            getNormalizedPathString(fullSource) + " " + getNormalizedPathString(fullTarget));
                 } finally {
                     bat.close();
                 }
             } else {
                 File f = new File(batDir, batName);
                 if (f.exists()) {
-                    if (DEBUG_SHOW_BAT) System.out.println("*Deleting old:\t" + f.getCanonicalPath());
+                    if (DEBUG_SHOW_BAT) System.out.println("*Deleting old:\t" + getNormalizedPathString(f));
                     f.delete();
                 }
                 f = new File(fullTarget);
-                if (FileUtilities.SHOW_FILES) System.out.println("*Deleting old:\t" + f.getCanonicalPath());
+                if (FileUtilities.SHOW_FILES) System.out.println("*Deleting old:\t" + getNormalizedPathString(f));
                 f.delete();
             }
         } catch (IOException e) {
diff --git a/tools/java/org/unicode/cldr/tool/VerifyAttributeValues.java b/tools/java/org/unicode/cldr/tool/VerifyAttributeValues.java
index ba9eb7a..c99e846 100644
--- a/tools/java/org/unicode/cldr/tool/VerifyAttributeValues.java
+++ b/tools/java/org/unicode/cldr/tool/VerifyAttributeValues.java
@@ -85,6 +85,7 @@
         }
     }
 
+    @Override
     public void handlePathValue(String path, String value) {
         XPathParts parts = XPathParts.getFrozenInstance(path);
         if (dtdData == null) {
@@ -146,7 +147,6 @@
         for (DayPeriod period : dayPeriods.getPeriods()) {
             result.add(period.toString());
         }
-        ;
         result.add("am");
         result.add("pm");
         return new LinkedHashSet<>(result);
diff --git a/tools/java/org/unicode/cldr/tool/VettingAdder.java b/tools/java/org/unicode/cldr/tool/VettingAdder.java
index c3d18f8..d9c95cc 100644
--- a/tools/java/org/unicode/cldr/tool/VettingAdder.java
+++ b/tools/java/org/unicode/cldr/tool/VettingAdder.java
@@ -27,6 +27,7 @@
 import org.unicode.cldr.util.CLDRFile.DraftStatus;
 import org.unicode.cldr.util.Factory;
 import org.unicode.cldr.util.Log;
+import org.unicode.cldr.util.PathUtilities;
 import org.unicode.cldr.util.SimpleFactory;
 import org.unicode.cldr.util.XPathParts;
 
@@ -42,7 +43,7 @@
  */
 public class VettingAdder {
 
-    private Map<String, Set<String>> locale_files = new TreeMap<String, Set<String>>();
+    private Map<String, Set<String>> locale_files = new TreeMap<>();
     private Comparator<String> scomp = new UTF16.StringComparator();
     private Set<Object[]> conflictSet = new TreeSet<Object[]>(
         new ArrayComparator(new Comparator[] { scomp, scomp, scomp }));
@@ -53,25 +54,25 @@
 
     private void addFiles(String sourceDirectory) throws IOException {
         File f = new File(sourceDirectory);
-        String canonicalName = f.getCanonicalPath();
+        String normalizedPath = PathUtilities.getNormalizedPathString(f);
         if (!f.isDirectory()) {
             String name = f.getName();
             if (name.startsWith("fixed-")) return; // skip
             if (name.equals(".htaccess")) return; // skip
             if (!name.endsWith(".xml")) {
-                Log.logln("Wrong filename format: " + f.getCanonicalPath());
+                Log.logln("Wrong filename format: " + PathUtilities.getNormalizedPathString(f));
                 return;
             }
             String localeName = name.substring(0, name.length() - 4);
             Set<String> s = locale_files.get(localeName);
             if (s == null) {
-                locale_files.put(localeName, s = new TreeSet<String>());
+                locale_files.put(localeName, s = new TreeSet<>());
             }
             s.add(f.getParent());
         } else {
             String[] subnames = f.list();
             for (int i = 0; i < subnames.length; ++i) {
-                addFiles(canonicalName + File.separatorChar + subnames[i]);
+                addFiles(normalizedPath + File.separatorChar + subnames[i]);
             }
         }
     }
@@ -87,6 +88,7 @@
             this.dir = dir;
         }
 
+        @Override
         public String toString() {
             return "source: " + dir + ";\t value: <" + value + ">";
         }
@@ -100,18 +102,19 @@
     }
 
     static Comparator PathAndValueComparator = new Comparator() {
+        @Override
         public int compare(Object o1, Object o2) {
             return ((VettingInfo) o1).compareByPathAndValue((VettingInfo) o2);
         }
     };
 
     static class VettingInfoSet {
-        private Map<String, List<VettingInfo>> path_vettingInfoList = new TreeMap<String, List<VettingInfo>>();
+        private Map<String, List<VettingInfo>> path_vettingInfoList = new TreeMap<>();
 
         public void add(String path, String dir, String fullPath, String value) {
             VettingInfo vi = new VettingInfo(dir, fullPath, value);
             List<VettingInfo> s = path_vettingInfoList.get(path);
-            if (s == null) path_vettingInfoList.put(path, s = new ArrayList<VettingInfo>(1));
+            if (s == null) path_vettingInfoList.put(path, s = new ArrayList<>(1));
             s.add(vi);
         }
 
@@ -272,7 +275,7 @@
         Log.logln("D. Missing Vetting");
         Log.logln("");
 
-        Set<String> availableLocales = new TreeSet<String>(cldrFactory.getAvailable());
+        Set<String> availableLocales = new TreeSet<>(cldrFactory.getAvailable());
         availableLocales.removeAll(vettedLocales);
 
         for (Iterator<String> it = availableLocales.iterator(); it.hasNext();) {
@@ -300,7 +303,7 @@
         String lastLocale = "";
         CLDRFile cldr = null;
         Transliterator any_latin = Transliterator.getInstance("any-latin");
-        Set<String> emails = new LinkedHashSet<String>();
+        Set<String> emails = new LinkedHashSet<>();
         String[] pieces = new String[5];
 
         for (Iterator<Object[]> it = s.iterator(); it.hasNext();) {
@@ -376,4 +379,4 @@
         }
         return path;
     }
-}
\ No newline at end of file
+}
diff --git a/tools/java/org/unicode/cldr/tool/WritePluralRules.java b/tools/java/org/unicode/cldr/tool/WritePluralRules.java
index cf197ec..90d079d 100644
--- a/tools/java/org/unicode/cldr/tool/WritePluralRules.java
+++ b/tools/java/org/unicode/cldr/tool/WritePluralRules.java
@@ -12,15 +12,25 @@
 import org.unicode.cldr.util.SupplementalDataInfo;
 import org.unicode.cldr.util.SupplementalDataInfo.PluralType;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
+import com.google.common.collect.Comparators;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.text.PluralRules;
 
 public class WritePluralRules {
+    // Ordering by size-of-set first, and then lexicographically, with a final tie-break on the
+    // string representation.
+    private static final Comparator<PluralRules> PLURAL_RULES_COMPARATOR =
+        Comparator.<PluralRules, Integer>comparing(r -> r.getKeywords().size())
+            .thenComparing(PluralRules::getKeywords,
+                Comparators.lexicographical(Comparator.<String>naturalOrder()))
+            .thenComparing(Object::toString);
+
     static SupplementalDataInfo sInfo = CLDRConfig.getInstance().getSupplementalDataInfo();
 
     public static void main(String[] args) {
-        Relation<PluralRules, String> rulesToLocales = Relation.of(new TreeMap<PluralRules, Set<String>>(new PluralRulesComparator()), TreeSet.class);
+        Relation<PluralRules, String> rulesToLocales =
+            Relation.of(new TreeMap<>(PLURAL_RULES_COMPARATOR), TreeSet.class);
         for (String locale : sInfo.getPluralLocales(PluralType.cardinal)) {
             if (locale.equals("root")) {
                 continue;
@@ -34,7 +44,7 @@
         }
         System.out.println(
             formatPluralHeader(PluralType.cardinal, "WritePluralRules"));
-        TreeSet<Entry<PluralRules, Set<String>>> sorted = new TreeSet<Entry<PluralRules, Set<String>>>(new HackComparator());
+        TreeSet<Entry<PluralRules, Set<String>>> sorted = new TreeSet<>(new HackComparator());
         sorted.addAll(rulesToLocales.keyValuesSet());
         for (Entry<PluralRules, Set<String>> entry : sorted) {
             PluralRules rules = entry.getKey();
@@ -57,7 +67,7 @@
             <pluralRule count="few">n mod 100 in 3..10</pluralRule>
             <pluralRule count="many">n mod 100 in 11..99</pluralRule>
             </pluralRules>
-            
+
              */
         }
         System.out.println(formatPluralFooter());
@@ -87,7 +97,7 @@
     }
 
     public static String formatPluralRuleHeader(Set<String> values) {
-        String locales = CollectionUtilities.join(values, " ");
+        String locales = Joiner.on(" ").join(values);
         String result = ("        <pluralRules locales=\"" + locales + "\">"
         //+ (comment != null ? comment : "")
         );
@@ -125,8 +135,6 @@
 
     static class HackComparator implements Comparator<Entry<PluralRules, Set<String>>> {
         // we get the order of the first items in each of the old rules, and use that order where we can.
-        PluralRulesComparator prc = new PluralRulesComparator();
-
         @Override
         public int compare(Entry<PluralRules, Set<String>> o1, Entry<PluralRules, Set<String>> o2) {
             Integer firstLocale1 = HACK_ORDER_PLURALS.get(o1.getValue().iterator().next());
@@ -139,13 +147,13 @@
             } else if (firstLocale2 != null) {
                 return 1;
             } else { // only if BOTH are null, use better comparison
-                return prc.compare(o1.getKey(), o2.getKey());
+                return PLURAL_RULES_COMPARATOR.compare(o1.getKey(), o2.getKey());
             }
         }
     }
 
-    static Map<String, Integer> HACK_ORDER_PLURALS = new HashMap<String, Integer>();
-    static Map<String, Integer> HACK_ORDER_ORDINALS = new HashMap<String, Integer>();
+    static Map<String, Integer> HACK_ORDER_PLURALS = new HashMap<>();
+    static Map<String, Integer> HACK_ORDER_ORDINALS = new HashMap<>();
     static {
 //        int i = 0;
 //        for (String s : "ar he iw af asa ast az bem bez bg brx cgg chr ckb dv ee el eo es eu fo fur fy gsw ha haw hu jgo jmc ka kaj kcg kk kkj kl ks ksb ku ky lb lg mas mgo ml mn nah nb nd ne nn nnh no nr ny nyn om or os pap ps rm rof rwk saq seh sn so sq ss ssy st syr ta te teo tig tk tn tr ts uz ve vo vun wae xh xog ak bh guw ln mg nso pa ti wa ff fr hy kab lv iu kw naq se sma smi smj smn sms ga mo ro lt be cs sk pl sl mt mk cy lag shi br ksh tzm gv gd bm bo dz id in ig ii ja jbo jv jw kde kea km ko lkt lo ms my nqo sah ses sg th to vi wo yo zh fil tl ca de en et fi gl it nl sv sw ur yi ji pt da pt_PT am bn fa gu hi kn mr zu is si bs hr sh sr ru uk"
@@ -158,25 +166,10 @@
 //        }
     }
 
-    static class PluralRulesComparator implements Comparator<PluralRules> {
-        CollectionUtilities.CollectionComparator<String> comp = new CollectionUtilities.CollectionComparator<String>();
-
-        @Override
-        public int compare(PluralRules arg0, PluralRules arg1) {
-            Set<String> key0 = arg0.getKeywords();
-            Set<String> key1 = arg1.getKeywords();
-            int diff = comp.compare(key0, key1);
-            if (diff != 0) {
-                return diff;
-            }
-            return arg0.toString().compareTo(arg1.toString());
-        }
-    }
-
     static PluralRules forLocale(String locale) {
         PluralRules override = null; // PluralRulesFactory.getPluralOverrides().get(new ULocale(locale));
         return override != null
             ? override
             : sInfo.getPlurals(locale).getPluralRules();
     }
-}
\ No newline at end of file
+}
diff --git a/tools/java/org/unicode/cldr/tool/WritePluralRulesSpreadsheets.java b/tools/java/org/unicode/cldr/tool/WritePluralRulesSpreadsheets.java
index db644ac..bb258a3 100644
--- a/tools/java/org/unicode/cldr/tool/WritePluralRulesSpreadsheets.java
+++ b/tools/java/org/unicode/cldr/tool/WritePluralRulesSpreadsheets.java
@@ -185,12 +185,20 @@
             for (String start : keywords) {
                 FixedDecimal small = getSample(rules, start, null); // smallest
                 String startPattern = getSamplePattern(samplePatterns, start);
+                if (startPattern == null) {
+                    throw new NullPointerException("no startPattern: getSamplePattern(["+locale+"],"+start+") returned null"+
+                        "- samplePatterns: " + samplePatterns.toString());
+                }
                 for (String end : keywords) {
                     FixedDecimal large = getSample(rules, end, small); // smallest
                     if (large == null) {
                         continue;
                     }
                     String endPattern = getSamplePattern(samplePatterns, end);
+                    if (endPattern == null) {
+                        throw new NullPointerException("no endPattern: getSamplePattern(["+locale+"],"+end+") returned null"+
+                            "- samplePatterns: " + samplePatterns.toString());
+                    }
                     String range = MessageFormat.format(rangePattern, small.toString(), large.toString());
                     Count rangeCount = pluralRanges == null ? null : pluralRanges.get(Count.valueOf(start), Count.valueOf(end));
                     String rangeCountPattern = rangeCount == null ? "<copy correct pattern>" : getSamplePattern(samplePatterns, rangeCount.toString());
diff --git a/tools/java/org/unicode/cldr/tool/XMLModify.java b/tools/java/org/unicode/cldr/tool/XMLModify.java
index 399237b..cf69098 100644
--- a/tools/java/org/unicode/cldr/tool/XMLModify.java
+++ b/tools/java/org/unicode/cldr/tool/XMLModify.java
@@ -57,7 +57,7 @@
         private static Set<String> parse(String[] args, boolean showArguments) {
             /*
              * TODO: instead of the last arg below being "true", should it be "showArguments", which is otherwise unused?
-             * Also myOptions.parse doesn't use its first parameter... 
+             * Also myOptions.parse doesn't use its first parameter...
              */
             return myOptions.parse(MyOptions.values()[0], args, true);
         }
@@ -85,7 +85,7 @@
                         out.println("<!--" + value + " -->");
                         continue;
                     }
-                    XPathParts parts = XPathParts.getInstance(path); // not frozen, for setAttribute
+                    XPathParts parts = XPathParts.getFrozenInstance(path).cloneAsThawed(); // not frozen, for setAttribute
                     if (pathMatcher.reset(path).matches()) {
                         String type = parts.getAttributeValue(-1, "type");
                         parts.setAttribute(-1, "type", type.toLowerCase(Locale.ROOT).replaceAll("-", ""));
diff --git a/tools/java/org/unicode/cldr/tool/modify_config.txt b/tools/java/org/unicode/cldr/tool/modify_config.txt
index f2af29a..5f102ea 100644
--- a/tools/java/org/unicode/cldr/tool/modify_config.txt
+++ b/tools/java/org/unicode/cldr/tool/modify_config.txt
@@ -1,183 +1,6413 @@
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="AKUAPEM"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="ARANES"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="ASANTE"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="AUVERN"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="BASICENG"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="BAUDDHA"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="BISCAYAN"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="CISAUP"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="CORNU"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="CREISS"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="FONKIRSH"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="FONNAPA"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="FONXSAMP"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="GASCON"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="GRCLASS"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="GRITAL"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="GRMISTR"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="HOGNORSK"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="HSISTEMO"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="ITIHASA"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="IVANCHOV"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="JAUER"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="JYUTPING"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="KOCIEWIE"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="LAUKIKA"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="LEMOSIN"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="LENGADOC"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="LUNA1918"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="NEWFOUND"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="NICARD"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="PAHAWH2"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="PAHAWH3"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="PAHAWH4"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="PETR1708"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="PROVENC"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="PUTER"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="RUMGR"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="SCOUSE"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="SIMPLE"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="SPANGLIS"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="SURMIRAN"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="SURSILV"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="SUTSILV"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="ULSTER"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="VAIDIKA"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="VALLADER"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="VIVARAUP"]
-locale=ms;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="XSISTEMO"]
-# ms Total 48 found			
-# vi	⟪Value⟫	PathHeader	Org-Level
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Adlm"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Gong"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Hmnp"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Osge"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Rohg"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Wcho"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Aghb"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Bhks"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Dogr"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Elba"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Elym"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Gonm"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Hatr"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Mahj"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Maka"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Marc"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Medf"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Mult"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Nand"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Pauc"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Sidd"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Sogd"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Sogo"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Soyo"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Zanb"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="ABL1943"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="AKUAPEM"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="AO1990"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="ARANES"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="ASANTE"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="AUVERN"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="BALANKA"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="BARLA"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="BASICENG"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="CISAUP"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="COLB1945"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="CORNU"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="CREISS"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="EKAVSK"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="FONKIRSH"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="FONNAPA"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="GASCON"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="GRCLASS"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="GRITAL"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="GRMISTR"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="HSISTEMO"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="IJEKAVSK"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="IVANCHOV"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="KOCIEWIE"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="LEMOSIN"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="LENGADOC"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="NEWFOUND"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="NICARD"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="OXENDICT"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="PAHAWH2"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="PAHAWH3"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="PAHAWH4"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="PROVENC"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="SIMPLE"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="SOTAV"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="SPANGLIS"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="UNIFON"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="VIVARAUP"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="XSISTEMO"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="UYW"]/displayName
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="UYW"]/displayName[@count="other"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="ISJ"]/displayName
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="ISJ"]/displayName[@count="other"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="ALK"]/displayName
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="ALK"]/displayName[@count="other"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="ILR"]/displayName
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="ILR"]/displayName[@count="other"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="CNX"]/displayName
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="CNX"]/displayName[@count="other"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="MVP"]/displayName
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="MVP"]/displayName[@count="other"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="XSU"]/displayName
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="XSU"]/displayName[@count="other"]
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="XUA"]/displayName
-locale=vi;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="XUA"]/displayName[@count="other"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Gong"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Hmnp"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Rohg"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Wcho"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Chrs"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Diak"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Dogr"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Elym"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Kits"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Maka"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Medf"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Nand"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Sogd"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Sogo"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/scripts/script[@type="Yezi"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="AKUAPEM"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="ARANES"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="ASANTE"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="AUVERN"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="BASICENG"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="BORNHOLM"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="CISAUP"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="CORNU"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="CREISS"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="FONKIRSH"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="FONNAPA"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="GASCON"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="GRCLASS"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="GRITAL"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="GRMISTR"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="HSISTEMO"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="IVANCHOV"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="KOCIEWIE"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="LEMOSIN"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="LENGADOC"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="NEWFOUND"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="NICARD"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="PAHAWH2"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="PAHAWH3"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="PAHAWH4"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="PROVENC"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="SIMPLE"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="SPANGLIS"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="UNIFON"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="VIVARAUP"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/variants/variant[@type="XSISTEMO"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/types/type[@key="numbers"][@type="diak"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/types/type[@key="numbers"][@type="gong"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/types/type[@key="numbers"][@type="hmnp"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/types/type[@key="numbers"][@type="rohg"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/localeDisplayNames/types/type[@key="numbers"][@type="wcho"]
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="CNX"]/displayName
-locale=zh_Hant_HK;	action=delete;	value=↑↑↑;	path=//ldml/numbers/currencies/currency[@type="CNX"]/displayName[@count="other"]
\ No newline at end of file
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} g-kraft
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} g-kraft
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} meter per kvadratsekund
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meter per kvadratsekund
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} acre
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} acre
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} hektar
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} hektar
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kvadratcentimeter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kvadratcentimeter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kvadratfod
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kvadratfod
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kvadratkilometer
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kvadratkilometer
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kvadratmil
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kvadratmil
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} procent
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} procent
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} liter per 100 kilometer
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} liter per 100 kilometer
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} britisk mil per gallon
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} britiske mil per gallon
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerikansk mil per gallon
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerikanske mil per gallon
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dag
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dage
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} time
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} timer
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} minut
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} minutter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} måned
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} måneder
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} sekund
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} sekunder
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} uge
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} uger
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} år
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} år
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kalorie
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kalorier
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilokalorie
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilokalorier
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centimeter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centimeter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} fod
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} fod
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} tomme
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} tommer
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilometer
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilometer
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} meter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mil
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mil
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} millimeter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} millimeter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} parsec
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} parsec
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pikometer
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pikometer
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} solradius
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} solradius
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} yard
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} yard
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} solluminositet
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} solluminositet
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} atommasseenhed
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} atommasseenheder
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} jordmasse
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jordmasse
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gran
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gran
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gram
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gram
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilogram
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilogram
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milligram
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milligram
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} ounce
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ounces
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pund
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pund
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} solmasse
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} solmasse
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilopascal
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilopascal
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilometer i timen
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilometer i timen
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} meter per sekund
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meter per sekund
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mil i timen
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mil i timen
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grad celsius
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grader celsius
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grad fahrenheit
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grader fahrenheit
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grad
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grader
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kelvin
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kelvin
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centiliter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centiliter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kubikcentimeter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kubikcentimeter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kubikfod
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kubikfod
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kubikmil
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kubikmil
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerikansk standard kop
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerikanske standard kopper
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} deciliter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} deciliter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} britisk dessertske
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} britiske dessertskeer
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dessertske
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dessertskeer
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} britisk flydende dram
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} britiske flydende dramme
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dråbe
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dråber
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} britisk flydende ounce
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} britiske flydende ounces
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} flydende ounce
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} flydende ounces
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} britisk gallon
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} britiske gallons
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} US gallon
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} US gallons
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} jigger
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jigger
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} liter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} liter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milliliter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milliliter
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} knivspids
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} knivspidser
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pint
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pints
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} britisk quart
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} britiske quarts
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} quart
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} quarts
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} spiseske
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} spiseskeer
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} teske
+locale=da; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} teskeer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} g
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} g
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} g
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} g
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} g
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} g
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} g
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} g
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Meter pro Quadratsekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Meter pro Quadratsekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Meter pro Quadratsekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Meter pro Quadratsekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Meters pro Quadratsekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Meter pro Quadratsekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Meter pro Quadratsekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Meter pro Quadratsekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="angle-degree"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Grad
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="angle-degree"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Grad
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="angle-degree"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Grad
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="angle-degree"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Grad
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="angle-degree"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Grads
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="angle-degree"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Grad
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="angle-degree"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Grad
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="angle-degree"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Grad
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Acre
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Acre
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Acre
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Acre
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Acres
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Acre
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Acre
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Acre
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Hektar
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Hektar
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Hektar
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Hektar
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Hektars
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Hektar
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Hektar
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Hektar
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Quadratzentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Quadratzentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Quadratzentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Quadratzentimetern
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Quadratzentimeters
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Quadratzentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Quadratzentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Quadratzentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Quadratfuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Quadratfuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Quadratfuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Quadratfuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Quadratfußes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Quadratfuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Quadratfuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Quadratfuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Quadratkilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Quadratkilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Quadratkilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Quadratkilometern
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Quadratkilometers
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Quadratkilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Quadratkilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Quadratkilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-meter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Quadratmeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-meter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Quadratmeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-meter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Quadratmeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-meter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Quadratmetern
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-meter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Quadratmeters
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-meter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Quadratmeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Quadratmeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Quadratmeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Quadratmeile
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Quadratmeilen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Quadratmeile
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Quadratmeilen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Quadratmeile
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Quadratmeilen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Quadratmeile
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Quadratmeilen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Prozent
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Prozent
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Prozent
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Prozent
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Prozents
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Prozent
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Prozent
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Prozent
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Liter pro 100 Kilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Liter pro 100 Kilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Liter pro 100 Kilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Litern pro 100 Kilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Liter pro 100 Kilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Liter pro 100 Kilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Liter pro 100 Kilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Liter pro 100 Kilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Meile pro britische Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Meilen pro britische Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Meile pro britische Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Meilen pro britische Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Meile pro britische Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Meilen pro britische Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Meile pro britische Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Meilen pro britische Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} amerikanische Meile pro Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} amerikanische Meilen pro Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} amerikanischer Meile pro Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} amerikanischen Meilen pro Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} amerikanischer Meile pro Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} amerikanischer Meilen pro Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerikanische Meile pro Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerikanische Meilen pro Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-bit"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Bit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-bit"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Bits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-bit"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Bit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-bit"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Bits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-bit"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Bits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-bit"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Bits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-bit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Bit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-bit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Bits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-byte"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Byte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-byte"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Bytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-byte"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Byte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-byte"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Bytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-byte"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Bytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-byte"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Bytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-byte"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Byte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-byte"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Bytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Gigabit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Gigabits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Gigabit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Gigabits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Gigabits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Gigabits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Gigabit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Gigabits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Gigabyte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Gigabytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Gigabyte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Gigabytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Gigabytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Gigabytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Gigabyte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Gigabytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Kilobit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Kilobits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Kilobit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Kilobits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Kilobits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Kilobits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Kilobit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kilobits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Kilobyte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Kilobytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Kilobyte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Kilobytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Kilobytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Kilobytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Kilobyte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kilobytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Megabit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Megabits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Megabit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Megabits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Megabits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Megabits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Megabit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Megabits
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Megabyte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Megabytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Megabyte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Megabytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Megabytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Megabytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Megabyte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Megabytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Terabyte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Terabytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Terabyte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Terabytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Terabytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Terabytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Terabyte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Terabytes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Tag
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Tage
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Tag
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Tagen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Tages
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Tage
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Tag
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Tage
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Stunden
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Stunden
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Stunden
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Stunden
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Minute
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Minuten
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Minute
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Minuten
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Minute
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Minuten
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Minute
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Minuten
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Monat
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Monate
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Monat
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Monaten
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Monats
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Monate
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Monat
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Monate
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Sekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Sekunden
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Sekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Sekunden
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Sekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Sekunden
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Sekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Sekunden
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Woche
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Wochen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Woche
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Wochen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Woche
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Wochen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Woche
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Wochen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Jahr
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Jahre
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Jahr
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Jahren
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Jahrs
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Jahre
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Jahr
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Jahre
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="electric-volt"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Volt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="electric-volt"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Volt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="electric-volt"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Volt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="electric-volt"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Volt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="electric-volt"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Volts
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="electric-volt"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Volt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="electric-volt"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Volt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="electric-volt"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Volt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Kalorie
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Kalorien
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Kalorie
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Kalorien
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Kalorie
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Kalorien
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Kalorie
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kalorien
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Kilokalorie
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Kilokalorien
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Kilokalorie
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Kilokalorien
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Kilokalorie
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Kilokalorien
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Kilokalorie
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kilokalorien
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Zentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Zentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Zentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Zentimetern
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Zentimeters
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Zentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Zentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Zentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Fuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Fuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Fuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Fuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Fußes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Fuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Fuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Fuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Zoll
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Zoll
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Zoll
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Zoll
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Zolls
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Zoll
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Zoll
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Zoll
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Kilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Kilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Kilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Kilometern
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Kilometers
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Kilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Kilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kilometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Meter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Meter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Meter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Metern
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Meters
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Meter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Meter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Meter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Meile
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Meilen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Meile
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Meilen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Meile
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Meilen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Meile
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Meilen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Millimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Millimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Millimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Millimetern
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Millimeters
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Millimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Millimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Millimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Parsec
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Parsec
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Parsec
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Parsec
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Parsec
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Parsec
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Parsec
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Parsec
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Pikometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Pikometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Pikometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Pikometern
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Pikometers
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Pikometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Pikometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Pikometer
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Sonnenradius
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Sonnenradien
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Sonnenradius
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Sonnenradien
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Sonnenradius
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Sonnenradien
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Sonnenradius
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Sonnenradien
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Yard
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Yard
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Yard
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Yard
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Yards
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Yard
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Yard
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Yard
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Sonnenleuchtkraft
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Sonnenleuchtkräfte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Sonnenleuchtkraft
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Sonnenleuchtkräften
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Sonnenleuchtkraft
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Sonnenleuchtkräfte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Sonnenleuchtkraft
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Sonnenleuchtkräfte
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} atomare Masseneinheit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} atomare Masseneinheiten
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} atomarer Masseneinheit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} atomaren Masseneinheiten
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} atomarer Masseneinheit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} atomarer Masseneinheiten
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} atomare Masseneinheit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} atomare Masseneinheiten
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Erdmasse
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Erdmassen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Erdmasse
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Erdmassen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Erdmasse
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Erdmassen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Erdmasse
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Erdmassen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Messerspitze
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Messerspitzen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Messerspitze
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Messerspitzen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Messerspitze
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Messerspitzen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Messerspitze
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Messerspitzen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Gramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Gramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Gramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Gramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Gramms
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Gramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Gramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Gramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Kilogramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Kilogramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Kilogramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Kilogramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Kilogramms
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Kilogramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Kilogramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kilogramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Milligramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Milligramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Milligramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Milligramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Milligramms
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Milligramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Milligramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Milligramm
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Unze
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Unzen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Unze
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Unzen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Unze
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Unzen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Unze
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Unzen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Pfund
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Pfund
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Pfund
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Pfund
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Pfunds
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Pfund
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Pfund
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Pfund
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Sonnenmasse
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Sonnenmassen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Sonnenmasse
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Sonnenmassen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Sonnenmasse
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Sonnenmassen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Sonnenmasse
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Sonnenmassen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-kilowatt"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Kilowatt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-kilowatt"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Kilowatt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-kilowatt"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Kilowatt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-kilowatt"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Kilowatt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-kilowatt"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Kilowatts
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-kilowatt"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Kilowatt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-kilowatt"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Kilowatt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-kilowatt"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kilowatt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-megawatt"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Megawatt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-megawatt"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Megawatt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-megawatt"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Megawatt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-megawatt"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Megawatt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-megawatt"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Megawatts
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-megawatt"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Megawatt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-megawatt"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Megawatt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-megawatt"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Megawatt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-watt"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Watt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-watt"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Watt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-watt"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Watt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-watt"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Watt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-watt"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Watts
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-watt"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Watt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-watt"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Watt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-watt"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Watt
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Kilopascal
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Kilopascal
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Kilopascal
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Kilopascal
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Kilopascals
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Kilopascal
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Kilopascal
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kilopascal
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Kilometer pro Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Kilometer pro Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Kilometer pro Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Kilometern pro Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Kilometers pro Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Kilometer pro Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Kilometer pro Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kilometer pro Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Meter pro Sekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Meter pro Sekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Meter pro Sekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Metern pro Sekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Meters pro Sekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Meter pro Sekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Meter pro Sekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Meter pro Sekunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Meile pro Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Meilen pro Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Meile pro Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Meilen pro Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Meile pro Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Meilen pro Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Meile pro Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Meilen pro Stunde
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Grad Celsius
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Grad Celsius
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Grad Celsius
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Grad Celsius
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Grads Celsius
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Grad Celsius
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Grad Celsius
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Grad Celsius
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Grad Fahrenheit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Grad Fahrenheit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Grad Fahrenheit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Grad Fahrenheit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Grads Fahrenheit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Grad Fahrenheit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Grad Fahrenheit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Grad Fahrenheit
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Grad
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Grad
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Grad
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Grad
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Grads
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Grad
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Grad
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Grad
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Kelvin
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Kelvin
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Kelvin
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Kelvin
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Kelvins
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Kelvin
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Kelvin
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kelvin
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Zentiliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Zentiliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Zentiliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Zentilitern
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Zentiliters
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Zentiliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Zentiliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Zentiliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Kubikzentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Kubikzentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Kubikzentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Kubikzentimetern
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Kubikzentimeters
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Kubikzentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Kubikzentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kubikzentimeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Kubikfuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Kubikfuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Kubikfuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Kubikfuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Kubikfußes
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Kubikfuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Kubikfuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kubikfuß
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-meter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Kubikmeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-meter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Kubikmeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-meter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Kubikmeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-meter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Kubikmetern
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-meter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Kubikmeters
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-meter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Kubikmeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Kubikmeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kubikmeter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Kubikmeile
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Kubikmeilen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Kubikmeile
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Kubikmeilen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Kubikmeile
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Kubikmeilen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Kubikmeile
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kubikmeilen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Tasse
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Tassen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Tasse
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Tassen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Tasse
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Tassen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Tasse
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Tassen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Deziliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Deziliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Deziliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Dezilitern
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Deziliters
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Deziliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Deziliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Deziliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} britischen Dessertlöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} britische Dessertlöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} britischem Dessertlöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} britischen Dessertlöffeln
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} britischen Dessertlöffels
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} britischer Dessertlöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} britischer Dessertlöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} britische Dessertlöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Dessertlöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Dessertlöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Dessertlöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Dessertlöffeln
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Dessertlöffels
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Dessertlöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Dessertlöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Dessertlöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} britisches Flüssigdram
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} britische Flüssigdram
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} britischem Flüssigdram
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} britischen Flüssigdram
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} britischen Flüssigdrams
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} britischer Flüssigdram
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} britisches Flüssigdram
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} britische Flüssigdram
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Tropfen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Tropfen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Tropfen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Tropfen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Tropfens
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Tropfen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Tropfen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Tropfen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} britische Flüssigunze
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} britische Flüssigunzen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} britischer Flüssigunze
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} britischen Flüssigunzen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} britischer Flüssigunze
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} britischer Flüssigunzen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} britische Flüssigunze
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} britische Flüssigunzen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Flüssigunze
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Flüssigunzen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Flüssigunze
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Flüssigunzen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Flüssigunze
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Flüssigunzen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Flüssigunze
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Flüssigunzen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} britische Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} britische Gallonen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} britischer Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} britischen Gallonen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} britischer Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} britischer Gallonen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} britische Gallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} britische Gallonen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} amerikanische Flüssiggallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} amerikanische Flüssiggallonen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} amerikanischer Flüssiggallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} amerikanischen Flüssiggallonen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} amerikanischer Flüssiggallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} amerikanischer Flüssiggallonen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerikanische Flüssiggallone
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerikanische Flüssiggallonen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Schuss
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Schuss
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Schuss
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Schuss
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Schusses
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Schuss
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Schuss
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Schuss
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Liter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Liter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Liter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Litern
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Liters
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Liter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Liter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Liter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Milliliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Milliliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Milliliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Millilitern
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Milliliters
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Milliliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Milliliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Milliliter
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Prise
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Prisen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Prise
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Prisen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Prise
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Prisen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Prise
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Prisen
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Pint
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Pints
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Pint
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Pints
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Pints
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Pints
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Pint
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Pints
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} britisches Quart
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} britische Quart
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} britischem Quart
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} britischen Quart
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} britischen Quarts
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} britischer Quart
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} britisches Quart
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} britische Quart
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Quart
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Quarts
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Quart
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Quarts
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Quarts
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Quarts
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Quart
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Quarts
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Esslöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Esslöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Esslöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Esslöffeln
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Esslöffels
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Esslöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Esslöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Esslöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Teelöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Teelöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Teelöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Teelöffeln
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Teelöffels
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Teelöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Teelöffel
+locale=de; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Teelöffel
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} g-force
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} G's
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} meter per second squared
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meters per second squared
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} acre
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} acres
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} hectare
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} hectares
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} square centimeter
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} square centimeters
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} square foot
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} square feet
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} square kilometer
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} square kilometers
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} square mile
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} square miles
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} percent
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} percent
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} liter per 100 kilometers
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} liters per 100 kilometers
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mile per gallon
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miles per gallon
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mile per gallon
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miles per gallon
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} day
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} days
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} hour
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} hours
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} minute
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} minutes
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} month
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} months
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} second
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} seconds
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} week
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} weeks
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} year
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} years
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} calorie
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} calories
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilocalorie
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilocalories
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centimeter
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centimeters
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} foot
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} feet
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} inch
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} inches
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilometer
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilometers
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} meter
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meters
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mile
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miles
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} millimeter
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} millimeters
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} parsec
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} parsecs
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} picometer
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} picometers
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} solar radius
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} solar radii
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} yard
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} yards
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} solar luminosity
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} solar luminosities
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} atomic mass unit
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} atomic mass units
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} earth mass
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} earth masses
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grain
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grains
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gram
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grams
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilogram
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilograms
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milligram
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milligrams
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} ounce
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ounces
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pound
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pounds
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} solar mass
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} solar masses
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilopascal
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilopascals
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilometer per hour
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilometers per hour
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} meter per second
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meters per second
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mile per hour
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miles per hour
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} degree Celsius
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} degrees Celsius
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} degree Fahrenheit
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} degrees Fahrenheit
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} degree
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} degrees
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kelvin
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kelvins
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centiliter
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centiliters
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cubic centimeter
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cubic centimeters
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cubic foot
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cubic feet
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cubic mile
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cubic miles
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cup
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cups
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} deciliter
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} deciliters
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} imperial dessert spoon
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} imperial dessert spoons
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dessert spoon
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dessert spoons
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} imperial fluid dram
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} imperial fluid drams
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} drop
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} drops
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} imperial fluid ounce
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} imperial fluid ounces
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} fluid ounce
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} fluid ounces
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} imperial gallon
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} imperial gallons
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} liquid gallon
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} liquid gallons
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} jigger
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jiggers
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} liter
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} liters
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milliliter
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milliliters
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pinch
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pinches
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pint
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pints
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} imperial quart
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} imperial quarts
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} quart
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} quarts
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} tablespoon
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} tablespoons
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} teaspoon
+locale=en; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} teaspoons
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} fuerza g
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} fuerzas g
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} metro por segundo al cuadrado
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} metros por segundo al cuadrado
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} acre
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} acres
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} hectárea
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} hectáreas
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centímetro cuadrado
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centímetros cuadrados
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pie cuadrado
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pies cuadrados
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilómetro cuadrado
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilómetros cuadrados
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} metro cuadrado
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} metros cuadrados
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milla cuadrada
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} millas cuadradas
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} por ciento
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} por ciento
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} litro por 100 kilómetros
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} litros por 100 kilómetros
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milla por galón imperial
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} millas por galón imperial
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milla estadounidense por galón
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} millas estadounidenses por galón
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-bit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} bit
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-bit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} bits
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-byte"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} byte
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-byte"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} bytes
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gigabit
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gigabits
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gigabyte
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gigabytes
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilobit
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilobits
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilobyte
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilobytes
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} megabit
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} megabits
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} megabyte
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} megabytes
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} terabyte
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} terabytes
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} día
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} días
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} hora
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} horas
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} minuto
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} minutos
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mes
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meses
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} segundo
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} segundos
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} semana
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} semanas
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} año
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} años
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} caloría
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} calorías
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilocaloría
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilocalorías
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centímetro
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centímetros
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pie
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pies
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pulgada
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pulgadas
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilómetro
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilómetros
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} metro
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} metros
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milla
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} millas
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milímetro
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milímetros
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pársec
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pársecs
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} picómetro
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} picómetros
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} radio solar
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} radios solares
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} yarda
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} yardas
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} luminosidad solar
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} luminosidades solares
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dalton
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dalton
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} masa terrestre
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} masas terrestres
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grano
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} granos
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gramo
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gramos
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilogramo
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilogramos
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} miligramo
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miligramos
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} onza
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} onzas
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} libra
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} libras
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} masa solar
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} masas solares
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-kilowatt"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilovatio
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-kilowatt"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilovatios
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-megawatt"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} megavatio
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-megawatt"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} megavatios
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-watt"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} vatio
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="power-watt"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} vatios
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilopascal
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilopascales
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilómetro por hora
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilómetros por hora
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} metro por segundo
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} metros por segundo
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milla por hora
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} millas por hora
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grado Celsius
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grados Celsius
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grado Fahrenheit
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grados Fahrenheit
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grado
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grados
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Kelvin
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kelvin
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centilitro
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centilitros
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centímetro cúbico
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centímetros cúbicos
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pie cúbico
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pies cúbicos
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-inch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pulgada cúbica
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pulgadas cúbicas
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilómetro cúbico
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilómetros cúbicos
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} metro cúbico
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} metros cúbicos
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milla cúbica
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} millas cúbicas
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} taza
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} tazas
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} decilitro
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} decilitros
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cucharada de postre imperial
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cucharadas de postre imperiales
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cucharada de postre
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cucharadas de postre
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dracma líquido británico
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dracmas líquidos británicos
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gota
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gotas
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} onza líquida británica
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} onzas líquidas británicas
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} onza líquida estadounidense
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} onzas líquidas estadounidenses
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} galón imperial
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} galones imperiales
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} galón
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} galones
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-hectoliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} hectolitro
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-hectoliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} hectolitros
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} jigger
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jiggers
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} litro
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} litros
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mililitro
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mililitros
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pizca
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pizcas
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pinta estadounidense
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pintas estadounidenses
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cuarto británico
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cuartos británicos
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cuarto estadounidense
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cuartos estadounidenses
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cucharada
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cucharadas
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cucharada
+locale=es; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cucharadas
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} g
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mètre par seconde carrée
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} acre
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} acres
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} hectare
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} hectare
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centimètre carré
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pied carré
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilomètre carré
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilomètres carrés
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mille carré
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milles carrés
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pour cent
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pour cent
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} litre aux 100 kilomètres
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mille par gallon impérial
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mille par gallon américain
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} jour
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jours
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} heure
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} heures
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} minute
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} minutes
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mois
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mois
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} seconde
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} secondes
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} semaine
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} semaines
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} année
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} années
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} calorie
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} calories
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilocalorie
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilocalories
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centimètre
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centimètres
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pied
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pieds
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pouce
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pouces
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilomètre
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilomètres
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mètre
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mètres
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mile
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miles
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} millimètre
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} millimètres
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} parsec
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} picomètre
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} rayon solaire
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} yard
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} yards
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} luminosité solaire
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} unité de masse atomique unifiée
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} masse terrestre
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grain
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grains
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gramme
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grammes
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilo
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilos
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milligramme
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} once
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} onces
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} livre
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} livres
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} masse solaire
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilopascal
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilomètre par heure
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilomètres par heure
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mètre par seconde
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mètres par seconde
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mille par heure
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milles par heure
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} degré Celsius
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} degrés Celsius
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} degré Fahrenheit
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} degrés Fahrenheit
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} degré
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} degrés
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kelvin
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kelvins
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centilitre
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centilitres
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centimètre cube
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centimètres cubes
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pied cube
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mille cube
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} tasse américaine
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} tasses américaines
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} décilitre
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} décilitres
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cuillère à dessert impériale
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cuillère à dessert
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} drachme impériale
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} goutte
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gouttes
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} once liquide impériale
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} once liquide américaine
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} onces liquides américaines
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gallon impérial
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gallon américain
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} shot
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} shots
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} litre
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} litres
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} millilitre
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} millilitres
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pincée
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pincées
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pinte américaine liquide
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pintes américaines liquides
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} quart impérial
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} quart américain
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} quarts américains
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cuillère à soupe américaine
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cuillères à soupe américaine
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cuillère à café américaine
+locale=fr; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cuillères à café américaines
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} गुरुत्वाकर्षण बल
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} गुरुत्वाकर्षण बल
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} गुरुत्वाकर्षण बल
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} गुरुत्वाकर्षण बल
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} मीटर प्रति वर्ग सेकंड
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} मीटर प्रति वर्ग सेकंड
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} मीटर प्रति वर्ग सेकंड
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} मीटर प्रति वर्ग सेकंड
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} एकड़
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} एकड़
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} एकड़
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} एकड़
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} हेक्टेयर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} हेक्टेयर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} हेक्टेयर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} हेक्टेयर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} वर्ग सेंटीमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} वर्ग सेंटीमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} वर्ग सेंटीमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} वर्ग सेंटीमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} वर्ग फुट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} वर्ग फुट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} वर्ग फुट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} वर्ग फुट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} वर्ग किलोमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} वर्ग किलोमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} वर्ग किलोमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} वर्ग किलोमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} वर्ग मील
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} वर्ग मील
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} वर्ग मील
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} वर्ग मील
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} प्रतिशत
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} प्रतिशत
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} प्रतिशत
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} प्रतिशत
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} 100 किलोमीटर प्रति लीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 100 किलोमीटर प्रति लीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} 100 किलोमीटर प्रति लीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} 100 किलोमीटर प्रति लीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} मील प्रति गैलन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} मील प्रति गैलन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} मील प्रति गैलन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} मील प्रति गैलन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} मील प्रति गैलन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} मील प्रति गैलन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} मील प्रति गैलन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} मील प्रति गैलन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} दिन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} दिन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} दिन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} दिन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} घंटा
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} घंटे
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} घंटे
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} घंटों
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} मिनट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} मिनट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} मिनट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} मिनट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} महीना
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} महीने
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} महीने
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} महीनो
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} सेकेंड
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} सेकेंड
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} सेकेंड
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} सेकेंड
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} सप्ताह
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} सप्ताह
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} सप्ताह
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} सप्ताह
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} साल
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} साल
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} साल
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} साल
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} कैलोरी
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} कैलोरी
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} कैलोरी
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} कैलोरी
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} किलोकैलोरी
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} किलोकैलोरी
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} किलोकैलोरी
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} किलोकैलोरी
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} सेंटीमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} सेंटीमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} सेंटीमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} सेंटीमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} फुट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} फुट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} फुट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} फुट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} इंच
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} इंच
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} इंच
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} इंच
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} किलोमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} किलोमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} किलोमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} किलोमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} मीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} मीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} मीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} मीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} मील
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} मील
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} मील
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} मील
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} मिलीमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} मिलीमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} मिलीमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} मिलीमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} पारसैक
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} पारसैक
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} पारसैक
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} पारसैक
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} पिकोमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} पिकोमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} पिकोमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} पिकोमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} सौर अर्धव्यास
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} सौर अर्धव्यास
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} सौर अर्धव्यास
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} सौर अर्धव्यास
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} गज
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} गज
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} गज
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} गज
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} सौर ज्योति
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} सौर ज्योति
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} सौर ज्योति
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} सौर ज्योति
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} एकीकृत परमाण्वीय द्रव्यमान मात्रक
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} एकीकृत परमाण्वीय द्रव्यमान मात्रक
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} एकीकृत परमाण्वीय द्रव्यमान मात्रक
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} एकीकृत परमाण्वीय द्रव्यमान मात्रक
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} पृथ्वी द्रव्यमान
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} पृथ्वी द्रव्यमान
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} पृथ्वी द्रव्यमान
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} पृथ्वी द्रव्यमान
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} डेढ़ रत्ती
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} डेढ़ रत्ती
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} डेढ़ रत्ती
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} डेढ़ रत्ती
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} ग्राम
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ग्राम
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} ग्राम
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} ग्राम
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} किलोग्राम
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} किलोग्राम
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} किलोग्राम
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} किलोग्राम
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} मिलीग्राम
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} मिलीग्राम
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} मिलीग्राम
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} मिलीग्राम
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} आउन्स
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} आउन्स
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} आउन्स
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} आउन्स
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} पाउंड
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} पाउंड
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} पाउंड
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} पाउंड
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} सौर द्रव्यमान
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} सौर द्रव्यमान
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} सौर द्रव्यमान
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} सौर द्रव्यमान
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} किलोपास्कल
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} किलोपास्कल
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} किलोपास्कल
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} किलोपास्कल
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} किलोमीटर प्रति घंटा
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} किलोमीटर प्रति घंटा
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} किलोमीटर प्रति घंटा
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} किलोमीटर प्रति घंटा
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} मीटर प्रति सेकंड
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} मीटर प्रति सेकंड
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} मीटर प्रति सेकंड
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} मीटर प्रति सेकंड
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} मील प्रति घंटा
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} मील प्रति घंटा
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} मील प्रति घंटा
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} मील प्रति घंटा
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} डिग्री सेल्सियस
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} डिग्री सेल्सियस
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} डिग्री सेल्सियस
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} डिग्री सेल्सियस
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} डिग्री फॉरेन्हाइट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} डिग्री फॉरेन्हाइट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} डिग्री फॉरेन्हाइट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} डिग्री फॉरेन्हाइट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} डिग्री
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} डिग्री
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} डिग्री
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} डिग्री
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} केल्विन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} केल्विन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} केल्विन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} केल्विन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} सेंटीलीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} सेंटीलीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} सेंटीलीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} सेंटीलीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} घन सेंटीमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} घन सेंटीमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} घन सेंटीमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} घन सेंटीमीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} घन फुट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} घन फुट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} घन फुट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} घन फुट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} घन मील
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} घन मील
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} घन मील
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} घन मील
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} यूएस प्याला
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} यूएस प्याला
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} यूएस प्याला
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} यूएस प्याला
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} डेसीलीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} डेसीलीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} डेसीलीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} डेसीलीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} इम्पीरियल डेज़र्टस्पून
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} इम्पीरियल डेज़र्टस्पून
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} इम्पीरियल डेज़र्टस्पून
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} इम्पीरियल डेज़र्टस्पून
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} डेज़र्ट स्पून
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} डेज़र्ट स्पून
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} डेज़र्ट स्पून
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} डेज़र्ट स्पून
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} इम्पीरियल तरल ड्रम
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} इम्पीरियल तरल ड्रम
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} इम्पीरियल तरल ड्रम
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} इम्पीरियल तरल ड्रम
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} बूंद
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} बूंद
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} बूंद
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} बूंद
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} द्रव औंस शाही
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} द्रव औंस शाही
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} द्रव औंस शाही
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} द्रव औंस शाही
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} अमरीकी तरल आउंस
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} अमरीकी तरल आउंस
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} अमरीकी तरल आउंस
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} अमरीकी तरल आउंस
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} इंपीरियल गैलन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} इंपीरियल गैलन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} इंपीरियल गैलन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} इंपीरियल गैलन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} यूएस गैलन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} यूएस गैलन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} यूएस गैलन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} यूएस गैलन
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} जिगर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} जिगर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} जिगर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} जिगर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} लीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} लीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} लीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} लीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} मिलीलीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} मिलीलीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} मिलीलीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} मिलीलीटर
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} चुटकी
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} चुटकी
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} चुटकी
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} चुटकी
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} अमेरिकी पाइंट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} अमेरिकी पाइंट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} अमेरिकी पाइंट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} अमेरिकी पाइंट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} क्वार्ट इम्पीरियल
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} क्वार्ट इम्पीरियल
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} क्वार्ट इम्पीरियल
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} क्वार्ट इम्पीरियल
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} यूएस क्वार्ट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} यूएस क्वार्ट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} यूएस क्वार्ट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} यूएस क्वार्ट
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} चमचा
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} चमचा
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} चमचा
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} चमचा
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} छोटी चम्मच
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} छोटी चम्मच
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@case="oblique"][@draft="provisional"]; new_value={0} छोटी चम्मच
+locale=hi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@case="oblique"][@draft="provisional"]; new_value={0} छोटी चम्मच
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} g-force
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meter per detik kuadrat
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ekar
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} hektare
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} sentimeter persegi
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kaki persegi
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilometer persegi
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mil persegi
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} persen
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} liter per 100 kilometer
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mil per galon imperial
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mil per galon Amerika
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} hari
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jam
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} menit
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} bulan
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} detik
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} minggu
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} tahun
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kalori
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilokalori
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} sentimeter
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kaki
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} inci
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilometer
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meter
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mil
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milimeter
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} parsek
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pikometer
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} radius Matahari
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} yard
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} luminositas Matahari
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dalton
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} massa Bumi
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grain
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gram
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilogram
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miligram
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ons
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pon
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} massa Matahari
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilopascal
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilometer per jam
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meter per detik
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mil per jam
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} derajat Celsius
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} derajat Fahrenheit
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} derajat
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kelvin
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} sentiliter
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} sentimeter kubik
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kaki kubik
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mil kubik
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cangkir Amerika
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} desiliter
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} sendok dessert imperial
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} sendok dessert
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dram cairan imperial
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} tetes
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ons cairan imperial
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ons cairan Amerika
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} galon imperial
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} galon Amerika
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jigger
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} liter
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mililiter
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jumput
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pint Amerika
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kuart imperial
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kuart Amerika
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} sendok makan Amerika
+locale=id; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} sendok teh Amerika
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} g
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} g
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} metro al secondo quadrato
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} metri al secondo quadrato
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} acro
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} acri
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} ettaro
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ettari
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centimetro quadrato
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centimetri quadrati
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} piede quadrato
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} piedi quadrati
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} chilometro quadrato
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} chilometri quadrati
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} miglio quadro
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miglia quadre
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} percento
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} percento
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} litro per cento chilometri
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} litri per cento chilometri
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} miglio per gallone imperiale
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miglia per gallone imperiale
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} miglio per gallone americano
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miglia per gallone americano
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} giorno
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} giorni
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} ora
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ore
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} minuto
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} minuti
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mese
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mesi
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} secondo
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} secondi
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} settimana
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} settimane
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} anno civile
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} anni civili
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} caloria
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} calorie
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} chilocaloria
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} chilocalorie
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centimetro
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centimetri
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} piede
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} piedi
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pollice
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pollici
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} chilometro
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} chilometri
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} metro
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} metri
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} miglio
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miglia
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} millimetro
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} millimetri
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} parsec
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} parsec
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} picometro
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} picometri
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} raggio solare
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} raggi solari
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} iarda
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} iarde
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} luminosità solare
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} luminosità solari
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} unità di massa atomica
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} unità di massa atomica
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} massa terrestre
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} masse terrestri
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grano
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grani
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grammo
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grammi
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} chilogrammo
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} chilogrammi
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milligrammo
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milligrammi
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} oncia
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} once
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} libbra
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} libbre
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} massa solare
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} masse solari
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} chilopascal
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} chilopascal
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} chilometro orario
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} chilometri orari
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} metro al secondo
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} metri al secondo
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} miglio orario
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miglia orarie
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grado Celsius
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gradi Celsius
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grado Fahrenheit
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gradi Fahrenheit
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grado
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gradi
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grado Kelvin
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gradi Kelvin
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-acre-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} piede acro
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-acre-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} piedi acri
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-barrel"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} barile
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-barrel"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} barili
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centilitro
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centilitri
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centimetro cubo
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centimetri cubi
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} piede cubo
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} piedi cubi
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-inch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pollice cubo
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pollici cubi
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} chilometro cubo
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} chilometri cubi
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} metro cubo
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} metri cubi
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} miglio cubo
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miglia cube
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} tazza
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} tazze
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} decilitro
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} decilitri
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cucchiaio
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cucchiai
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cucchiaino da dessert
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cucchiaini da dessert
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dramma
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dramme
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} goccia
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gocce
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} oncia
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} once
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} oncia
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} once
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gallone imperiale
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} galloni imperiali
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gallone americano
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} galloni americani
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-hectoliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} ettolitro
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-hectoliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ettolitri
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} jigger
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jigger
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} litro
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} litri
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} millilitro
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} millilitri
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pizzico
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pizzichi
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pinta
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pinte
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} quarto imperiale
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} quarti imperiali
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} quarto di gallone
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} quarti di gallone
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cucchiaio
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cucchiai
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cucchiaino
+locale=it; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cucchiaini
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} G
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} メートル毎秒毎秒
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} エーカー
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ヘクタール
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 平方センチメートル
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 平方フィート
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 平方キロメートル
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 平方マイル
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} パーセント
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} リットル毎100キロメートル
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} マイル毎英ガロン
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} マイル毎米ガロン
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 日
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 時間
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 分
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} か月
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 秒
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 週
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 年
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} カロリー
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} キロカロリー
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} センチメートル
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} フィート
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} インチ
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} キロ
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} メートル
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} マイル
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ミリ
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} パーセク
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ピコメートル
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 太陽半径
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ヤード
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 太陽光度
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ダルトン
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 地球質量
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} グレーン
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} グラム
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} キログラム
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ミリグラム
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} オンス
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ポンド
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 太陽質量
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} キロパスカル
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} キロメートル毎時
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} メートル毎秒
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} マイル毎時
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 度
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 度
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 度
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ケルビン
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} センチリットル
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 立方センチメートル
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 立方フィート
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 立方マイル
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} アメリカカップ
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} デシリットル
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 英デザートスプーン
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} デザートスプーン
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 英液量ドラム
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 滴
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 英液量オンス
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 米液量オンス
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 英ガロン
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 米液量ガロン
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ジガー
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} リットル
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ミリリットル
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} つまみ
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 米液量パイント
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 英クォート
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 米液量クォート
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 米テーブルスプーン
+locale=ja; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} 米ティースプーン
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}중력가속도
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}미터 퍼 세크 제곱
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}에이커
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}헥타르
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}제곱센티미터
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}제곱피트
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}제곱킬로미터
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}제곱마일
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}백분율
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}100킬로미터당 리터
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}영국 갤런당 마일
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}갤런당 마일
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}일
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}시간
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}분
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}개월
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}초
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}주
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}년
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}칼로리
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}킬로칼로리
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}센티미터
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}피트
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}인치
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}킬로미터
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}미터
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}마일
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}밀리미터
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}파섹
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}피코미터
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}태양반경
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}야드
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}태양광도
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}돌턴
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}지구질량
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}그레인
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}그램
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}킬로그램
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}밀리그램
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}온스
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}파운드
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}태양질량
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}킬로파스칼
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}시간당 킬로미터
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}초당 미터
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}시간당 마일
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}섭씨
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}화씨
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}도
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}켈빈
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}센티리터
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}세제곱센티미터
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}세제곱피트
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}세제곱마일
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}컵
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}데시리터
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}영국 디저트스푼
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}디저트스푼
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}영국 액량 드램
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}방울
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}영국 액량 온스
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}미국 액량 온스
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}영국 갤런
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}미국 액량 갤런
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}지거
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}리터
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}밀리리터
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}꼬집
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}미국 액량 파인트
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}영국 쿼트
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}미국 액량 쿼트
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}큰술
+locale=ko; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}작은술
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} g-kraft
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} g-krefter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} meter per kvadratsekund
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meter per kvadratsekund
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} acre
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} acre
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} hektar
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} hektar
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kvadratcentimeter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kvadratcentimeter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kvadratfot
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kvadratfot
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kvadratkilometer
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kvadratkilometer
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} engelsk kvadratmil
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} engelske kvadratmil
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} prosent
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} prosent
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} liter per 100 kilometer
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} liter per 100 kilometer
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} britisk mil per gallon
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} britiske mil per gallon
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerikansk mile per gallon
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerikanske miles per gallon
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dag
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dager
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} time
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} timer
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} minutt
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} minutter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} måned
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} måneder
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} sekund
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} sekunder
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} uke
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} uker
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kalenderår
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kalenderår
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kalori
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kalorier
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilokalori
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilokalorier
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centimeter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centimeter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-decimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} desimeter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-decimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} desimeter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} fot
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} fot
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} tomme
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} tommer
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilometer
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilometer
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} meter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile-scandinavian"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mil
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile-scandinavian"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mil
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} engelsk mil
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} engelske mil
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} millimeter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} millimeter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} parsec
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} parsec
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pikometer
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pikometer
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} solradius
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} solradier
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} yard
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} yard
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} solluminositet
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} solluminositeter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} atommasseenhet
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} atommasseenheter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} jordmasse
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jordmasser
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grain
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grain
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gram
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gram
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilogram
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilogram
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milligram
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milligram
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} ounce
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ounces
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pound
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pounds
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} solmasse
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} solmasse
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilopascal
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilopascal
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilometer i timen
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilometer i timen
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} meter i sekundet
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meter i sekundet
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mile i timen
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miles i timen
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grad celsius
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grader celsius
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grad fahrenheit
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grader fahrenheit
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grad
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grader
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kelvin
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kelvin
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-barrel"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} oljefat
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-barrel"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} oljefat
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centiliter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centiliter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kubikkcentimeter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kubikkcentimeter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kubikkfot
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kubikkfot
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-inch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kubikktomme
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kubikktommer
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kubikkilometer
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kubikkilometer
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kubikkmeter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kubikkmeter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kubikkmil
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kubikkmil
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup-metric"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} metrisk cup
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup-metric"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} metriske cups
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerikansk cup
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerikanske cups
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} desiliter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} desiliter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} britisk dessertskje
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} britiske dessertskjeer
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dessertskje
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dessertskjeer
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} britisk flytende dram
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} britiske flytende drammer
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dråpe
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dråper
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} britisk flytende ounce
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} britiske flytende ounces
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerikansk ounce
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerikanske ounces
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} britisk gallon
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} britiske gallons
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerikansk gallon
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerikanske gallons
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-hectoliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} hektoliter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-hectoliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} hektoliter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} jigg
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jigg
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} liter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} liter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milliliter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milliliter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} klype
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} klyper
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerikansk pint
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerikanske pints
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} britisk quart
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} britiske quarts
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerikansk kvart
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerikanske kvarter
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerikansk spiseskje
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerikanske spiseskjeer
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerikansk teskje
+locale=nb; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerikanske teskjeer
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} g-kracht
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} g-kracht
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} meter per seconde kwadraat
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meter per seconde kwadraat
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} acre
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} acre
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} hectare
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} hectares
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} vierkante centimeter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} vierkante centimeter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} vierkante voet
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} vierkante voet
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} vierkante kilometer
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} vierkante kilometer
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} vierkante mijl
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} vierkante mijl
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} procent
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} procent
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} liter per 100 kilometer
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} liter per 100 kilometer
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mijl per imperial gallon
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mijl per imperial gallon
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mijl per US gallon
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mijl per US gallon
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dag
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dagen
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} uur
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} uur
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} minuut
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} minuten
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} maand
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} maanden
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} seconde
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} seconden
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} week
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} weken
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} jaar
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jaar
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} calorie
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} calorieën
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilocalorie
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilocalorieën
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centimeter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centimeter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} voet
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} voet
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} inch
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} inch
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilometer
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilometer
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} meter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mijl
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mijl
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} millimeter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} millimeter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} parsec
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} parsecs
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} picometer
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} picometer
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} zonneradius
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} zonneradius
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} yard
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} yard
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} zonnelichtkracht
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} zonnelichtkracht
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} atomaire massa-eenheid
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} atomaire massa-eenheden
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} aardmassa
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} aardmassa's
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} korrel
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} korrels
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gram
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gram
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilogram
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilogram
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milligram
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milligram
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} ons
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ons
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pond
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pond
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} zonsmassa
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} zonsmassa's
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilopascal
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilopascal
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilometer per uur
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilometer per uur
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} meter per seconde
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meter per seconde
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mijl per uur
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mijl per uur
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} graad Celsius
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} graden Celsius
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} graad Fahrenheit
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} graden Fahrenheit
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} graad
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} graden
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Kelvin
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kelvin
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centiliter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centiliter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kubieke centimeter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kubieke centimeter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kubieke voet
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kubieke voet
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kubieke mijl
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kubieke mijl
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kopje
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kopjes
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} deciliter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} deciliter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dessertlepel (imperiale systeem)
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dessertlepels (imperiale systeem)
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dessertlepel
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dessertlepels
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} vloeistof drachm
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} vloeistof drachm
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} druppel
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} druppels
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Britse vloeistof-ounce
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Britse vloeistof-ounces
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Amerikaanse fluid ounce
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} imperial gallon
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} imperial gallon
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Amerikaanse liquid gallon
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Amerikaanse liquid gallon
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} jigger
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jiggers
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} liter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} liter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milliliter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milliliter
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} snufje
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} snufjes
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pint
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pinten
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} quart
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} quarts
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Amerikaanse liquid quart
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} eetlepel
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} eetlepels
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} theelepel
+locale=nl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} theelepels
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} g
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} metry na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} metr na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} metry na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} metrom na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} metrowi na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} metrom na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} metrów na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} metra na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} metrów na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} metrami na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} metrem na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} metrami na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} metrach na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} metrze na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} metrach na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} metry na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} metr na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} metry na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} metry na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} metrze na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} metry na sekundę do kwadratu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} akry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} akr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} akry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} akrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} akrowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} akrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} akrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} akra
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} akrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} akrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} akrem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} akrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} akrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} akrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} akrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} akry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} akr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} akry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} akry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} akrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} akry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} hektary
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} hektar
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} hektary
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} hektarom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} hektarowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} hektarom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} hektarów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} hektara
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} hektarów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} hektarami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} hektarem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} hektarami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} hektarach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} hektarze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} hektarach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} hektary
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} hektar
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} hektary
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} hektary
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} hektarze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} hektary
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} centymetry kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} centymetr kwadratowy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} centymetry kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} centymetrom kwadratowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} centymetrowi kwadratowemu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} centymetrom kwadratowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} centymetrów kwadratowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} centymetra kwadratowego
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} centymetrów kwadratowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} centymetrami kwadratowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} centymetrem kwadratowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} centymetrami kwadratowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} centymetrach kwadratowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} centymetrze kwadratowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} centymetrach kwadratowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} centymetry kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centymetr kwadratowy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centymetry kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} centymetry kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} centymetrze kwadratowy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} centymetry kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} stopy kwadratowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} stopę kwadratową
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} stopy kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} stopom kwadratowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} stopie kwadratowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} stopom kwadratowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} stóp kwadratowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} stopy kwadratowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} stóp kwadratowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} stopami kwadratowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} stopą kwadratową
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} stopami kwadratowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} stopach kwadratowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} stopie kwadratowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} stopach kwadratowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} stopy kwadratowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} stopa kwadratowa
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} stopy kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} stopy kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} stopo kwadratowa
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} stopy kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} kilometry kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} kilometr kwadratowy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} kilometry kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} kilometrom kwadratowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} kilometrowi kwadratowemu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} kilometrom kwadratowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} kilometrów kwadratowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} kilometra kwadratowego
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} kilometrów kwadratowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} kilometrami kwadratowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} kilometrem kwadratowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} kilometrami kwadratowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} kilometrach kwadratowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} kilometrze kwadratowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} kilometrach kwadratowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} kilometry kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilometr kwadratowy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilometry kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} kilometry kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} kilometrze kwadratowy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} kilometry kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} mili kwadratowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} milę kwadratową
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} mile kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} milom kwadratowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} mili kwadratowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} milom kwadratowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} mil kwadratowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} mili kwadratowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} mil kwadratowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} milami kwadratowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} milą kwadratową
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} milami kwadratowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} milach kwadratowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} mili kwadratowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} milach kwadratowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} mili kwadratowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mila kwadratowa
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mile kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} mile kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} milo kwadratowa
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} mile kwadratowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} procenty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} procent
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} procenty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} procentom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} procentowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} procentom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} procentów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} procentu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} procentów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} procentami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} procentem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} procentami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} procentach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} procencie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} procentach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} procenty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} procent
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} procenty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} procenty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} procencie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} procenty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} litry na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} litr na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} litry na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} litrom na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} litrowi na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} litrom na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} litrów na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} litra na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} litrów na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} litrami na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} litrem na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} litrami na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} litrach na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} litrze na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} litrach na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} litry na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} litr na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} litry na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} litry na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} litrze na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} litry na 100 kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} mili na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} milę na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} mile na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} milom na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} mili na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} milom na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} mil na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} mili na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} mil na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} milami na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} milą na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} milami na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} milach na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} mili na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} milach na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} mili na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mila na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mile na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} mile na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} milo na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} mile na galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} mili na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} milę na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} mile na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} milom na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} mili na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} milom na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} mil na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} mili na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} mil na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} milami na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} milą na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} milami na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} milach na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} mili na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} milach na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} mili na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mila na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mile na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} mile na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} milo na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} mile na galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} doby
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} dobę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} doby
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} dobom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} dobie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} dobom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} dób
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} doby
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} dób
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} dobami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} dobą
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} dobami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} dobach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} dobie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} dobach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} doby
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} doba
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} doby
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} doby
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} dobo
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} doby
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} godziny
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} godziny
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} godzinom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} godzinie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} godzinom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} godzin
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} godziny
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} godzin
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} godzinami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} godziną
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} godzinami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} godzinach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} godzinie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} godzinach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} godziny
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} godzina
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} godziny
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} godziny
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} godzino
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} godziny
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} minuty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} minutę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} minuty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} minutom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} minucie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} minutom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} minut
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} minuty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} minut
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} minutami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} minutą
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} minutami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} minutach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} minucie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} minutach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} minuty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} minuta
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} minuty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} minuty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} minuto
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} minuty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} miesiące
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} miesiąc
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} miesiące
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} miesiącom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} miesiącowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} miesiącom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} miesięcy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} miesiąca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} miesięcy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} miesiącami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} miesiącem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} miesiącami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} miesiącach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} miesiącu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} miesiącach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} miesiące
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} miesiąc
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miesiące
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} miesiące
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} miesiącu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} miesiące
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} sekundy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} sekundy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} sekundom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} sekundzie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} sekundom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} sekund
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} sekundy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} sekund
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} sekundami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} sekundą
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} sekundami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} sekundach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} sekundzie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} sekundach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} sekundy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} sekunda
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} sekundy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} sekundy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} sekundo
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} sekundy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} tygodnie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} tydzień
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} tygodnie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} tygodniom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} tygodniowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} tygodniom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} tygodni
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} tygodnia
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} tygodni
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} tygodniami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} tygodniem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} tygodniami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} tygodniach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} tygodniu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} tygodniach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} tygodnie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} tydzień
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} tygodnie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} tygodnie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} tygodniu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} tygodnie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} rok kalendarzowy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} lata kalendarzowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} latom kalendarzowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} rokowi kalendarzowemu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} latom kalendarzowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} lat kalendarzowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} roku kalendarzowego
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} lat kalendarzowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} latami kalendarzowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} rokiem kalendarzowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} latami kalendarzowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} latach kalendarzowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} roku kalendarzowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} latach kalendarzowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} rok kalendarzowy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} lata kalendarzowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} lata kalendarzowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} roku kalendarzowy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} lata kalendarzowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} kalorii
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} kalorię
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} kalorie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} kaloriom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} kalorii
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} kaloriom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} kalorii
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} kalorii
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} kalorii
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} kaloriami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} kalorią
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} kaloriami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} kaloriach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} kalorii
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} kaloriach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} kalorii
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kaloria
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kalorie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} kalorie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} kalorio
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} kalorie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} kilokalorii
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} kilokalorię
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} kilokalorie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} kilokaloriom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} kilokalorii
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} kilokaloriom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} kilokalorii
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} kilokalorii
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} kilokalorii
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} kilokaloriami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} kilokalorią
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} kilokaloriami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} kilokaloriach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} kilokalorii
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} kilokaloriach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} kilokalorii
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilokaloria
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilokalorie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} kilokalorie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} kilokalorio
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} kilokalorie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} centymetry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} centymetr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} centymetry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} centymetrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} centymetrowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} centymetrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} centymetrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} centymetra
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} centymetrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} centymetrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} centymetrem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} centymetrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} centymetrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} centymetrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} centymetrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} centymetry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centymetr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centymetry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} centymetry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} centymetrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} centymetry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} stopy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} stopę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} stopy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} stopom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} stopie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} stopom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} stóp
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} stopy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} stóp
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} stopami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} stopą
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} stopami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} stopach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} stopie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} stopach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} stopy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} stopa
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} stopy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} stopy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} stopo
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} stopy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} cale
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} cal
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} cale
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} calom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} calowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} calom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} calów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} cala
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} calów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} calami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} calem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} calami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} calach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} calu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} calach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} cale
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cal
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cale
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} cale
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} calu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} cale
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} kilometry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} kilometr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} kilometry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} kilometrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} kilometrowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} kilometrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} kilometra
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} kilometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} kilometrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} kilomentrem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} kilometrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} kilometrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} kilometrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} kilometrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} kilometry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilometr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilometry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} kilometry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} kilometrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} kilometry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} metry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} metr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} metry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} metrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} metrowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} metrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} metrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} metra
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} metrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} metrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} metrem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} metrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} metrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} metrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} metrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} metry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} metr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} metry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} metry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} metrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} metry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} mili międzynarodowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} milę międzynarodową
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} mile międzynarodowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} milom międzynarodowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} mili międzynarodowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} milom międzynarodowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} mil międzynarodowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} mili międzynarodowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} mil międzynarodowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} milami międzynarodowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} milą międzynarodową
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} milami międzynarodowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} milach międzynarodowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} mili międzynarodowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} milach międzynarodowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} mili międzynarodowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mila międzynarodowa
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mile międzynarodowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} mile międzynarodowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} milo międzynarodowa
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} mile międzynarodowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} milimetry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} milimetr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} milimetry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} milimetrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} milimetrowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} milimetrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} milimetrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} milimetra
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} milimetrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} milimetrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} milimentrem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} milimetrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} milimetrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} milimetrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} milimetrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} milimetry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milimetr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milimetry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} milimetry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} milimetrrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} milimetry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} parseki
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} parsek
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} parseki
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} parsekom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} parsekowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} parsekom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} parseków
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} parseka
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} parseków
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} parsekami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} parsekiem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} parsekami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} parsekach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} parseku
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} parsekach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} parseki
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} parsek
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} parseki
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} parseki
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} parseku
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} parseki
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} pikometry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} pikometr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} pikometry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} pikometrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} pikometrowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} pikometrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} pikometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} pikometra
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} pikometrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} pikometrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} pikometrem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} pikometrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} pikometrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} pikometrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} pikometrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} pikometry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pikometr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pikometry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} pikometry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} pikometrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} pikometry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} promienie Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} promień Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} promienie Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} promieniom Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} promieniowi Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} promieniom Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} promieni Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} promienia Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} promieni Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} promieniami Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} promieniem Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} promieniami Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} promieniach Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} promieniu Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} promieniach Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} promienie Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} promień Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} promienie Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} promienie Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} promieniu Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} promienie Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} jardzie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} jard
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} jardy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} jardom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} jardowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} jardom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} jardów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} jardu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} jardów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} jardami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} jardem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} jardami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} jardach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} jardzie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} jardach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} jardzie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} jard
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jardy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} jardzie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} jardzie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} jardzie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} jasności Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} jasność Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} jasności Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} jasnościom Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} jasności Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} jasnościom Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} jasności Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} jasności Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} jasności Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} jasnościami Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} jasnością Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} jasnościami Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} jasnościach Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} jasności Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} jasnościach Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} jasności Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} jasność Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jasności Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} jasności Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} jasności Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} jasności Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} jednostki masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} jednostkę masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} jednostki masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} jednostkom masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} jednostce masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} jednostkom masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} jednostek masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} jednostki masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} jednostek masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} jednostkami masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} jednostką masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} jednostkami masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} jednostkach masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} jednostce masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} jednostkach masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} jednostki masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} jednostka masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jednostki masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} jednostki masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} jednostko masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} jednostki masy atomowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} masy Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} masę Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} masy Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} masom Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} masie Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} masom Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} mas Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} masy Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} mas Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} masami Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} masą Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} masami Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} masach Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} masie Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} masach Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} masy Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} masa Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} masy Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} masy Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} maso Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} masy Ziemi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} grany
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} gran
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} grany
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} granom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} granowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} granom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} granów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} grana
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} granów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} granami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} granem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} granami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} granach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} granie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} granach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} grany
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gran
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grany
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} grany
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} granie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} grany
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} gramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} gram
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} gramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} gramom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} gramowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} gramom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} gramów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} grama
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} gramów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} gramami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} gramem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} gramami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} gramach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} gramie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} gramach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} gramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gram
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} gramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} gramie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} gramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} kilogramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} kilogram
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} kilogramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} kilogramom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} kilogramowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} kilogramom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} kilogramów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} kilograma
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} kilogramów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} kilogramami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} kilogramem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} kilogramami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} kilogramach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} kilogramie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} kilogramach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} kilogramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilogram
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilogramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} kilogramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} kilogramie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} kilogramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} miligramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} miligram
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} miligramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} miligramom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} miligramowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} miligramom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} miligramów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} miligrama
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} miligramów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} miligramami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} miligramem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} miligramami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} miligramach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} miligramie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} miligramach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} miligramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} miligram
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miligramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} miligramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} miligramie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} miligramy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} uncji
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} uncję
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} uncje
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} uncjom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} uncji
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} uncjom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} uncji
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} uncji
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} uncji
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} uncjami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} uncją
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} uncjami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} uncjach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} uncji
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} uncjach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} uncji
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} uncja
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} uncje
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} uncje
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} uncjo
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} uncje
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} funty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} funt
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} funty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} funtom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} funtowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} funtom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} funtów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} funta
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} funtów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} funtami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} funtem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} funtami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} funtach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} funcie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} funtach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} funty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} funt
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} funty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} funty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} funcie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} funty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} masy Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} masę Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} masy Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} masom Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} masie Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} masom Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} mas Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} masy Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} mas Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} masami Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} masą Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} masami Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} masach Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} masie Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} masach Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} masy Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} masa Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} masy Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} masy Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} maso Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} masy Słońca
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} kilopaskale
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} kilopaskal
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} kilopaskale
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} kilopaskalom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} kilopaskalowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} kilopaskalom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} kilopaskali
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} kilopaskala
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} kilopaskali
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} kilopaskalami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} kilopaskalem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} kilopaskalami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} kilopaskalach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} kilopaskalu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} kilopaskalach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} kilopaskale
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilopaskal
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilopaskale
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} kilopaskale
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} kilopaskalu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} kilopaskale
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} kilometry na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} kilometr na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} kilometry na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} kilometrom na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} kilometrowi na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} kilometrom na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} kilometrów na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} kilometra na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} kilometrów na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} kilometrami na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} kilometrem na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} kilometrami na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} kilometrach na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} kilometrze na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} kilometrach na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} kilometry na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilometr na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilometry na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} kilometry na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} kilometrze na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} kilometry na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} metry na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} metr na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} metry na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} metrom na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} metrowi na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} metrom na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} metrów na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} metra na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} metrów na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} metrami na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} metrem na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} metrami na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} metrach na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} metrze na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} metrach na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} metry na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} metr na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} metry na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} metry na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} metrze na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} metry na sekundę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} mili na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} milę na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} mile na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} milom na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} mili na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} milom na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} mil na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} mili na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} mil na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} milami na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} milą na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} milami na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} milach na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} mili na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} milach na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} mili na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mila na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mile na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} mile na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} milo na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} mile na godzinę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} stopnie Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} stopień Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} stopnie Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} stopniom Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} stopniowi Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} stopniom Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} stopni Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} stopnia Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} stopni Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} stopniami Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} stopniem Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} stopniami Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} stopniach Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} stopniu Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} stopniach Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} stopnie Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} stopień Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} stopnie Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} stopnie Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} stopniu Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} stopnie Celsjusza
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} stopnie Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} stopień Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} stopnie Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} stopniom Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} stopniowi Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} stopniom Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} stopni Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} stopnia Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} stopni Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} stopniami Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} stopniem Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} stopniami Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} stopniach Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} stopniu Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} stopniach Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} stopnie Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} stopień Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} stopnie Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} stopnie Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} stopniu Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} stopnie Fahrenheita
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} stopnie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} stopień
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} stopnie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} stopniom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} stopniowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} stopniom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} stopni
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} stopnia
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} stopni
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} stopniami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} stopniem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} stopniami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} stopniach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} stopniu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} stopniach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} stopnie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} stopień
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} stopnie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} stopnie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} stopniu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} stopnie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} kelwiny
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} kelwin
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} kelwiny
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} kelwinom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} kelwinowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} kelwinom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} kelwinów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} kelwina
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} kelwinów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} kelwinami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} kelwinem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} kelwinami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} kelwinach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} kelwinie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} kelwinach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} kelwiny
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kelwin
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kelwiny
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} kelwiny
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} kelwinie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} kelwiny
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} centylitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} centylitr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} centylitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} centylitrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} centylitrowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} centylitrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} centylitrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} centylitra
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} centylitrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} centylitrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} centylitrem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} centylitrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} centylitrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} centylitrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} centylitrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} centylitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centylitr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centylitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} centylitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} centylitrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} centylitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} centymetry sześcienne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} centymetr sześcienny
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} centymetry sześcienne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} centymetrom sześciennym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} centymetrowi sześciennemu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} centymetrom sześciennym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} centymetrów sześciennych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} centymetra sześciennego
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} centymetrów sześciennych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} centymetrami sześciennymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} centymetrem sześciennym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} centymetrami sześciennymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} centymetrach sześciennych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} centymetrze sześciennym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} centymetrach sześciennych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} centymetry sześcienne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centymetr sześcienny
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centymetry sześcienne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} centymetry sześcienne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} centymetrze sześcienny
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} centymetry sześcienne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} stopy sześciennej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} stopę sześcienną
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} stopy sześcienne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} stopom sześciennym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} stopie sześciennej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} stopom sześciennym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} stóp sześciennych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} stopy sześciennej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} stóp sześciennych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} stopami sześciennymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} stopą sześcienną
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} stopami sześciennymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} stopach sześciennych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} stopie sześciennej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} stopach sześciennych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} stopy sześciennej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} stopa sześcienna
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} stopy sześcienne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} stopy sześcienne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} stopo sześcienna
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} stopy sześcienne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} mili sześciennej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} milę sześcienną
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} mile sześcienne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} milom sześciennym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} mili sześciennej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} milom sześciennym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} mil sześciennych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} mili sześciennej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} mil sześciennych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} milami sześciennymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} milą sześcienną
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} milami sześciennymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} milach sześciennych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} mili sześciennej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} milach sześciennych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} mili sześciennej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mila sześcienna
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mile sześcienne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} mile sześcienne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} milo sześcienna
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} mile sześcienne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} amerykańskiej szklanki
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} amerykańską szklankę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} amerykańskie szklanki
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} amerykańskim szklankom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} amerykańskiej szklance
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} amerykańskim szklankom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} amerykańskich szklanek
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} amerykańskiej szklanki
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} amerykańskich szklanek
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} amerykańskimi szklankami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} amerykańską szklanką
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} amerykańskimi szklankami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} amerykańskich szklankach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} amerykańskiej szklance
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} amerykańskich szklankach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} amerykańskiej szklanki
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerykańska szklanka
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerykańskie szklanki
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} amerykańskie szklanki
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} amerykańska szklanko
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} amerykańskie szklanki
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} decylitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} decylitr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} decylitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} decylitrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} decylitrowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} decylitrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} decylitrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} decylitra
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} decylitrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} decylitrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} decylitrem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} decylitrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} decylitrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} decylitrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} decylitrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} decylitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} decylitr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} decylitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} decylitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} decylitrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} decylitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} imperialnej łyżeczki deserowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} imperialną łyżeczkę deserową
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} imperialne łyżeczki deserowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} imperialnym łyżeczkom deserowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} imperialnej łyżeczkce deserowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} imperialnym łyżeczkom deserowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} imperialnych łyżeczek deserowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} imperialnej łyżeczki deserowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} imperialnych łyżeczek deserowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} imperialnymi łyżeczkami deserowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} imperialną łyżeczką deserową
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} imperialnymi łyżeczkami deserowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} imperialnych łyżeczkach deserowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} imperialnej łyżeczce deserowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} imperialnych łyżeczkach deserowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} imperialnej łyżeczki deserowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} imperialna łyżeczka deserowa
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} imperialne łyżeczki deserowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} imperialne łyżeczki deserowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} imperialna łyżeczko deserowa
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} imperialne łyżeczki deserowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} łyżki deserowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} łyżkę deserową
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} łyżki deserowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} łyżkom deserowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} łyżce deserowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} łyżkom deserowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} łyżek deserowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} łyżki deserowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} łyżek deserowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} łyżkami deserowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} łyżką deserową
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} łyżkami deserowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} łyżkach deserowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} łyżce deserowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} łyżkach deserowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} łyżki deserowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} łyżka deserowa
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} łyżki deserowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} łyżki deserowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} łyżko deserowa
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} łyżki deserowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} drachmy płynnej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} drachmę płynną
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} drachmy płynne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} drachmom płynnym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} drachmie płynnej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} drachmom płynnym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} drachm płynnych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} drachmy płynnej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} drachm płynnych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} drachmami płynnymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} drachmą płynną
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} drachmami płynnymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} drachmach płynnych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} drachmie płynnej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} drachmach płynnych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} drachmy płynnej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} drachma płynna
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} drachmy płynne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} drachmy płynne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} drachmo płynna
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} drachmy płynne
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} kropli
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} kroplę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} krople
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} kroplom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} kropli
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} kroplom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} kropel
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} kropli
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} kropel
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} kroplami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} kroplą
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} kroplami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} kroplach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} kropli
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} kroplach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} kropli
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kropla
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} krople
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} krople
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} kroplo
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} krople
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} brytyjskiej uncji cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} brytyjską uncję cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} brytyjskie uncje cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} brytyjskim uncjom cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} brytyjskej uncji cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} brytyjskim uncjom cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} brytyjskich uncji cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} brytyjskiej uncji cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} brytyjskich uncji cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} brytyjskimi uncjami cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} brytyjską uncją cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} brytyjskimi uncjami cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} brytyjskicj uncjach cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} brytyjskiej uncji cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} brytyjskicj uncjach cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} brytyjskiej uncji cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} brytyjska uncja cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} brytyjskie uncje cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} brytyjskie uncje cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} brytyjska uncjo cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} brytyjskie uncje cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} amerykańskiej uncji cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} amerykańską uncję cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} amerykańskie uncje cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} amerykańskim uncjom cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} amerykańskiej uncji cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} amerykańskim uncjom cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} amerykańskich uncji cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} amerykańskiej uncji cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} amerykańskich uncji cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} amerykańskimi uncjami cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} amerykańską uncją cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} amerykańskimi uncjami cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} amerykańskich uncjach cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} amerykańskiej uncji cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} amerykańskich uncjach cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} amerykańskiej uncji cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerykańska uncja cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerykańskie uncje cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} amerykańskie uncje cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} amerykańska uncjo cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} amerykańskie uncje cieczy
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} angielskie galony
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} angielski galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} angielskie galony
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} angielskim galonom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} angielskiemu galonowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} angielskim galonom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} angielskich galonów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} angielskiego galonu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} angielskich galonów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} angielskimi galonami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} angielskim galonem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} angielskimi galonami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} angielskich galonach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} angielskim galonie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} angielskich galonach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} angielskie galony
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} angielski galon
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} angielskie galony
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} angielskie galony
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} angielski galonie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} angielskie galony
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} galony amerykańskie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} galony amerykańskie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} galonom amerykańskim
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} galonowi amerykańskiemu
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} galonom amerykańskim
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} galonów amerykańskich
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} galona amerykańskiego
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} galonów amerykańskich
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} galonami amerykańskimi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} galonem amerykańskim
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} galonami amerykańskimi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} galonach amerykańskich
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} galonie amerykańskim
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} galonach amerykańskich
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} galony amerykańskie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} galon amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} galony amerykańskie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} galony amerykańskie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} galonie amerykański
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} galony amerykańskie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} jiggery
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} jigger
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} jiggery
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} jiggerom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} jiggerowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} jiggerom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} jiggerów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} jiggera
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} jiggerów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} jiggerami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} jiggerem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} jiggerami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} jiggerach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} jiggerze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} jiggerach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} jiggery
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} jigger
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jiggery
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} jiggery
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} jiggerze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} jiggery
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} litry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} litr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} litry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} litrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} litrowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} litrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} litrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} litra
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} litrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} litrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} litrem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} litrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} litrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} litrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} litrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} litry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} litr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} litry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} litry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} litrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} litry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} mililitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} mililitr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} mililitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} mililitrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} mililitrowi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} mililitrom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} mililitrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} mililitra
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} mililitrów
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} mililitrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} mililitrem
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} mililitrami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} mililitrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} mililitrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} mililitrach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} mililitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mililitr
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mililitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} mililitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} mililitrze
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} mililitry
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} szczypty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} szczyptę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} szczypty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} szczyptom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} szczypcie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} szczyptom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} szczypt
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} szczypty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} szczypt
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} szczyptami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} szczyptą
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} szczyptami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} szczyptach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} szczypcie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} szczyptach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} szczypty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} szczypta
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} szczypty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} szczypty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} szczypto
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} szczypty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} amerykańskiej pinty mokrej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} amerykańską pintę mokrą
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} amerykańskie pinty mokre
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} amerykańskim pintom mokrym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} amerykańskiej pincie mokrej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} amerykańskim pintom mokrym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} amerykańskich pint mokrych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} amerykańskiej pinty mokrej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} amerykańskich pint mokrych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} amerykańskimi pintami mokrymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} amerykańską pintą mokrą
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} amerykańskimi pintami mokrymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} amerykańskich pintach mokrych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} amerykańskiej pincie mokrej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} amerykańskich pintach mokrych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} amerykańskiej pinty mokrej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerykańska pinta mokra
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerykańskie pinty mokre
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} amerykańskie pinty mokre
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} amerykańska pinto mokra
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} amerykańskie pinty mokre
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} brytyjskiej kwarty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} brytyjską kwartę
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} brytyjskie kwarty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} brytyjskim kwartom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} brytyjskiej kwarcie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} brytyjskim kwartom
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} brytyjskich kwart
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} brytyjskiej kwarty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} brytyjskich kwart
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} brytyjskimi kwartami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} brytyjską kwartą
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} brytyjskimi kwartami
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} brytyjskich kwartach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} brytyjskiej kwarcie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} brytyjskich kwartach
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} brytyjskiej kwarty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} brytyjska kwarta
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} brytyjskie kwarty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} brytyjskie kwarty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} brytyjska kwarto
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} brytyjskie kwarty
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} kwarty amerykańskiej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} kwartę amerykańską
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} kwarty amerykańskie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} kwartom amerykańskim
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} kwarcie amerykańskiej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} kwartom amerykańskim
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} kwart amerykańskich
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} kwarty amerykańskiej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} kwart amerykańskich
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} kwartami amerykańskimi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} kwartą amerykańską
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} kwartami amerykańskimi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} kwartach amerykańskich
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} kwarcie amerykańskiej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} kwartach amerykańskich
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} kwarty amerykańskiej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kwarta amerykańska
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kwarty amerykańskie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} kwarty amerykańskie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} kwarto amerykańska
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} kwarty amerykańskie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} amerykańskiej łyżki stołowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} amerykańską łyżkę stołową
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} amerykańskie łyżki stołowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} amerykańskim łyżkom stołowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} amerykańskiej łyżce stołowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} amerykańskim łyżkom stołowym
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} amerykańskich łyżek stołowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} amerykańskiej łyżki stołowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} amerykańskich łyżek stołowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} amerykańskimi łyżkami stołowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} amerykańską łyżką stołową
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} amerykańskimi łyżkami stołowymi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} amerykańskich łyżkach stołowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} amerykańskiej łyżce stołowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} amerykańskich łyżkach stołowych
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} amerykańskiej łyżki stołowej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerykańska łyżka stołowa
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerykańskie łyżki stołowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} amerykańskie łyżki stołowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} amerykańska łyżko stołowa
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} amerykańskie łyżki stołowe
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} łyżeczki amerykańskiej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} łyżeczkę amerykańską
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} łyżeczki amerykańskie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} łyżeczkom amerykańskim
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} łyżeczkce amerykańskiej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} łyżeczkom amerykańskim
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} lyżeczek amerykańskich
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} łyżeczki amerykańskiej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} lyżeczek amerykańskich
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} łyżeczkami amerykańskimi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} łyżeczką amerykańską
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} łyżeczkami amerykańskimi
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} łyżeczkach amerykańskich
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} łyżeczce amerykańskiej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} łyżeczkach amerykańskich
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} łyżeczki amerykańskiej
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} łyżeczka amerykańska
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} łyżeczki amerykańskie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} łyżeczki amerykańskie
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} łyżeczko amerykańska
+locale=pl; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} łyżeczki amerykańskie
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} força gravítica
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} força gravítica
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} metro por segundo ao quadrado
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} metros por segundo ao quadrado
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} acre
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} acres
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} hectare
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} hectares
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centímetro quadrado
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centímetros quadrados
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pé quadrado
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pés quadrados
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} quilómetro quadrado
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} quilómetros quadrados
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milha quadrada
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} millhas quadradas
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} por cento
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} por cento
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} litro por 100 quilómetros
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} litros por 100 quilómetros
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} litro por quilómetro
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} litros por quilómetro
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milha por galão
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milhas por galão
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milha por galão americano
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milhas por galão americano
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dia
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dias
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} hora
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} horas
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} minuto
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} minutos
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mês
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meses
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} segundo
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} segundos
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} semana
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} semanas
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} ano
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} anos
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} caloria
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} calorias
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} quilocaloria
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} quilocalorias
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centímetro
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centímetros
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pé
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pés
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} polegada
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} polegadas
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} quilómetro
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} quilómetros
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} metro
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} metros
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milha
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milhas
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milímetro
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milímetros
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} parsec
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} parsecs
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} picómetro
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} picómetros
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} raio solar
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} raio solar
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} jarda
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jardas
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} luminosidade solar
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} luminosidade solar
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dalton
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} daltons
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} massa da Terra
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} massa da Terra
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grão
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grãos
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grama
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gramas
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} quilograma
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} quilogramas
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} miligrama
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miligramas
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} onça
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} onças
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} libra
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} libras
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} massa solar
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} massa solar
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} quilopascal
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} quilopascais
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} quilómetro por hora
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} quilómetros por hora
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} metro por segundo
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} metros por segundo
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milha por hora
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milhas por hora
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grau Celsius
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} graus Celsius
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grau Fahrenheit
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} graus Fahrenheit
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grau
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} graus
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kelvin
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kelvins
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centilitro
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centilitros
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centímetro cúbico
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centímetros cúbicos
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pé cúbico
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pés cúbicos
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milha cúbica
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milhas cúbicas
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} chávena
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} chávenas
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} decilitro
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} decilitros
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} colher de sobremesa
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} colheres de sobremesa
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} colher de sobremesa
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} colheres de sobremesa
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dracma líquido
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dracmas líquidos
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gota
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gotas
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} onça líquida
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} onças líquidas
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} onça líquida americana
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} onças líquidas americanas
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} galão
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} galões
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} galão americano
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} galões americanos
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} jigger
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jiggers
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} litro
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} litros
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mililitro
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mililitros
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pitada
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pitadas
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} quartilho líquido americano
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} quartilhos líquidos americanos
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} quarto
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} quartos
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} quarto líquido
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} quartos líquidos
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} colher de sopa
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} colheres de sopa
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} colher de chá
+locale=pt; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} colheres de chá
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} g
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} метра на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} метр на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} метры на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} метрам на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} метру на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} метрам на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} метров на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} метра на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} метров на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} метрами на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} метром на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} метрами на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} метрах на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} метре на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} метрах на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} метра на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} метр на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} метры на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} метрах на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} метре на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} метрах на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} метры на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} метр на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} метры на секунду в квадрате
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} акра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} акр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} акры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} акрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} акру
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} акрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} акров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} акра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} акров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} акрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} акром
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} акрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} акрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} акре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} акрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} акра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} акр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} акры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} акрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} акре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} акрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} акры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} акр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} акры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} гектара
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} гектар
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} гектары
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} гектарам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} гектару
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} гектарам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} гектаров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} гектара
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} гектаров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} гектарами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} гектаром
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} гектарами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} гектарах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} гектаре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} гектарах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} гектара
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} гектар
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} гектары
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} гектарах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} гектаре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} гектарах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} гектары
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} гектар
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} гектары
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} квадратного сантиметра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} квадратный сантиметр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} квадратные сантиметры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} квадратным сантиметрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} квадратному сантиметру
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} квадратным сантиметрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} квадратных сантиметров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} квадратного сантиметра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} квадратных сантиметров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} квадратными сантиметрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} квадратным сантиметром
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} квадратными сантиметрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} квадратных сантиметрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} квадратном сантиметре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} квадратных сантиметрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} квадратного сантиметра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} квадратный сантиметр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} квадратные сантиметры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} квадратных сантиметрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} квадратном сантиметре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} квадратных сантиметрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} квадратные сантиметры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} квадратный сантиметр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} квадратные сантиметры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} квадратного фута
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} квадратный фут
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} квадратные футы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} квадратным футам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} квадратному футу
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} квадратным футам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} квадратных футов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} квадратного фута
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} квадратных футов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} квадратными футами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} квадратным футом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} квадратными футами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} квадратных футах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} квадратном футе
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} квадратных футах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} квадратного фута
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} квадратный фут
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} квадратные футы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} квадратных футах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} квадратном футе
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} квадратных футах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} квадратные футы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} квадратный фут
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} квадратные футы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} квадратного километра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} квадратный километр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} квадратные километры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} квадратным километрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} квадратному километру
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} квадратным километрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} квадратных километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} квадратного километра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} квадратных километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} квадратными километрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} квадратным километром
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} квадратными километрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} квадратных километрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} квадратном километре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} квадратных километрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} квадратного километра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} квадратный километр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} квадратные километры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} квадратных километрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} квадратном километре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} квадратных километрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} квадратные километры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} квадратный километр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} квадратные километры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} квадратной мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} квадратную милю
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} квадратные мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} квадратным милям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} квадратной миле
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} квадратным милям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} квадратных миль
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} квадратной мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} квадратных миль
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} квадратными милями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} квадратной милей
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} квадратными милями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} квадратных милях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} квадратной миле
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} квадратных милях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} квадратной мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} квадратная миля
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} квадратные мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} квадратных милях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} квадратной миле
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} квадратных милях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} квадратные мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} квадратная миля
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} квадратные мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} процента
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} процент
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} проценты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} процентам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} проценту
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} процентам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} процентов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} процента
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} процентов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} процентами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} процентом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} процентами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} процентах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} проценте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} процентах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} процента
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} процент
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} проценты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} процентах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} проценте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} процентах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} проценты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} процент
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} проценты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} литра на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} литр на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} литры на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} литрам на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} литру на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} литрам на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} литров на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} литра на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} литров на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} литрами на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} литром на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} литрами на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} литрах на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} литре на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} литрах на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} литра на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} литр на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} литры на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} литрах на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} литре на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} литрах на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} литры на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} литр на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} литры на 100 километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} мили на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} милю на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} мили на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} милям на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} миле на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} милям на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} миль на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} мили на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} миль на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} милями на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} милей на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} милями на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} милях на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} миле на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} милях на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} мили на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} миля на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} мили на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} милях на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} миле на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} милях на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} мили на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} миля на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} мили на галлон (Великобритания)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} мили на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} милю на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} мили на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} милям на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} миле на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} милям на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} миль на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} мили на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} миль на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} милями на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} милей на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} милями на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} милях на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} миле на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} милях на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} мили на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} миля на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} мили на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} милях на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} миле на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} милях на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} мили на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} миля на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} мили на галлон (США)
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} гигабита
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} гигабит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} гигабиты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} гигабитам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} гигабиту
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} гигабитам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} гигабит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} гигабита
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} гигабит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} гигабитами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} гигабитом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} гигабитами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} гигабитах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} гигабите
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} гигабитах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} гигабита
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} гигабит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} гигабиты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} гигабитах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} гигабите
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} гигабитах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} гигабиты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} гигабит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabit"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} гигабиты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} гигабайта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} гигабайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} гигабайты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} гигабайтам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} гигабайту
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} гигабайтам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} гигабайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} гигабайта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} гигабайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} гигабайтами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} гигабайтом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} гигабайтами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} гигабайтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} гигабайте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} гигабайтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} гигабайта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} гигабайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} гигабайты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} гигабайтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} гигабайте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} гигабайтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} гигабайты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} гигабайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-gigabyte"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} гигабайты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} килобита
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} килобит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} килобиты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} килобитам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} килобиту
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} килобитам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} килобит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} килобита
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} килобит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} килобитами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} килобитом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} килобитами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} килобитах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} килобите
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} килобитах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} килобита
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} килобит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} килобиты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} килобитах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} килобите
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} килобитах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} килобиты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} килобит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobit"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} килобиты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} килобайта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} килобайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} килобайты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} килобайтам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} килобайту
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} килобайтам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} килобайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} килобайта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} килобайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} килобайтами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} килобайтом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} килобайтами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} килобайтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} килобайте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} килобайтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} килобайта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} килобайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} килобайты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} килобайтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} килобайте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} килобайтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} килобайты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} килобайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-kilobyte"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} килобайты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} мегабита
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} мегабит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} мегабиты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} мегабитам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} мегабиту
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} мегабитам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} мегабит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} мегабита
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} мегабит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} мегабитами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} мегабитом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} мегабитами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} мегабитах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} мегабите
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} мегабитах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} мегабита
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} мегабит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} мегабиты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} мегабитах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} мегабите
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} мегабитах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} мегабиты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} мегабит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabit"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} мегабиты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} мегабайта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} мегабайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} мегабайты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} мегабайтам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} мегабайту
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} мегабайтам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} мегабайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} мегабайта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} мегабайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} мегабайтами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} мегабайтом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} мегабайтами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} мегабайтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} мегабайте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} мегабайтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} мегабайта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} мегабайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} мегабайты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} мегабайтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} мегабайте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} мегабайтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} мегабайты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} мегабайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-megabyte"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} мегабайты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} терабита
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} терабит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} терабиты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} терабитам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} терабиту
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} терабитам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} терабит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} терабита
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} терабит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} терабитами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} терабитом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} терабитами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} терабитах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} терабите
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} терабитах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} терабита
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} терабит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} терабиты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} терабитах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} терабите
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} терабитах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} терабиты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} терабит
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabit"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} терабиты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} терабайта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} терабайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} терабайты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} терабайтам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} терабайту
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} терабайтам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} терабайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} терабайта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} терабайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} терабайтами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} терабайтом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} терабайтами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} терабайтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} терабайте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} терабайтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} терабайта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} терабайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} терабайты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} терабайтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} терабайте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} терабайтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} терабайты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} терабайт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="digital-terabyte"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} терабайты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} дня
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} день
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} дни
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} дням
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} дню
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} дням
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} дней
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} дня
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} дней
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} днями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} днём
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} днями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} днях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} дне
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} днях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} дня
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} день
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} дни
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} днях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} дне
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} днях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} дни
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} день
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} дни
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} часа
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} часы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} часам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} часу
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} часам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} часов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} часа
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} часов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} часами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} часом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} часами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} часах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} часе
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} часах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} часа
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} часы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} часах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} часе
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} часах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} часы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} часы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} минуты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} минуту
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} минуты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} минутам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} минуте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} минутам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} минут
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} минуты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} минут
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} минутами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} минутой
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} минутами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} минутах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} минуте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} минутах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} минуты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} минута
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} минуты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} минутах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} минуте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} минутах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} минуты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} минута
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} минуты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} месяца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} месяц
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} месяцы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} месяцам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} месяцу
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} месяцам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} месяцев
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} месяца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} месяцев
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} месяцами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} месяцем
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} месяцами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} месяцах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} месяце
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} месяцах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} месяца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} месяц
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} месяцы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} месяцах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} месяце
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} месяцах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} месяцы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} месяц
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} месяцы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} секунды
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} секунды
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} секундам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} секунде
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} секундам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} секунд
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} секунды
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} секунд
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} секундами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} секундой
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} секундами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} секундах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} секунде
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} секундах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} секунды
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} секунда
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} секунды
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} секундах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} секунде
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} секундах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} секунды
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} секунда
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} секунды
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} недели
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} неделю
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} недели
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} неделям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} неделе
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} неделям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} недель
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} недели
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} недель
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} неделями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} неделей
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} неделями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} неделях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} неделе
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} неделях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} недели
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} неделя
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} недели
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} неделях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} неделе
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} неделях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} недели
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} неделя
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} недели
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} года
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} год
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} годы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} годам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} году
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} годам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} лет
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} года
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} лет
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} годами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} годом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} годами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} годах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} годе
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} годах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} года
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} год
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} годы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} годах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} годе
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} годах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} годы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} год
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} годы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} калории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} калорию
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} калории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} калориям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} калории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} калориям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} калорий
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} калории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} калорий
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} калориями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} калорией
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} калориями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} калориях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} калории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} калориях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} калории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} калория
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} калории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} калориях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} калории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} калориях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} калории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} калория
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} калории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} килокалории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} килокалорию
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} килокалории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} килокалориям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} килокалории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} килокалориям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} килокалорий
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} килокалории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} килокалорий
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} килокалориями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} килокалорией
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} килокалориями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} килокалориях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} килокалории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} килокалориях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} килокалории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} килокалория
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} килокалории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} килокалориях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} килокалории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} килокалориях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} килокалории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} килокалория
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} килокалории
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} сантиметра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} сантиметр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} сантиметры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} сантиметрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} сантиметру
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} сантиметрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} сантиметров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} сантиметра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} сантиметров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} сантиметрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} сантиметром
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} сантиметрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} сантиметрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} сантиметре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} сантиметрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} сантиметра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} сантиметр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} сантиметры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} сантиметрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} сантиметре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} сантиметрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} сантиметры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} сантиметр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} сантиметры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} фута
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} фут
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} футы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} футам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} футу
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} футам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} футов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} фута
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} футов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} футами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} футом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} футами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} футах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} футе
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} футах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} фута
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} фут
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} футы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} футах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} футе
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} футах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} футы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} фут
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} футы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} дюйма
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} дюйм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} дюймы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} дюймам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} дюйму
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} дюймам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} дюймов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} дюйма
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} дюймов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} дюймами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} дюймом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} дюймами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} дюймах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} дюйме
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} дюймах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} дюйма
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} дюйм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} дюймы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} дюймах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} дюйме
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} дюймах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} дюймы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} дюйм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} дюймы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} километра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} километр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} километры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} километрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} километру
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} километрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} километра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} километров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} километрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} километром
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} километрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} километрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} километре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} километрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} километра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} километр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} километры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} километрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} километре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} километрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} километры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} километр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} километры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} метра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} метр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} метры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} метрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} метру
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} метрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} метров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} метра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} метров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} метрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} метром
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} метрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} метрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} метре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} метрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} метра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} метр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} метры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} метрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} метре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} метрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} метры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} метр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} метры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} милю
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} милям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} миле
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} милям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} миль
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} миль
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} милями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} милей
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} милями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} милях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} миле
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} милях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} миля
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} милях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} миле
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} милях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} миля
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} миллиметра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} миллиметр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} миллиметры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} миллиметрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} миллиметру
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} миллиметрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} миллиметров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} миллиметра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} миллиметров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} миллиметрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} миллиметром
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} миллиметрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} миллиметрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} миллиметре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} миллиметрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} миллиметра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} миллиметр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} миллиметры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} миллиметрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} миллиметре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} миллиметрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} миллиметры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} миллиметр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} миллиметры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} парсека
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} парсек
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} парсеки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} парсекам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} парсеку
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} парсекам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} парсеков
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} парсека
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} парсеков
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} парсеками
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} парсеком
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} парсеками
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} парсеках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} парсеке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} парсеках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} парсека
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} парсек
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} парсеки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} парсеках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} парсеке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} парсеках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} парсеки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} парсек
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} парсеки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} пикометра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} пикометр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} пикометры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} пикометрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} пикометру
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} пикометрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} пикометров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} пикометра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} пикометров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} пикометрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} пикометром
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} пикометрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} пикометрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} пикометре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} пикометрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} пикометра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} пикометр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} пикометры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} пикометрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} пикометре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} пикометрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} пикометры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} пикометр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} пикометры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} радиуса Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} радиус Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} радиусы Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} радиусам Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} радиусу Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} радиусам Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} радиусов Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} радиуса Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} радиусов Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} радиусами Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} радиусом Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} радиусами Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} радиусах Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} радиусе Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} радиусах Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} радиуса Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} радиус Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} радиусы Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} радиусах Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} радиусе Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} радиусах Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} радиусы Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} радиус Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} радиусы Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} ярда
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} ярд
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} ярды
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} ярдам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} ярду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} ярдам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} ярдов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} ярда
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} ярдов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} ярдами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} ярдом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} ярдами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} ярдах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} ярде
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} ярдах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} ярда
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} ярд
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ярды
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} ярдах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} ярде
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} ярдах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} ярды
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} ярд
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} ярды
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} солнечной светимости
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} солнечную светимость
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} солнечные светимости
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} солнечным светимостям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} солнечной светимости
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} солнечным светимостям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} солнечных светимостей
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} солнечной светимости
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} солнечных светимостей
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} солнечными светимостями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} солнечной светимостью
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} солнечными светимостями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} солнечных светимостях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} солнечной светимости
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} солнечных светимостях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} солнечной светимости
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} солнечная светимость
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} солнечные светимости
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} солнечных светимостях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} солнечной светимости
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} солнечных светимостях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} солнечные светимости
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} солнечная светимость
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} солнечные светимости
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} атомной единицы массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} атомную единицу массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} атомные единицы массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} атомным единицам массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} атомной единице массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} атомным единицам массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} атомных единиц массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} атомной единицы массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} атомных единиц массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} атомными единицами массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} атомной единицей массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} атомными единицами массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} атомных единицах массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} атомной единице массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} атомных единицах массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} атомной единицы массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} атомная единица массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} атомные единицы массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} атомных единицах массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} атомной единице массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} атомных единицах массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} атомные единицы массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} атомная единица массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} атомные единицы массы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} массы Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} массу Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} массы Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} массам Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} массе Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} массам Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} масс Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} массы Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} масс Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} массами Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} массой Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} массами Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} массах Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} массе Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} массах Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} массы Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} масса Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} массы Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} массах Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} массе Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} массах Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} массы Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} масса Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} массы Земли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} грана
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} гран
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} граны
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} гранам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} грану
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} гранам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} гранов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} грана
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} гранов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} гранами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} граном
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} гранами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} гранах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} гране
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} гранах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} грана
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} гран
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} граны
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} гранах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} гране
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} гранах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} граны
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} гран
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} граны
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} грамма
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} грамм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} граммы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} граммам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} грамму
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} граммам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} грамм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} грамма
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} грамм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} граммами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} граммом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} граммами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} граммах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} грамме
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} граммах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} грамма
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} грамм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} граммы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} граммах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} грамме
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} граммах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} граммы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} грамм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} граммы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} килограмма
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} килограмм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} килограммы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} килограммам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} килограмму
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} килограммам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} килограмм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} килограмма
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} килограмм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} килограммами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} килограммом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} килограммами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} килограммах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} килограмме
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} килограммах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} килограмма
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} килограмм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} килограммы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} килограммах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} килограмме
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} килограммах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} килограммы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} килограмм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} килограммы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} миллиграмма
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} миллиграмм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} миллиграммы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} миллиграммам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} миллиграмму
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} миллиграммам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} миллиграмм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} миллиграмма
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} миллиграмм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} миллиграммами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} миллиграммом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} миллиграммами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} миллиграммах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} миллиграмме
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} миллиграммах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} миллиграмма
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} миллиграмм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} миллиграммы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} миллиграммах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} миллиграмме
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} миллиграммах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} миллиграммы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} миллиграмм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} миллиграммы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} унцию
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} унциям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} унциям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} унций
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} унций
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} унциями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} унцией
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} унциями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} унциях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} унциях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} унция
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} унциях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} унциях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} унция
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} фунта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} фунт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} фунты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} фунтам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} фунту
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} фунтам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} фунтов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} фунта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} фунтов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} фунтами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} фунтом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} фунтами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} фунтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} фунте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} фунтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} фунта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} фунт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} фунты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} фунтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} фунте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} фунтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} фунты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} фунт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} фунты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} массы Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} массу Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} массы Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} массам Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} массе Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} массам Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} масс Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} массы Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} масс Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} массами Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} массой Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} массами Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} массах Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} массе Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} массах Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} массы Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} масса Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} массы Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} массах Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} массе Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} массах Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} массы Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} масса Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} массы Солнца
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} килопаскаля
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} килопаскаль
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} килопаскали
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} килопаскалям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} килопаскалю
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} килопаскалям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} килопаскалей
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} килопаскаля
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} килопаскалей
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} килопаскалями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} килопаскалем
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} килопаскалями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} килопаскалях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} килопаскале
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} килопаскалях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} килопаскаля
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} килопаскаль
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} килопаскали
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} килопаскалях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} килопаскале
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} килопаскалях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} килопаскали
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} килопаскаль
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} килопаскали
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} километра в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} километр в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} километры в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} километрам в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} километру в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} километрам в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} километров в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} километра в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} километров в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} километрами в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} километром в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} километрами в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} километрах в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} километре в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} километрах в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} километра в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} километр в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} километры в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} километрах в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} километре в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} километрах в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} километры в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} километр в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} километры в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} метра в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} метр в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} метры в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} метрам в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} метру в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} метрам в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} метров в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} метра в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} метров в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} метрами в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} метром в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} метрами в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} метрах в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} метре в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} метрах в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} метра в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} метр в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} метры в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} метрах в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} метре в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} метрах в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} метры в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} метр в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} метры в секунду
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} мили в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} милю в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} мили в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} милям в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} миле в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} милям в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} миль в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} мили в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} миль в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} милями в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} милей в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} милями в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} милях в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} миле в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} милях в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} мили в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} миля в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} мили в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} милях в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} миле в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} милях в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} мили в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} миля в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} мили в час
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} градуса Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} градус Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} градусы Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} градусам Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} градусу Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} градусам Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} градусов Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} градуса Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} градусов Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} градусами Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} градусом Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} градусами Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} градусах Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} градусе Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} градусах Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} градуса Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} градус Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} градусы Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} градусах Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} градусе Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} градусах Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} градусы Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} градус Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} градусы Цельсия
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} градуса Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} градус Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} градусы Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} градусам Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} градусу Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} градусам Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} градусов Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} градуса Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} градусов Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} градусами Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} градусом Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} градусами Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} градусах Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} градусе Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} градусах Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} градуса Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} градус Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} градусы Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} градусах Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} градусе Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} градусах Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} градусы Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} градус Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} градусы Фаренгейта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} градуса
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} градус
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} градусы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} градусам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} градусу
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} градусам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} градусов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} градуса
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} градусов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} градусами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} градусом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} градусами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} градусах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} градусе
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} градусах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} градуса
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} градус
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} градусы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} градусах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} градусе
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} градусах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} градусы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} градус
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} градусы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} Кельвина
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} Кельвин
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} Кельвины
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} Кельвинам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} Кельвину
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} Кельвинам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} Кельвинов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} Кельвина
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} Кельвинов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} Кельвинами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} Кельвином
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} Кельвинами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} Кельвинах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} Кельвине
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} Кельвинах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} Кельвина
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} Кельвин
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Кельвины
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} Кельвинах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} Кельвине
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} Кельвинах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} Кельвины
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} Кельвин
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} Кельвины
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} сантилитра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} сантилитр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} сантилитры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} сантилитрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} сантилитру
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} сантилитрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} сантилитров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} сантилитра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} сантилитров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} сантилитрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} сантилитром
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} сантилитрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} сантилитрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} сантилитре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} сантилитрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} сантилитра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} сантилитр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} сантилитры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} сантилитрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} сантилитре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} сантилитрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} сантилитры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} сантилитр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} сантилитры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} кубического сантиметра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} кубический сантиметр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} кубические сантиметры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} кубическим сантиметрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} кубическому сантиметру
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} кубическим сантиметрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} кубических сантиметров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} кубического сантиметра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} кубических сантиметров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} кубическими сантиметрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} кубическим сантиметром
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} кубическими сантиметрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} кубических сантиметрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} кубическом сантиметре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} кубических сантиметрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} кубического сантиметра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} кубический сантиметр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} кубические сантиметры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} кубических сантиметрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} кубическом сантиметре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} кубических сантиметрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} кубические сантиметры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} кубический сантиметр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} кубические сантиметры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} кубического фута
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} кубический фут
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} кубические футы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} кубическим футам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} кубическому футу
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} кубическим футам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} кубических футов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} кубического фута
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} кубических футов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} кубическими футами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} кубическим футом
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} кубическими футами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} кубических футах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} кубическом футе
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} кубических футах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} кубического фута
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} кубический фут
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} кубические футы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} кубических футах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} кубическом футе
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} кубических футах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} кубические футы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} кубический фут
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} кубические футы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} кубической мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} кубическую милю
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} кубические мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} кубическим милям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} кубической миле
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} кубическим милям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} кубических миль
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} кубической мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} кубических миль
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} кубическими милями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} кубической милей
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} кубическими милями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} кубических милях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} кубической миле
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} кубических милях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} кубической мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} кубическая миля
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} кубические мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} кубических милях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} кубической миле
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} кубических милях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} кубические мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} кубическая миля
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} кубические мили
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} американской чашки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} американскую чашку
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} американские чашки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} американским чашкам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} американской чашке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} американским чашкам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} американских чашек
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} американской чашки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} американских чашек
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} американскими чашками
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} американской чашкой
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} американскими чашками
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} американских чашках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} американской чашке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} американских чашках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} американской чашки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} американская чашка
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} американские чашки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} американских чашках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} американской чашке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} американских чашках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} американские чашки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} американская чашка
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} американские чашки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} децилитра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} децилитр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} децилитры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} децилитрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} децилитру
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} децилитрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} децилитров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} децилитра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} децилитров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} децилитрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} децилитром
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} децилитрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} децилитрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} децилитре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} децилитрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} децилитра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} децилитр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} децилитры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} децилитрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} децилитре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} децилитрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} децилитры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} децилитр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} децилитры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} британской десертной ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} британскую десертную ложку
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} британские десертные ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} британским десертным ложкам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} британской десертной ложке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} британским десертным ложкам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} британских десертных ложек
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} британской десертной ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} британских десертных ложек
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} британскими десертными ложками
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} британской десертной ложкой
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} британскими десертными ложками
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} британских десертных ложках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} британской десертной ложке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} британских десертных ложках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} британской десертной ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} британская десертная ложка
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} британские десертные ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} британских десертных ложках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} британской десертной ложке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} британских десертных ложках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} британские десертные ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} британская десертная ложка
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} британские десертные ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} десертной ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} десертную ложку
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} десертные ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} десертным ложкам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} десертной ложке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} десертным ложкам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} десертных ложек
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} десертной ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} десертных ложек
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} десертными ложками
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} десертной ложкой
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} десертными ложками
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} десертных ложках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} десертной ложке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} десертных ложках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} десертной ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} десертная ложка
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} десертные ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} десертных ложках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} десертной ложке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} десертных ложках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} десертные ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} десертная ложка
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} десертные ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} британской жидкой драхмы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} британскую жидкую драхму
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} британские жидкие драхмы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} британским жидким драхмам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} британской жидкой драхме
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} британским жидким драхмам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} британских жидких драхм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} британской жидкой драхмы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} британских жидких драхм
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} британскими жидкими драхмами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} британской жидкой драхмой
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} британскими жидкими драхмами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} британских жидких драхмах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} британской жидкой драхме
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} британских жидких драхмах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} британской жидкой драхмы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} британская жидкая драхма
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} британские жидкие драхмы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} британских жидких драхмах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} британской жидкой драхме
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} британских жидких драхмах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} британские жидкие драхмы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} британская жидкая драхма
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} британские жидкие драхмы
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} капли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} каплю
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} капли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} каплям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} капле
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} каплям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} капель
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} капли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} капель
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} каплями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} каплей
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} каплями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} каплях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} капле
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} каплях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} капли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} капля
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} капли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} каплях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} капле
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} каплях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} капли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} капля
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} капли
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} имперской жидкой унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} имперскую жидкую унцию
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} имперские жидкие унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} имперским жидким унциям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} имперской жидкой унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} имперским жидким унциям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} имперских жидких унций
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} имперской жидкой унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} имперских жидких унций
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} имперскими жидкими унциями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} имперской жидкой унцией
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} имперскими жидкими унциями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} имперских жидких унциях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} имперской жидкой унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} имперских жидких унциях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} имперской жидкой унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} имперская жидкая унция
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} имперские жидкие унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} имперских жидких унциях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} имперской жидкой унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} имперских жидких унциях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} имперские жидкие унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} имперская жидкая унция
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} имперские жидкие унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} американской жидкой унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} американскую жидкую унцию
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} американские жидкие унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} американским жидким унциям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} американской жидкой унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} американским жидким унциям
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} американских жидких унций
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} американской жидкой унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} американских жидких унций
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} американскими жидкими унциями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} американской жидкой унцией
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} американскими жидкими унциями
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} американских жидких унциях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} американской жидкой унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} американских жидких унциях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} американской жидкой унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} американская жидкая унция
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} американские жидкие унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} американских жидких унциях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} американской жидкой унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} американских жидких унциях
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} американские жидкие унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} американская жидкая унция
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} американские жидкие унции
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} имперского галлона
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} имперский галлон
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} имперские галлоны
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} имперским галлонам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} имперскому галлону
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} имперским галлонам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} имперских галлонов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} имперского галлона
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} имперских галлонов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} имперскими галлонами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} имперским галлоном
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} имперскими галлонами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} имперских галлонах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} имперском галлоне
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} имперских галлонах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} имперского галлона
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} имперский галлон
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} имперские галлоны
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} имперских галлонах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} имперском галлоне
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} имперских галлонах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} имперские галлоны
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} имперский галлон
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} имперские галлоны
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} американского галлона
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} американский галлон
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} американские галлоны
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} американским галлонам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} американскому галлону
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} американским галлонам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} американских галлонов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} американского галлона
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} американских галлонов
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} американскими галлонами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} американским галлоном
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} американскими галлонами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} американских галлонах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} американском галлоне
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} американских галлонах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} американского галлона
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} американский галлон
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} американские галлоны
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} американских галлонах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} американском галлоне
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} американских галлонах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} американские галлоны
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} американский галлон
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} американские галлоны
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} джиггера
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} джиггер
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} джиггеры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} джиггерам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} джиггеру
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} джиггерам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} джиггеров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} джиггера
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} джиггеров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} джиггерами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} джиггером
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} джиггерами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} джиггерах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} джиггере
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} джиггерах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} джиггера
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} джиггер
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} джиггеры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} джиггерах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} джиггере
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} джиггерах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} джиггеры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} джиггер
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} джиггеры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} литра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} литр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} литры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} литрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} литру
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} литрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} литров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} литра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} литров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} литрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} литром
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} литрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} литрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} литре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} литрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} литра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} литр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} литры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} литрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} литре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} литрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} литры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} литр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} литры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} миллилитра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} миллилитр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} миллилитры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} миллилитрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} миллилитру
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} миллилитрам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} миллилитров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} миллилитра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} миллилитров
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} миллилитрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} миллилитром
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} миллилитрами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} миллилитрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} миллилитре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} миллилитрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} миллилитра
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} миллилитр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} миллилитры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} миллилитрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} миллилитре
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} миллилитрах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} миллилитры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} миллилитр
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} миллилитры
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} щепотки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} щепотку
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} щепотки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} щепоткам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} щепотке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} щепоткам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} щепоток
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} щепотки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} щепоток
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} щепотками
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} щепоткой
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} щепотками
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} щепотках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} щепотке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} щепотках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} щепотки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} щепотка
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} щепотки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} щепотках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} щепотке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} щепотках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} щепотки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} щепотка
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} щепотки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} американской жидкой пинты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} американскую жидкую пинту
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} американские жидкие пинты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} американским жидким пинтам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} американской жидкой пинте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} американским жидким пинтам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} американских жидких пинт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} американской жидкой пинты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} американских жидких пинт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} американскими жидкими пинтами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} американской жидкой пинтой
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} американскими жидкими пинтами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} американских жидких пинтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} американской жидкой пинте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} американских жидких пинтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} американской жидкой пинты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} американская жидкая пинта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} американские жидкие пинты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} американских жидких пинтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} американской жидкой пинте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} американских жидких пинтах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} американские жидкие пинты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} американская жидкая пинта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} американские жидкие пинты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} имперской кварты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} имперскую кварту
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} имперские кварты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} имперским квартам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} имперской кварте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} имперским квартам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} имперских кварт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} имперской кварты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} имперских кварт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} имперскими квартами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} имперской квартой
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} имперскими квартами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} имперских квартах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} имперской кварте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} имперских квартах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} имперской кварты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} имперская кварта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} имперские кварты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} имперских квартах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} имперской кварте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} имперских квартах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} имперские кварты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} имперская кварта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} имперские кварты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} американской жидкой кварты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} американскую жидкую кварту
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} американские жидкие кварты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} американским жидким квартам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} американской жидкой кварте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} американским жидким квартам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} американских жидких кварт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} американской жидкой кварты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} американских жидких кварт
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} американскими жидкими квартами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} американской жидкой квартой
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} американскими жидкими квартами
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} американских жидких квартах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} американской жидкой кварте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} американских жидких квартах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} американской жидкой кварты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} американская жидкая кварта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} американские жидкие кварты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} американских жидких квартах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} американской жидкой кварте
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} американских жидких квартах
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} американские жидкие кварты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} американская жидкая кварта
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} американские жидкие кварты
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} американской столовой ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} американскую столовую ложку
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} американские столовые ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} американским столовым ложкам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} американской столовой ложке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} американским столовым ложкам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} американских столовых ложек
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} американской столовой ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} американских столовых ложек
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} американскими столовыми ложками
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} американской столовой ложкой
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} американскими столовыми ложками
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} американских столовых ложках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} американской столовой ложке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} американских столовых ложках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} американской столовой ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} американская столовая ложка
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} американские столовые ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} американских столовых ложках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} американской столовой ложке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} американских столовых ложках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} американские столовые ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} американская столовая ложка
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} американские столовые ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="few"][@case="accusative"][@draft="provisional"]; new_value={0} американской чайной ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@case="accusative"][@draft="provisional"]; new_value={0} американскую чайную ложку
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@case="accusative"][@draft="provisional"]; new_value={0} американские чайные ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="few"][@case="dative"][@draft="provisional"]; new_value={0} американским чайным ложкам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@case="dative"][@draft="provisional"]; new_value={0} американской чайной ложке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@case="dative"][@draft="provisional"]; new_value={0} американским чайным ложкам
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="few"][@case="genitive"][@draft="provisional"]; new_value={0} американских чайных ложек
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@case="genitive"][@draft="provisional"]; new_value={0} американской чайной ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@case="genitive"][@draft="provisional"]; new_value={0} американских чайных ложек
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="few"][@case="instrumental"][@draft="provisional"]; new_value={0} американскими чайными ложками
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@case="instrumental"][@draft="provisional"]; new_value={0} американской чайной ложкой
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@case="instrumental"][@draft="provisional"]; new_value={0} американскими чайными ложками
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="few"][@case="locative"][@draft="provisional"]; new_value={0} американских чайных ложках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@case="locative"][@draft="provisional"]; new_value={0} американской чайной ложке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@case="locative"][@draft="provisional"]; new_value={0} американских чайных ложках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="few"][@draft="provisional"]; new_value={0} американской чайной ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} американская чайная ложка
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} американские чайные ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="few"][@case="prepositional"][@draft="provisional"]; new_value={0} американских чайных ложках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@case="prepositional"][@draft="provisional"]; new_value={0} американской чайной ложке
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@case="prepositional"][@draft="provisional"]; new_value={0} американских чайных ложках
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="few"][@case="vocative"][@draft="provisional"]; new_value={0} американские чайные ложки
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@case="vocative"][@draft="provisional"]; new_value={0} американская чайная ложка
+locale=ru; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@case="vocative"][@draft="provisional"]; new_value={0} американские чайные ложки
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} g-kraft
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} g-krafter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} meter per kvadratsekund
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meter per kvadratsekund
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} engelskt tunnland
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} engelska tunnland
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} hektar
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} hektar
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kvadratcentimeter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kvadratcentimeter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kvadratfot
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kvadratfot
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kvadratkilometer
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kvadratkilometer
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} engelsk kvadratmil
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} engelska kvadratmil
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} procent
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} procent
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} liter per 100 kilometer
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} liter per 100 kilometer
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} engelsk mil per gallon
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} engelska mil per gallon
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerikansk mil per gallon
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerikanska mil per gallon
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dag
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dagar
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} timme
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} timmar
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} minut
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} minuter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} månad
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} månader
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} sekund
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} sekunder
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} vecka
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} veckor
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} år
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} år
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kalori
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kalorier
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilokalori
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilokalorier
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centimeter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centimeter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-decimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} decimeter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-decimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} decimeter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} fot
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} fot
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} tum
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} tum
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilometer
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilometer
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} meter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile-scandinavian"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mil
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile-scandinavian"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mil
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} engelsk mil
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} engelska mil
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} millimeter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} millimeter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} parsec
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} parsec
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pikometer
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pikometer
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} solradie
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} yard
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} yard
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} solluminositet
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} atommassenhet
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} atommassenheter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} jordmassa
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grain
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grains
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} gram
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gram
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilo
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilo
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milligram
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milligram
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} ounce
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ounces
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pound
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pound
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} solmassa
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilopascal
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilopascal
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kilometer per timme
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilometer per timme
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} meter per sekund
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} meter per sekund
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mile per timme
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miles per timme
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grad Celsius
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grader Celsius
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grad Fahrenheit
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grader Fahrenheit
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} grad
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grader
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kelvin
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kelvin
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} centiliter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centiliter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kubikcentimeter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kubikcentimeter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kubikfot
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kubikfot
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} kubikmil
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kubikmil
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} cup
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} cups
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} deciliter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} deciliter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} brittisk dessertsked
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} brittisk dessertskedar
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} dessertsked
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dessertskedar
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} brittisk dram
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} brittiska dramer
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} droppe
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} droppar
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} brittiskt fluid ounce
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} brittiska fluid ounce
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} fluid ounce
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} fluid ounces
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} brittisk gallon
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} brittiska gallons
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} amerikansk gallon
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} amerikanska gallons
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} mätglas
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mätglas
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} liter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} liter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} milliliter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milliliter
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} nypa
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} nypor
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} pint
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} pints
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} brittisk quart
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} brittiska quarts
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} quart
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} quarts
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} matsked
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} matskedar
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="one"][@draft="provisional"]; new_value={0} tesked
+locale=sv; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} teskedar
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} แรงจี
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} เมตรต่อวินาทีกำลังสอง
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} เอเคอร์
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} เฮกตาร์
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ตารางเซนติเมตร
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ตารางฟุต
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ตารางกิโลเมตร
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ตารางไมล์
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ร้อยละ
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ลิตรต่อ 100 กิโลเมตร
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ไมล์ต่อแกลลอน (อังกฤษ)
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ไมล์ต่อแกลลอน (สหรัฐอเมริกา)
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} วัน
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ชั่วโมง
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} นาที
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} เดือน
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} วินาที
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} สัปดาห์
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ปี
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} แคลอรี
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} กิโลแคลอรี
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} เซนติเมตร
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ฟุต
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} นิ้ว
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} กิโลเมตร
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} เมตร
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ไมล์
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} มิลลิเมตร
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} พาร์เซก
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} พิโกเมตร
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} รัศมีดวงอาทิตย์
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} หลา
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} กำลังส่องสว่างของดวงอาทิตย์
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} หน่วยมวลอะตอม
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} มวลของโลก
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} เกรน
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} กรัม
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} กิโลกรัม
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} มิลลิกรัม
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ออนซ์
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ปอนด์
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} มวลดวงอาทิตย์
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} กิโลปาสกาล
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} กิโลเมตรต่อชั่วโมง
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} เมตรต่อวินาที
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ไมล์ต่อชั่วโมง
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} องศาเซลเซียส
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} องศาฟาเรนไฮต์
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} องศา
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} เคลวิน
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} เซนติลิตร
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ลูกบาศก์เซนติเมตร
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ลูกบาศก์ฟุต
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ลูกบาศก์ไมล์
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ถ้วย (สหรัฐอเมริกา)
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} เดซิลิตร
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ช้อนของหวาน (อังกฤษ)
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ช้อนของหวาน
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ดรัมของเหลว (อังกฤษ)
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} หยด
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ออนซ์ของเหลว (อังกฤษ)
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ออนซ์ของเหลว (สหรัฐอเมริกา)
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} แกลลอน (อังกฤษ)
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} แกลลอนของเหลว (สหรัฐอเมริกา)
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} จิกเกอร์
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ลิตร
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} มิลลิลิตร
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} หยิบมือ
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ไพนต์ของเหลว (สหรัฐอเมริกา)
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ควอร์ต
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ควอร์ตของเหลว (สหรัฐอเมริกา)
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ช้อนโต๊ะ (สหรัฐอเมริกา)
+locale=th; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ช้อนชา (สหรัฐอเมริกา)
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} lực G
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mét trên giây bình phương
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mẫu Anh
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} hécta
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centimét vuông
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} foot vuông
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilômét vuông
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dặm vuông
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} phần trăm
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} lít trên 100 kilômét
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dặm trên gallon Anh
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dặm Mỹ trên gallon
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ngày
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} giờ
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} phút
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} tháng
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} giây
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} tuần
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} năm
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} calo
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilôcalo
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centimét
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} foot
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} inch
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilômét
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mét
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dặm Anh
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} milimét
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} parsec
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} picômét
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} bán kính Mặt Trời
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Yard
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} độ sáng của Mặt Trời
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} đơn vị khối lượng nguyên tử
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} khối lượng Trái Đất
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} grain
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gam
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilôgam
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} miligam
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ounce
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Pound
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} khối lượng Mặt Trời
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilôpascal
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} kilômét trên giờ
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mét trên giây
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dặm trên giờ
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} độ Celsius
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} độ Fahrenheit
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} độ
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} Kelvin
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} centilít
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} phân khối
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} foot khối
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dặm khối
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} tách Mỹ
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} decilít
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} muỗng ăn tráng miệng Anh
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} muỗng ăn tráng miệng
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} dram chất lỏng Anh
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} giọt
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ounce chất lỏng Anh
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} ounce chất lỏng Mỹ
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gallon Anh
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} gallon chất lỏng Mỹ
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} jigger
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} lít
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} mililít
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} nhúm
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} panh chất lỏng Mỹ
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} lít Anh
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} một phần tư gallon chất lỏng Mỹ
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} muỗng canh Mỹ
+locale=vi; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0} muỗng cà phê Mỹ
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}G 力
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value=每二次方秒{0}米
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英畝
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}公頃
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}平方厘米
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}平方呎
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}平方公里
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}平方英里
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value=百分之{0}
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value=每百公里{0}公升
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value=每加侖{0}英里
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value=每美制加侖{0}英里
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}日
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}個鐘
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}分鐘
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}個月
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}秒
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}個禮拜
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}年
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}個卡路里
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}千卡
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}厘米
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}呎
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}吋
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}公里
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}米
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英里
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}毫米
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}秒差距
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}皮米
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}太陽半徑
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}碼
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}太陽光度
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}個原子質量單位
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}地球質量
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}格令
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}克
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}公斤
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}毫克
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}安士
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}磅
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}太陽質量
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}千帕
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value=每小時{0}公里
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value=每秒{0}米
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value=每小時{0}英里
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value=攝氏{0}度
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value=華氏{0}度
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}度
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}開氏
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}厘升
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}立方厘米
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}立方呎
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}立方英里
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}美制杯
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}分升
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value=英制甜品匙{0}匙
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}甜品匙
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英制液量打蘭
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}滴
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}液量安士
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}美制液量安士
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}加侖
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}美制加侖
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value=量酒器{0}杯
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}公升
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}毫升
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}小撮
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}美制品脫
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}夸脫
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}美制夸脫
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}湯匙
+locale=yue; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}茶匙
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}G力
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value=每平方秒{0}米
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英畝
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}公頃
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}平方公分
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}平方英呎
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}平方公里
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}平方英里
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value=百分之{0}
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value=每 100 公里{0}公升
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value=每英制加侖{0}英里
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value=每美制加侖{0}英里
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}天
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}小時
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}分鐘
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}個月
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}秒
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}星期
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}年
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}卡路里
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}大卡
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}公分
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英呎
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英吋
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}公里
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}公尺
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英里
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}毫米
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}秒差距
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}皮米
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}太陽半徑
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}碼
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}太陽光度
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}道爾頓
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}地球質量
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}格令
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}公克
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}公斤
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}毫克
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}盎司
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}磅
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}太陽質量
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}千帕
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value=每小時{0}公里
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value=每秒{0}公尺
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value=每小時{0}英里
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value=攝氏{0}度
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value=華氏{0}度
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}度
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}厘升
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}立方公分
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}立方英呎
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}立方英里
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}美制杯
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}分升
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value=英制甜點匙{0}匙
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value=甜點匙{0}匙
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英制打蘭
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}滴
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英液盎司
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}美液盎司
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英制加侖
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}美制加侖
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value=量酒器{0}杯
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}公升
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}毫升
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}小撮
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}美液品脫
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英制夸脫
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}美制夸脫
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}湯匙
+locale=zh_Hant; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}茶匙
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-g-force"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}G力
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="acceleration-meter-per-square-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}米/二次方秒
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-acre"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英亩
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-hectare"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}公顷
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}平方厘米
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}平方英尺
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}平方千米
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="area-square-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}平方英里
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="concentr-percent"]/unitPattern[@count="other"][@draft="provisional"]; new_value=百分之{0}
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-liter-per-100-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}升/百公里
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英里/加仑
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="consumption-mile-per-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英里/美制加仑
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-day"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}天
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}个小时
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-minute"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}分钟
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-month"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}个月
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}秒
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-week"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}个星期
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="duration-year"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}年
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-foodcalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}卡路里
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="energy-kilocalorie"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}千卡
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}厘米
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英尺
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-inch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英寸
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-kilometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}千米
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-meter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}米
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英里
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-millimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}毫米
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-parsec"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}秒差距
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-picometer"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}皮米
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-solar-radius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}太阳半径
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="length-yard"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}码
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="light-solar-luminosity"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}太阳光度
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-dalton"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}道尔顿
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-earth-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}地球质量
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-grain"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}格令
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-gram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}克
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-kilogram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}千克
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-milligram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}毫克
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}盎司
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-pound"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}磅
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="mass-solar-mass"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}太阳质量
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="pressure-kilopascal"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}千帕
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-kilometer-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}千米/小时
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-meter-per-second"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}米/秒
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="speed-mile-per-hour"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英里/小時
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-celsius"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}摄氏度
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-fahrenheit"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}华氏度
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-generic"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}度
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="temperature-kelvin"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}开尔文
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-centiliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}厘升
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-centimeter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}立方厘米
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-foot"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}立方英尺
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cubic-mile"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}立方英里
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-cup"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}美制杯
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-deciliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}分升
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英制甜点匙
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dessert-spoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}甜点匙
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-dram"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英制液量打兰
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-drop"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}滴
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英制液量盎司
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-fluid-ounce"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}美制液量盎司
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英制加仑
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-gallon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}美制加仑
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-jigger"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}吉尔
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-liter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}升
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-milliliter"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}毫升
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pinch"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}撮
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-pint"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}美制品脱
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart-imperial"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}英制夸脱
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-quart"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}美制液量夸脱
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-tablespoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}美制汤匙
+locale=zh; action=addNew; new_path=//ldml/units/unitLength[@type="long"]/unit[@type="volume-teaspoon"]/unitPattern[@count="other"][@draft="provisional"]; new_value={0}美制茶匙
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/tool/resolver/CldrResolver.java b/tools/java/org/unicode/cldr/tool/resolver/CldrResolver.java
index 252bc42..f879ba6 100644
--- a/tools/java/org/unicode/cldr/tool/resolver/CldrResolver.java
+++ b/tools/java/org/unicode/cldr/tool/resolver/CldrResolver.java
@@ -191,7 +191,7 @@
     public Set<String> getLocaleNames(String localeRegex) {
         ResolverUtils.debugPrint("Getting list of locales...", 3);
         Set<String> allLocales = cldrFactory.getAvailable();
-        Set<String> locales = new TreeSet<String>();
+        Set<String> locales = new TreeSet<>();
         // Iterate through all the locales
         for (String locale : allLocales) {
             // Check if the locale name matches the regex
@@ -229,7 +229,7 @@
     private CLDRFile resolveLocaleInternal(CLDRFile file, ResolutionType resolutionType) {
         String locale = file.getLocaleID();
         // Make parent files for simple resolution.
-        List<CLDRFile> ancestors = new ArrayList<CLDRFile>();
+        List<CLDRFile> ancestors = new ArrayList<>();
         if (resolutionType == ResolutionType.SIMPLE && !locale.equals(ROOT)) {
             String parentLocale = locale;
             do {
diff --git a/tools/java/org/unicode/cldr/tool/resolver/ResolverUtils.java b/tools/java/org/unicode/cldr/tool/resolver/ResolverUtils.java
index 136470a..b99bb08 100644
--- a/tools/java/org/unicode/cldr/tool/resolver/ResolverUtils.java
+++ b/tools/java/org/unicode/cldr/tool/resolver/ResolverUtils.java
@@ -39,7 +39,7 @@
      */
     public static Set<String> getAllPaths(CLDRFile file) {
         String locale = file.getLocaleID();
-        Set<String> paths = new HashSet<String>();
+        Set<String> paths = new HashSet<>();
         for (String path : file) {
             paths.add(path);
         }
diff --git a/tools/java/org/unicode/cldr/util/Annotations.java b/tools/java/org/unicode/cldr/util/Annotations.java
index 65082c9..854e9ff 100644
--- a/tools/java/org/unicode/cldr/util/Annotations.java
+++ b/tools/java/org/unicode/cldr/util/Annotations.java
@@ -18,11 +18,11 @@
 import org.unicode.cldr.tool.SubdivisionNames;
 import org.unicode.cldr.util.XMLFileReader.SimpleHandler;
 
+import com.google.common.base.Joiner;
 import com.google.common.base.Objects;
 import com.google.common.base.Splitter;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSet.Builder;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.dev.util.UnicodeMap;
 import com.ibm.icu.impl.Utility;
 import com.ibm.icu.lang.CharSequences;
@@ -56,21 +56,14 @@
 
     static {
         File directory = new File(CLDRPaths.COMMON_DIRECTORY, "annotations");
-        try {
-            DIR = directory.getCanonicalPath();
-        } catch (IOException e) {
-            throw new ICUUncheckedIOException(e);
-        }
+        DIR = PathUtilities.getNormalizedPathString(directory);
         if (DEBUG) {
             System.out.println(DIR);
         }
         Builder<String> temp = ImmutableSet.builder();
         for (File file : directory.listFiles()) {
             if (DEBUG) {
-                try {
-                    System.out.println(file.getCanonicalPath());
-                } catch (IOException e) {
-                }
+                System.out.println(PathUtilities.getNormalizedPathString(file));
             }
             String name = file.toString();
             String shortName = file.getName();
@@ -126,7 +119,7 @@
         }
 
         static final Pattern SPACES = Pattern.compile("\\s+");
-        
+
         @Override
         public void handlePathValue(String path, String value) {
             if (value.contains(CldrUtility.INHERITANCE_MARKER)) {
@@ -270,6 +263,7 @@
         /**
          * @deprecated Use {@link #getLabelSet(String)} instead
          */
+        @Deprecated
         private Set<String> getLabelSet() {
             return getLabelSet("flag");
         }
@@ -413,22 +407,22 @@
 //                        code = code.substring(0,code.length()-EmojiConstants.JOINER_MALE_SIGN.length());
 //                    } // otherwise "🚴🏿‍♂️","man biking: dark skin tone"
 //                } else if (code.endsWith(EmojiConstants.JOINER_FEMALE_SIGN)){
-//                    if (matchesInitialPattern(code)) { // 
+//                    if (matchesInitialPattern(code)) { //
 //                        rem = EmojiConstants.WOMAN + rem;
 //                        code = code.substring(0,code.length()-EmojiConstants.JOINER_FEMALE_SIGN.length());
 //                    }
-//                } else 
+//                } else
                 if (code.contains(EmojiConstants.KISS)) {
                     rem = code + rem;
                     code = "💏";
                     skipSet = EmojiConstants.REM_GROUP_SKIP_SET;
-                } else if (code.contains(EmojiConstants.HEART)) {
+                } else if (code.contains(EmojiConstants.HEART) && !code.startsWith(EmojiConstants.HEART)) {
                     rem = code + rem;
                     code = "💑";
                     skipSet = EmojiConstants.REM_GROUP_SKIP_SET;
                 } else if (code.contains(EmojiConstants.HANDSHAKE)) {
                     code = code.startsWith(EmojiConstants.MAN) ? "👬"
-                        : code.endsWith(EmojiConstants.MAN) ? "👫" 
+                        : code.endsWith(EmojiConstants.MAN) ? "👫"
                             : code.startsWith(EmojiConstants.WOMAN) ? "👭"
                             : NEUTRAL_HOLDING;
                     skipSet = EmojiConstants.REM_GROUP_SKIP_SET;
@@ -464,12 +458,12 @@
                     annotations.addAll(stock.getKeywords());
                 } else if (otherSource != null) {
                     shortName = otherSource.transform(base);
-                    if (shortName == null) {
-                        return null;
-                    }
                 } else {
                     return null;
                 }
+                if (shortName == null) {
+                    return null;
+                }
             }
 
             boolean hackBlond = EmojiConstants.HAIR_EXPLICIT.contains(base.codePointAt(0));
@@ -505,7 +499,7 @@
                         modName = Utility.hex(mod); // ultimate fallback
                     }
                 }
-                if (hackBlond && shortName != null) { 
+                if (hackBlond && shortName != null) {
                     // HACK: make the blond names look like the other hair names
                     // Split the short name into pieces, if possible, and insert the modName first
                     String sep = initialPattern.format("", "");
@@ -537,6 +531,7 @@
         /**
          * @deprecated Use {@link #toString(String,boolean,AnnotationSet)} instead
          */
+        @Deprecated
         public String toString(String code, boolean html) {
             return toString(code, html, null);
         }
@@ -561,7 +556,7 @@
                 keywords = Collections.singleton(EQUIVALENT);
             }
 
-            String result = CollectionUtilities.join(keywords, " |\u00a0");
+            String result = Joiner.on(" |\u00a0").join(keywords);
             if (shortName != null) {
                 String ttsString = (html ? "*<b>" : "*") + shortName + (html ? "</b>" : "*");
                 if (result.isEmpty()) {
@@ -585,7 +580,7 @@
             String shortName = getShortName(code);
             Set<String> keywords = getKeywords(code);
             if (shortName != null && keywords.contains(shortName)) {
-                keywords = new LinkedHashSet<String>(keywords);
+                keywords = new LinkedHashSet<>(keywords);
                 keywords.remove(shortName);
             }
             return keywords;
@@ -639,10 +634,10 @@
     public String toString(boolean html) {
         Set<String> annotations2 = getKeywords();
         if (getShortName() != null && annotations2.contains(getShortName())) {
-            annotations2 = new LinkedHashSet<String>(getKeywords());
+            annotations2 = new LinkedHashSet<>(getKeywords());
             annotations2.remove(getShortName());
         }
-        String result = CollectionUtilities.join(annotations2, " |\u00a0");
+        String result = Joiner.on(" |\u00a0").join(annotations2);
         if (getShortName() != null) {
             String ttsString = (html ? "*<b>" : "*") + getShortName() + (html ? "</b>" : "*");
             if (result.isEmpty()) {
@@ -687,7 +682,7 @@
             System.out.println(Utility.hex(key, 4, "_").toLowerCase(Locale.ROOT)
                 + "\t" + key
                 + "\t" + map.get(key).getShortName()
-                + "\t" + CollectionUtilities.join(map.get(key).getKeywords(), " | "));
+                + "\t" + Joiner.on(" | ").join(map.get(key).getKeywords()));
         }
         for (String s : Arrays.asList(
             "💏", "👩‍❤️‍💋‍👩",
@@ -699,7 +694,8 @@
             "🚴", "🚴🏿", "🚴‍♂️", "🚴🏿‍♂️", "🚴‍♀️", "🚴🏿‍♀️")) {
             final String shortName = eng.getShortName(s);
             final Set<String> keywords = eng.getKeywords(s);
-            System.out.println("{\"" + s + "\",\"" + shortName + "\",\"" + CollectionUtilities.join(keywords, "|") + "\"},");
+            System.out.println("{\"" + s + "\",\"" + shortName + "\",\"" + Joiner.on("|")
+                .join(keywords) + "\"},");
         }
     }
 
@@ -718,8 +714,8 @@
             System.out.println(key + "\tname\t"
                 + "\t" + value.getShortName()
                 + "\t" + (value100 == null ? "" : value100.getShortName())
-                + "\t" + CollectionUtilities.join(value.getKeywords(), " | ")
-                + "\t" + (keywords100 == null ? "" : CollectionUtilities.join(keywords100, " | ")));
+                + "\t" + Joiner.on(" | ").join(value.getKeywords())
+                + "\t" + (keywords100 == null ? "" : Joiner.on(" | ").join(keywords100)));
         }
     }
 }
diff --git a/tools/java/org/unicode/cldr/util/ApproximateWidth.java b/tools/java/org/unicode/cldr/util/ApproximateWidth.java
index cd3bfa4..04382f2 100644
--- a/tools/java/org/unicode/cldr/util/ApproximateWidth.java
+++ b/tools/java/org/unicode/cldr/util/ApproximateWidth.java
@@ -3,7 +3,7 @@
 import com.ibm.icu.dev.util.UnicodeMap;
 
 public class ApproximateWidth {
-    static UnicodeMap<Integer> data = new UnicodeMap<Integer>();
+    static UnicodeMap<Integer> data = new UnicodeMap<>();
     static Integer defaultWidth;
 
     public static Integer getWidth(int cp) {
@@ -11,8 +11,8 @@
         return result == null ? defaultWidth : result;
     }
 
-    /** 
-     * Return # of ems * 10 
+    /**
+     * Return # of ems * 10
      */
     public static int getWidth(CharSequence s) {
         int result = 0;
@@ -32,7 +32,7 @@
                     String[] items = SPLIT.split(line);
                     defaultWidth = Integer.parseInt(items[1]);
                 }
-            };
+            }
 
             @Override
             protected boolean handleLine(int lineCount, int start, int end, String[] items) {
diff --git a/tools/java/org/unicode/cldr/util/ArrayComparator.java b/tools/java/org/unicode/cldr/util/ArrayComparator.java
index 6c8ced5..a53d672 100644
--- a/tools/java/org/unicode/cldr/util/ArrayComparator.java
+++ b/tools/java/org/unicode/cldr/util/ArrayComparator.java
@@ -10,6 +10,7 @@
 
 public class ArrayComparator implements Comparator {
     public static final Comparator COMPARABLE = new Comparator() {
+        @Override
         public int compare(Object o1, Object o2) {
             return ((Comparable) o1).compareTo(o2);
         }
@@ -37,10 +38,11 @@
     }
 
     /* Lexigraphic compare. Returns the first difference
-     * @return zero if equal. Otherwise +/- (i+1) 
+     * @return zero if equal. Otherwise +/- (i+1)
      * where i is the index of the first comparator finding a difference
      * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
      */
+    @Override
     public int compare(Object a0, Object a1) {
         Object[] arg0 = (Object[]) a0;
         Object[] arg1 = (Object[]) a1;
@@ -63,6 +65,7 @@
             this.other = other;
         }
 
+        @Override
         public int compare(Object arg0, Object arg1) throws RuntimeException {
             try {
                 return other.compare(arg0, arg1);
diff --git a/tools/java/org/unicode/cldr/util/AttributeValueValidity.java b/tools/java/org/unicode/cldr/util/AttributeValueValidity.java
index 481e39e..c5983d6 100644
--- a/tools/java/org/unicode/cldr/util/AttributeValueValidity.java
+++ b/tools/java/org/unicode/cldr/util/AttributeValueValidity.java
@@ -48,8 +48,8 @@
     private static final SupplementalDataInfo supplementalData = CLDRConfig.getInstance().getSupplementalDataInfo();
 
     private static Map<DtdType, Map<String, Map<String, MatcherPattern>>> dtd_element_attribute_validity = new EnumMap<>(DtdType.class);
-    private static Map<String, MatcherPattern> common_attribute_validity = new LinkedHashMap<String, MatcherPattern>();
-    private static Map<String, MatcherPattern> variables = new LinkedHashMap<String, MatcherPattern>();
+    private static Map<String, MatcherPattern> common_attribute_validity = new LinkedHashMap<>();
+    private static Map<String, MatcherPattern> variables = new LinkedHashMap<>();
     private static final RegexMatcher NOT_DONE_YET = new RegexMatcher(".*", Pattern.COMMENTS);
     private static final Map<AttributeValidityInfo, String> failures = new LinkedHashMap<>();
     private static final boolean DEBUG = false;
@@ -218,7 +218,7 @@
                 DtdData data = DtdData.getInstance(dtdType);
                 Map<String, Map<String, MatcherPattern>> element_attribute_validity = dtd_element_attribute_validity.get(dtdType);
                 if (element_attribute_validity == null) {
-                    dtd_element_attribute_validity.put(dtdType, element_attribute_validity = new TreeMap<String, Map<String, MatcherPattern>>());
+                    dtd_element_attribute_validity.put(dtdType, element_attribute_validity = new TreeMap<>());
                 }
 
                 //             <attributeValues dtds="supplementalData" elements="currency" attributes="before from to">$currencyDate</attributeValues>
@@ -255,7 +255,7 @@
                         // System.out.println("\t" + element);
                         Map<String, MatcherPattern> attribute_validity = element_attribute_validity.get(element);
                         if (attribute_validity == null) {
-                            element_attribute_validity.put(element, attribute_validity = new TreeMap<String, MatcherPattern>());
+                            element_attribute_validity.put(element, attribute_validity = new TreeMap<>());
                         }
                         addAttributes(attributeList, attribute_validity, mp);
                     }
@@ -366,6 +366,7 @@
 
         public abstract String _getPattern();
 
+        @Override
         public String toString() {
             return getClass().getName() + "\t" + getPattern();
         }
@@ -479,6 +480,7 @@
             matcher = Pattern.compile(pattern, flags).matcher("");
         }
 
+        @Override
         public boolean matches(String value, Output<String> reason) {
             matcher.reset(value.toString());
             boolean result = matcher.matches();
@@ -518,6 +520,7 @@
 
         static final int MAX_STRING = 64;
 
+        @Override
         public boolean matches(String value, Output<String> reason) {
             boolean result = LOCALE_SPECIFIC.get(ls).contains(value);
             if (!result && reason != null) {
@@ -631,6 +634,7 @@
             this.operands = operands;
         }
 
+        @Override
         public boolean matches(String value, Output<String> reason) {
             StringBuilder fullReason = reason == null ? null : new StringBuilder();
             for (MatcherPattern operand : operands) {
@@ -670,6 +674,7 @@
             this.other = other;
         }
 
+        @Override
         public boolean matches(String value, Output<String> reason) {
             List<String> values = SPACE.splitToList(value);
             if (values.isEmpty()) return true;
@@ -691,7 +696,6 @@
     }
 
     public static class LocaleMatcher extends MatcherPattern {
-        //final ObjectMatcherReason grandfathered = getNonNullVariable("$grandfathered").matcher;
         final MatcherPattern language;
         final MatcherPattern script = getNonNullVariable("$_script");
         final MatcherPattern territory = getNonNullVariable("$_region");
@@ -705,11 +709,9 @@
             language = getNonNullVariable(variable);
         }
 
+        @Override
         public boolean matches(String value, Output<String> reason) {
-//            if (grandfathered.matches(value, reason)) {
-//                return true;
-//            }
-            lip.set((String) value);
+            lip.set(value);
             String field = lip.getLanguage();
             if (!language.matches(field, reason)) {
                 if (reason != null) {
diff --git a/tools/java/org/unicode/cldr/util/BNF.java b/tools/java/org/unicode/cldr/util/BNF.java
index 9f31954..8fb1d68 100644
--- a/tools/java/org/unicode/cldr/util/BNF.java
+++ b/tools/java/org/unicode/cldr/util/BNF.java
@@ -44,18 +44,18 @@
     + "core = string | unicodeSet | '(' alternation ')';"
     + "sequence = (core quantifier*)+;"
     + "alternation = sequence (weight? ('|' sequence weight?)+)?;"
-    + "rule = string '=' alternation;"; 
-    
-    
+    + "rule = string '=' alternation;";
+
+
     *      Match 0 or more times
     +      Match 1 or more times
     ?      Match 1 or 0 times
     {n}    Match exactly n times
     {n,}   Match at least n times
-    {n,m}  Match at least n but not more than m times  
-    
-    
-    
+    {n,m}  Match at least n but not more than m times
+
+
+
     */
 
     public BNF(Random random, Quoter quoter) {
@@ -74,7 +74,7 @@
     public BNF complete() {
         // check that the rules match the variables, except for $root in rules
         Set ruleSet = map.keySet();
-        // add also 
+        // add also
         variables.add("$root");
         variables.addAll(t.getLookedUpItems());
         if (!ruleSet.equals(variables)) {
diff --git a/tools/java/org/unicode/cldr/util/Builder.java b/tools/java/org/unicode/cldr/util/Builder.java
index a95be5f..aad1880 100644
--- a/tools/java/org/unicode/cldr/util/Builder.java
+++ b/tools/java/org/unicode/cldr/util/Builder.java
@@ -68,19 +68,19 @@
     }
 
     public static <E, C extends Collection<E>> CBuilder<E, C> with(C collection, EqualAction ea) {
-        return new CBuilder<E, C>(collection, ea);
+        return new CBuilder<>(collection, ea);
     }
 
     public static <E, C extends Collection<E>> CBuilder<E, C> with(C collection) {
-        return new CBuilder<E, C>(collection, EqualAction.NATIVE);
+        return new CBuilder<>(collection, EqualAction.NATIVE);
     }
 
     public static <K, V, M extends Map<K, V>> MBuilder<K, V, M> with(M map, EqualAction ea) {
-        return new MBuilder<K, V, M>(map, ea);
+        return new MBuilder<>(map, ea);
     }
 
     public static <K, V, M extends Map<K, V>> MBuilder<K, V, M> with(M map) {
-        return new MBuilder<K, V, M>(map, EqualAction.NATIVE);
+        return new MBuilder<>(map, EqualAction.NATIVE);
     }
 
     // ===== Collections ======
@@ -233,7 +233,7 @@
         }
 
         public CBuilder<E, U> keepNew(Collection<? extends E> c) {
-            HashSet<E> extras = new HashSet<E>(c);
+            HashSet<E> extras = new HashSet<>(c);
             extras.removeAll(collection);
             collection.clear();
             collection.addAll(extras);
@@ -251,7 +251,7 @@
         }
 
         public CBuilder<E, U> filter(Transform<E, Boolean> filter) {
-            HashSet<E> temp = new HashSet<E>();
+            HashSet<E> temp = new HashSet<>();
             for (E item : collection) {
                 if (filter.transform(item) == Boolean.FALSE) {
                     temp.add(item);
@@ -283,6 +283,7 @@
             return temp;
         }
 
+        @Override
         public String toString() {
             return collection.toString();
         }
@@ -455,7 +456,7 @@
         }
 
         public <N extends Map<K, V>> MBuilder<K, V, M> keepNew(N c) {
-            HashSet<K> extras = new HashSet<K>(c.keySet());
+            HashSet<K> extras = new HashSet<>(c.keySet());
             extras.removeAll(map.keySet());
             map.clear();
             for (K key : extras) {
@@ -482,6 +483,7 @@
             return temp;
         }
 
+        @Override
         public String toString() {
             return map.toString();
         }
diff --git a/tools/java/org/unicode/cldr/util/CLDRConfig.java b/tools/java/org/unicode/cldr/util/CLDRConfig.java
index 602140e..ef3cc53 100644
--- a/tools/java/org/unicode/cldr/util/CLDRConfig.java
+++ b/tools/java/org/unicode/cldr/util/CLDRConfig.java
@@ -27,6 +27,7 @@
 import com.ibm.icu.util.VersionInfo;
 
 public class CLDRConfig extends Properties {
+    public static boolean SKIP_SEED = System.getProperty("CLDR_SKIP_SEED") != null;
     /**
      *
      */
@@ -62,7 +63,7 @@
      * Object to use for synchronization when interacting with Factory
      */
     private static final Object ANNOTATIONS_FACTORY_SYNC = new Object();
-    
+
     /**
      * Object to use for synchronization when interacting with Factory
      */
@@ -98,7 +99,7 @@
         SMOKETEST, // staging area
         PRODUCTION, // production server!
         UNITTEST // unit test setting
-    };
+    }
 
     public static CLDRConfig getInstance() {
         synchronized (CLDRConfig.class) {
@@ -172,6 +173,7 @@
         .maximumSize(200)
         .build(
             new CacheLoader<String, CLDRFile>() {
+                @Override
                 public CLDRFile load(String locale) {
                     return getFullCldrFactory().make(locale, true);
                 }
@@ -182,6 +184,7 @@
         .maximumSize(1000)
         .build(
             new CacheLoader<String, CLDRFile>() {
+                @Override
                 public CLDRFile load(String locale) {
                     return getFullCldrFactory().make(locale, false);
                 }
@@ -319,8 +322,8 @@
                 File[] paths = {
                     new File(CLDRPaths.MAIN_DIRECTORY),
                     new File(CLDRPaths.ANNOTATIONS_DIRECTORY),
-                    new File(CLDRPaths.SEED_DIRECTORY),
-                    new File(CLDRPaths.SEED_ANNOTATIONS_DIRECTORY)
+                    SKIP_SEED ? null : new File(CLDRPaths.SEED_DIRECTORY),
+                        SKIP_SEED ? null : new File(CLDRPaths.SEED_ANNOTATIONS_DIRECTORY)
                 };
                 commonAndSeedAndMainAndAnnotationsFactory = SimpleFactory.make(paths, ".*");
             }
@@ -332,8 +335,8 @@
         synchronized (FULL_FACTORY_SYNC) {
             if (fullFactory == null) {
                 File[] paths = {
-                    new File(CLDRPaths.MAIN_DIRECTORY), 
-                    new File(CLDRPaths.SEED_DIRECTORY)};
+                    new File(CLDRPaths.MAIN_DIRECTORY),
+                    SKIP_SEED ? null : new File(CLDRPaths.SEED_DIRECTORY)};
                 fullFactory = SimpleFactory.make(paths, ".*");
             }
         }
@@ -412,7 +415,7 @@
         return result;
     }
 
-    private Set<String> shown = new HashSet<String>();
+    private Set<String> shown = new HashSet<>();
 
     private Map<String, String> localSet = null;
 
@@ -485,7 +488,7 @@
             throw new InternalError("setProperty() only valid in UNITTEST Environment.");
         }
         if (localSet == null) {
-            localSet = new ConcurrentHashMap<String, String>();
+            localSet = new ConcurrentHashMap<>();
         }
         shown.remove(k); // show it again with -D
         return localSet.put(k, v);
@@ -531,13 +534,28 @@
         }
     }
 
-    public File getCldrBaseDirectory() {
-        String dir = getProperty("CLDR_DIR", null);
-        if (dir != null) {
-            return new File(dir);
-        } else {
-            return null;
+    private static class FileWrapper {
+        private File cldrDir = null;
+        private FileWrapper() {
+            String dir = getInstance().getProperty("CLDR_DIR", null);
+            if (dir != null) {
+                cldrDir = new File(dir);
+            } else {
+                cldrDir = null;
+            }
         }
+        public File getCldrDir() {
+            return this.cldrDir;
+        }
+        // singleton
+        private static FileWrapper fileWrapperInstance = new FileWrapper();
+        public static FileWrapper getFileWrapperInstance() {
+            return fileWrapperInstance;
+        }
+    }
+
+    public File getCldrBaseDirectory() {
+        return FileWrapper.getFileWrapperInstance().getCldrDir();
     }
 
     /**
@@ -546,6 +564,7 @@
      */
     public Set<File> getAllCLDRFilesEndingWith(final String suffix) {
         FilenameFilter filter = new FilenameFilter() {
+            @Override
             public boolean accept(File dir, String name) {
                 return name.endsWith(suffix) && !isJunkFile(name); // skip junk and backup files
             }
@@ -564,7 +583,7 @@
      */
     public Set<File> getCLDRFilesMatching(FilenameFilter filter, final File baseDir) {
         Set<File> list;
-        list = new LinkedHashSet<File>();
+        list = new LinkedHashSet<>();
         for (String subdir : getCLDRDataDirectories()) {
             getFilesRecursively(new File(baseDir, subdir), filter, list);
         }
diff --git a/tools/java/org/unicode/cldr/util/CLDRFile.java b/tools/java/org/unicode/cldr/util/CLDRFile.java
index 2bdae75..19deab0 100644
--- a/tools/java/org/unicode/cldr/util/CLDRFile.java
+++ b/tools/java/org/unicode/cldr/util/CLDRFile.java
@@ -11,9 +11,10 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FilenameFilter;
-import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.io.PrintWriter;
+import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -37,30 +38,29 @@
 import java.util.regex.Pattern;
 
 import org.unicode.cldr.util.DayPeriodInfo.DayPeriod;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalFeature;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalScope;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalTarget;
 import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo;
 import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo.Count;
 import org.unicode.cldr.util.SupplementalDataInfo.PluralType;
 import org.unicode.cldr.util.With.SimpleIterator;
+import org.unicode.cldr.util.XMLFileReader.AllHandler;
 import org.unicode.cldr.util.XMLSource.ResolvingSource;
 import org.unicode.cldr.util.XPathParts.Comments;
 import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.InputSource;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
 import org.xml.sax.XMLReader;
-import org.xml.sax.ext.DeclHandler;
-import org.xml.sax.ext.LexicalHandler;
 import org.xml.sax.helpers.XMLReaderFactory;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Splitter;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableMap.Builder;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.util.concurrent.UncheckedExecutionException;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
@@ -99,8 +99,10 @@
  * http://java.sun.com/j2se/1.4.2/docs/api/org/xml/sax/DTDHandler.html
  */
 
-public class CLDRFile implements Freezable<CLDRFile>, Iterable<String> {
+public class CLDRFile implements Freezable<CLDRFile>, Iterable<String>, LocaleStringProvider {
 
+    private static final boolean SEED_ONLY = true;
+    private static final ImmutableSet<String> casesNominativeOnly = ImmutableSet.of(GrammaticalFeature.grammaticalCase.getDefault(null));
     /**
      * Variable to control whether File reads are buffered; this will about halve the time spent in
      * loadFromFile() and Factory.make() from about 20 % to about 10 %. It will also noticeably improve the different
@@ -123,12 +125,13 @@
     public static final String SUPPLEMENTAL_NAME = "supplementalData";
     public static final String SUPPLEMENTAL_METADATA = "supplementalMetadata";
     public static final String SUPPLEMENTAL_PREFIX = "supplemental";
-    public static final String GEN_VERSION = "37";
-    public static final List<String> SUPPLEMENTAL_NAMES = Arrays.asList("characters", "coverageLevels", "dayPeriods", "genderList", "grammaticalFeatures", "languageInfo",
-        "languageGroup", "likelySubtags", "metaZones", "numberingSystems", "ordinals", "plurals", "postalCodeData", "rgScope", "supplementalData",
-        "supplementalMetadata", "telephoneCodeData", "units", "windowsZones");
+    public static final String GEN_VERSION = "38.1";
+    public static final List<String> SUPPLEMENTAL_NAMES = Arrays.asList("characters", "coverageLevels", "dayPeriods", "genderList", "grammaticalFeatures",
+        "languageInfo",
+        "languageGroup", "likelySubtags", "metaZones", "numberingSystems", "ordinals", "pluralRanges", "plurals", "postalCodeData", "rgScope",
+        "supplementalData", "supplementalMetadata", "telephoneCodeData", "units", "windowsZones");
 
-    private Collection<String> extraPaths = null;
+    private Set<String> extraPaths = null;
 
     private boolean locked;
     private DtdType dtdType;
@@ -145,8 +148,9 @@
             return string == null ? DraftStatus.approved
                 : DraftStatus.valueOf(string.toLowerCase(Locale.ENGLISH));
         }
-    };
+    }
 
+    @Override
     public String toString() {
         return "{"
             + "locked=" + locked
@@ -196,8 +200,21 @@
         }
     }
 
+    /**
+     * get Unresolved CLDRFile
+     * @param localeId
+     * @param file
+     * @param minimumDraftStatus
+     */
+    public CLDRFile(String localeId, List<File> dirs, DraftStatus minimalDraftStatus) {
+        // order matters
+        this.dataSource = XMLSource.getFrozenInstance(localeId, dirs, minimalDraftStatus);
+        this.dtdType = dataSource.getXMLNormalizingDtdType();
+        this.dtdData = DtdData.getInstance(this.dtdType);
+    }
+
     public CLDRFile(XMLSource dataSource, XMLSource... resolvingParents) {
-        List<XMLSource> sourceList = new ArrayList<XMLSource>();
+        List<XMLSource> sourceList = new ArrayList<>();
         sourceList.add(dataSource);
         sourceList.addAll(Arrays.asList(resolvingParents));
         this.dataSource = new ResolvingSource(sourceList);
@@ -211,7 +228,7 @@
     public static CLDRFile loadFromFile(File f, String localeName, DraftStatus minimalDraftStatus, XMLSource source) {
         String fullFileName = f.getAbsolutePath();
         try {
-            fullFileName = f.getCanonicalPath();
+            fullFileName = PathUtilities.getNormalizedPathString(f);
             if (DEBUG_LOGGING) {
                 System.out.println("Parsing: " + fullFileName);
                 Log.logln(LOG_PROGRESS, "Parsing: " + fullFileName);
@@ -255,7 +272,7 @@
                 for (File dir : dirs) {
                     File f = new File(dir, localeName + ".xml");
                     try (InputStream fis = InputStreamFactory.createInputStream(f)) {
-                        cldrFile.loadFromInputStream(f.getCanonicalPath(), localeName, fis, minimalDraftStatus);
+                        cldrFile.loadFromInputStream(PathUtilities.getNormalizedPathString(f), localeName, fis, minimalDraftStatus);
                     }
                 }
                 return cldrFile;
@@ -314,43 +331,24 @@
      */
     public CLDRFile loadFromInputStream(String fileName, String localeName, InputStream fis, DraftStatus minimalDraftStatus) {
         CLDRFile cldrFile = this;
-        try {
-            fis = new StripUTF8BOMInputStream(fis);
-            MyDeclHandler DEFAULT_DECLHANDLER = new MyDeclHandler(cldrFile, minimalDraftStatus);
-
-            // now fill it.
-
-            XMLReader xmlReader = createXMLReader(true);
-            xmlReader.setContentHandler(DEFAULT_DECLHANDLER);
-            xmlReader.setErrorHandler(DEFAULT_DECLHANDLER);
-            xmlReader.setProperty("http://xml.org/sax/properties/lexical-handler", DEFAULT_DECLHANDLER);
-            xmlReader.setProperty("http://xml.org/sax/properties/declaration-handler", DEFAULT_DECLHANDLER);
-            InputSource is = new InputSource(fis);
-            is.setSystemId(fileName);
-            xmlReader.parse(is);
-            if (DEFAULT_DECLHANDLER.isSupplemental < 0) {
-                throw new IllegalArgumentException("root of file must be either ldml or supplementalData");
-            }
-            cldrFile.setNonInheriting(DEFAULT_DECLHANDLER.isSupplemental > 0);
-            if (DEFAULT_DECLHANDLER.overrideCount > 0) {
-                throw new IllegalArgumentException("Internal problems: either data file has duplicate path, or" +
-                    " CLDRFile.isDistinguishing() or CLDRFile.isOrdered() need updating: "
-                    + DEFAULT_DECLHANDLER.overrideCount
-                    + "; The exact problems are printed on the console above.");
-            }
-            if (localeName == null) {
-                cldrFile.dataSource.setLocaleID(cldrFile.getLocaleIDFromIdentity());
-            }
-            return cldrFile;
-        } catch (SAXParseException e) {
-            // System.out.println(CLDRFile.showSAX(e));
-            throw (IllegalArgumentException) new IllegalArgumentException("Can't read " + localeName + "\t"
-                + CLDRFile.showSAX(e)).initCause(e);
-        } catch (SAXException e) {
-            throw (IllegalArgumentException) new IllegalArgumentException("Can't read " + localeName).initCause(e);
-        } catch (IOException e) {
-            throw new ICUUncheckedIOException("Can't read " + localeName, e);
+        fis = new StripUTF8BOMInputStream(fis);
+        InputStreamReader reader = new InputStreamReader(fis, Charset.forName("UTF-8"));
+        MyDeclHandler DEFAULT_DECLHANDLER = new MyDeclHandler(cldrFile, minimalDraftStatus);
+        XMLFileReader.read(fileName, reader, -1, true, DEFAULT_DECLHANDLER);
+        if (DEFAULT_DECLHANDLER.isSupplemental < 0) {
+            throw new IllegalArgumentException("root of file must be either ldml or supplementalData");
         }
+        cldrFile.setNonInheriting(DEFAULT_DECLHANDLER.isSupplemental > 0);
+        if (DEFAULT_DECLHANDLER.overrideCount > 0) {
+            throw new IllegalArgumentException("Internal problems: either data file has duplicate path, or" +
+                " CLDRFile.isDistinguishing() or CLDRFile.isOrdered() need updating: "
+                + DEFAULT_DECLHANDLER.overrideCount
+                + "; The exact problems are printed on the console above.");
+        }
+        if (localeName == null) {
+            cldrFile.dataSource.setLocaleID(cldrFile.getLocaleIDFromIdentity());
+        }
+        return cldrFile;
     }
 
     /**
@@ -358,11 +356,12 @@
      *
      * @see com.ibm.icu.dev.test.util.Freezeble
      */
+    @Override
     public CLDRFile cloneAsThawed() {
         try {
             CLDRFile result = (CLDRFile) super.clone();
             result.locked = false;
-            result.dataSource = (XMLSource) result.dataSource.cloneAsThawed();
+            result.dataSource = result.dataSource.cloneAsThawed();
             return result;
         } catch (CloneNotSupportedException e) {
             throw new InternalError("should never happen");
@@ -406,8 +405,8 @@
      * TODO: shorten this method (over 170 lines) using subroutines.
      */
     public boolean write(PrintWriter pw, Map<String, ?> options) {
-        Set<String> orderedSet = new TreeSet<String>(getComparator());
-        CollectionUtilities.addAll(dataSource.iterator(), orderedSet);
+        Set<String> orderedSet = new TreeSet<>(getComparator());
+        dataSource.forEach(orderedSet::add);
 
         String firstPath = null;
         String firstFullPath = null;
@@ -416,7 +415,7 @@
         boolean suppressInheritanceMarkers = false;
 
         if (orderedSet.size() > 0) { // May not have any elements.
-            firstPath = (String) orderedSet.iterator().next();
+            firstPath = orderedSet.iterator().next();
             firstFullPath = getFullXPath(firstPath);
             firstFullPathParts = XPathParts.getFrozenInstance(firstFullPath);
             dtdType = DtdType.valueOf(firstFullPathParts.getElement(0));
@@ -447,7 +446,7 @@
          * <language type="en"/>
          */
         // if ldml has any attributes, get them.
-        Set<String> identitySet = new TreeSet<String>(getComparator());
+        Set<String> identitySet = new TreeSet<>(getComparator());
         if (!isNonInheriting()) {
             String ldml_identity = "//ldml/identity";
             if (firstFullPath != null) { // if we had a path
@@ -491,11 +490,11 @@
          * There is no difference between "filtered" and "not filtered" in this loop.
          */
         for (Iterator<String> it2 = identitySet.iterator(); it2.hasNext();) {
-            String xpath = (String) it2.next();
+            String xpath = it2.next();
             if (isResolved && xpath.contains("/alias")) {
                 continue;
             }
-            XPathParts current = XPathParts.getInstance(xpath);
+            XPathParts current = XPathParts.getFrozenInstance(xpath).cloneAsThawed();
             current.writeDifference(pw, current, last, "", tempComments);
             last = current;
         }
@@ -520,12 +519,12 @@
              * The difference between "filtered" (currentFiltered) and "not filtered" (current) is that
              * current uses getFullXPath(xpath), while currentFiltered uses xpath.
              */
-            XPathParts currentFiltered = XPathParts.getInstance(xpath);
+            XPathParts currentFiltered = XPathParts.getFrozenInstance(xpath).cloneAsThawed();
             if (currentFiltered.size() >= 2
                 && currentFiltered.getElement(1).equals("identity")) {
                 continue;
             }
-            XPathParts current = XPathParts.getInstance(getFullXPath(xpath));
+            XPathParts current = XPathParts.getFrozenInstance(getFullXPath(xpath)).cloneAsThawed();
             current.writeDifference(pw, currentFiltered, last, v, tempComments);
             last = current;
             wroteAtLeastOnePath = true;
@@ -589,11 +588,12 @@
     /**
      * Get a string value from an xpath.
      */
+    @Override
     public String getStringValue(String xpath) {
         try {
             String result = dataSource.getValueAtPath(xpath);
             if (result == null && dataSource.isResolving()) {
-                final String fallbackPath = getFallbackPath(xpath, false);
+                final String fallbackPath = getFallbackPath(xpath, false, true);
                 if (fallbackPath != null) {
                     result = dataSource.getValueAtPath(fallbackPath);
                 }
@@ -605,15 +605,29 @@
     }
 
     /**
-     * Get GeorgeBailey value: that is, what the value would be if it were not directly contained in the file.
+     * Get GeorgeBailey value: that is, what the value would be if it were not directly contained in the file at that path.
+     * If the value is null or INHERITANCE_MARKER (with resolving), then baileyValue = resolved value.
      * A non-resolving CLDRFile will always return null.
      */
     public String getBaileyValue(String xpath, Output<String> pathWhereFound, Output<String> localeWhereFound) {
         String result = dataSource.getBaileyValue(xpath, pathWhereFound, localeWhereFound);
         if ((result == null || result.equals(CldrUtility.INHERITANCE_MARKER)) && dataSource.isResolving()) {
-            final String fallbackPath = getFallbackPath(xpath, false);
+            final String fallbackPath = getFallbackPath(xpath, false, false); // return null if there is no different sideways path
+            if (xpath.equals(fallbackPath)) {
+                getFallbackPath(xpath, false, true);
+                throw new IllegalArgumentException(); // should never happen
+            }
             if (fallbackPath != null) {
-                result = dataSource.getBaileyValue(fallbackPath, pathWhereFound, localeWhereFound);
+                result = dataSource.getValueAtPath(fallbackPath);
+                if (result != null) {
+                    Status status = new Status();
+                    if (localeWhereFound != null) {
+                        localeWhereFound.value = dataSource.getSourceLocaleID(fallbackPath, status);
+                    }
+                    if (pathWhereFound != null) {
+                        pathWhereFound.value = status.pathWhereFound;
+                    }
+                }
             }
         }
         return result;
@@ -626,10 +640,11 @@
             this.alt = alt;
         }
 
+        @Override
         public String transform(@SuppressWarnings("unused") String source) {
             return alt;
         }
-    };
+    }
 
     /**
      * Get the constructed GeorgeBailey value: that is, if the item would otherwise be constructed (such as "Chinese (Simplified)") use that.
@@ -653,18 +668,19 @@
     /**
      * Only call if xpath doesn't exist in the current file.
      * <p>
-     * For now, just handle counts: see getCountPath Also handle extraPaths
+     * For now, just handle counts and cases: see getCountPath Also handle extraPaths
      *
      * @param xpath
      * @param winning
      *            TODO
+     * @param checkExtraPaths TODO
      * @return
      */
-    private String getFallbackPath(String xpath, boolean winning) {
-        if (xpath.contains("[@count=")) {
+    private String getFallbackPath(String xpath, boolean winning, boolean checkExtraPaths) {
+        if (GrammaticalFeature.pathHasFeature(xpath) != null) {
             return getCountPathWithFallback(xpath, Count.other, winning);
         }
-        if (getRawExtraPaths().contains(xpath)) {
+        if (checkExtraPaths && getRawExtraPaths().contains(xpath)) {
             return xpath;
         }
         return null;
@@ -689,14 +705,15 @@
             throw new NullPointerException("Null distinguishing xpath");
         }
         String result = dataSource.getFullPath(xpath);
-        if (result == null && dataSource.isResolving()) {
-            String fallback = getFallbackPath(xpath, true);
-            if (fallback != null) {
-                // TODO, add attributes from fallback into main
-                result = xpath;
-            }
-        }
-        return result;
+        return result != null ? result : xpath; // we can't add any non-distinguishing values if there is nothing there.
+//        if (result == null && dataSource.isResolving()) {
+//            String fallback = getFallbackPath(xpath, true);
+//            if (fallback != null) {
+//                // TODO, add attributes from fallback into main
+//                result = xpath;
+//            }
+//        }
+//        return result;
     }
 
     /**
@@ -716,6 +733,7 @@
      * @param status
      *            the distinguished path where the item was found. Pass in null if you don't care.
      */
+    @Override
     public String getSourceLocaleID(String distinguishedXPath, CLDRFile.Status status) {
         return getSourceLocaleIdExtended(distinguishedXPath, status, true /* skipInheritanceMarker */);
     }
@@ -734,7 +752,7 @@
     public String getSourceLocaleIdExtended(String distinguishedXPath, CLDRFile.Status status, boolean skipInheritanceMarker) {
         String result = dataSource.getSourceLocaleIdExtended(distinguishedXPath, status, skipInheritanceMarker);
         if (result == XMLSource.CODE_FALLBACK_ID && dataSource.isResolving()) {
-            final String fallbackPath = getFallbackPath(distinguishedXPath, false);
+            final String fallbackPath = getFallbackPath(distinguishedXPath, false, true);
             if (fallbackPath != null && !fallbackPath.equals(distinguishedXPath)) {
                 result = dataSource.getSourceLocaleIdExtended(fallbackPath, status, skipInheritanceMarker);
             }
@@ -813,7 +831,7 @@
             dataSource.putAll(other.dataSource, MERGE_REPLACE_MINE);
         } else if (conflict_resolution == MERGE_REPLACE_MY_DRAFT) {
             // first find all my alt=..proposed items
-            Set<String> hasDraftVersion = new HashSet<String>();
+            Set<String> hasDraftVersion = new HashSet<>();
             for (Iterator<String> it = dataSource.iterator(); it.hasNext();) {
                 String cpath = it.next();
                 String fullpath = getFullXPath(cpath);
@@ -857,7 +875,7 @@
                     && !key.startsWith("//ldml/identity")) {
                     for (int i = 0;; ++i) {
                         String prop = "proposed" + (i == 0 ? "" : String.valueOf(i));
-                        XPathParts parts = XPathParts.getInstance(other.getFullXPath(key)); // not frozen, for addAttribut
+                        XPathParts parts = XPathParts.getFrozenInstance(other.getFullXPath(key)).cloneAsThawed(); // not frozen, for addAttribut
                         String fullPath = parts.addAttribute("alt", prop).toString();
                         String path = getDistinguishingXPath(fullPath, null);
                         if (dataSource.getValueAtPath(path) != null) {
@@ -962,7 +980,7 @@
             "|numbers/symbols/(decimal/group)" +
             "|timeZoneNames/(hourFormat|gmtFormat|regionFormat)" +
             "|pattern" +
-        ")");
+            ")");
 
     static public final Pattern specialsToPushFromRoot = PatternCache.get(
         "/(" +
@@ -973,7 +991,7 @@
             "(?!.*\\[@type=\"stand-alone\"].*\\[@type=\"(abbreviated|wide)\"])" +
             "|numbers/symbols/(decimal/group)" +
             "|timeZoneNames/(hourFormat|gmtFormat|regionFormat)" +
-        ")");
+            ")");
 
     private static final boolean MINIMIZE_ALT_PROPOSED = false;
 
@@ -1001,11 +1019,11 @@
         // Matcher specialPathMatcher = dontRemoveSpecials ? specialsToKeep.matcher("") : null;
         boolean first = true;
         if (removedItems == null) {
-            removedItems = new ArrayList<String>();
+            removedItems = new ArrayList<>();
         } else {
             removedItems.clear();
         }
-        Set<String> checked = new HashSet<String>();
+        Set<String> checked = new HashSet<>();
         for (Iterator<String> it = iterator(); it.hasNext();) { // see what items we have that the other also has
             String curXpath = it.next();
             boolean logicDuplicate = true;
@@ -1046,7 +1064,7 @@
                                     continue;
                                 }
                             }
-                            String keepValue = (String) XMLSource.getPathsAllowingDuplicates().get(xpath);
+                            String keepValue = XMLSource.getPathsAllowingDuplicates().get(xpath);
                             if (keepValue != null && keepValue.equals(currentValue)) {
                                 logicDuplicate = false;
                                 continue;
@@ -1115,6 +1133,7 @@
     /**
      * @return Returns the locale ID. In the case of a supplemental data file, it is SUPPLEMENTAL_NAME.
      */
+    @Override
     public String getLocaleID() {
         return dataSource.getLocaleID();
     }
@@ -1144,6 +1163,7 @@
     /**
      * @see com.ibm.icu.util.Freezable#isFrozen()
      */
+    @Override
     public synchronized boolean isFrozen() {
         return locked;
     }
@@ -1151,6 +1171,7 @@
     /**
      * @see com.ibm.icu.util.Freezable#freeze()
      */
+    @Override
     public synchronized CLDRFile freeze() {
         locked = true;
         dataSource.freeze();
@@ -1179,7 +1200,7 @@
         if (locked) throw new UnsupportedOperationException("Attempt to modify locked object");
         dataSource.getXpathComments().setFinalComment(
             CldrUtility
-            .joinWithSeparation(dataSource.getXpathComments().getFinalComment(), XPathParts.NEWLINE, comment));
+                .joinWithSeparation(dataSource.getXpathComments().getFinalComment(), XPathParts.NEWLINE, comment));
         return this;
     }
 
@@ -1199,7 +1220,7 @@
      * Note that supplementalData is always skipped, and root is always included.
      */
     public static Set<String> getMatchingXMLFiles(File sourceDirs[], Matcher m) {
-        Set<String> s = new TreeSet<String>();
+        Set<String> s = new TreeSet<>();
 
         for (File dir : sourceDirs) {
             if (!dir.exists()) {
@@ -1221,6 +1242,7 @@
         return s;
     }
 
+    @Override
     public Iterator<String> iterator() {
         return dataSource.iterator();
     }
@@ -1236,11 +1258,11 @@
     public Iterator<String> iterator(String prefix, Comparator<String> comparator) {
         Iterator<String> it = (prefix == null || prefix.length() == 0)
             ? dataSource.iterator()
-                : dataSource.iterator(prefix);
-            if (comparator == null) return it;
-            Set<String> orderedSet = new TreeSet<String>(comparator);
-            CollectionUtilities.addAll(it, orderedSet);
-            return orderedSet.iterator();
+            : dataSource.iterator(prefix);
+        if (comparator == null) return it;
+        Set<String> orderedSet = new TreeSet<>(comparator);
+        it.forEachRemaining(orderedSet::add);
+        return orderedSet.iterator();
     }
 
     public Iterable<String> fullIterable() {
@@ -1308,9 +1330,9 @@
             return xpath;
         }
         synchronized (syncObject) {
-            XPathParts parts = XPathParts.getInstance(xpath); // can't be frozen since we call removeAttributes
+            XPathParts parts = XPathParts.getFrozenInstance(xpath).cloneAsThawed(); // can't be frozen since we call removeAttributes
             String restore;
-            HashSet<String> toRemove = new HashSet<String>();
+            HashSet<String> toRemove = new HashSet<>();
             for (int i = 0; i < parts.size(); ++i) {
                 if (parts.getAttributeCount(i) == 0) {
                     continue;
@@ -1323,7 +1345,7 @@
                     if (attribute.equals("draft")) {
                         toRemove.add(attribute);
                     } else if (attribute.equals("alt")) {
-                        String value = (String) attributes.get(attribute);
+                        String value = attributes.get(attribute);
                         int proposedPos = value.indexOf("proposed");
                         if (proposedPos >= 0) {
                             toRemove.add(attribute);
@@ -1370,9 +1392,9 @@
             try {
                 result = (testList[i].length() != 0)
                     ? XMLReaderFactory.createXMLReader(testList[i])
-                        : XMLReaderFactory.createXMLReader();
-                    result.setFeature("http://xml.org/sax/features/validation", validating);
-                    break;
+                    : XMLReaderFactory.createXMLReader();
+                result.setFeature("http://xml.org/sax/features/validation", validating);
+                break;
             } catch (SAXException e1) {
             }
         }
@@ -1408,6 +1430,7 @@
      */
     public File[] getSupplementalXMLFiles() {
         return getSupplementalDirectory().listFiles(new FilenameFilter() {
+            @Override
             public boolean accept(@SuppressWarnings("unused") File dir, String name) {
                 return name.endsWith(".xml");
             }
@@ -1438,26 +1461,26 @@
     // "gb2312han"};
 
     /*    *//**
-     * Value that contains a node. WARNING: this is not done yet, and may change.
-     * In particular, we don't want to return a Node, since that is mutable, and makes caching unsafe!!
-     */
+            * Value that contains a node. WARNING: this is not done yet, and may change.
+            * In particular, we don't want to return a Node, since that is mutable, and makes caching unsafe!!
+            */
     /*
      * static public class NodeValue extends Value {
      * private Node nodeValue;
      *//**
-     * Creation. WARNING, may change.
-     *
-     * @param value
-     * @param currentFullXPath
-     */
+          * Creation. WARNING, may change.
+          *
+          * @param value
+          * @param currentFullXPath
+          */
     /*
      * public NodeValue(Node value, String currentFullXPath) {
      * super(currentFullXPath);
      * this.nodeValue = value;
      * }
      *//**
-     * boilerplate
-     */
+          * boilerplate
+          */
 
     /*
      * public boolean hasSameValue(Object other) {
@@ -1465,8 +1488,8 @@
      * return nodeValue.equals(((NodeValue)other).nodeValue);
      * }
      *//**
-     * boilerplate
-     */
+          * boilerplate
+          */
     /*
      * public String getStringValue() {
      * return nodeValue.toString();
@@ -1481,7 +1504,7 @@
      * }
      */
 
-    private static class MyDeclHandler implements DeclHandler, ContentHandler, LexicalHandler, ErrorHandler {
+    private static class MyDeclHandler implements AllHandler {
         private static UnicodeSet whitespace = new UnicodeSet("[:whitespace:]");
         private DraftStatus minimalDraftStatus;
         private static final boolean SHOW_START_END = false;
@@ -1619,7 +1642,7 @@
         /**
          * Types which changed from 'type' to 'choice', but not in supplemental data.
          */
-        private static Set<String> changedTypes = new HashSet<String>(Arrays.asList(new String[] {
+        private static Set<String> changedTypes = new HashSet<>(Arrays.asList(new String[] {
             "abbreviationFallback",
             "default", "mapping", "measurementSystem", "preferenceOrdering" }));
 
@@ -1724,10 +1747,10 @@
         private void warnOnOverride(String former, String formerPath) {
             String distinguishing = CLDRFile.getDistinguishingXPath(formerPath, null);
             System.out.println("\tERROR in " + target.getLocaleID()
-            + ";\toverriding old value <" + former + "> at path " + distinguishing +
-            "\twith\t<" + lastChars + ">" +
-            CldrUtility.LINE_SEPARATOR + "\told fullpath: " + formerPath +
-            CldrUtility.LINE_SEPARATOR + "\tnew fullpath: " + currentFullXPath);
+                + ";\toverriding old value <" + former + "> at path " + distinguishing +
+                "\twith\t<" + lastChars + ">" +
+                CldrUtility.LINE_SEPARATOR + "\told fullpath: " + formerPath +
+                CldrUtility.LINE_SEPARATOR + "\tnew fullpath: " + currentFullXPath);
             overrideCount += 1;
         }
 
@@ -1778,22 +1801,24 @@
 
         // SAX items we need to catch
 
+        @Override
         public void startElement(
             String uri,
             String localName,
             String qName,
             Attributes attributes)
-                throws SAXException {
+            throws SAXException {
             Log.logln(LOG_PROGRESS || SHOW_START_END, "startElement uri\t" + uri
                 + "\tlocalName " + localName
                 + "\tqName " + qName
                 + "\tattributes " + show(attributes));
             try {
                 if (isSupplemental < 0) { // set by first element
-                    attributeOrder = new TreeMap<String, String>(
+                    attributeOrder = new TreeMap<>(
                         // HACK for ldmlIcu
                         dtdData.dtdType == DtdType.ldml
-                        ? CLDRFile.getAttributeOrdering() : dtdData.getAttributeComparator());
+                            ? CLDRFile.getAttributeOrdering()
+                            : dtdData.getAttributeComparator());
                     isSupplemental = target.dtdType == DtdType.ldml ? 0 : 1;
                 }
                 push(qName, attributes);
@@ -1803,6 +1828,7 @@
             }
         }
 
+        @Override
         public void endElement(String uri, String localName, String qName)
             throws SAXException {
             Log.logln(LOG_PROGRESS || SHOW_START_END, "endElement uri\t" + uri + "\tlocalName " + localName
@@ -1818,6 +1844,7 @@
         //static final char XML_LINESEPARATOR = (char) 0xA;
         //static final String XML_LINESEPARATOR_STRING = String.valueOf(XML_LINESEPARATOR);
 
+        @Override
         public void characters(char[] ch, int start, int length)
             throws SAXException {
             try {
@@ -1835,6 +1862,7 @@
             }
         }
 
+        @Override
         public void startDTD(String name, String publicId, String systemId) throws SAXException {
             Log.logln(LOG_PROGRESS, "startDTD name: " + name
                 + ", publicId: " + publicId
@@ -1844,11 +1872,13 @@
             target.dtdData = dtdData = DtdData.getInstance(target.dtdType);
         }
 
+        @Override
         public void endDTD() throws SAXException {
             Log.logln(LOG_PROGRESS, "endDTD");
             commentStack--;
         }
 
+        @Override
         public void comment(char[] ch, int start, int length) throws SAXException {
             final String string = new String(ch, start, length);
             Log.logln(LOG_PROGRESS, commentStack + " comment " + string);
@@ -1866,6 +1896,7 @@
             }
         }
 
+        @Override
         public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
             if (LOG_PROGRESS)
                 Log.logln(LOG_PROGRESS,
@@ -1882,11 +1913,13 @@
             // }
         }
 
+        @Override
         public void startDocument() throws SAXException {
             Log.logln(LOG_PROGRESS, "startDocument");
             commentStack = 0; // initialize
         }
 
+        @Override
         public void endDocument() throws SAXException {
             Log.logln(LOG_PROGRESS, "endDocument");
             try {
@@ -1899,58 +1932,71 @@
 
         // ==== The following are just for debuggin =====
 
+        @Override
         public void elementDecl(String name, String model) throws SAXException {
             Log.logln(LOG_PROGRESS, "Attribute\t" + name + "\t" + model);
         }
 
+        @Override
         public void attributeDecl(String eName, String aName, String type, String mode, String value)
             throws SAXException {
             Log.logln(LOG_PROGRESS, "Attribute\t" + eName + "\t" + aName + "\t" + type + "\t" + mode + "\t" + value);
         }
 
+        @Override
         public void internalEntityDecl(String name, String value) throws SAXException {
             Log.logln(LOG_PROGRESS, "Internal Entity\t" + name + "\t" + value);
         }
 
+        @Override
         public void externalEntityDecl(String name, String publicId, String systemId) throws SAXException {
             Log.logln(LOG_PROGRESS, "Internal Entity\t" + name + "\t" + publicId + "\t" + systemId);
         }
 
+        @Override
         public void processingInstruction(String target, String data)
             throws SAXException {
             Log.logln(LOG_PROGRESS, "processingInstruction: " + target + ", " + data);
         }
 
+        @Override
         public void skippedEntity(String name)
             throws SAXException {
             Log.logln(LOG_PROGRESS, "skippedEntity: " + name);
         }
 
+        @Override
         public void setDocumentLocator(Locator locator) {
             Log.logln(LOG_PROGRESS, "setDocumentLocator Locator " + locator);
         }
 
+        @Override
         public void startPrefixMapping(String prefix, String uri) throws SAXException {
             Log.logln(LOG_PROGRESS, "startPrefixMapping prefix: " + prefix +
                 ", uri: " + uri);
         }
 
+        @Override
         public void endPrefixMapping(String prefix) throws SAXException {
             Log.logln(LOG_PROGRESS, "endPrefixMapping prefix: " + prefix);
         }
 
+        @Override
         public void startEntity(String name) throws SAXException {
             Log.logln(LOG_PROGRESS, "startEntity name: " + name);
         }
 
+        @Override
         public void endEntity(String name) throws SAXException {
             Log.logln(LOG_PROGRESS, "endEntity name: " + name);
         }
 
+        @Override
         public void startCDATA() throws SAXException {
             Log.logln(LOG_PROGRESS, "startCDATA");
         }
 
+        @Override
         public void endCDATA() throws SAXException {
             Log.logln(LOG_PROGRESS, "endCDATA");
         }
@@ -1960,6 +2006,7 @@
          *
          * @see org.xml.sax.ErrorHandler#error(org.xml.sax.SAXParseException)
          */
+        @Override
         public void error(SAXParseException exception) throws SAXException {
             Log.logln(LOG_PROGRESS || true, "error: " + showSAX(exception));
             throw exception;
@@ -1970,6 +2017,7 @@
          *
          * @see org.xml.sax.ErrorHandler#fatalError(org.xml.sax.SAXParseException)
          */
+        @Override
         public void fatalError(SAXParseException exception) throws SAXException {
             Log.logln(LOG_PROGRESS, "fatalError: " + showSAX(exception));
             throw exception;
@@ -1980,6 +2028,7 @@
          *
          * @see org.xml.sax.ErrorHandler#warning(org.xml.sax.SAXParseException)
          */
+        @Override
         public void warning(SAXParseException exception) throws SAXException {
             Log.logln(LOG_PROGRESS, "warning: " + showSAX(exception));
             throw exception;
@@ -2001,7 +2050,7 @@
      * Says whether the whole file is draft
      */
     public boolean isDraft() {
-        String item = (String) iterator().next();
+        String item = iterator().next();
         return item.startsWith("//ldml[@draft=\"unconfirmed\"]");
     }
 
@@ -2266,7 +2315,6 @@
         return -1;
     }
 
-
     /**
      * Returns the name of the given bcp47 identifier. Note that extensions must
      * be specified using the old "\@key=type" syntax.
@@ -2332,8 +2380,7 @@
         Transform<String, String> altPicker,
         String localeKeyTypePattern,
         String localePattern,
-        String localeSeparator
-        ) {
+        String localeSeparator) {
 
         String name;
         String original;
@@ -2379,53 +2426,54 @@
         }
 
         // Look for key-type pairs.
-        main:
-            for (Entry<String, List<String>> extension : lparser.getLocaleExtensionsDetailed().entrySet()) {
-                String key = extension.getKey();
-                if (key.equals("h0")) {
-                    continue;
-                }
-                List<String> keyValue = extension.getValue();
-                String oldFormatType = (key.equals("ca") ? JOIN_HYPHEN : JOIN_UNDERBAR).join(keyValue); // default value
-                // Check if key/type pairs exist in the CLDRFile first.
-                String value = getKeyValueName(key, oldFormatType);
-                if (value != null) {
-                    value = value.replace('(', '[').replace(')', ']').replace('（', '［').replace('）', '］');
-                } else {
-                    // if we fail, then we construct from the key name and the value
-                    String kname = getKeyName(key);
-                    if (kname == null) {
-                        kname = key; // should not happen, but just in case
-                    }
-                    switch(key) {
-                    case "t":
-                        List<String> hybrid = lparser.getLocaleExtensionsDetailed().get("h0");
-                        if (hybrid != null) {
-                            kname = getKeyValueName("h0", JOIN_UNDERBAR.join(hybrid));
-                        }
-                        oldFormatType = getName(oldFormatType);
-                        break;
-                    case "h0":
-                        continue main;
-                    case "cu":
-                        oldFormatType = getName(CURRENCY_SYMBOL, oldFormatType.toUpperCase(Locale.ROOT));
-                        break;
-                    case "tz":
-                        oldFormatType = getTZName(oldFormatType, "VVVV");
-                        break;
-                    case "kr":
-                        oldFormatType = getReorderName(localeSeparator, keyValue);
-                        break;
-                    case "rg": case "sd":
-                        oldFormatType = getName(SUBDIVISION_NAME, oldFormatType);
-                        break;
-                    default: oldFormatType = JOIN_HYPHEN.join(keyValue);
-                    }
-                    value = MessageFormat.format(localeKeyTypePattern, new Object[] { kname, oldFormatType });
-                    value = value.replace('(', '[').replace(')', ']').replace('（', '［').replace('）', '］');
-                }
-                extras = extras.isEmpty() ? value : MessageFormat.format(localeSeparator, new Object[] { extras, value });
+        main: for (Entry<String, List<String>> extension : lparser.getLocaleExtensionsDetailed().entrySet()) {
+            String key = extension.getKey();
+            if (key.equals("h0")) {
+                continue;
             }
+            List<String> keyValue = extension.getValue();
+            String oldFormatType = (key.equals("ca") ? JOIN_HYPHEN : JOIN_UNDERBAR).join(keyValue); // default value
+            // Check if key/type pairs exist in the CLDRFile first.
+            String value = getKeyValueName(key, oldFormatType);
+            if (value != null) {
+                value = value.replace('(', '[').replace(')', ']').replace('（', '［').replace('）', '］');
+            } else {
+                // if we fail, then we construct from the key name and the value
+                String kname = getKeyName(key);
+                if (kname == null) {
+                    kname = key; // should not happen, but just in case
+                }
+                switch (key) {
+                case "t":
+                    List<String> hybrid = lparser.getLocaleExtensionsDetailed().get("h0");
+                    if (hybrid != null) {
+                        kname = getKeyValueName("h0", JOIN_UNDERBAR.join(hybrid));
+                    }
+                    oldFormatType = getName(oldFormatType);
+                    break;
+                case "h0":
+                    continue main;
+                case "cu":
+                    oldFormatType = getName(CURRENCY_SYMBOL, oldFormatType.toUpperCase(Locale.ROOT));
+                    break;
+                case "tz":
+                    oldFormatType = getTZName(oldFormatType, "VVVV");
+                    break;
+                case "kr":
+                    oldFormatType = getReorderName(localeSeparator, keyValue);
+                    break;
+                case "rg":
+                case "sd":
+                    oldFormatType = getName(SUBDIVISION_NAME, oldFormatType);
+                    break;
+                default:
+                    oldFormatType = JOIN_HYPHEN.join(keyValue);
+                }
+                value = MessageFormat.format(localeKeyTypePattern, new Object[] { kname, oldFormatType });
+                value = value.replace('(', '[').replace(')', ']').replace('（', '［').replace('）', '］');
+            }
+            extras = extras.isEmpty() ? value : MessageFormat.format(localeSeparator, new Object[] { extras, value });
+        }
         // now handle stray extensions
         for (Entry<String, List<String>> extension : lparser.getExtensionsDetailed().entrySet()) {
             String value = MessageFormat.format(localeKeyTypePattern, new Object[] { extension.getKey(), JOIN_HYPHEN.join(extension.getValue()) });
@@ -2519,8 +2567,6 @@
         return result;
     }
 
-
-
     /**
      * Returns the name of the given bcp47 identifier. Note that extensions must
      * be specified using the old "\@key=type" syntax.
@@ -2536,6 +2582,7 @@
      * For use in getting short names.
      */
     public static final Transform<String, String> SHORT_ALTS = new Transform<String, String>() {
+        @Override
         public String transform(@SuppressWarnings("unused") String source) {
             return "short";
         }
@@ -2558,8 +2605,7 @@
             getWinningValueWithBailey("//ldml/localeDisplayNames/localeDisplayPattern/localeKeyTypePattern"),
             getWinningValueWithBailey("//ldml/localeDisplayNames/localeDisplayPattern/localePattern"),
             getWinningValueWithBailey("//ldml/localeDisplayNames/localeDisplayPattern/localeSeparator"),
-            altPicker
-            );
+            altPicker);
     }
 
     /**
@@ -2603,6 +2649,7 @@
      * @return ordered collection with items.
      * @deprecated
      */
+    @Deprecated
     public static List<String> getElementOrder() {
         return Collections.emptyList(); // elementOrdering.getOrder(); // already unmodifiable
     }
@@ -2688,8 +2735,8 @@
     public CLDRFile makeDraft(DraftStatus draftStatus) {
         if (locked) throw new UnsupportedOperationException("Attempt to modify locked object");
         for (Iterator<String> it = dataSource.iterator(); it.hasNext();) {
-            String path = (String) it.next();
-            XPathParts parts = XPathParts.getInstance(dataSource.getFullPath(path)); // not frozen, for addAttribute
+            String path = it.next();
+            XPathParts parts = XPathParts.getFrozenInstance(dataSource.getFullPath(path)).cloneAsThawed(); // not frozen, for addAttribute
             parts.addAttribute("draft", draftStatus.toString());
             dataSource.putValueAtPath(parts.toString(), dataSource.getValueAtPath(path));
         }
@@ -2706,7 +2753,7 @@
 
     static final UnicodeSet HACK_CASE_CLOSURE_SET = new UnicodeSet(
         "[ſẛﬀẞ{i̇}\u1F71\u1F73\u1F75\u1F77\u1F79\u1F7B\u1F7D\u1FBB\u1FBE\u1FC9\u1FCB\u1FD3\u1FDB\u1FE3\u1FEB\u1FF9\u1FFB\u2126\u212A\u212B]")
-        .freeze();
+            .freeze();
 
     public enum ExemplarType {
         main, auxiliary, index, punctuation, numbers;
@@ -2749,7 +2796,7 @@
         private NumberingSystem(String path) {
             this.path = path;
         }
-    };
+    }
 
     public UnicodeSet getExemplarsNumeric(NumberingSystem system) {
         String numberingSystem = system.path == null ? "latn" : getStringValue(system.path);
@@ -2789,7 +2836,7 @@
 
     public String getCurrentMetazone(String zone) {
         for (Iterator<String> it2 = iterator(); it2.hasNext();) {
-            String xpath = (String) it2.next();
+            String xpath = it2.next();
             if (xpath.startsWith("//ldml/dates/timeZoneNames/zone[@type=\"" + zone + "\"]/usesMetazone")) {
                 XPathParts parts = XPathParts.getFrozenInstance(xpath);
                 if (!parts.containsAttribute("to")) {
@@ -2822,8 +2869,8 @@
                 "normalizedPathMap:" + normalizedPathMap.size();
         }
 
-        private static Map<String, String> distinguishingMap = new ConcurrentHashMap<String, String>();
-        private static Map<String, String> normalizedPathMap = new ConcurrentHashMap<String, String>();
+        private static Map<String, String> distinguishingMap = new ConcurrentHashMap<>();
+        private static Map<String, String> normalizedPathMap = new ConcurrentHashMap<>();
 
         static {
             distinguishingMap.put("", ""); // seed this to make the code simpler
@@ -2831,12 +2878,12 @@
 
         public static String getDistinguishingXPath(String xpath, String[] normalizedPath) {
             //     synchronized (distinguishingMap) {
-            String result = (String) distinguishingMap.get(xpath);
+            String result = distinguishingMap.get(xpath);
             if (result == null) {
-                XPathParts distinguishingParts = XPathParts.getInstance(xpath); // not frozen, for removeAttributes
+                XPathParts distinguishingParts = XPathParts.getFrozenInstance(xpath).cloneAsThawed(); // not frozen, for removeAttributes
 
                 DtdType type = distinguishingParts.getDtdData().dtdType;
-                Set<String> toRemove = new HashSet<String>();
+                Set<String> toRemove = new HashSet<>();
 
                 // first clean up draft and alt
                 String draft = null;
@@ -2855,14 +2902,14 @@
                     Map<String, String> attributes = distinguishingParts.getAttributes(i);
                     for (String attribute : attributes.keySet()) {
                         if (attribute.equals("draft")) {
-                            draft = (String) attributes.get(attribute);
+                            draft = attributes.get(attribute);
                             toRemove.add(attribute);
                         } else if (attribute.equals("alt")) {
-                            alt = (String) attributes.get(attribute);
+                            alt = attributes.get(attribute);
                             toRemove.add(attribute);
                         } else if (attribute.equals("references")) {
                             if (references.length() != 0) references += " ";
-                            references += (String) attributes.get("references");
+                            references += attributes.get("references");
                             toRemove.add(attribute);
                         }
                     }
@@ -2913,7 +2960,7 @@
                 distinguishingMap.put(xpath, result);
             }
             if (normalizedPath != null) {
-                normalizedPath[0] = (String) normalizedPathMap.get(xpath);
+                normalizedPath[0] = normalizedPathMap.get(xpath);
                 if (normalizedPath[0] == null) {
                     normalizedPath[0] = xpath;
                 }
@@ -2924,7 +2971,7 @@
         public Map<String, String> getNonDistinguishingAttributes(String fullPath, Map<String, String> result,
             Set<String> skipList) {
             if (result == null) {
-                result = new LinkedHashMap<String, String>();
+                result = new LinkedHashMap<>();
             } else {
                 result.clear();
             }
@@ -2947,6 +2994,7 @@
     public static class Status {
         public String pathWhereFound;
 
+        @Override
         public String toString() {
             return pathWhereFound;
         }
@@ -2985,7 +3033,7 @@
         String versionString = parts.findFirstAttributeValue("version");
         return versionString == null
             ? null
-                : VersionInfo.getInstance(versionString);
+            : VersionInfo.getInstance(versionString);
     }
 
     private boolean contains(Map<String, String> a, Map<String, String> b) {
@@ -3010,7 +3058,7 @@
         Map<String, String> lastAttributes = parts.getAttributes(parts.size() - 1);
         String base = parts.toString(parts.size() - 1) + "/" + parts.getElement(parts.size() - 1); // trim final element
         for (Iterator<String> it = iterator(base); it.hasNext();) {
-            String otherPath = (String) it.next();
+            String otherPath = it.next();
             XPathParts other = XPathParts.getFrozenInstance(otherPath);
             if (other.size() != parts.size()) {
                 continue;
@@ -3079,8 +3127,8 @@
     public String getWinningValueWithBailey(String path) {
         String winningValue = getWinningValue(path);
         if (CldrUtility.INHERITANCE_MARKER.equals(winningValue)) {
-            Output<String> localeWhereFound = new Output<String>();
-            Output<String> pathWhereFound = new Output<String>();
+            Output<String> localeWhereFound = new Output<>();
+            Output<String> pathWhereFound = new Output<>();
             winningValue = getBaileyValue(path, pathWhereFound, localeWhereFound);
         }
         return winningValue;
@@ -3100,8 +3148,8 @@
     public String getStringValueWithBailey(String path) {
         String value = getStringValue(path);
         if (CldrUtility.INHERITANCE_MARKER.equals(value)) {
-            Output<String> localeWhereFound = new Output<String>();
-            Output<String> pathWhereFound = new Output<String>();
+            Output<String> localeWhereFound = new Output<>();
+            Output<String> pathWhereFound = new Output<>();
             value = getBaileyValue(path, pathWhereFound, localeWhereFound);
         }
         return value;
@@ -3142,7 +3190,7 @@
      */
     public Set<String> getPathsWithValue(String valueToMatch, String pathPrefix, Matcher pathMatcher, Set<String> result) {
         if (result == null) {
-            result = new HashSet<String>();
+            result = new HashSet<>();
         }
         dataSource.getPathsWithValue(valueToMatch, pathPrefix, result);
         if (pathMatcher == null) {
@@ -3167,7 +3215,7 @@
      */
     public Set<String> getPaths(String pathPrefix, Matcher pathMatcher, Set<String> result) {
         if (result == null) {
-            result = new HashSet<String>();
+            result = new HashSet<>();
         }
         for (Iterator<String> it = dataSource.iterator(pathPrefix); it.hasNext();) {
             String path = it.next();
@@ -3181,7 +3229,7 @@
 
     public enum WinningChoice {
         NORMAL, WINNING
-    };
+    }
 
     /**
      * Used in TestUser to get the "winning" path. Simple implementation just for testing.
@@ -3201,6 +3249,7 @@
          * at
          * the number of votes next, and whither there was an approved or provisional path.
          */
+        @Override
         public int compare(String o1, String o2) {
             if (o1.contains(user)) {
                 if (!o2.contains(user)) {
@@ -3221,7 +3270,7 @@
      */
     public static class TestUser extends CLDRFile {
 
-        Map<String, String> userOverrides = new HashMap<String, String>();
+        Map<String, String> userOverrides = new HashMap<>();
 
         public TestUser(CLDRFile baseFile, String user, boolean resolved) {
             super(resolved ? baseFile.dataSource : baseFile.dataSource.getUnresolving());
@@ -3264,7 +3313,7 @@
      * @return
      */
     public Collection<String> getExtraPaths() {
-        Set<String> toAddTo = new HashSet<String>();
+        Set<String> toAddTo = new HashSet<>();
         toAddTo.addAll(getRawExtraPaths());
         for (String path : this) {
             toAddTo.remove(path);
@@ -3294,9 +3343,9 @@
      *
      * @return
      */
-    public Collection<String> getRawExtraPaths() {
+    public Set<String> getRawExtraPaths() {
         if (extraPaths == null) {
-            extraPaths = Collections.unmodifiableCollection(getRawExtraPathsPrivate(new HashSet<String>()));
+            extraPaths = ImmutableSet.copyOf(getRawExtraPathsPrivate(new LinkedHashSet<String>()));
             if (DEBUG) {
                 System.out.println(getLocaleID() + "\textras: " + extraPaths.size());
             }
@@ -3332,7 +3381,7 @@
         if (plurals == null && DEBUG) {
             System.err.println("No " + PluralType.cardinal + "  plurals for " + getLocaleID() + " in " + supplementalData.getDirectory().getAbsolutePath());
         }
-        Set<Count> pluralCounts = null;
+        Set<Count> pluralCounts = Collections.emptySet();
         if (plurals != null) {
             pluralCounts = plurals.getCounts();
             if (pluralCounts.size() != 1) {
@@ -3344,7 +3393,7 @@
         String locale = getLocaleID();
         DayPeriodInfo dayPeriods = supplementalData.getDayPeriods(DayPeriodInfo.Type.format, locale);
         if (dayPeriods != null) {
-            LinkedHashSet<DayPeriod> items = new LinkedHashSet<DayPeriod>(dayPeriods.getPeriods());
+            LinkedHashSet<DayPeriod> items = new LinkedHashSet<>(dayPeriods.getPeriods());
             items.add(DayPeriod.am);
             items.add(DayPeriod.pm);
             for (String context : new String[] { "format", "stand-alone" }) {
@@ -3391,13 +3440,70 @@
             String currencyCode = code.toUpperCase();
             toAddTo.add("//ldml/numbers/currencies/currency[@type=\"" + currencyCode + "\"]/symbol");
             toAddTo.add("//ldml/numbers/currencies/currency[@type=\"" + currencyCode + "\"]/displayName");
-            if (pluralCounts != null) {
+            if (!pluralCounts.isEmpty()) {
                 for (Count count : pluralCounts) {
                     toAddTo.add("//ldml/numbers/currencies/currency[@type=\"" + currencyCode + "\"]/displayName[@count=\"" + count.toString() + "\"]");
                 }
             }
         }
 
+        // grammatical info
+
+        GrammarInfo grammarInfo = supplementalData.getGrammarInfo(getLocaleID(), true);
+
+        if ("de".equals(getLocaleID())) {
+            int debug = 0;
+        }
+
+        if (grammarInfo != null) {
+            if (grammarInfo.hasInfo(GrammaticalTarget.nominal)) {
+                Collection<String> genders = grammarInfo.get(GrammaticalTarget.nominal, GrammaticalFeature.grammaticalGender, GrammaticalScope.units);
+                Collection<String> rawCases = grammarInfo.get(GrammaticalTarget.nominal, GrammaticalFeature.grammaticalCase, GrammaticalScope.units);
+                Collection<String> nomCases = rawCases.isEmpty() ? casesNominativeOnly : rawCases;
+                Collection<Count> adjustedPlurals = GrammarInfo.NON_COMPUTABLE_PLURALS.get(locale);
+                if (adjustedPlurals.isEmpty()) {
+                    adjustedPlurals = pluralCounts;
+                } else {
+                    int debug = 0;
+                }
+
+                // TODO use UnitPathType to get paths
+                if (!genders.isEmpty()) {
+                    for (String unit : GrammarInfo.SPECIAL_TRANSLATION_UNITS) {
+                        toAddTo.add("//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"" + unit + "\"]/gender");
+                    }
+                    for (Count plural : adjustedPlurals) {
+                        for (String gender : genders) {
+                            for (String case1 : nomCases) {
+                                final String grammaticalAttributes = GrammarInfo.getGrammaticalInfoAttributes(grammarInfo, UnitPathType.power, plural.toString(),
+                                    gender, case1);
+                                toAddTo
+                                    .add("//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power2\"]/compoundUnitPattern1" + grammaticalAttributes);
+                                toAddTo
+                                    .add("//ldml/units/unitLength[@type=\"long\"]/compoundUnit[@type=\"power3\"]/compoundUnitPattern1" + grammaticalAttributes);
+                            }
+                        }
+                    }
+                    //             <genderMinimalPairs gender="masculine">Der {0} ist …</genderMinimalPairs>
+                    for (String gender : genders) {
+                        toAddTo.add("//ldml/numbers/minimalPairs/genderMinimalPairs[@gender=\"" + gender + "\"]");
+                    }
+                }
+                if (!rawCases.isEmpty()) {
+                    for (String case1 : rawCases) {
+                        //          <caseMinimalPairs case="nominative">{0} kostet €3,50.</caseMinimalPairs>
+                        toAddTo.add("//ldml/numbers/minimalPairs/caseMinimalPairs[@case=\"" + case1 + "\"]");
+
+                        for (Count plural : adjustedPlurals) {
+                            for (String unit : GrammarInfo.SPECIAL_TRANSLATION_UNITS) {
+                                toAddTo.add("//ldml/units/unitLength[@type=\"long\"]/unit[@type=\"" + unit + "\"]/unitPattern"
+                                    + GrammarInfo.getGrammaticalInfoAttributes(grammarInfo, UnitPathType.unit, plural.toString(), null, case1));
+                            }
+                        }
+                    }
+                }
+            }
+        }
         return toAddTo;
     }
 
@@ -3442,7 +3548,7 @@
             if (excludedZones == null) {
                 SupplementalDataInfo supplementalData = CLDRConfig.getInstance().getSupplementalDataInfo();
                 // SupplementalDataInfo.getInstance(getSupplementalDirectory());
-                excludedZones = new HashSet<String>(supplementalData.getSingleRegionZones());
+                excludedZones = new HashSet<>(supplementalData.getSingleRegionZones());
                 excludedZones = Collections.unmodifiableSet(excludedZones); // protect
             }
             return excludedZones;
@@ -3450,13 +3556,16 @@
     }
 
     /**
-     * Get the path with the given count.
-     * It acts like there is an alias in root from count=n to count=one,
+     * Get the path with the given count, case, or gender, with fallback. The fallback acts like an alias in root.
+     * <p>Count:</p>
+     * <p>It acts like there is an alias in root from count=n to count=one,
      * then for currency display names from count=one to no count <br>
      * For unitPatterns, falls back to Count.one. <br>
-     * For others, falls back to Count.one, then no count.
-     * <p>
-     * The fallback acts like an alias in root.
+     * For others, falls back to Count.one, then no count.</p>
+     * <p>Case</p>
+     * <p>The fallback is to no case, which = nominative.</p>
+     * <p>Case</p>
+     * <p>The fallback is to no case, which = nominative.</p>
      *
      * @param xpath
      * @param count
@@ -3467,43 +3576,74 @@
      */
     public String getCountPathWithFallback(String xpath, Count count, boolean winning) {
         String result;
-        XPathParts parts = XPathParts.getInstance(xpath); // not frozen, addAttribute in getCountPathWithFallback2
+        XPathParts parts = XPathParts.getFrozenInstance(xpath).cloneAsThawed(); // not frozen, addAttribute in getCountPathWithFallback2
+
+        // In theory we should do all combinations of gender, case, count (and eventually definiteness), but for simplicity
+        // we just successively try "zeroing" each one in a set order.
+        // tryDefault modifies the parts in question
+        Output<String> newPath = new Output<>();
+        if (tryDefault(parts, "gender", null, newPath)) {
+            return newPath.value;
+        }
+
+        if (tryDefault(parts, "case", null, newPath)) {
+            return newPath.value;
+        }
+
         boolean isDisplayName = parts.contains("displayName");
 
-        String intCount = parts.getAttributeValue(-1, "count");
-        if (intCount != null && CldrUtility.DIGITS.containsAll(intCount)) {
-            try {
-                int item = Integer.parseInt(intCount);
-                String locale = getLocaleID();
-                // TODO get data from SupplementalDataInfo...
-                PluralRules rules = PluralRules.forLocale(new ULocale(locale));
-                String keyword = rules.select(item);
-                Count itemCount = Count.valueOf(keyword);
-                result = getCountPathWithFallback2(parts, xpath, itemCount, winning);
-                if (result != null && isNotRoot(result)) {
-                    return result;
+        String actualCount = parts.getAttributeValue(-1, "count");
+        if (actualCount != null) {
+            if (CldrUtility.DIGITS.containsAll(actualCount)) {
+                try {
+                    int item = Integer.parseInt(actualCount);
+                    String locale = getLocaleID();
+                    // TODO get data from SupplementalDataInfo...
+                    PluralRules rules = PluralRules.forLocale(new ULocale(locale));
+                    String keyword = rules.select(item);
+                    Count itemCount = Count.valueOf(keyword);
+                    result = getCountPathWithFallback2(parts, xpath, itemCount, winning);
+                    if (result != null && isNotRoot(result)) {
+                        return result;
+                    }
+                } catch (NumberFormatException e) {
                 }
-            } catch (NumberFormatException e) {
             }
-        }
 
-        // try the given count first
-        result = getCountPathWithFallback2(parts, xpath, count, winning);
-        if (result != null && isNotRoot(result)) {
-            return result;
-        }
-        // now try fallback
-        if (count != Count.other) {
-            result = getCountPathWithFallback2(parts, xpath, Count.other, winning);
+            // try the given count first
+            result = getCountPathWithFallback2(parts, xpath, count, winning);
             if (result != null && isNotRoot(result)) {
                 return result;
             }
+            // now try fallback
+            if (count != Count.other) {
+                result = getCountPathWithFallback2(parts, xpath, Count.other, winning);
+                if (result != null && isNotRoot(result)) {
+                    return result;
+                }
+            }
+            // now try deletion (for currency)
+            if (isDisplayName) {
+                result = getCountPathWithFallback2(parts, xpath, null, winning);
+            }
+            return result;
         }
-        // now try deletion (for currency)
-        if (isDisplayName) {
-            result = getCountPathWithFallback2(parts, xpath, null, winning);
+        return null;
+    }
+
+    /**
+     * Modify the parts by setting the attribute in question to the default value (typically null to clear). If there is a value for that path, use it.
+     */
+    public boolean tryDefault(XPathParts parts, String attribute, String defaultValue, Output<String> newPath) {
+        String oldValue = parts.getAttributeValue(-1, attribute);
+        if (oldValue != null) {
+            parts.setAttribute(-1, attribute, null);
+            newPath.value = parts.toString();
+            if (dataSource.getValueAtPath(newPath.value) != null) {
+                return true;
+            }
         }
-        return result;
+        return false;
     }
 
     private String getCountPathWithFallback2(XPathParts parts, String xpathWithNoCount,
@@ -3545,7 +3685,7 @@
         if (isNotRoot(winningPath)) {
             return getStringValue(winningPath);
         }
-        String fallbackPath = getFallbackPath(winningPath, true);
+        String fallbackPath = getFallbackPath(winningPath, true, true);
         if (fallbackPath != null) {
             String value = getWinningValue(fallbackPath);
             if (value != null) {
@@ -3704,7 +3844,7 @@
             }
             String result = dataSource.getValueAtPath(xpath);
             if (result == null && dataSource.isResolving()) {
-                final String fallbackPath = getFallbackPath(xpath, false);
+                final String fallbackPath = getFallbackPath(xpath, false, true);
                 if (fallbackPath != null) {
                     result = dataSource.getValueAtPath(fallbackPath);
                 }
@@ -3727,4 +3867,42 @@
         return sourceFileUnresolved.getStringValue(xpath);
     }
 
+    /**
+     * Create an overriding LocaleStringProvider for testing and example generation
+     * @param pathAndValueOverrides
+     * @return
+     */
+    public LocaleStringProvider makeOverridingStringProvider(Map<String, String> pathAndValueOverrides) {
+        return new OverridingStringProvider(pathAndValueOverrides);
+    }
+
+    public class OverridingStringProvider implements LocaleStringProvider {
+        private final Map<String, String> pathAndValueOverrides;
+
+        public OverridingStringProvider(Map<String, String> pathAndValueOverrides) {
+            this.pathAndValueOverrides = pathAndValueOverrides;
+        }
+
+        @Override
+        public String getStringValue(String xpath) {
+            String value = pathAndValueOverrides.get(xpath);
+            return value != null ? value : CLDRFile.this.getStringValue(xpath);
+        }
+
+        @Override
+        public String getLocaleID() {
+            return CLDRFile.this.getLocaleID();
+        }
+
+        @Override
+        public String getSourceLocaleID(String xpath, Status status) {
+            if (pathAndValueOverrides.containsKey(xpath)) {
+                if (status != null) {
+                    status.pathWhereFound = xpath;
+                }
+                return getLocaleID() + "-override";
+            }
+            return CLDRFile.this.getSourceLocaleID(xpath, status);
+        }
+    }
 }
diff --git a/tools/java/org/unicode/cldr/util/CLDRInfo.java b/tools/java/org/unicode/cldr/util/CLDRInfo.java
index f455c8d..e171c44 100644
--- a/tools/java/org/unicode/cldr/util/CLDRInfo.java
+++ b/tools/java/org/unicode/cldr/util/CLDRInfo.java
@@ -21,7 +21,7 @@
         CandidateInfo getCurrentItem();
 
         String getBaselineValue();
-        
+
         default Status getBaselineStatus() {
             return Status.missing;
         }
@@ -29,7 +29,7 @@
         Level getCoverageLevel();
 
         boolean hadVotesSometimeThisRelease();
-        
+
         CLDRLocale getLocale();
 
         String getXpath();
diff --git a/tools/java/org/unicode/cldr/util/CLDRLocale.java b/tools/java/org/unicode/cldr/util/CLDRLocale.java
index d4ad987..76ea9ef 100644
--- a/tools/java/org/unicode/cldr/util/CLDRLocale.java
+++ b/tools/java/org/unicode/cldr/util/CLDRLocale.java
@@ -209,7 +209,7 @@
 
     public enum FormatBehavior {
         replace, extend, extendHtml
-    };
+    }
 
     /**
      * The parent locale id string, or null if no parent
@@ -291,6 +291,7 @@
     /**
      * Return the full locale name, in CLDR format.
      */
+    @Override
     public String toString() {
         return fullname;
     }
@@ -318,6 +319,7 @@
     /**
      * Compare to another CLDRLocale. Uses string order of toString().
      */
+    @Override
     public int compareTo(CLDRLocale o) {
         if (o == this) return 0;
         return fullname.compareTo(o.fullname);
@@ -326,6 +328,7 @@
     /**
      * Hashcode - is the hashcode of the full string
      */
+    @Override
     public int hashCode() {
         return fullname.hashCode();
     }
@@ -389,7 +392,7 @@
         return getInstance(u.getBaseName());
     }
 
-    private static ConcurrentHashMap<String, CLDRLocale> stringToLoc = new ConcurrentHashMap<String, CLDRLocale>();
+    private static ConcurrentHashMap<String, CLDRLocale> stringToLoc = new ConcurrentHashMap<>();
 
     /**
      * Return the parent locale of this item. Null if no parent (root has no parent)
@@ -440,14 +443,17 @@
     public Iterable<CLDRLocale> getParentIterator() {
         final CLDRLocale newThis = this;
         return new Iterable<CLDRLocale>() {
+            @Override
             public Iterator<CLDRLocale> iterator() {
                 return new Iterator<CLDRLocale>() {
                     CLDRLocale what = newThis;
 
+                    @Override
                     public boolean hasNext() {
                         return what.getParent() != null;
                     }
 
+                    @Override
                     public CLDRLocale next() {
                         CLDRLocale curr = what;
                         if (what != null) {
@@ -456,6 +462,7 @@
                         return curr;
                     }
 
+                    @Override
                     public void remove() {
                         throw new InternalError("unmodifiable iterator");
                     }
@@ -506,6 +513,7 @@
     /**
      * Most objects should be singletons, and so equality/inequality comparison is done first.
      */
+    @Override
     public boolean equals(Object o) {
         if (o == this) return true;
         if (!(o instanceof CLDRLocale)) return false;
@@ -615,7 +623,7 @@
      * @return
      */
     public static Set<CLDRLocale> getInstance(Iterable<String> available) {
-        Set<CLDRLocale> s = new TreeSet<CLDRLocale>();
+        Set<CLDRLocale> s = new TreeSet<>();
         for (String str : available) {
             s.add(CLDRLocale.getInstance(str));
         }
diff --git a/tools/java/org/unicode/cldr/util/CLDRPaths.java b/tools/java/org/unicode/cldr/util/CLDRPaths.java
index 7d86111..5ca0a85 100644
--- a/tools/java/org/unicode/cldr/util/CLDRPaths.java
+++ b/tools/java/org/unicode/cldr/util/CLDRPaths.java
@@ -17,24 +17,25 @@
  */
 
 public class CLDRPaths {
-    private static final String CASING_SUBDIR = "casing/";
-    private static final String VALIDITY_SUBDIR = "validity/";
-    private static final String ANNOTATIONS_DERIVED_SUBDIR = "annotationsDerived/";
-    private static final String COLLATION_SUBDIR = "collation/";
-    private static final String RBNF_SUBDIR = "rbnf/";
-    private static final String TRANSFORMS_SUBDIR = "transforms/";
-    private static final String MAIN_SUBDIR = "main/";
-    private static final String SUBDIVISIONS_SUBDIR = "subdivisions/";
-    private static final String ANNOTATIONS_SUBDIR = "annotations/";
-    
+    public static final String COMMON_SUBDIR = "common/";
+    public static final String CASING_SUBDIR = "casing/";
+    public static final String VALIDITY_SUBDIR = "validity/";
+    public static final String ANNOTATIONS_DERIVED_SUBDIR = "annotationsDerived/";
+    public static final String COLLATION_SUBDIR = "collation/";
+    public static final String RBNF_SUBDIR = "rbnf/";
+    public static final String TRANSFORMS_SUBDIR = "transforms/";
+    public static final String MAIN_SUBDIR = "main/";
+    public static final String SUBDIVISIONS_SUBDIR = "subdivisions/";
+    public static final String ANNOTATIONS_SUBDIR = "annotations/";
+
     /** default working directory for Eclipse is . = ${workspace_loc:cldr}, which is <CLDR>/tools/java/ */
     // set the base directory with -Dcldrdata=<value>
     // if the main is different, use -Dcldrmain=<value>
 
     /** Maintained in GitHub, base directory for CLDR */
-    
+
     public static final String BASE_DIRECTORY = CldrUtility.getPath(CldrUtility.getProperty("CLDR_DIR", null));
-    
+
     public static final String COMMON_DIRECTORY = CldrUtility.getPath(BASE_DIRECTORY, "common/");
     public static final String COLLATION_DIRECTORY = CldrUtility.getPath(COMMON_DIRECTORY, COLLATION_SUBDIR);
     public static final String CASING_DIRECTORY = CldrUtility.getPath(COMMON_DIRECTORY, CASING_SUBDIR);
@@ -62,21 +63,20 @@
     public static final String EXEMPLARS_DIRECTORY = CldrUtility.getPath(CLDRPaths.BASE_DIRECTORY, "exemplars/" + MAIN_SUBDIR);
     public static final String BIRTH_DATA_DIR = CldrUtility.getPath(BASE_DIRECTORY, "tools/java/org/unicode/cldr/util/data/births/");
 
+    public static final String CHART_DIRECTORY = CldrUtility.getPath(STAGING_DIRECTORY + "docs/charts/", ToolConstants.CHART_VERSION);
+    public static final String VERIFY_DIR = CLDRPaths.CHART_DIRECTORY + "verify/";
+
     /** Maintained in SVN */
-    
+
     public static final String SVN_DIRECTORY = CldrUtility.getPath(CldrUtility.getProperty("SVN_DIR", BASE_DIRECTORY + "/../"));
 
     public static final String AUX_DIRECTORY = CldrUtility.getPath(CldrUtility.getProperty("CLDR_TMP_DIR",
         CldrUtility.getPath(SVN_DIRECTORY, "cldr-aux/")));
-    public static final String CHART_DIRECTORY = CldrUtility.getPath(AUX_DIRECTORY + "charts/", ToolConstants.CHART_VERSION);
-    public static final String VERIFY_DIR = CLDRPaths.CHART_DIRECTORY + "verify/";
 
     public static final String UCD_DATA_DIRECTORY = CldrUtility.getPath(SVN_DIRECTORY + "unicodetools/unicodetools/data/");
-    
-    public static final String ICU_DATA_DIR = CldrUtility.getPath(CldrUtility.getProperty("ICU_DATA_DIR", null)); // eg
 
     /** Local files, not backed up on either Github or SVN **/
-    
+
     public static final String LOCAL_DIRECTORY = CldrUtility.getPath(CldrUtility.getProperty("LOCAL_DIR", BASE_DIRECTORY + "/../"));
 
     public static final String ARCHIVE_DIRECTORY = CldrUtility.getPath(CldrUtility.getProperty("ARCHIVE",
@@ -97,11 +97,12 @@
         CldrUtility.getPath(LOCAL_DIRECTORY, "../cldr-tmp/")));
     public static final String TMP2_DIRECTORY = CldrUtility.getPath(CldrUtility.getProperty("CLDR_TMP_DIR",
         CldrUtility.getPath(LOCAL_DIRECTORY, "../cldr-tmp2/")));
-    
+
     /**
      * @deprecated please use XMLFile and CLDRFILE getSupplementalDirectory()
      * @see DEFAULT_SUPPLEMENTAL_DIRECTORY
      */
+    @Deprecated
     public static final String SUPPLEMENTAL_DIRECTORY = CldrUtility.getPath(COMMON_DIRECTORY, "supplemental/");
     /**
      * Only the default, if no other directory is specified.
@@ -109,14 +110,15 @@
     public static final String DEFAULT_SUPPLEMENTAL_DIRECTORY = CldrUtility.getPath(COMMON_DIRECTORY, "supplemental/");
     public static final String LOG_DIRECTORY = CldrUtility.getPath(TMP_DIRECTORY, "logs/");
     public static final String TEST_DIR = CldrUtility.getPath(CLDRPaths.TMP_DIRECTORY, "test/");
-    
+
     /** If the generated BAT files are to work, this needs to be set right */
     public static final String COMPARE_PROGRAM = "\"C:\\Program Files (x86)\\Compare It!\\wincmp3.exe\"";
-    
+
     /**
      * @deprecated Don't use this from any code that is run from the .JAR (SurveyTool, tests, etc).
      *             If it must be used, add a comment next to the usage to explain why it is needed.
      */
+    @Deprecated
     public static final String UTIL_DATA_DIR = FileReaders.getRelativeFileName(CldrUtility.class, "data/");
 
     public enum DIRECTORIES {
diff --git a/tools/java/org/unicode/cldr/util/CLDRTransforms.java b/tools/java/org/unicode/cldr/util/CLDRTransforms.java
index e99b8d6..2e639f7 100644
--- a/tools/java/org/unicode/cldr/util/CLDRTransforms.java
+++ b/tools/java/org/unicode/cldr/util/CLDRTransforms.java
@@ -58,7 +58,7 @@
         return this;
     }
 
-    final Set<String> overridden = new HashSet<String>();
+    final Set<String> overridden = new HashSet<>();
     final DependencyOrder dependencyOrder = new DependencyOrder();
 
     static public class RegexFindFilenameFilter implements FilenameFilter {
@@ -72,7 +72,7 @@
         public boolean accept(File dir, String name) {
             return matcher.reset(name).find();
         }
-    };
+    }
 
     /**
      *
@@ -279,10 +279,10 @@
         }
 
         public Set<String> getOrderedItems(Collection<String> rawInput, Matcher filter, boolean hasXmlSuffix) {
-            Set<String> input = new LinkedHashSet<String>(rawInput);
+            Set<String> input = new LinkedHashSet<>(rawInput);
             // input.addAll(extras);
 
-            Set<String> ordered = new LinkedHashSet<String>();
+            Set<String> ordered = new LinkedHashSet<>();
 
             // for (String other : doFirst) {
             // ordered.add(hasXmlSuffix ? other + ".xml" : other);
@@ -343,11 +343,11 @@
     }
 
     private BiMap<String,String> displayNameToId = HashBiMap.create();
-    
+
     public BiMap<String, String> getDisplayNameToId() {
         return displayNameToId;
     }
-    
+
     private void addDisplayNameToId(Map<String, String> ids2, ParsedTransformID directionInfo) {
         displayNameToId.put(directionInfo.getDisplayId(), directionInfo.toString());
     }
@@ -364,10 +364,10 @@
             }
             throw e;
         }
-        
+
         String id = directionInfo.getId();
         addDisplayNameToId(displayNameToId, directionInfo);
-        
+
         if (directionInfo.getDirection() == Direction.both || directionInfo.getDirection() == Direction.forward) {
             internalRegister(id, ruleString, Transliterator.FORWARD);
             for (String alias : directionInfo.getAliases()) {
@@ -487,15 +487,15 @@
         Matcher getSource = PatternCache.get("\\s*(\\S*)\\s*\\{\\s*\\\"(.*)\\\".*").matcher("");
         Matcher translitID = PatternCache.get("([^-]+)-([^/]+)+(?:[/](.+))?").matcher("");
 
-        Map<String, String> fixedIDs = new TreeMap<String, String>();
-        Set<String> oddIDs = new TreeSet<String>();
+        Map<String, String> fixedIDs = new TreeMap<>();
+        Set<String> oddIDs = new TreeSet<>();
 
         File dir = new File(directory);
         // get the list of files to take, and their directions
         BufferedReader input = FileUtilities.openUTF8Reader(directory, "root.txt");
         String id = null;
         String filename = null;
-        Map<String, String> aliasMap = new LinkedHashMap<String, String>();
+        Map<String, String> aliasMap = new LinkedHashMap<>();
 
         // deregisterIcuTransliterators();
 
@@ -612,7 +612,7 @@
         Transliterator.registerAny(); // do this last!
     }
 
-    Map<String, RuleDirection> idToRules = new TreeMap<String, RuleDirection>();
+    Map<String, RuleDirection> idToRules = new TreeMap<>();
 
     private class RuleDirection {
         String ruleString;
@@ -668,7 +668,7 @@
     public void deregisterIcuTransliterators(Matcher filter) {
         // Remove all of the current registrations
         // first load into array, so we don't get sync problems.
-        List<String> rawAvailable = new ArrayList<String>();
+        List<String> rawAvailable = new ArrayList<>();
         for (Enumeration<String> en = Transliterator.getAvailableIDs(); en.hasMoreElements();) {
             final String id = en.nextElement();
             if (filter != null && !filter.reset(id).matches()) {
@@ -680,7 +680,7 @@
         // deregisterIcuTransliterators(rawAvailable);
 
         Set<String> available = dependencyOrder.getOrderedItems(rawAvailable, filter, false);
-        List<String> reversed = new LinkedList<String>();
+        List<String> reversed = new LinkedList<>();
         for (String item : available) {
             reversed.add(0, item);
         }
@@ -779,9 +779,9 @@
                 return sourceOrTarget;
             }
         }
-        
+
         static final LikelySubtags likely = new LikelySubtags();
-        
+
         public static String getScriptCode(String sourceOrTarget) {
             int uscript = UScript.getCodeFromName(sourceOrTarget);
             if (uscript >= 0) {
@@ -882,6 +882,7 @@
             return source;
         }
 
+        @Override
         public String toString() {
             return source + "-" + getTargetVariant();
         }
@@ -955,6 +956,7 @@
             this.directionInfo = directionInfo;
         }
 
+        @Override
         public void handlePathValue(String path, String value) {
              if (first) {
                 if (path.startsWith("//supplementalData/version")) {
diff --git a/tools/java/org/unicode/cldr/util/CLDRURLS.java b/tools/java/org/unicode/cldr/util/CLDRURLS.java
index 4d38ae6..16addc1 100644
--- a/tools/java/org/unicode/cldr/util/CLDRURLS.java
+++ b/tools/java/org/unicode/cldr/util/CLDRURLS.java
@@ -11,7 +11,7 @@
     public static final String DEFAULT_HOST = "st.unicode.org";
     public static final String DEFAULT_PATH = "/cldr-apps";
     public static final String DEFAULT_BASE = "http://" + DEFAULT_HOST + DEFAULT_PATH;
-    public static final String CLDR_NEWTICKET_URL = "https://unicode.org/cldr/trac/newticket"; // This is an alias to Jira
+    public static final String CLDR_NEWTICKET_URL = "http://cldr.unicode.org/index/bug-reports#TOC-Filing-a-Ticket";
     /**
      * Override this property if you want to change the absolute URL to the SurveyTool base from DEFAULT_BASE
      */
@@ -250,9 +250,9 @@
      */
     public static String gitHashToLink(String hash) {
         if(!isKnownHash(hash)) return "<span class=\"githashLink\">"+hash+"</span>"; // Not linkifiable
-        return "<a class=\"githashLink\" href=\"" + 
-                CldrUtility.getProperty("CLDR_COMMIT_BASE", "https://github.com/unicode-org/cldr/commit/") 
-                + hash + "\">" + hash + "</a>";
+        return "<a class=\"githashLink\" href=\"" +
+                CldrUtility.getProperty("CLDR_COMMIT_BASE", "https://github.com/unicode-org/cldr/commit/")
+                + hash + "\">" + hash.substring(0, 8) + "</a>";
     }
 
     /**
diff --git a/tools/java/org/unicode/cldr/util/CaseIterator.java b/tools/java/org/unicode/cldr/util/CaseIterator.java
index def0f6c..525ba30 100644
--- a/tools/java/org/unicode/cldr/util/CaseIterator.java
+++ b/tools/java/org/unicode/cldr/util/CaseIterator.java
@@ -36,10 +36,10 @@
     private static Map toCaseFold = new HashMap();
     private static int maxLength = 0;
 
-    // This exception list is generated on the console by turning on the GENERATED flag, 
+    // This exception list is generated on the console by turning on the GENERATED flag,
     // which MUST be false for normal operation.
     // Once the list is generated, it is pasted in here.
-    // A bit of a cludge, but this bootstrapping is the easiest way 
+    // A bit of a cludge, but this bootstrapping is the easiest way
     // to get around certain complications in the data.
 
     private static final boolean GENERATE = false;
@@ -298,7 +298,7 @@
         fromCaseFold = fromCaseFold2;
 
         // We have processed everything, so the iterator will now work
-        // The following is normally OFF. 
+        // The following is normally OFF.
         // It is here to generate (under the GENERATE flag) the static exception list.
         // It must be at the very end of initialization, so that the iterator is functional.
         // (easiest to do it that way)
@@ -396,7 +396,7 @@
         }
     }
 
-    // ============ PRIVATE CLASS DATA ============ 
+    // ============ PRIVATE CLASS DATA ============
 
     // pieces that we will put together
     // is not changed during iteration
@@ -410,7 +410,7 @@
     // internal buffer for efficiency
     private StringBuffer nextBuffer = new StringBuffer();
 
-    // ========================  
+    // ========================
 
     /**
      * Reset to different source. Once reset, the iteration starts from the beginning.
diff --git a/tools/java/org/unicode/cldr/util/ChainedMap.java b/tools/java/org/unicode/cldr/util/ChainedMap.java
index 5974db8..dc09eb2 100644
--- a/tools/java/org/unicode/cldr/util/ChainedMap.java
+++ b/tools/java/org/unicode/cldr/util/ChainedMap.java
@@ -52,7 +52,7 @@
 
         @SuppressWarnings("unchecked")
         public Iterable<Row.R3<K2, K1, V>> rows() {
-            List<R3<K2, K1, V>> result = new ArrayList<R3<K2, K1, V>>();
+            List<R3<K2, K1, V>> result = new ArrayList<>();
             for (Entry<Object, Object> entry0 : super.mapBase.entrySet()) {
                 for (Entry<Object, Object> entry1 : ((Map<Object, Object>) entry0.getValue()).entrySet()) {
                     R3<K2, K1, V> item = (R3<K2, K1, V>) Row.of(entry0.getKey(), entry1.getKey(), entry1.getValue());
@@ -85,7 +85,7 @@
 
         public M3<K2, K1, V> get(K3 key3) {
             final Map<?, ?> submap = (Map<?, ?>) super.handleGet(key3);
-            return submap == null ? null : new M3<K2, K1, V>(submap, super.mapConstructors, super.indexStart + 1);
+            return submap == null ? null : new M3<>(submap, super.mapConstructors, super.indexStart + 1);
         }
 
         @SuppressWarnings("unchecked")
@@ -101,7 +101,7 @@
 
         @SuppressWarnings("unchecked")
         public Iterable<Row.R4<K3, K2, K1, V>> rows() {
-            List<R4<K3, K2, K1, V>> result = new ArrayList<R4<K3, K2, K1, V>>();
+            List<R4<K3, K2, K1, V>> result = new ArrayList<>();
             for (Entry<Object, Object> entry0 : super.mapBase.entrySet()) {
                 for (Entry<Object, Object> entry1 : ((Map<Object, Object>) entry0.getValue()).entrySet()) {
                     for (Entry<Object, Object> entry2 : ((Map<Object, Object>) entry1.getValue()).entrySet()) {
@@ -133,7 +133,7 @@
         public M4<K3, K2, K1, V> get(K4 key4) {
             final Map<?, ?> submap = (Map<?, ?>) super.handleGet(key4);
             return submap == null ? null
-                : new M4<K3, K2, K1, V>(submap, super.mapConstructors, super.indexStart + 2);
+                : new M4<>(submap, super.mapConstructors, super.indexStart + 2);
         }
 
         @SuppressWarnings("unchecked")
@@ -149,7 +149,7 @@
 
         @SuppressWarnings("unchecked")
         public Iterable<Row.R5<K4, K3, K2, K1, V>> rows() {
-            List<R5<K4, K3, K2, K1, V>> result = new ArrayList<R5<K4, K3, K2, K1, V>>();
+            List<R5<K4, K3, K2, K1, V>> result = new ArrayList<>();
             for (Entry<Object, Object> entry0 : super.mapBase.entrySet()) {
                 for (Entry<Object, Object> entry1 : ((Map<Object, Object>) entry0.getValue()).entrySet()) {
                     for (Entry<Object, Object> entry2 : ((Map<Object, Object>) entry1.getValue()).entrySet()) {
@@ -211,16 +211,16 @@
     }
 
     public static <K2, K1, V> M3<K2, K1, V> of(Map<K2, Object> map2, Map<K1, Object> map1, Class<V> valueClass) {
-        return new M3<K2, K1, V>(map2, map1, valueClass);
+        return new M3<>(map2, map1, valueClass);
     }
 
     public static <K3, K2, K1, V> M4<K3, K2, K1, V> of(Map<K3, Object> map3, Map<K2, Object> map2, Map<K1, Object> map1, Class<V> valueClass) {
-        return new M4<K3, K2, K1, V>(map3, map2, map1, valueClass);
+        return new M4<>(map3, map2, map1, valueClass);
     }
 
     public static <K4, K3, K2, K1, V> M5<K4, K3, K2, K1, V> of(
         Map<K4, Object> map4, Map<K3, Object> map3, Map<K2, Object> map2, Map<K1, Object> map1, Class<V> valueClass) {
-        return new M5<K4, K3, K2, K1, V>(map4, map3, map2, map1, valueClass);
+        return new M5<>(map4, map3, map2, map1, valueClass);
     }
 
     private Object iterator() {
diff --git a/tools/java/org/unicode/cldr/util/CharUtilities.java b/tools/java/org/unicode/cldr/util/CharUtilities.java
index 454f6be..bd058ca 100644
--- a/tools/java/org/unicode/cldr/util/CharUtilities.java
+++ b/tools/java/org/unicode/cldr/util/CharUtilities.java
@@ -15,30 +15,37 @@
             this.source = source;
         }
 
+        @Override
         public boolean hasCharAt(int index) {
             return index < source.length();
         }
 
+        @Override
         public char charAt(int index) {
             return source.charAt(index);
         }
 
+        @Override
         public int toSourceOffset(int index) {
             return index;
         }
 
+        @Override
         public CharSource sublist(int start, int end) {
-            return new CharSourceWrapper<CharSequence>(source.subSequence(start, end));
+            return new CharSourceWrapper<>(source.subSequence(start, end));
         }
 
+        @Override
         public CharSource sublist(int start) {
-            return new CharSourceWrapper<CharSequence>(source.subSequence(start, source.length()));
+            return new CharSourceWrapper<>(source.subSequence(start, source.length()));
         }
 
+        @Override
         public int getKnownLength() {
             return source.length();
         }
 
+        @Override
         public CharSequence subSequence(int start, int end) {
             return source.subSequence(start, end);
         }
@@ -52,14 +59,17 @@
             return source.subSequence(toSourceOffset(start), toSourceOffset(end));
         }
 
+        @Override
         public int fromSourceOffset(int index) {
             return index;
         }
 
+        @Override
         public CharSource setStart(int index) {
             return this;
         }
 
+        @Override
         public int getStart() {
             return 0;
         }
diff --git a/tools/java/org/unicode/cldr/util/CharacterFallbacks.java b/tools/java/org/unicode/cldr/util/CharacterFallbacks.java
index 5d9ea60..e87c643 100644
--- a/tools/java/org/unicode/cldr/util/CharacterFallbacks.java
+++ b/tools/java/org/unicode/cldr/util/CharacterFallbacks.java
@@ -8,7 +8,7 @@
 
 public class CharacterFallbacks {
     private static CharacterFallbacks SINGLETON = new CharacterFallbacks();
-    private HashMap<Integer, List<String>> data = new HashMap<Integer, List<String>>();
+    private HashMap<Integer, List<String>> data = new HashMap<>();
 
     static public CharacterFallbacks make() {
         return SINGLETON;
@@ -41,7 +41,7 @@
 
             List<String> substitutes = data.get(cp);
             if (substitutes == null) {
-                data.put(cp, substitutes = new ArrayList<String>());
+                data.put(cp, substitutes = new ArrayList<>());
             }
             substitutes.add(substitute);
         }
diff --git a/tools/java/org/unicode/cldr/util/CldrUtility.java b/tools/java/org/unicode/cldr/util/CldrUtility.java
index 9edfed8..554b472 100644
--- a/tools/java/org/unicode/cldr/util/CldrUtility.java
+++ b/tools/java/org/unicode/cldr/util/CldrUtility.java
@@ -13,10 +13,14 @@
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.io.PrintWriter;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Calendar;
@@ -46,6 +50,9 @@
 import org.unicode.cldr.draft.FileUtilities;
 
 import com.google.common.base.Splitter;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.Multimap;
 import com.ibm.icu.impl.Utility;
 import com.ibm.icu.text.DateFormat;
 import com.ibm.icu.text.SimpleDateFormat;
@@ -60,7 +67,7 @@
 public class CldrUtility {
 
     public static final boolean DEBUG_MISSING_DIRECTORIES = false;
-    
+
     public static final Charset UTF8 = Charset.forName("utf-8");
     public static final boolean BETA = false;
 
@@ -96,7 +103,7 @@
      */
     public static class VariableReplacer {
         // simple implementation for now
-        private Map<String, String> m = new TreeMap<String, String>(Collections.reverseOrder());
+        private Map<String, String> m = new TreeMap<>(Collections.reverseOrder());
 
         public VariableReplacer add(String variable, String value) {
             m.put(variable, value);
@@ -135,20 +142,20 @@
         boolean handle(String line) throws Exception;
     }
 
-    public static String getPath(String path, String filename) {
-        if (path == null) {
+    public static String getPath(String fileOrDir, String filename) {
+        // Required for cases where a system property is read but not default is given.
+        // TODO: Fix callers to not fail silently if properties are missing.
+        if (fileOrDir == null) {
             return null;
         }
-        final File file = filename == null ? new File(path)
-            : new File(path, filename);
-        try {
-            if (DEBUG_MISSING_DIRECTORIES && !file.exists()) {
-                System.err.println("Warning: directory doesn't exist: " + file);
-            }
-            return file.getCanonicalPath() + File.separatorChar;
-        } catch (IOException e) {
-            return file.getPath() + File.separatorChar;
+        Path path = Paths.get(fileOrDir);
+        if (filename != null) {
+            path = path.resolve(filename);
         }
+        if (DEBUG_MISSING_DIRECTORIES && !Files.exists(path)) {
+            System.err.println("Warning: directory doesn't exist: " + path);
+        }
+        return PathUtilities.getNormalizedPathString(path) + File.separatorChar;
     }
 
     static String getPath(String path) {
@@ -193,6 +200,7 @@
             this.flags = flags;
         }
 
+        @Override
         public int compare(String line1, String line2) {
             // first, see if we want to skip one or the other lines
             int skipper = 0;
@@ -368,7 +376,7 @@
         // each item is of the form abc...
         // or "..." (required if a comma or quote is contained)
         // " in a field is represented by ""
-        List<String> result = new ArrayList<String>();
+        List<String> result = new ArrayList<>();
         StringBuilder item = new StringBuilder();
         boolean inQuote = false;
         for (int i = 0; i < line.length(); ++i) {
@@ -421,7 +429,7 @@
     }
 
     public static List<String> splitList(String source, String separator, boolean trim, List<String> output) {
-        if (output == null) output = new ArrayList<String>();
+        if (output == null) output = new ArrayList<>();
         if (source.length() == 0) return output;
         int pos = 0;
         do {
@@ -443,16 +451,23 @@
     public static <T> T protectCollection(T source) {
         // TODO - exclude UnmodifiableMap, Set, ...
         if (source instanceof Map) {
-            Map sourceMap = (Map) source;
-            Map resultMap = clone(sourceMap);
-            if (resultMap == null) return (T) sourceMap; // failed
-            resultMap.clear();
-            for (Object key : sourceMap.keySet()) {
-                resultMap.put(protectCollection(key), protectCollection(sourceMap.get(key)));
+            Map<Object,Object> sourceMap = (Map) source;
+            ImmutableMap.Builder<Object,Object> builder = ImmutableMap.builder();
+            for (Entry<Object,Object> entry : sourceMap.entrySet()) {
+                final Object key = entry.getKey();
+                final Object value = entry.getValue();
+                builder.put(protectCollection(key), protectCollection(value));
             }
-            return resultMap instanceof SortedMap ? (T) Collections.unmodifiableSortedMap((SortedMap) resultMap)
-                : (T) Collections.unmodifiableMap(resultMap);
+            return (T) builder.build();
+        } else if (source instanceof Multimap) {
+            Multimap<Object,Object> sourceMap = (Multimap) source;
+            ImmutableMultimap.Builder<Object,Object> builder = ImmutableMultimap.builder();
+            for (Entry<Object,Object> entry : sourceMap.entries()) {
+                builder.put(protectCollection(entry.getKey()), protectCollection(entry.getValue()));
+            }
+            return (T) builder.build();
         } else if (source instanceof Collection) {
+            // TODO use ImmutableSet, List, ...
             Collection sourceCollection = (Collection) source;
             Collection<Object> resultCollection = clone(sourceCollection);
             if (resultCollection == null) return (T) sourceCollection; // failed
@@ -519,7 +534,7 @@
         }
     }
 
-    private static final Set<Object> KNOWN_IMMUTABLES = new HashSet<Object>(Arrays.asList(
+    private static final Set<Object> KNOWN_IMMUTABLES = new HashSet<>(Arrays.asList(
         String.class));
 
     public static boolean isImmutable(Object source) {
@@ -595,7 +610,7 @@
             } else {
                 output.append(separator);
             }
-            output.append(transform != null ? transform.transform(item) : item == null ? item : item.toString());
+            output.append(transform != null ? transform.transform(item) : item);
         }
         return output.toString();
     }
@@ -633,7 +648,7 @@
      */
     public static String getCanonicalName(String file) {
         try {
-            return new File(file).getCanonicalPath();
+            return PathUtilities.getNormalizedPathString(file);
         } catch (Exception e) {
             return file;
         }
@@ -724,7 +739,7 @@
         // otherwise, we figure out what is in the set, and will return
         StringBuilder base = new StringBuilder("[");
         StringBuilder alternates = new StringBuilder();
-        Map<UnicodeSet, UnicodeSet> lastToFirst = new TreeMap<UnicodeSet, UnicodeSet>(new UnicodeSetComparator());
+        Map<UnicodeSet, UnicodeSet> lastToFirst = new TreeMap<>(new UnicodeSetComparator());
         int alternateCount = 0;
         while (it.nextRange()) {
             if (it.codepoint == UnicodeSetIterator.IS_STRING) {
@@ -797,18 +812,21 @@
     }
 
     public static class UnicodeSetComparator implements Comparator<UnicodeSet> {
+        @Override
         public int compare(UnicodeSet o1, UnicodeSet o2) {
             return o1.compareTo(o2);
         }
     }
 
     public static class CollectionComparator<T extends Comparable<T>> implements Comparator<Collection<T>> {
+        @Override
         public int compare(Collection<T> o1, Collection<T> o2) {
             return UnicodeSet.compare(o1, o2, UnicodeSet.ComparisonStyle.SHORTER_FIRST);
         }
     }
 
     public static class ComparableComparator<T extends Comparable<T>> implements Comparator<T> {
+        @Override
         public int compare(T arg0, T arg1) {
             return Utility.checkCompare(arg0, arg1);
         }
@@ -819,13 +837,14 @@
         Map<Object, Object> base = coverageData;
         for (int i = 0; i < objects.length - 2; ++i) {
             Map<Object, Object> nextOne = (Map<Object, Object>) base.get(objects[i]);
-            if (nextOne == null) base.put(objects[i], nextOne = new TreeMap<Object, Object>());
+            if (nextOne == null) base.put(objects[i], nextOne = new TreeMap<>());
             base = nextOne;
         }
         base.put(objects[objects.length - 2], objects[objects.length - 1]);
     }
 
     public static abstract class CollectionTransform<S, T> implements Transform<S, T> {
+        @Override
         public abstract T transform(S source);
 
         public Collection<T> transform(Collection<S> input, Collection<T> output) {
@@ -929,6 +948,7 @@
             return this;
         }
 
+        @Override
         public boolean contains(T o) {
             return matcher.reset(o.toString()).matches();
         }
@@ -1128,7 +1148,7 @@
     public static void showMethods(Class<?> cls) throws ClassNotFoundException {
         System.out.println("Possible methods of " + cls.getCanonicalName() + " are: ");
         Method[] methods = cls.getMethods();
-        Set<String> names = new TreeSet<String>();
+        Set<String> names = new TreeSet<>();
         for (int i = 0; i < methods.length; ++i) {
             if (methods[i].getGenericParameterTypes().length != 0) continue;
             //int mods = methods[i].getModifiers();
@@ -1255,18 +1275,18 @@
 
     public static String checkValidFile(String sourceDirectory, boolean checkForDirectory, String correction) {
         File file = null;
-        String canonicalPath = null;
+        String normalizedPath = null;
         try {
             file = new File(sourceDirectory);
-            canonicalPath = file.getCanonicalPath() + File.separatorChar;
+            normalizedPath = PathUtilities.getNormalizedPathString(file) + File.separatorChar;
         } catch (Exception e) {
         }
-        if (file == null || canonicalPath == null || checkForDirectory && !file.isDirectory()) {
+        if (file == null || normalizedPath == null || checkForDirectory && !file.isDirectory()) {
             throw new RuntimeException("Directory not found: " + sourceDirectory
-                + (canonicalPath == null ? "" : " => " + canonicalPath)
+                + (normalizedPath == null ? "" : " => " + normalizedPath)
                 + (correction == null ? "" : CldrUtility.LINE_SEPARATOR + correction));
         }
-        return canonicalPath;
+        return normalizedPath;
     }
 
     /**
@@ -1326,7 +1346,7 @@
 
     public static <K, V> ConcurrentHashMap<K, V> newConcurrentHashMap() {
         // http://ria101.wordpress.com/2011/12/12/concurrenthashmap-avoid-a-common-misuse/
-        return new ConcurrentHashMap<K, V>(4, 0.9f, 1);
+        return new ConcurrentHashMap<>(4, 0.9f, 1);
     }
 
     public static <K, V> ConcurrentHashMap<K, V> newConcurrentHashMap(Map<K, V> source) {
@@ -1366,7 +1386,7 @@
     public static String getCopyrightString() {
         return getCopyrightString("");
     }
-    
+
     public static String getCopyrightString(String linePrefix) {
         // now do the rest
         return linePrefix + "Copyright \u00A9 1991-" + Calendar.getInstance().get(Calendar.YEAR) + " Unicode, Inc." + CldrUtility.LINE_SEPARATOR
@@ -1536,4 +1556,46 @@
         }
         return item.toString();
     }
+
+    /**
+     * Return the git hash for the CLDR base directory.
+     *
+     * @return the hash, like "9786e05e95a2e4f02687fa3b84126782f9f698a3"
+     */
+    public static String getCldrBaseDirHash() {
+        final File baseDir = CLDRConfig.getInstance().getCldrBaseDirectory();
+        return getGitHashForDir(baseDir.toString());
+    }
+
+    /**
+     * Return the git hash for a directory.
+     *
+     * @param dir the directory name
+     * @return the hash, like "9786e05e95a2e4f02687fa3b84126782f9f698a3"
+     */
+    public final static String getGitHashForDir(String dir) {
+        final String GIT_HASH_COMMANDS[] = { "git",  "rev-parse", "HEAD" };
+        try {
+            if (dir == null) {
+                return CLDRURLS.UNKNOWN_REVISION; // no dir
+            }
+            File f = new File(dir);
+            if (!f.isDirectory()) {
+                return CLDRURLS.UNKNOWN_REVISION; // does not exist
+            }
+            Process p = Runtime.getRuntime().exec(GIT_HASH_COMMANDS, null, f);
+            try (BufferedReader is = new BufferedReader(new InputStreamReader(p.getInputStream()))) {
+                String str = is.readLine();
+                if (str.length() == 0) {
+                    throw new Exception("git returned empty");
+                }
+                return str;
+            }
+        } catch(Throwable t) {
+            // We do not expect this to be called frequently.
+            System.err.println("While trying to get 'git' hash for " + dir + " : " + t.getMessage());
+            t.printStackTrace();
+            return CLDRURLS.UNKNOWN_REVISION;
+        }
+    }
 }
diff --git a/tools/java/org/unicode/cldr/util/CollationMapMaker.java b/tools/java/org/unicode/cldr/util/CollationMapMaker.java
index bbc9e09..46c3ceb 100644
--- a/tools/java/org/unicode/cldr/util/CollationMapMaker.java
+++ b/tools/java/org/unicode/cldr/util/CollationMapMaker.java
@@ -49,6 +49,7 @@
     static class ExemplarComparator implements java.util.Comparator {
         Comparator comp;
 
+        @Override
         public int compare(Object o1, Object o2) {
             String s1 = (String) o1;
             String s2 = (String) o2;
@@ -85,10 +86,11 @@
     public static class Folder implements Cloneable {
         private UnicodeMap m = new UnicodeMap();
 
+        @Override
         public Object clone() {
             try {
                 Folder result = (Folder) super.clone();
-                result.m = (UnicodeMap) m.cloneAsThawed();
+                result.m = m.cloneAsThawed();
                 return result;
             } catch (CloneNotSupportedException e) {
                 throw new InternalError("Clone problem");
@@ -118,7 +120,7 @@
         }
 
         public void minimalize() {
-            UnicodeMap newMap = (UnicodeMap) (m.cloneAsThawed());
+            UnicodeMap newMap = (m.cloneAsThawed());
 
             for (UnicodeSetIterator i = new UnicodeSetIterator(m.keySet()); i.next();) {
                 String s = (String) m.getValue(i.codepoint);
@@ -199,7 +201,7 @@
         }
 
         public UnicodeMap getUnicodeMap() {
-            return (UnicodeMap) m.cloneAsThawed();
+            return m.cloneAsThawed();
 
         }
 
@@ -207,7 +209,7 @@
 
     static final boolean showDetails = false;
     static final RuleBasedCollator uca = (RuleBasedCollator) Collator.getInstance(ULocale.ROOT);
-    static final UnicodeSet filteredChars = (UnicodeSet) new UnicodeSet(
+    static final UnicodeSet filteredChars = new UnicodeSet(
         "[{ss}[^[:Co:][:Cf:][:Cc:][:Cn:][:Cs:][:script=Han:][:script=Hangul:]-[:nfkcquickcheck=no:]]]").freeze(); // skip
     // a
     // bunch
@@ -232,7 +234,7 @@
         this.equivalenceClassCollator = equivalenceClassCollator;
         try {
             RuleBasedCollator exemplarCollator = (RuleBasedCollator) equivalenceClassCollator.clone();
-            exemplarCollator.setStrength(exemplarCollator.IDENTICAL);
+            exemplarCollator.setStrength(Collator.IDENTICAL);
             exemplarCollator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);
             exemplarCollator.setUpperCaseFirst(false);
             exemplarCollator.setAlternateHandlingShifted(false);
@@ -278,7 +280,7 @@
             // if there is only one result, drop it
             if (values1.size() == 1) {
                 if (false && SHOW_DEBUG) {
-                    String item = (String) values1.iterator().next();
+                    String item = values1.iterator().next();
                     System.out.println("Skipping: " + item + "\t"
                         + equivalenceClassCollator.getRawCollationKey(item, null));
                 }
@@ -349,6 +351,7 @@
     VariantFolder caseFolder = new VariantFolder(new CaseVariantFolder());
 
     VariantFolder.AlternateFetcher COLLATION_FETCHER = new VariantFolder.AlternateFetcher() {
+        @Override
         public Set<String> getAlternates(String item, Set<String> output) {
             output.add(item);
             Set set = equivMap.getEquivalences(item);
@@ -362,8 +365,8 @@
     private void closeUnderFolding() {
         if (false) return;
         // TODO Generalize
-        Set<String> others = new HashSet<String>();
-        List<Collection<String>> input = new ArrayList<Collection<String>>();
+        Set<String> others = new HashSet<>();
+        List<Collection<String>> input = new ArrayList<>();
         VariantFolder recursiveFolder = new VariantFolder(COLLATION_FETCHER);
         TreeSet<CharSequence> hack = new TreeSet();
         hack.add("aa");
@@ -507,7 +510,7 @@
         }
     }
 
-    Set<CharSequence> seenSoFar = new TreeSet<CharSequence>();
+    Set<CharSequence> seenSoFar = new TreeSet<>();
 
     private void addToEquiv(String item, String original) {
         if (item.equals("aA")) {
diff --git a/tools/java/org/unicode/cldr/util/CollationStringByteConverter.java b/tools/java/org/unicode/cldr/util/CollationStringByteConverter.java
index b21b67a..9b0e732 100644
--- a/tools/java/org/unicode/cldr/util/CollationStringByteConverter.java
+++ b/tools/java/org/unicode/cldr/util/CollationStringByteConverter.java
@@ -20,7 +20,7 @@
     }
 
     private static StateDictionary<String> getDictionaryInfo(RuleBasedCollator collation, StringByteConverter byteMaker) {
-        Map<CharSequence, String> map = new TreeMap<CharSequence, String>(Dictionary.CHAR_SEQUENCE_COMPARATOR);
+        Map<CharSequence, String> map = new TreeMap<>(Dictionary.CHAR_SEQUENCE_COMPARATOR);
         new CollationMapMaker().generateCollatorFolding(collation, map);
         return new StateDictionaryBuilder<String>().setByteConverter(byteMaker)
             .setIntMapFactory(new IntMap.CompactStringIntMapFactory()).make(map);
diff --git a/tools/java/org/unicode/cldr/util/CompactStringByteConverter.java b/tools/java/org/unicode/cldr/util/CompactStringByteConverter.java
index c03cd21..e02abae 100644
--- a/tools/java/org/unicode/cldr/util/CompactStringByteConverter.java
+++ b/tools/java/org/unicode/cldr/util/CompactStringByteConverter.java
@@ -30,6 +30,7 @@
      *
      * @see org.unicode.cldr.util.StringByteConverter#clear()
      */
+    @Override
     public void clear() {
         last = 0x40;
     }
@@ -39,6 +40,7 @@
      *
      * @see org.unicode.cldr.util.StringByteConverter#toBytes(char, byte[])
      */
+    @Override
     public int toBytes(char cp, byte[] output, int bytePosition) {
         if (deltaEncoded) {
             // get the delta from the previous
@@ -57,6 +59,7 @@
      *
      * @see org.unicode.cldr.util.StringByteConverter#toBytes(java.lang.CharSequence, int, byte[])
      */
+    @Override
     public int toBytes(CharSequence source, byte[] output, int bytePosition) {
         if (deltaEncoded) {
             int last = 0x40;
@@ -82,6 +85,7 @@
      *
      * @see org.unicode.cldr.util.StringByteConverter#fromBytes(byte[], int, int, java.lang.Appendable)
      */
+    @Override
     public Appendable fromBytes(byte[] input, int byteStart, int byteLength, Appendable result) {
         try {
             int[] ioBytePosition = new int[1];
diff --git a/tools/java/org/unicode/cldr/util/Containment.java b/tools/java/org/unicode/cldr/util/Containment.java
index e0e2b89..72884b0 100644
--- a/tools/java/org/unicode/cldr/util/Containment.java
+++ b/tools/java/org/unicode/cldr/util/Containment.java
@@ -22,7 +22,7 @@
     static final Set<String> continents = containmentCore.get("001");
     static final Set<String> subcontinents;
     static {
-        LinkedHashSet<String> temp = new LinkedHashSet<String>();
+        LinkedHashSet<String> temp = new LinkedHashSet<>();
         for (String continent : continents) {
             temp.addAll(containmentCore.get(continent));
         }
@@ -30,7 +30,7 @@
     }
     static final Relation<String, String> containmentFull = supplementalData
         .getTerritoryToContained();
-    static final Relation<String, String> containedToContainer = (Relation<String, String>) Relation
+    static final Relation<String, String> containedToContainer = Relation
         .of(new HashMap<String, Set<String>>(),
             HashSet.class)
         .addAllInverted(containmentFull)
@@ -44,7 +44,7 @@
         // for each container, get all of its leaf nodes
         Set<String> containers = supplementalData.getContainers();
         for (String s : containers) {
-            HashSet<String> leaves = new HashSet<String>();
+            HashSet<String> leaves = new HashSet<>();
             addLeaves(s, leaves, containers);
             leavesToContainers.putAll(leaves, s);
         }
@@ -54,12 +54,12 @@
 //        }
     }
 
-    static final Relation<String, String> containedToContainerCore = (Relation<String, String>) Relation
+    static final Relation<String, String> containedToContainerCore = Relation
         .of(new HashMap<String, Set<String>>(),
             HashSet.class)
         .addAllInverted(containmentCore)
         .freeze();
-    static final Map<String, Integer> toOrder = new LinkedHashMap<String, Integer>();
+    static final Map<String, Integer> toOrder = new LinkedHashMap<>();
     static int level = 0;
     static int order;
     static {
@@ -201,7 +201,7 @@
     }
 
     public static Set<List<String>> getAllDirected(Multimap<String, String> multimap, String lang) {
-        LinkedHashSet<List<String>> result = new LinkedHashSet<List<String>>();
+        LinkedHashSet<List<String>> result = new LinkedHashSet<>();
         getAllDirected(multimap, lang, new ArrayList<String>(), result);
         return result;
     }
diff --git a/tools/java/org/unicode/cldr/util/CoreCoverageInfo.java b/tools/java/org/unicode/cldr/util/CoreCoverageInfo.java
index df9e890..a886d16 100644
--- a/tools/java/org/unicode/cldr/util/CoreCoverageInfo.java
+++ b/tools/java/org/unicode/cldr/util/CoreCoverageInfo.java
@@ -30,24 +30,24 @@
     private static final CLDRConfig config = CLDRConfig.getInstance();
     private static final String CLDR_BASE_DIRECTORY = config.getCldrBaseDirectory().toString();
     private static final SupplementalDataInfo sdi = SupplementalDataInfo.getInstance();
-    private static final LikelySubtags ls = new LikelySubtags(sdi);
+    private static final LikelySubtags ls = new LikelySubtags();
 
     public enum CoreItems {
-        // Drop the exemplars, since 
+        // Drop the exemplars, since
         // main_exemplar, auxiliary_exemplar, // numbers_exemplar, punctuation_exemplar, index_exemplar(Level.MODERN)
-        orientation, 
-        plurals, 
-        default_content, likely_subtags, 
-        country_data, 
-        casing, 
+        orientation,
+        plurals,
+        default_content, likely_subtags,
+        country_data,
+        casing,
         collation,
-        romanization(Level.MODERATE), 
-        ordinals(Level.MODERN), 
+        romanization(Level.MODERATE),
+        ordinals(Level.MODERN),
         ;
-        
+
         public static Set<CoreItems> ONLY_RECOMMENDED = ImmutableSet.copyOf(
             EnumSet.of(romanization, ordinals));
-        
+
 //        private static final Set<CoreItems> EXEMPLARS = ImmutableSet.copyOf(EnumSet.of(
 //            main_exemplar, auxiliary_exemplar
 //            //, numbers_exemplar, punctuation_exemplar, index_exemplar
@@ -55,7 +55,7 @@
 
         public static final int COUNT = CoreItems.values().length;
         public final Level desiredLevel;
-        
+
         CoreItems(Level desiredLevel) {
             this.desiredLevel = desiredLevel;
         }
diff --git a/tools/java/org/unicode/cldr/util/Counter.java b/tools/java/org/unicode/cldr/util/Counter.java
index b2f0a04..dab3613 100644
--- a/tools/java/org/unicode/cldr/util/Counter.java
+++ b/tools/java/org/unicode/cldr/util/Counter.java
@@ -39,9 +39,9 @@
     public Counter(Comparator<T> comparator) {
         if (comparator != null) {
             this.comparator = comparator;
-            map = new TreeMap<T, RWLong>(comparator);
+            map = new TreeMap<>(comparator);
         } else {
-            map = new LinkedHashMap<T, RWLong>();
+            map = new LinkedHashMap<>();
         }
     }
 
@@ -57,6 +57,7 @@
             }
         }
 
+        @Override
         public int compareTo(RWLong that) {
             if (that.value < value) return -1;
             if (that.value > value) return 1;
@@ -67,6 +68,7 @@
             return 1; // the forceUnique values must be different, so this is the only remaining case
         }
 
+        @Override
         public String toString() {
             return String.valueOf(value);
         }
@@ -154,6 +156,7 @@
             this.byValue = byValue;
         }
 
+        @Override
         public int compare(Entry<T> o1, Entry<T> o2) {
             if (o1.count.value < o2.count.value) return -countOrdering;
             if (o1.count.value > o2.count.value) return countOrdering;
@@ -169,12 +172,12 @@
     }
 
     public Set<T> getKeysetSortedByCount(boolean ascending, Comparator<T> byValue) {
-        Set<Entry<T>> count_key = new TreeSet<Entry<T>>(new EntryComparator<T>(ascending, byValue));
+        Set<Entry<T>> count_key = new TreeSet<>(new EntryComparator<>(ascending, byValue));
         int counter = 0;
         for (T key : map.keySet()) {
-            count_key.add(new Entry<T>(map.get(key), key, counter++));
+            count_key.add(new Entry<>(map.get(key), key, counter++));
         }
-        Set<T> result = new LinkedHashSet<T>();
+        Set<T> result = new LinkedHashSet<>();
         for (Entry<T> entry : count_key) {
             result.add(entry.value);
         }
@@ -182,12 +185,12 @@
     }
 
     public Set<Row.R2<Long, T>> getEntrySetSortedByCount(boolean ascending, Comparator<T> byValue) {
-        Set<Entry<T>> count_key = new TreeSet<Entry<T>>(new EntryComparator<T>(ascending, byValue));
+        Set<Entry<T>> count_key = new TreeSet<>(new EntryComparator<>(ascending, byValue));
         int counter = 0;
         for (T key : map.keySet()) {
-            count_key.add(new Entry<T>(map.get(key), key, counter++));
+            count_key.add(new Entry<>(map.get(key), key, counter++));
         }
-        Set<R2<Long, T>> result = new LinkedHashSet<Row.R2<Long, T>>();
+        Set<R2<Long, T>> result = new LinkedHashSet<>();
         for (Entry<T> entry : count_key) {
             result.add(Row.of(entry.count.value, entry.value));
         }
@@ -195,7 +198,7 @@
     }
 
     public Set<T> getKeysetSortedByKey() {
-        Set<T> s = new TreeSet<T>(comparator);
+        Set<T> s = new TreeSet<>(comparator);
         s.addAll(map.keySet());
         return s;
     }
@@ -214,6 +217,7 @@
         return map.keySet();
     }
 
+    @Override
     public Iterator<T> iterator() {
         return map.keySet().iterator();
     }
@@ -226,6 +230,7 @@
         return map.size();
     }
 
+    @Override
     public String toString() {
         return map.toString();
     }
@@ -246,6 +251,7 @@
         return this;
     }
 
+    @Override
     public int compareTo(Counter<T> o) {
         Iterator<T> i = map.keySet().iterator();
         Iterator<T> j = o.map.keySet().iterator();
@@ -275,10 +281,12 @@
         return map.containsKey(key);
     }
 
+    @Override
     public boolean equals(Object o) {
         return map.equals(o);
     }
 
+    @Override
     public int hashCode() {
         return map.hashCode();
     }
diff --git a/tools/java/org/unicode/cldr/util/Counter2.java b/tools/java/org/unicode/cldr/util/Counter2.java
index 2c45b6f..ae21788 100644
--- a/tools/java/org/unicode/cldr/util/Counter2.java
+++ b/tools/java/org/unicode/cldr/util/Counter2.java
@@ -36,9 +36,9 @@
     public Counter2(Comparator<T> comparator) {
         if (comparator != null) {
             this.comparator = comparator;
-            map = new TreeMap<T, Double>(comparator);
+            map = new TreeMap<>(comparator);
         } else {
-            map = new LinkedHashMap<T, Double>();
+            map = new LinkedHashMap<>();
         }
     }
 
@@ -112,6 +112,7 @@
             this.byValue = byValue;
         }
 
+        @Override
         public int compare(Entry<T> o1, Entry<T> o2) {
             if (o1.count != o2.count) {
                 if (o1.count < o2.count) return -countOrdering;
@@ -129,12 +130,12 @@
     }
 
     public Set<T> getKeysetSortedByCount(boolean ascending, Comparator<T> byValue) {
-        Set<Entry<T>> count_key = new TreeSet<Entry<T>>(new EntryComparator<T>(ascending, byValue));
+        Set<Entry<T>> count_key = new TreeSet<>(new EntryComparator<>(ascending, byValue));
         int counter = 0;
         for (T key : map.keySet()) {
-            count_key.add(new Entry<T>(map.get(key), key, counter++));
+            count_key.add(new Entry<>(map.get(key), key, counter++));
         }
-        Set<T> result = new LinkedHashSet<T>();
+        Set<T> result = new LinkedHashSet<>();
         for (Entry<T> entry : count_key) {
             result.add(entry.value);
         }
@@ -142,7 +143,7 @@
     }
 
     public Set<T> getKeysetSortedByKey() {
-        Set<T> s = new TreeSet<T>(comparator);
+        Set<T> s = new TreeSet<>(comparator);
         s.addAll(map.keySet());
         return s;
     }
@@ -161,6 +162,7 @@
         return map.keySet();
     }
 
+    @Override
     public Iterator<T> iterator() {
         return map.keySet().iterator();
     }
@@ -173,6 +175,7 @@
         return map.size();
     }
 
+    @Override
     public String toString() {
         return map.toString();
     }
@@ -191,6 +194,7 @@
         return this;
     }
 
+    @Override
     public int compareTo(Counter2<T> o) {
         Iterator<T> i = map.keySet().iterator();
         Iterator<T> j = o.map.keySet().iterator();
diff --git a/tools/java/org/unicode/cldr/util/CoverageInfo.java b/tools/java/org/unicode/cldr/util/CoverageInfo.java
index 0848497..6d2b779 100644
--- a/tools/java/org/unicode/cldr/util/CoverageInfo.java
+++ b/tools/java/org/unicode/cldr/util/CoverageInfo.java
@@ -25,10 +25,12 @@
                 this.location);
         }
 
+        @Override
         public int hashCode() {
             return hashCode;
         }
 
+        @Override
         public boolean equals(Object other) {
             if (other == null) {
                 return false;
diff --git a/tools/java/org/unicode/cldr/util/DateTimeFormats.java b/tools/java/org/unicode/cldr/util/DateTimeFormats.java
index 5b569f9..94123b0 100644
--- a/tools/java/org/unicode/cldr/util/DateTimeFormats.java
+++ b/tools/java/org/unicode/cldr/util/DateTimeFormats.java
@@ -842,14 +842,14 @@
         Factory factory = Factory.make(CLDRPaths.MAIN_DIRECTORY, LOCALES);
         System.out.println("Total locales: " + factory.getAvailableLanguages().size());
         DateTimeFormats english = new DateTimeFormats().set(englishFile, "gregorian");
-        
+
         new File(DIR).mkdirs();
         FileCopier.copy(ShowData.class, "verify-index.html", CLDRPaths.VERIFY_DIR, "index.html");
         FileCopier.copy(ChartDelta.class, "index.css", CLDRPaths.VERIFY_DIR, "index.css");
         FormattedFileWriter.copyIncludeHtmls(CLDRPaths.VERIFY_DIR);
         PrintWriter index = openIndex(DIR, "Date/Time");
 
-        Map<String, String> sorted = new TreeMap<String, String>();
+        Map<String, String> sorted = new TreeMap<>();
         SupplementalDataInfo sdi = SupplementalDataInfo.getInstance();
         Set<String> defaultContent = sdi.getDefaultContentLocales();
         for (String localeID : factory.getAvailableLanguages()) {
diff --git a/tools/java/org/unicode/cldr/util/DayPeriodConverter.java b/tools/java/org/unicode/cldr/util/DayPeriodConverter.java
index 60e0718..e3ed903 100644
--- a/tools/java/org/unicode/cldr/util/DayPeriodConverter.java
+++ b/tools/java/org/unicode/cldr/util/DayPeriodConverter.java
@@ -27,8 +27,8 @@
     static class DayInfo {
         ULocale locale;
         DayPeriods.DayPeriod[] data = new DayPeriod[24];
-        Map<DayPeriod, String> toNativeName = new EnumMap<DayPeriod, String>(DayPeriod.class);
-        Map<String, DayPeriod> toDayPeriod = new HashMap<String, DayPeriod>();
+        Map<DayPeriod, String> toNativeName = new EnumMap<>(DayPeriod.class);
+        Map<String, DayPeriod> toDayPeriod = new HashMap<>();
 
         @Override
         public String toString() {
diff --git a/tools/java/org/unicode/cldr/util/DayPeriodInfo.java b/tools/java/org/unicode/cldr/util/DayPeriodInfo.java
index 63ca491..401bbcc 100644
--- a/tools/java/org/unicode/cldr/util/DayPeriodInfo.java
+++ b/tools/java/org/unicode/cldr/util/DayPeriodInfo.java
@@ -119,7 +119,7 @@
         public boolean isFixed() {
             return span != null;
         }
-    };
+    }
 
     // the arrays must be in sorted order. First must have start= zero. Last must have end = DAY_LIMIT (and !includesEnd)
     // each of these will have the same length, and correspond.
@@ -241,6 +241,9 @@
      */
     public R3<Integer, Integer, Boolean> getFirstDayPeriodInfo(DayPeriodInfo.DayPeriod dayPeriod) {
         Span span = getFirstDayPeriodSpan(dayPeriod);
+        if (span == null) {
+            return null;
+        }
         return Row.of(span.start, span.end, true);
     }
 
@@ -334,11 +337,16 @@
             break;
         }
         StringBuilder result = new StringBuilder();
-        for (Span span : dayPeriodsToSpans.get(dayPeriod)) {
-            if (result.length() != 0) {
-                result.append("; ");
+        Set<Span> set = dayPeriodsToSpans.get(dayPeriod);
+        if (set != null) {
+            for (Span span : set) {
+                if (span != null) {
+                    if (result.length() != 0) {
+                        result.append("; ");
+                    }
+                    result.append(span.toStringPlain());
+                }
             }
-            result.append(span.toStringPlain());
         }
         return result.toString();
     }
@@ -351,7 +359,7 @@
     }
 
     // Day periods that are allowed to collide
-    private static final EnumMap<DayPeriod, EnumSet<DayPeriod>> allowableCollisions = new EnumMap<DayPeriod, EnumSet<DayPeriod>>(DayPeriod.class);
+    private static final EnumMap<DayPeriod, EnumSet<DayPeriod>> allowableCollisions = new EnumMap<>(DayPeriod.class);
     static {
         allowableCollisions.put(DayPeriod.am, EnumSet.of(DayPeriod.morning1, DayPeriod.morning2));
         allowableCollisions.put(DayPeriod.pm, EnumSet.of(DayPeriod.afternoon1, DayPeriod.afternoon2, DayPeriod.evening1, DayPeriod.evening2));
diff --git a/tools/java/org/unicode/cldr/util/DelegatingIterator.java b/tools/java/org/unicode/cldr/util/DelegatingIterator.java
index 4d02f24..f7add6c 100644
--- a/tools/java/org/unicode/cldr/util/DelegatingIterator.java
+++ b/tools/java/org/unicode/cldr/util/DelegatingIterator.java
@@ -13,6 +13,7 @@
         this.iterators = iterators;
     }
 
+    @Override
     public boolean hasNext() {
         while (item < iterators.length) {
             boolean result = iterators[item].hasNext();
@@ -24,6 +25,7 @@
         return false;
     }
 
+    @Override
     public T next() {
         while (item < iterators.length) {
             try {
@@ -35,13 +37,14 @@
         throw new NoSuchElementException();
     }
 
+    @Override
     public void remove() {
         throw new UnsupportedOperationException();
     }
 
     @SuppressWarnings("unchecked")
     public static <T> Iterable<T> iterable(Iterable<T>... s) {
-        return new MyIterable<T>(s);
+        return new MyIterable<>(s);
     }
 
     @SuppressWarnings("unchecked")
@@ -57,13 +60,14 @@
             iterables = s;
         }
 
+        @Override
         @SuppressWarnings("unchecked")
         public Iterator<T> iterator() {
             Iterator<T>[] iterators = new Iterator[iterables.length];
             for (int i = 0; i < iterables.length; ++i) {
                 iterators[i] = iterables[i].iterator();
             }
-            return new DelegatingIterator<T>(iterators);
+            return new DelegatingIterator<>(iterators);
         }
     }
 }
diff --git a/tools/java/org/unicode/cldr/util/Dictionary.java b/tools/java/org/unicode/cldr/util/Dictionary.java
index 8d4c80d..923214f 100644
--- a/tools/java/org/unicode/cldr/util/Dictionary.java
+++ b/tools/java/org/unicode/cldr/util/Dictionary.java
@@ -166,7 +166,7 @@
          * @return
          */
         public Matcher<T> setText(CharSequence text) {
-            this.text = new CharUtilities.CharSourceWrapper<CharSequence>(text);
+            this.text = new CharUtilities.CharSourceWrapper<>(text);
             return setOffset(0);
         }
 
@@ -290,7 +290,7 @@
              * Only one value: the longest MATCH or PARTIAL (but only the Partial if it is at the end).
              */
             LONGEST_WITH_FINAL_PARTIAL
-        };
+        }
 
         /**
          * Finds the next match, and sets the matchValue and matchEnd. Normally you
@@ -425,6 +425,7 @@
         /**
          * For debugging
          */
+        @Override
         public String toString() {
             return "{offset: " + offset + ", end: " + matchEnd + ", value: " + matchValue + ", text: \""
                 + text.subSequence(0, text.getKnownLength())
@@ -451,6 +452,7 @@
      * If the text has isolated surrogates, they will not sort correctly.
      */
     public static final Comparator<CharSequence> CHAR_SEQUENCE_COMPARATOR = new Comparator<CharSequence>() {
+        @Override
         public int compare(CharSequence o1, CharSequence o2) {
             return CharUtilities.compare(o1, o2);
         }
@@ -470,6 +472,7 @@
             sourceOffsets = new int[source.length()];
         }
 
+        @Override
         public boolean hasCharAt(int index) {
             if (index >= buffer.length()) {
                 if (atEnd) {
@@ -481,6 +484,7 @@
             return true;
         }
 
+        @Override
         public char charAt(int index) {
             if (!atEnd && index >= buffer.length()) {
                 growToOffset(index + 1);
@@ -527,11 +531,13 @@
             }
         }
 
+        @Override
         public int fromSourceOffset(int offset) {
             // TODO fix to do real binary search; returning a determinate value.
             return Arrays.binarySearch(sourceOffsets, offset);
         }
 
+        @Override
         public int toSourceOffset(int offset) {
             if (offset > buffer.length()) {
                 growToOffset(offset);
@@ -542,6 +548,7 @@
             return sourceOffsets[offset];
         }
 
+        @Override
         public CharSequence subSequence(int start, int end) {
             if (!atEnd && end > buffer.length()) {
                 growToOffset(end);
@@ -549,6 +556,7 @@
             return buffer.subSequence(start, end);
         }
 
+        @Override
         public CharSequence sourceSubSequence(int start, int end) {
             // TODO Auto-generated method stub
             return source.subSequence(toSourceOffset(start), toSourceOffset(end));
diff --git a/tools/java/org/unicode/cldr/util/DictionaryStringByteConverter.java b/tools/java/org/unicode/cldr/util/DictionaryStringByteConverter.java
index 85b2eea..ed28222 100644
--- a/tools/java/org/unicode/cldr/util/DictionaryStringByteConverter.java
+++ b/tools/java/org/unicode/cldr/util/DictionaryStringByteConverter.java
@@ -113,7 +113,7 @@
         byteMaker.fromBytes(input, byteStart, byteLength, internal);
         // then convert using dictionary
         if (backMatcher == null) {
-            Map<CharSequence, CharSequence> back = new TreeMap<CharSequence, CharSequence>(
+            Map<CharSequence, CharSequence> back = new TreeMap<>(
                 Dictionary.CHAR_SEQUENCE_COMPARATOR);
             for (Iterator<Entry<CharSequence, String>> m = dictionary.getMapping(); m.hasNext();) {
                 Entry<CharSequence, String> entry = m.next();
diff --git a/tools/java/org/unicode/cldr/util/DiscreteComparator.java b/tools/java/org/unicode/cldr/util/DiscreteComparator.java
index ca1e8fc..efc9537 100644
--- a/tools/java/org/unicode/cldr/util/DiscreteComparator.java
+++ b/tools/java/org/unicode/cldr/util/DiscreteComparator.java
@@ -62,6 +62,7 @@
      *                thrown if there is no backup comparator, and at least one of
      *                the items is not explicit in the collator.
      */
+    @Override
     public int compare(T o1, T o2) {
         // TODO add option for back ordering
         Integer a = ordering.get(o1);
@@ -92,7 +93,7 @@
      * @return a list
      */
     public List<T> getOrdering() {
-        return new ArrayList<T>(ordering.keySet());
+        return new ArrayList<>(ordering.keySet());
     }
 
     @Override
@@ -121,9 +122,9 @@
          */
         public Builder(Ordering order) {
             this.order = order;
-            all = order == Ordering.CHRONOLOGICAL ? new LinkedHashMap<T, Node<T>>()
-                : order == Ordering.NATURAL ? new TreeMap<T, Node<T>>()
-                    : new HashMap<T, Node<T>>();
+            all = order == Ordering.CHRONOLOGICAL ? new LinkedHashMap<>()
+                : order == Ordering.NATURAL ? new TreeMap<>()
+                    : new HashMap<>();
         }
 
         /**
@@ -237,7 +238,7 @@
             if (DEBUG) {
                 debugIndent = new Exception().getStackTrace().length;
             }
-            Map<T, Integer> ordering = new LinkedHashMap<T, Integer>();
+            Map<T, Integer> ordering = new LinkedHashMap<>();
             for (Node<T> subNode : all.values()) {
                 if (!subNode.visited) {
                     try {
@@ -253,7 +254,7 @@
             }
             // clean up, so another call doesn't mess things up
             all.clear();
-            return new DiscreteComparator<T>(ordering, backupOrdering);
+            return new DiscreteComparator<>(ordering, backupOrdering);
         }
 
         /**
@@ -262,7 +263,7 @@
          * @return list of items that form a cycle, in order from least to greatest
          */
         public List<T> getCycle() {
-            List<T> result = new LinkedList<T>();
+            List<T> result = new LinkedList<>();
             Collection<Node<T>> lesser = all.values();
             main: while (true) {
                 for (Node<T> item : lesser) {
@@ -289,7 +290,7 @@
         }
 
         private Node<T> addNew(T a) {
-            Node<T> aNode = new Node<T>(a, order);
+            Node<T> aNode = new Node<>(a, order);
             all.put(a, aNode);
             return aNode;
         }
@@ -302,10 +303,10 @@
         private boolean chained = false;
 
         public Node(T a, Ordering order) {
-            less = new LinkedHashSet<Node<T>>();
-            less = order == Ordering.CHRONOLOGICAL ? new LinkedHashSet<Node<T>>()
-                : order == Ordering.NATURAL ? new TreeSet<Node<T>>()
-                    : new HashSet<Node<T>>();
+            less = new LinkedHashSet<>();
+            less = order == Ordering.CHRONOLOGICAL ? new LinkedHashSet<>()
+                : order == Ordering.NATURAL ? new TreeSet<>()
+                    : new HashSet<>();
 
             me = a;
         }
@@ -331,6 +332,7 @@
             resultOrdering.put(currentNode.me, resultOrdering.size());
         }
 
+        @Override
         public String toString() {
             StringBuilder result = new StringBuilder();
             result.append(me == null ? null : me.toString()).append(" >");
@@ -340,9 +342,10 @@
             return result.toString();
         }
 
+        @Override
         @SuppressWarnings({ "unchecked", "rawtypes" })
         public int compareTo(Node<T> o) {
-            return ((Comparable) me).compareTo((Comparable) (o.me));
+            return ((Comparable) me).compareTo((o.me));
         }
     }
 
diff --git a/tools/java/org/unicode/cldr/util/DtdData.java b/tools/java/org/unicode/cldr/util/DtdData.java
index 4cefe32..a0acd3f 100644
--- a/tools/java/org/unicode/cldr/util/DtdData.java
+++ b/tools/java/org/unicode/cldr/util/DtdData.java
@@ -23,13 +23,13 @@
 import java.util.regex.Pattern;
 
 import com.google.common.base.CharMatcher;
+import com.google.common.base.Joiner;
 import com.google.common.base.Splitter;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSet.Builder;
 import com.google.common.collect.ImmutableSetMultimap;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.text.Transform;
 
@@ -46,7 +46,7 @@
     private static final Pattern FILLER = PatternCache.get("[^-a-zA-Z0-9#_:]");
 
     private final Relation<String, Attribute> nameToAttributes = Relation.of(new TreeMap<String, Set<Attribute>>(), LinkedHashSet.class);
-    private Map<String, Element> nameToElement = new HashMap<String, Element>();
+    private Map<String, Element> nameToElement = new HashMap<>();
     private MapComparator<String> elementComparator;
     private MapComparator<String> attributeComparator;
 
@@ -61,8 +61,8 @@
     private DtdComparator dtdComparator;
 
     public enum AttributeStatus {
-        distinguished ("§d"), 
-        value ("§v"), 
+        distinguished ("§d"),
+        value ("§v"),
         metadata ("§m︎");
         public final String shortName;
         AttributeStatus(String shortName) {
@@ -99,9 +99,15 @@
         CDATA, ID, IDREF, IDREFS, ENTITY, ENTITIES, NMTOKEN, NMTOKENS, ENUMERATED_TYPE
     }
 
-    static final Set<String> DRAFT_ON_NON_LEAF_ALLOWED = ImmutableSet.of("collation", "transform", "unitPreferenceData");
-    
+    static final Set<String> DRAFT_ON_NON_LEAF_ALLOWED = ImmutableSet.of("collation", "transform", "unitPreferenceData", "rulesetGrouping");
+
     public static class Attribute implements Named {
+        private static final Joiner JOINER_COMMA_SPACE = Joiner.on(", ");
+        public static final String AUG_TRAIL = "⟫";
+        public static final String AUG_LEAD = "⟪";
+        public static final String ENUM_TRAIL = "⟩";
+        public static final String ENUM_LEAD = "⟨";
+        public static final Pattern LEAD_TRAIL = Pattern.compile("(.*[" + AUG_LEAD + ENUM_LEAD + "])(.*)([" + AUG_TRAIL + ENUM_TRAIL + "].*)");
         public final String name;
         public final Element element;
         public final Mode mode;
@@ -145,7 +151,7 @@
             type = _type;
 
             if (_type == AttributeType.ENUMERATED_TYPE) {
-                LinkedHashMap<String, Integer> temp = new LinkedHashMap<String, Integer>();
+                LinkedHashMap<String, Integer> temp = new LinkedHashMap<>();
                 for (String part : split) {
                     if (part.length() != 0) {
                         temp.put(part.intern(), temp.size());
@@ -162,6 +168,12 @@
             return element.name + ":" + name;
         }
 
+        public String getSampleValue() {
+            return type == AttributeType.ENUMERATED_TYPE  ? (values.containsKey("year") ? "year" : values.keySet().iterator().next())
+                : matchValue != null ? matchValue.getSample()
+                    : MatchValue.DEFAULT_SAMPLE;
+        }
+
         public StringBuilder appendDtdString(StringBuilder b) {
             Attribute a = this;
             b.append("<!ATTLIST " + element.name + " " + a.name);
@@ -295,16 +307,16 @@
         }
 
         public ValueStatus getValueStatus(String value) {
-            return deprecatedValues.contains(value) ? ValueStatus.invalid 
+            return deprecatedValues.contains(value) ? ValueStatus.invalid
                 : type == AttributeType.ENUMERATED_TYPE  ? (values.containsKey(value) ? ValueStatus.valid  : ValueStatus.invalid)
                     : matchValue == null ? ValueStatus.unknown
-                        : matchValue.is(value) ? ValueStatus.valid 
+                        : matchValue.is(value) ? ValueStatus.valid
                             : ValueStatus.invalid;
         }
 
         public String getMatchString() {
-            return type == AttributeType.ENUMERATED_TYPE ? "⟨" + CollectionUtilities.join(values.keySet(), ", ") + "⟩" 
-                : matchValue != null ? "⟪" + matchValue.toString() + "⟫"
+            return type == AttributeType.ENUMERATED_TYPE ? ENUM_LEAD + JOINER_COMMA_SPACE.join(values.keySet()) + ENUM_TRAIL
+                : matchValue != null ? AUG_LEAD + matchValue.toString() + AUG_TRAIL
                     : "";
         }
 
@@ -361,8 +373,8 @@
         public final String name;
         private String rawModel;
         private ElementType type;
-        private final Map<Element, Integer> children = new LinkedHashMap<Element, Integer>();
-        private final Map<Attribute, Integer> attributes = new LinkedHashMap<Attribute, Integer>();
+        private final Map<Element, Integer> children = new LinkedHashMap<>();
+        private final Map<Attribute, Integer> attributes = new LinkedHashMap<>();
         private Set<String> commentsPre;
         private Set<String> commentsPost;
         private String model;
@@ -579,6 +591,7 @@
     /**
      * @deprecated
      */
+    @Deprecated
     @Override
     public void handleElementDecl(String name, String model) {
         if (SHOW_ALL) {
@@ -592,17 +605,19 @@
     /**
      * @deprecated
      */
+    @Deprecated
     @Override
     public void handleStartDtd(String name, String publicId, String systemId) {
         DtdType explicitDtdType = DtdType.valueOf(name);
         if (explicitDtdType != dtdType && explicitDtdType != dtdType.rootType) {
             throw new IllegalArgumentException("Mismatch in dtdTypes");
         }
-    };
+    }
 
     /**
      * @deprecated
      */
+    @Deprecated
     @Override
     public void handleAttributeDecl(String eName, String aName, String type, String mode, String value) {
         if (SHOW_ALL) {
@@ -627,6 +642,7 @@
     /**
      * @deprecated
      */
+    @Deprecated
     @Override
     public void handleComment(String path, String comment) {
         if (SHOW_ALL) {
@@ -640,6 +656,7 @@
     /**
      * @deprecated
      */
+    @Deprecated
     @Override
     public void handleEndDtd() {
         throw new XMLFileReader.AbortException();
@@ -649,6 +666,7 @@
      * Note that it always gets the trunk version
      * @deprecated depends on static config, use {@link DtdData#getInstance(DtdType, File)} instead
      */
+    @Deprecated
     public static DtdData getInstance(DtdType type) {
         return getInstance(type, CLDRConfig.getInstance().getCldrBaseDirectory());
     }
@@ -725,9 +743,9 @@
 
     private void freeze() {
         if (version == null) { // only generate for new versions
-            MergeLists<String> elementMergeList = new MergeLists<String>();
+            MergeLists<String> elementMergeList = new MergeLists<>();
             elementMergeList.add(dtdType.toString());
-            MergeLists<String> attributeMergeList = new MergeLists<String>();
+            MergeLists<String> attributeMergeList = new MergeLists<>();
             attributeMergeList.add("_q");
 
             for (Element element : nameToElement.values()) {
@@ -752,15 +770,15 @@
                 System.out.println("Element Ordering:\t" + elementList);
                 System.out.println("Attribute Ordering:\t" + attributeList);
             }
-            elementComparator = new MapComparator<String>(elementList).setErrorOnMissing(true).freeze();
-            attributeComparator = new MapComparator<String>(attributeList).setErrorOnMissing(true).freeze();
+            elementComparator = new MapComparator<>(elementList).setErrorOnMissing(true).freeze();
+            attributeComparator = new MapComparator<>(attributeList).setErrorOnMissing(true).freeze();
         }
         nameToAttributes.freeze();
         nameToElement = Collections.unmodifiableMap(nameToElement);
     }
 
     private Collection<String> getNames(Collection<? extends Named> keySet) {
-        List<String> result = new ArrayList<String>();
+        List<String> result = new ArrayList<>();
         for (Named e : keySet) {
             result.add(e.getName());
         }
@@ -779,11 +797,19 @@
         return dtdComparator;
     }
 
-    private class DtdComparator implements Comparator<String> {
+    public DtdComparator getDtdComparator() {
+        return dtdComparator;
+    }
+
+    public class DtdComparator implements Comparator<String> {
         @Override
         public int compare(String path1, String path2) {
             XPathParts a = XPathParts.getFrozenInstance(path1);
             XPathParts b = XPathParts.getFrozenInstance(path2);
+            return xpathComparator(a, b);
+        }
+
+        public int xpathComparator(XPathParts a, XPathParts b) {
             // there must always be at least one element
             String baseA = a.getElement(0);
             String baseB = b.getElement(0);
@@ -873,6 +899,7 @@
         return attributeComparator;
     }
 
+
     public MapComparator<String> getElementComparator() {
         return elementComparator;
     }
@@ -885,6 +912,7 @@
         return nameToElement;
     }
 
+    @Override
     public String toString() {
         StringBuilder b = new StringBuilder();
         // <!ELEMENT ldml (identity, (alias | (fallback*, localeDisplayNames?, layout?, contextTransforms?, characters?, delimiters?, measurement?, dates?, numbers?, units?, listPatterns?, collations?, posix?, segmentations?, rbnf?, metadata?, references?, special*))) >
@@ -909,8 +937,8 @@
     }
 
     static final class Seen {
-        Set<Element> seenElements = new HashSet<Element>();
-        Set<Attribute> seenAttributes = new HashSet<Attribute>();
+        Set<Element> seenElements = new HashSet<>();
+        Set<Attribute> seenAttributes = new HashSet<>();
 
         public Seen(DtdType dtdType) {
             if (dtdType.rootType == dtdType) {
@@ -954,7 +982,7 @@
             Element aliasElement = getElementFromName().get("alias");
             //b.append(current.rawChildren);
             if (!current.children.isEmpty()) {
-                LinkedHashSet<Element> elements = new LinkedHashSet<Element>(current.children.keySet());
+                LinkedHashSet<Element> elements = new LinkedHashSet<>(current.children.keySet());
                 boolean hasAlias = aliasElement != null && elements.remove(aliasElement);
                 //boolean hasSpecial = specialElement != null && elements.remove(specialElement);
                 if (hasAlias) {
@@ -1050,7 +1078,8 @@
             if (attributeDeprecated) {
                 b.append(COMMENT_PREFIX + "<!--@DEPRECATED-->");
             } else if (!deprecatedValues.isEmpty()) {
-                b.append(COMMENT_PREFIX + "<!--@DEPRECATED:" + CollectionUtilities.join(deprecatedValues, ", ") + "-->");
+                b.append(COMMENT_PREFIX + "<!--@DEPRECATED:" + Joiner.on(", ")
+                    .join(deprecatedValues) + "-->");
             }
         }
         if (current.children.size() > 0) {
@@ -1101,11 +1130,11 @@
     }
 
     public Set<Element> getElements() {
-        return new LinkedHashSet<Element>(nameToElement.values());
+        return new LinkedHashSet<>(nameToElement.values());
     }
 
     public Set<Attribute> getAttributes() {
-        return new LinkedHashSet<Attribute>(nameToAttributes.values());
+        return new LinkedHashSet<>(nameToAttributes.values());
     }
 
     public boolean isDistinguishing(String elementName, String attribute) {
@@ -1237,7 +1266,10 @@
         "minute", "minute-short", "minute-narrow",
         "second", "second-short", "second-narrow",
         "zone", "zone-short", "zone-narrow").freeze();
-    static MapComparator<String> unitOrder = new MapComparator<String>().add(
+
+    /* TODO: change this to be data-file driven. Can do with new Unit preferences info; also put them in a more meaningful order (metric vs other; size) */
+
+    public static final MapComparator<String> unitOrder = new MapComparator<String>().add(
         "acceleration-g-force", "acceleration-meter-per-square-second",
         "angle-revolution", "angle-radian", "angle-degree", "angle-arc-minute", "angle-arc-second",
         "area-square-kilometer", "area-hectare", "area-square-meter", "area-square-centimeter",
@@ -1245,6 +1277,8 @@
         "area-dunam",
         "concentr-karat",
         "concentr-milligram-per-deciliter", "concentr-millimole-per-liter",
+        "concentr-item",
+        "concentr-portion",
         "concentr-permillion", "concentr-percent", "concentr-permille", "concentr-permyriad",
         "concentr-mole",
         "consumption-liter-per-kilometer", "consumption-liter-per-100-kilometer",
@@ -1269,7 +1303,10 @@
         "frequency-gigahertz", "frequency-megahertz", "frequency-kilohertz", "frequency-hertz",
         "graphics-em", "graphics-pixel", "graphics-megapixel",
         "graphics-pixel-per-centimeter", "graphics-pixel-per-inch",
-        "graphics-dot-per-centimeter", "graphics-dot-per-inch", 
+        "graphics-dot-per-centimeter", "graphics-dot-per-inch",
+        "graphics-dot",
+        "length-earth-radius",
+        "length-100-kilometer",
         "length-kilometer", "length-meter", "length-decimeter", "length-centimeter",
         "length-millimeter", "length-micrometer", "length-nanometer", "length-picometer",
         "length-mile", "length-yard", "length-foot", "length-inch",
@@ -1279,6 +1316,8 @@
         "length-point",
         "length-solar-radius",
         "light-lux",
+        "light-candela",
+        "light-lumen",
         "light-solar-luminosity",
         "mass-metric-ton", "mass-kilogram", "mass-gram", "mass-milligram", "mass-microgram",
         "mass-ton", "mass-stone", "mass-pound", "mass-ounce",
@@ -1286,12 +1325,16 @@
         "mass-dalton",
         "mass-earth-mass",
         "mass-solar-mass",
+
+        "mass-grain",
+
         "power-gigawatt", "power-megawatt", "power-kilowatt", "power-watt", "power-milliwatt",
         "power-horsepower",
         "pressure-millimeter-ofhg",
+         "pressure-ofhg",
         "pressure-pound-force-per-square-inch", "pressure-inch-ofhg", "pressure-bar", "pressure-millibar", "pressure-atmosphere",
         "pressure-pascal",
-        "pressure-hectopascal", 
+        "pressure-hectopascal",
         "pressure-kilopascal",
         "pressure-megapascal",
         "speed-kilometer-per-hour", "speed-meter-per-second", "speed-mile-per-hour", "speed-knot",
@@ -1305,7 +1348,17 @@
         "volume-acre-foot",
         "volume-bushel", "volume-gallon", "volume-gallon-imperial", "volume-quart", "volume-pint", "volume-cup",
         "volume-fluid-ounce", "volume-fluid-ounce-imperial", "volume-tablespoon", "volume-teaspoon",
-        "volume-barrel").freeze();
+        "volume-barrel",
+
+        "volume-dessert-spoon",
+        "volume-dessert-spoon-imperial",
+        "volume-drop",
+        "volume-dram",
+        "volume-jigger",
+        "volume-pinch",
+        "volume-quart-imperial"
+       // "volume-pint-imperial"
+        ).freeze();
 
     static MapComparator<String> countValueOrder = new MapComparator<String>().add(
         "0", "1", "zero", "one", "two", "few", "many", "other").freeze();
@@ -1499,7 +1552,7 @@
             if (attributeValues.size() == 1) {
                 addAttribute(attribute, attributeValues.iterator().next());
             } else {
-                // duplicate all the items in the list with the given values 
+                // duplicate all the items in the list with the given values
                 Set<XPathParts> newList = new LinkedHashSet<>();
                 for (XPathParts item : list) {
                     for (String attributeValue : attributeValues) {
@@ -1560,7 +1613,7 @@
                 boolean hasValue = hasValue(element);
                 // if it doesn't have a value, we construct new child elements, with _ prefix
                 // if it does have a value, we have to play a further trick, since
-                // we can't have a value and child elements at the same level. 
+                // we can't have a value and child elements at the same level.
                 // So we use a _ suffix on the element.
                 if (hasValue) {
                     pathResult.setElement(i, element + "_");
diff --git a/tools/java/org/unicode/cldr/util/DtdDataCheck.java b/tools/java/org/unicode/cldr/util/DtdDataCheck.java
index 76907d5..4ff754a 100644
--- a/tools/java/org/unicode/cldr/util/DtdDataCheck.java
+++ b/tools/java/org/unicode/cldr/util/DtdDataCheck.java
@@ -19,7 +19,7 @@
 import org.unicode.cldr.util.DtdData.Element;
 import org.unicode.cldr.util.DtdData.ElementType;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
@@ -29,20 +29,20 @@
 
     static SupplementalDataInfo SUPPLEMENTAL = SupplementalDataInfo.getInstance();
 
-    static final Set<Row.R4<DtdType, String, String, String>> DEPRECATED = new LinkedHashSet<Row.R4<DtdType, String, String, String>>();
-    static final Map<Row.R2<DtdType, String>, Relation<Boolean, String>> TYPE_ATTRIBUTE_TO_DIST_ELEMENTS = new TreeMap<Row.R2<DtdType, String>, Relation<Boolean, String>>();
+    static final Set<Row.R4<DtdType, String, String, String>> DEPRECATED = new LinkedHashSet<>();
+    static final Map<Row.R2<DtdType, String>, Relation<Boolean, String>> TYPE_ATTRIBUTE_TO_DIST_ELEMENTS = new TreeMap<>();
 
     private static final boolean CHECK_CORRECTNESS = false;
 
     private static class Walker {
-        HashSet<Element> seen = new HashSet<Element>();
-        Set<Element> elementsMissingDraft = new LinkedHashSet<Element>();
-        Set<Element> elementsMissingAlt = new LinkedHashSet<Element>();
-        static final Set<String> SKIP_ATTRIBUTES = new HashSet<String>(Arrays.asList(
+        HashSet<Element> seen = new HashSet<>();
+        Set<Element> elementsMissingDraft = new LinkedHashSet<>();
+        Set<Element> elementsMissingAlt = new LinkedHashSet<>();
+        static final Set<String> SKIP_ATTRIBUTES = new HashSet<>(Arrays.asList(
             "draft", "alt", "standard", "references"));
-        static final Set<String> SKIP_ELEMENTS = new HashSet<String>(Arrays.asList(
+        static final Set<String> SKIP_ELEMENTS = new HashSet<>(Arrays.asList(
             "alias", "special"));
-        Set<Attribute> attributesWithDefaultValues = new LinkedHashSet<Attribute>();
+        Set<Attribute> attributesWithDefaultValues = new LinkedHashSet<>();
 
         private DtdData dtdData;
 
@@ -184,7 +184,7 @@
             }
             new Walker(dtdData).show(dtdData.ROOT);
             if (CHECK_CORRECTNESS && type == DtdType.ldml) {
-                Set<String> errors = new LinkedHashSet<String>();
+                Set<String> errors = new LinkedHashSet<>();
                 //                checkOrder(dtdData.ROOT, errors);
                 //                for (String error : errors) {
                 //                    System.out.println("ERROR:\t" + error);
@@ -201,7 +201,7 @@
                 Comparator<String> comp = dtdData.getDtdComparator(null);
                 CLDRFile test = ToolConfig.getToolInstance().getEnglish();
                 Set<String> sorted = new TreeSet(test.getComparator());
-                CollectionUtilities.addAll(test.iterator(), sorted);
+                test.forEach(sorted::add);
                 String[] sortedArray = sorted.toArray(new String[sorted.size()]);
 
                 // compare for identity
@@ -240,7 +240,7 @@
         }
         int i = 0;
         System.out.println("        <distinguishing>");
-        Set<String> allElements = new TreeSet<String>();
+        Set<String> allElements = new TreeSet<>();
         allElements.add("_q");
         DtdType lastType = null;
 
@@ -266,12 +266,12 @@
             }
             System.out.println("            <distinguishingItems"
                 + " type=\"" + type
-                + "\" elements=\"" + CollectionUtilities.join(areDisting, " ")
+                + "\" elements=\"" + Joiner.on(" ").join(areDisting)
                 + "\" attributes=\"" + attribute
                 + "\"/>"
                 + "\n            <!-- NONDISTINGUISH."
                 + " TYPE=\"" + type
-                + "\" ELEMENTS=\"" + CollectionUtilities.join(areNotDisting, " ")
+                + "\" ELEMENTS=\"" + Joiner.on(" ").join(areNotDisting)
                 + "\" ATTRIBUTES=\"" + attribute
                 + "\" -->");
         }
@@ -294,7 +294,7 @@
         System.out.println("            <distinguishingItems"
             + " type=\"" + type
             + "\" elements=\"*"
-            + "\" attributes=\"" + CollectionUtilities.join(allElements, " ")
+            + "\" attributes=\"" + Joiner.on(" ").join(allElements)
             + "\"/>");
         allElements.clear();
         allElements.add("_q");
diff --git a/tools/java/org/unicode/cldr/util/DtdPathIterator.java b/tools/java/org/unicode/cldr/util/DtdPathIterator.java
new file mode 100644
index 0000000..cf70115
--- /dev/null
+++ b/tools/java/org/unicode/cldr/util/DtdPathIterator.java
@@ -0,0 +1,192 @@
+package org.unicode.cldr.util;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+import org.unicode.cldr.util.DtdData.Attribute;
+import org.unicode.cldr.util.DtdData.AttributeStatus;
+import org.unicode.cldr.util.DtdData.Element;
+import org.unicode.cldr.util.DtdData.Mode;
+import org.unicode.cldr.util.PathHeader.Factory;
+
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * Walk through all the possible paths in a DTDData
+ * @author markdavis
+ *
+ */
+public class DtdPathIterator {
+    public DtdPathIterator(DtdData dtdData) {
+        super();
+        this.dtdData = dtdData;
+        this.xpathParts = new XPathParts();
+    }
+
+    final DtdData dtdData;
+    final XPathParts xpathParts;
+
+    /**
+     * Visit the generated parts. Warning: the function must not modify the XPathParts.
+     * @param function
+     */
+    public void visit(Consumer<XPathParts> function, Function<Attribute, String> sample) {
+        xpathParts.clear();
+        visit(dtdData.ROOT, function, sample);
+    }
+
+    private void visit(Element parent, Consumer<XPathParts> visitor, Function<Attribute, String> sample) {
+        if (parent.isDeprecated()) {
+            return;
+        }
+        // add element and all its possible attributes
+        final String parentName = parent.getName();
+        if (parentName.contentEquals("exemplarCharacters")) {
+            int debug = 0;
+        }
+        if (parentName.equals("alias") || parentName.equals("identity") || parentName.equals("special")) {
+            return;
+        }
+        Set<Element> children = parent.getChildren().keySet();
+        // filter children to non-deprecated
+        if (!children.isEmpty()) {
+            Set<Element> temp = new LinkedHashSet<>();
+            for (Element e : children) {
+                if (!e.isDeprecated()) {
+                    temp.add(e);
+                }
+            }
+            children = ImmutableSet.copyOf(temp);
+        }
+        int index = xpathParts.size();
+        xpathParts.addElement(parentName);
+
+        // get possible attributes
+        List<Attribute> optionalAttributes = new ArrayList<>();
+        for (Attribute attribute : parent.getAttributes().keySet()) {
+            if (attribute.isDeprecated()
+                || attribute.getStatus() != AttributeStatus.distinguished) {
+                continue;
+            }
+            String attributeName = attribute.getName();
+            if (!attributeName.equals("alt")) {
+                if (attribute.mode == Mode.OPTIONAL) {
+                    if (parentName.equals("displayName") && attributeName.equals("count") && !xpathParts.contains("currency")) {
+                        // skip
+                    } else {
+                        optionalAttributes.add(attribute);
+                    }
+                } else {
+                    xpathParts.setAttribute(index, attributeName, sample.apply(attribute));
+                }
+            }
+        }
+        if (!optionalAttributes.isEmpty()) {
+            int comboMax = (1 << optionalAttributes.size());
+            for (int bitmask = comboMax - 1; bitmask >= 0; --bitmask) {
+                // for two items, go from 0b11, 0b10, 0b01, 0b00; for 1: 0b1, 0b0
+                for (int bit = 0; bit < optionalAttributes.size(); ++bit) {
+                    final Attribute attribute = optionalAttributes.get(bit);
+                    String attributeName = attribute.getName();
+                    if ((bitmask & (1 << bit)) == 0) {
+                        xpathParts.setAttribute(index, attributeName, sample.apply(attribute));
+                    } else {
+                        xpathParts.removeAttribute(index, attributeName);
+                    }
+                    if (children.isEmpty()) {
+                        // check the path.
+                        visitor.accept(xpathParts);
+                    } else {
+                        for (Element child : children) {
+                            visit(child, visitor, sample);
+                        }
+                    }
+                }
+            }
+        } else {
+            if (children.isEmpty()) {
+                // check the path.
+                visitor.accept(xpathParts);
+            } else {
+                for (Element child : children) {
+                    visit(child, visitor, sample);
+                }
+            }
+        }
+        // cleanup
+        // remove the element we added
+        xpathParts.removeElement(index);
+    }
+
+    public static void main(String[] args) {
+        Set<XPathParts>seen = new HashSet<>();
+        Set<PathHeader>seenPh = new HashSet<>();
+        DtdPathIterator dtdPathIterator = new DtdPathIterator(DtdData.getInstance(DtdType.ldml));
+        Factory phf = PathHeader.getFactory();
+        List<String> failures = new ArrayList<>();
+        org.unicode.cldr.util.Factory factory = CLDRConfig.getInstance().getCommonAndSeedAndMainAndAnnotationsFactory();
+
+        // get all the actual starred patterns
+
+        PathStarrer ps = new PathStarrer().setSubstitutionPattern("%A");
+        Map<String, String> starredToSample = new TreeMap<>();
+        for (String locale : Arrays.asList("en", "de", "zh", "ar", "ru")) {
+            CLDRFile cfile = factory.make(locale, true);
+            for (String path : cfile.fullIterable()) {
+                String starred = ps.set(path);
+                starred = starred.replace("[@alt=\"%A\"]","");
+                if (!starredToSample.containsKey(starred) && !starred.endsWith("/alias") && !starred.startsWith("//ldml/identity/")) {
+                    starredToSample.put(starred, path);
+                }
+            }
+        }
+        Set<String> starredUnseen = new TreeSet<>(starredToSample.keySet());
+
+        dtdPathIterator.visit(x -> {
+            if (seen.contains(x)) {
+                int debug = 0;
+            } else {
+                failures.clear();
+                final String xString = x.toString();
+//                PathHeader ph = null;
+//                try {
+//                    ph = phf.fromPath(xString, failures);
+//                    if (seenPh.contains(ph)) {
+//                        failures.add("NON_UNIQUE");
+//                    } else {
+//                        seenPh.add(ph);
+//                        if (ph.getPageId() == PageId.Deprecated) {
+//                            return;
+//                        }
+//                    }
+//                } catch (Exception e) {
+//                    failures.add(e.getMessage());
+//                }
+                final String sample = starredToSample.get(xString);
+                starredUnseen.remove(xString);
+                System.out.println(seen.size() + "\t" + x + "\t" + failures + "\t" + sample);
+                seen.add(x.cloneAsThawed().freeze());
+                if ((seen.size() % 25) == 0) {
+                    int debug = 0;
+                }
+            }
+        },
+//            y -> y.getSampleValue()
+            y -> "%A"
+            );
+        if (!starredUnseen.isEmpty()) {
+            System.out.println("ERROR: In files, not dtd");
+            System.out.println(Joiner.on("\n\t").join(starredUnseen));
+        }
+    }
+}
diff --git a/tools/java/org/unicode/cldr/util/DtdType.java b/tools/java/org/unicode/cldr/util/DtdType.java
index d41446c..508e436 100644
--- a/tools/java/org/unicode/cldr/util/DtdType.java
+++ b/tools/java/org/unicode/cldr/util/DtdType.java
@@ -16,16 +16,16 @@
         "collation",
         "rbnf",
         "segments",
-        "subdivisions"), 
-    ldmlICU("common/dtd/ldmlICU.dtd", ldml), 
+        "subdivisions"),
+    ldmlICU("common/dtd/ldmlICU.dtd", ldml),
     supplementalData("common/dtd/ldmlSupplemental.dtd", null, null,
         "supplemental",
         "transforms",
-        "validity"), 
+        "validity"),
     ldmlBCP47("common/dtd/ldmlBCP47.dtd", "1.7.2", null,
-        "bcp47"), 
+        "bcp47"),
     keyboard("keyboards/dtd/ldmlKeyboard.dtd", "22.1", null,
-        "../keyboards"), 
+        "../keyboards"),
     platform("keyboards/dtd/ldmlPlatform.dtd", "22.1", null,
         "../keyboards");
     public static final Set<DtdType> STANDARD_SET = ImmutableSet.of(
@@ -60,7 +60,7 @@
     }
 
     /**
-     * Print a header for an XML file, where the generatedBy is normally MethodHandles.lookup().lookupClass(). 
+     * Print a header for an XML file, where the generatedBy is normally MethodHandles.lookup().lookupClass().
      * The only time it needs to be changed is if it is not being called directly from the generating tool.
      * @param generatedBy
      * @return
diff --git a/tools/java/org/unicode/cldr/util/DualWriter.java b/tools/java/org/unicode/cldr/util/DualWriter.java
index 1daed65..fe01084 100644
--- a/tools/java/org/unicode/cldr/util/DualWriter.java
+++ b/tools/java/org/unicode/cldr/util/DualWriter.java
@@ -40,6 +40,7 @@
         return autoflush;
     }
 
+    @Override
     public void write(char cbuf[],
         int off,
         int len) throws IOException {
@@ -48,11 +49,13 @@
         if (autoflush) flush();
     }
 
+    @Override
     public void close() throws IOException {
         a.close();
         b.close();
     }
 
+    @Override
     public void flush() throws IOException {
         a.flush();
         b.flush();
diff --git a/tools/java/org/unicode/cldr/util/ElementAttributeInfo.java b/tools/java/org/unicode/cldr/util/ElementAttributeInfo.java
index 5b9fe6b..40459e0 100644
--- a/tools/java/org/unicode/cldr/util/ElementAttributeInfo.java
+++ b/tools/java/org/unicode/cldr/util/ElementAttributeInfo.java
@@ -26,12 +26,12 @@
 public class ElementAttributeInfo {
 
     private DtdType dtdType;
-    private Map<R2<String, String>, R3<Set<String>, String, String>> elementAttribute2Data = new TreeMap<R2<String, String>, R3<Set<String>, String, String>>();
+    private Map<R2<String, String>, R3<Set<String>, String, String>> elementAttribute2Data = new TreeMap<>();
     private Relation<String, String> element2children = Relation.of(new LinkedHashMap<String, Set<String>>(), LinkedHashSet.class);
     private Relation<String, String> element2parents = Relation.of(new LinkedHashMap<String, Set<String>>(), LinkedHashSet.class);
     private Relation<String, String> element2attributes = Relation.of(new LinkedHashMap<String, Set<String>>(), LinkedHashSet.class);
 
-    static Map<String, Map<DtdType, ElementAttributeInfo>> cache = new HashMap<String, Map<DtdType, ElementAttributeInfo>>(); // new
+    static Map<String, Map<DtdType, ElementAttributeInfo>> cache = new HashMap<>(); // new
     // HashMap<DtdType,
     // Data>();
 
@@ -53,7 +53,7 @@
                     }
                 }
                 if (result == null) {
-                    result = new HashMap<DtdType, ElementAttributeInfo>();
+                    result = new HashMap<>();
                     // pick short files that are in repository
                     result.put(DtdType.ldml, new ElementAttributeInfo(canonicalCommonDirectory + "/main/root.xml",
                         DtdType.ldml));
@@ -140,6 +140,7 @@
             myData = indata;
         }
 
+        @Override
         public void attributeDecl(String eName, String aName, String type, String mode, String value)
             throws SAXException {
             if (SHOW)
@@ -158,7 +159,7 @@
         }
 
         private Set<String> getIdentifiers(String type) {
-            Set<String> result = new LinkedHashSet<String>();
+            Set<String> result = new LinkedHashSet<>();
             idmatcher.reset(type);
             while (idmatcher.find()) {
                 result.add(idmatcher.group());
@@ -169,6 +170,7 @@
             return result;
         }
 
+        @Override
         public void elementDecl(String name, String model) throws SAXException {
             if (SHOW) System.out.println(myData.getDtdType() + "\tElement\t" + name + "\t" + model);
             Set<String> identifiers = getIdentifiers(model);
@@ -183,11 +185,13 @@
             }
         }
 
+        @Override
         public void externalEntityDecl(String name, String publicId, String systemId) throws SAXException {
             // TODO Auto-generated method stub
 
         }
 
+        @Override
         public void internalEntityDecl(String name, String value) throws SAXException {
             // TODO Auto-generated method stub
 
diff --git a/tools/java/org/unicode/cldr/util/Emoji.java b/tools/java/org/unicode/cldr/util/Emoji.java
index e304c82..f26d0bf 100644
--- a/tools/java/org/unicode/cldr/util/Emoji.java
+++ b/tools/java/org/unicode/cldr/util/Emoji.java
@@ -1,5 +1,6 @@
 package org.unicode.cldr.util;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -33,6 +34,7 @@
     public static final UnicodeSet SPECIALS = new UnicodeSet("["
         + "{🐈‍⬛}{🐻‍❄}{👨‍🍼}{👩‍🍼}{🧑‍🍼}{🧑‍🎄}{🧑‍🤝‍🧑}{🏳‍🌈} {👁‍🗨} {🏴‍☠} {🐕‍🦺} {👨‍🦯} {👨‍🦼} {👨‍🦽} {👩‍🦯} {👩‍🦼} {👩‍🦽}"
         + "{🏳‍⚧}{🧑‍⚕}{🧑‍⚖}{🧑‍✈}{🧑‍🌾}{🧑‍🍳}{🧑‍🎓}{🧑‍🎤}{🧑‍🎨}{🧑‍🏫}{🧑‍🏭}{🧑‍💻}{🧑‍💼}{🧑‍🔧}{🧑‍🔬}{🧑‍🚀}{🧑‍🚒}{🧑‍🦯}{🧑‍🦼}{🧑‍🦽}"
+        + "{❤‍🔥}, {❤‍🩹}, {😮‍💨}, {😵‍💫}" // #E13.1
         + "]").freeze();
     // May have to add from above, if there is a failure in testAnnotationPaths. Failure will be like:
     // got java.util.TreeSet<[//ldml/annotations/annotation[@cp="🏳‍⚧"][@type="tts"], //ldml/annotations/annotation[@cp="🧑‍⚕"][@type="tts"], ...
@@ -101,11 +103,19 @@
                 continue;
             }
             Iterator<String> it = semi.split(line).iterator();
+
             String emojiHex = it.next();
-            if (emojiHex.contains("1F6FC")) {
+            if (emojiHex.contains("1F48F")) {
                 int debug = 0;
             }
+
             String original = Utility.fromHex(emojiHex, 4, " ");
+            if (original.contains("💏")) {
+                if (false) {
+                    System.out.println(original + "\t" + Utility.hex(original));
+                }
+            }
+
             String type = it.next();
             if (type.startsWith("fully-qualified")) {
                 allRgi.add(original);
@@ -131,7 +141,7 @@
             if (!emojiToOrder.containsKey(minimal)) {
                 putUnique(emojiToOrder, minimal, emojiToOrder.size()*100L);
             }
-            // 
+            //
             // majorPlusMinorToEmoji.put(Pair.of(majorOrder, minorOrder), minimal);
 
             boolean singleton = CharSequences.getSingleCodePoint(minimal) != Integer.MAX_VALUE;
@@ -172,8 +182,8 @@
     private static <K, V> void putUnique(Map<K, V> map, K key, V value) {
         V oldValue = map.put(key, value);
         if (oldValue != null) {
-            throw new ICUException("Attempt to change value of " + map 
-                + " for " + key 
+            throw new ICUException("Attempt to change value of " + map
+                + " for " + key
                 + " from " + oldValue
                 + " to " + value
                 );
@@ -196,9 +206,10 @@
             {"arrow", "→ ↓ ↑ ← ↔ ↕ ⇆ ⇅"},
             {"alphanum", "© ® ℗ ™ µ"},
             {"geometric", "▼ ▶ ▲ ◀ ● ○ ◯ ◊"},
-            {"math", "× ÷ √ ∞ ∆ ∇ ⁻ ¹ ² ³ ≡ ∈ ⊂ ∩ ∪ °"},
-            {"punctuation", "– — » « • · § † ‡"},
-            {"currency", "€ £ ¥ ₹ ₽"},
+            {"math", "× ÷ √ ∞ ∆ ∇ ⁻ ¹ ² ³ ≡ ∈ ⊂ ∩ ∪ ° + ± − = ≈ ≠ > < ≤ ≥ ¬ | ~"},
+            {"punctuation", "§ † ‡ \\u0020  , 、 ، ; : ؛ ! ¡ ? ¿ ؟ ¶ ※ / \\ & # % ‰ ′ ″ ‴ @ * ♪ ♭ ♯ ` ´ ^ ¨ ‐ ― _ - – — • · . … 。 ‧ ・ ‘ ’ ‚ ' “ ” „ » « ( ) [ ] { } 〔 〕 〈 〉 《 》 「 」 『 』 〖 〗 【 】"},
+            {"currency", "€ £ ¥ ₹ ₽ $ ¢ ฿ ₪ ₺ ₫ ₱ ₩ ₡ ₦ ₮ ৳ ₴ ₸ ₲ ₵ ៛ ₭ ֏ ₥ ₾ ₼ ₿ ؋"},
+            {"other-symbol", "‾‽‸⁂↚↛↮↙↜↝↞↟↠↡↢↣↤↥↦↧↨↫↬↭↯↰↱↲↳↴↵↶↷↸↹↺↻↼↽↾↿⇀⇁⇂⇃⇄⇇⇈⇉⇊⇋⇌⇐⇍⇑⇒⇏⇓⇔⇎⇖⇗⇘⇙⇚⇛⇜⇝⇞⇟⇠⇡⇢⇣⇤⇥⇦⇧⇨⇩⇪⇵∀∂∃∅∉∋∎∏∑≮≯∓∕⁄∗∘∙∝∟∠∣∥∧∫∬∮∴∵∶∷∼∽∾≃≅≌≒≖≣≦≧≪≫≬≳≺≻⊁⊃⊆⊇⊕⊖⊗⊘⊙⊚⊛⊞⊟⊥⊮⊰⊱⋭⊶⊹⊿⋁⋂⋃⋅⋆⋈⋒⋘⋙⋮⋯⋰⋱■□▢▣▤▥▦▧▨▩▬▭▮▰△▴▵▷▸▹►▻▽▾▿◁◂◃◄◅◆◇◈◉◌◍◎◐◑◒◓◔◕◖◗◘◙◜◝◞◟◠◡◢◣◤◥◦◳◷◻◽◿⨧⨯⨼⩣⩽⪍⪚⪺₢₣₤₰₳₶₷₨﷼"},
         };
         // get the maximum suborder for each subcategory
         Map<String, Long> subcategoryToMaxSuborder = new HashMap<>();
@@ -216,13 +227,17 @@
             }
         }
         if (DEBUG) System.out.println(subcategoryToMaxSuborder);
-        Splitter spaceSplitter = Splitter.on(' ').omitEmptyStrings();
         Map<String,Long> _EXTRA_SYMBOL_ORDER = new LinkedHashMap<>();
         for (String[] row : data) {
             final String subcategory = row[0];
-            final String spaceDelimitedStringList = row[1];
+            final String characters = row[1];
 
-            List<String> items = spaceSplitter.splitToList(spaceDelimitedStringList);
+            List<String> items = new ArrayList<>();
+            for (int cp : With.codePointArray(characters)) {
+                if (cp != ' ') {
+                    items.add(With.fromCodePoint(cp));
+                }
+            }
             final UnicodeSet uset = new UnicodeSet().addAll(items);
             if (uset.containsSome(EXTRA_SYMBOL_MINOR_CATEGORIES.keySet())) {
                 throw new IllegalArgumentException("Duplicate values in " + EXTRA_SYMBOL_MINOR_CATEGORIES);
@@ -245,7 +260,7 @@
         if (minorCat == null) {
             minorCat = EXTRA_SYMBOL_MINOR_CATEGORIES.get(emoji);
             if (minorCat == null) {
-                throw new InternalCldrException("No minor category (aka subgroup) found for " + emoji 
+                throw new InternalCldrException("No minor category (aka subgroup) found for " + emoji
                     + ". Update emoji-test.txt to latest, and adjust PathHeader.. functionMap.put(\"minor\", ...");
             }
         }
@@ -261,7 +276,7 @@
         if (result == null) {
             result = EXTRA_SYMBOL_ORDER.get(emoji);
             if (result == null) {
-                throw new InternalCldrException("No Order found for " + emoji 
+                throw new InternalCldrException("No Order found for " + emoji
                     + ". Update emoji-test.txt to latest, and adjust PathHeader.. functionMap.put(\"minor\", ...");
             }
         }
@@ -271,7 +286,7 @@
     public static long getEmojiMinorOrder(String minor) {
         Long result = minorToOrder.get(minor);
         if (result == null) {
-            throw new InternalCldrException("No minor category (aka subgroup) found for " + minor 
+            throw new InternalCldrException("No minor category (aka subgroup) found for " + minor
                 + ". Update emoji-test.txt to latest, and adjust PathHeader.. functionMap.put(\"minor\", ...");
         }
         return result;
@@ -283,7 +298,7 @@
             if (EXTRA_SYMBOL_MINOR_CATEGORIES.containsKey(emoji)) {
                 majorCat = "Symbols";
             } else {
-                throw new InternalCldrException("No minor category (aka subgroup) found for " + emoji 
+                throw new InternalCldrException("No minor category (aka subgroup) found for " + emoji
                     + ". Update emoji-test.txt to latest, and adjust PathHeader.. functionMap.put(\"major\", ...");
             }
         }
@@ -304,6 +319,12 @@
         return ImmutableSet.copyOf(result);
     }
 
+    public static UnicodeSet getEmojiInMinorCategoriesWithExtras(String minorCategory) {
+        return new UnicodeSet(emojiToMinorCategory.getSet(minorCategory))
+            .addAll(EXTRA_SYMBOL_MINOR_CATEGORIES.getSet(minorCategory))
+            .freeze();
+    }
+
     public static UnicodeSet getNonConstructed() {
         return nonConstructed;
     }
diff --git a/tools/java/org/unicode/cldr/util/EmojiConstants.java b/tools/java/org/unicode/cldr/util/EmojiConstants.java
index dc1630c..f8c784a 100644
--- a/tools/java/org/unicode/cldr/util/EmojiConstants.java
+++ b/tools/java/org/unicode/cldr/util/EmojiConstants.java
@@ -22,7 +22,7 @@
         .add(EmojiConstants.fromCodePoints(JOINER,0x1F9B0))
         .add(EmojiConstants.fromCodePoints(JOINER,0x1F9B1))
         .add(EmojiConstants.fromCodePoints(JOINER,0x1F9B2))
-        .add(EmojiConstants.fromCodePoints(JOINER,0x1F9B3)) 
+        .add(EmojiConstants.fromCodePoints(JOINER,0x1F9B3))
         .freeze();
 
     public static final String KISS = "💋";
@@ -37,21 +37,21 @@
     public static final String JOINER_MALE_SIGN = JOINER_STRING + MALE_SIGN;
     public static final String JOINER_FEMALE_SIGN = JOINER_STRING + FEMALE_SIGN;
     public static final UnicodeSet HAIR_EXPLICIT = new UnicodeSet("[🧔 👱]").freeze();
-    
+
     public static final ListTypeLength COMPOSED_NAME_LIST = ListTypeLength.UNIT_SHORT;
 
     //public static final UnicodeSet MODIFIERS_GENDER_SIGNS = new UnicodeSet(0x1F3FB, 0x1F3FF).add(MALE_SIGN).add(FEMALE_SIGN).freeze();
     public static String getFlagCode(String s) {
         return String.valueOf((char) (s.codePointAt(0) - FIRST_REGIONAL + 'A')) + (char) (s.codePointAt(2) - FIRST_REGIONAL + 'A');
     }
-    
+
     public static String getEmojiFromRegionCodes(String chars) {
         return new StringBuilder()
                 .appendCodePoint(chars.codePointAt(0) + FIRST_REGIONAL - 'A')
                 .appendCodePoint(chars.codePointAt(1) + FIRST_REGIONAL - 'A')
                 .toString();
     }
-    
+
     public static final int TAG_BASE = 0xE0000;
     public static final int TAG_TERM_CHAR = 0xE007F;
 
diff --git a/tools/java/org/unicode/cldr/util/EnumNames.java b/tools/java/org/unicode/cldr/util/EnumNames.java
index 60e83bd..a0ef1d7 100644
--- a/tools/java/org/unicode/cldr/util/EnumNames.java
+++ b/tools/java/org/unicode/cldr/util/EnumNames.java
@@ -6,8 +6,8 @@
 import java.util.Map;
 
 public class EnumNames<T extends Enum<?>> {
-    private Map<String, T> namesToEnum = new HashMap<String, T>();
-    private ArrayList<String> enumToPreferredName = new ArrayList<String>();
+    private Map<String, T> namesToEnum = new HashMap<>();
+    private ArrayList<String> enumToPreferredName = new ArrayList<>();
 
     public void add(T enumItem, String... alternateNames) {
         final String name = enumItem.name();
diff --git a/tools/java/org/unicode/cldr/util/EscapingUtilities.java b/tools/java/org/unicode/cldr/util/EscapingUtilities.java
index 161a116..a5763b2 100644
--- a/tools/java/org/unicode/cldr/util/EscapingUtilities.java
+++ b/tools/java/org/unicode/cldr/util/EscapingUtilities.java
@@ -6,7 +6,7 @@
 import com.ibm.icu.text.UnicodeSet;
 
 public class EscapingUtilities {
-    public static UnicodeSet OK_TO_NOT_QUOTE = (UnicodeSet) new UnicodeSet("[!(-*,-\\:A-Z_a-z~]").freeze();
+    public static UnicodeSet OK_TO_NOT_QUOTE = new UnicodeSet("[!(-*,-\\:A-Z_a-z~]").freeze();
 
     public static String urlEscape(String path) {
         try {
diff --git a/tools/java/org/unicode/cldr/util/ExtractCollationRules.java b/tools/java/org/unicode/cldr/util/ExtractCollationRules.java
index b0c11b1..b616bc8 100644
--- a/tools/java/org/unicode/cldr/util/ExtractCollationRules.java
+++ b/tools/java/org/unicode/cldr/util/ExtractCollationRules.java
@@ -17,7 +17,7 @@
 import com.ibm.icu.text.UnicodeSet;
 
 public class ExtractCollationRules {
-    Map<String, String> type_rules = new TreeMap<String, String>();
+    Map<String, String> type_rules = new TreeMap<>();
     StringBuffer rules = new StringBuffer();
 
     public ExtractCollationRules set(CLDRFile file) {
@@ -134,7 +134,7 @@
     }
 
     public String getRules(Object key) {
-        return (String) type_rules.get(key);
+        return type_rules.get(key);
     }
 
     static StringBuffer quoteOperandBuffer = new StringBuffer(); // faster
diff --git a/tools/java/org/unicode/cldr/util/Factory.java b/tools/java/org/unicode/cldr/util/Factory.java
index 4355130..6cb38b6 100644
--- a/tools/java/org/unicode/cldr/util/Factory.java
+++ b/tools/java/org/unicode/cldr/util/Factory.java
@@ -31,6 +31,7 @@
      * @deprecated
      * @return the first directory
      */
+    @Deprecated
     public String getSourceDirectory() {
         return getSourceDirectories()[0].getAbsolutePath();
     }
@@ -62,7 +63,7 @@
      */
     public enum SourceTreeType {
         common, seed, other
-    };
+    }
 
     /**
      * Returns the source tree type of either an XML file or its parent directory.
@@ -88,7 +89,7 @@
 
     public enum DirectoryType {
         main, supplemental, bcp47, casing, collation, dtd, rbnf, segments, transforms, other
-    };
+    }
 
     public static final DirectoryType getDirectoryType(File fileOrDir) {
         if (fileOrDir == null) return null;
@@ -152,7 +153,7 @@
      * @return
      */
     protected ResolvingSource makeResolvingSource(String localeID, DraftStatus madeWithMinimalDraftStatus) {
-        List<XMLSource> sourceList = new ArrayList<XMLSource>();
+        List<XMLSource> sourceList = new ArrayList<>();
         String curLocale = localeID;
         while (curLocale != null) {
             if (DEBUG_FACTORY) {
@@ -212,7 +213,7 @@
      * Get a set of the available language locales (according to isLanguage).
      */
     public Set<String> getAvailableLanguages() {
-        Set<String> result = new TreeSet<String>();
+        Set<String> result = new TreeSet<>();
         for (Iterator<String> it = handleGetAvailable().iterator(); it.hasNext();) {
             String s = it.next();
             if (XPathParts.isLanguage(s)) result.add(s);
@@ -227,7 +228,7 @@
      *            if false, then parent itself will match
      */
     public Set<String> getAvailableWithParent(String parent, boolean isProper) {
-        Set<String> result = new TreeSet<String>();
+        Set<String> result = new TreeSet<>();
 
         for (Iterator<String> it = handleGetAvailable().iterator(); it.hasNext();) {
             String s = it.next();
@@ -273,6 +274,7 @@
     /**
      * These factory implementations don't do any caching.
      */
+    @Override
     public Set<CLDRLocale> subLocalesOf(CLDRLocale forLocale) {
         return calculateSubLocalesOf(forLocale, getAvailableCLDRLocales());
     }
@@ -294,7 +296,7 @@
      * @return
      */
     public Set<CLDRLocale> calculateSubLocalesOf(CLDRLocale locale, Set<CLDRLocale> available) {
-        Set<CLDRLocale> sub = new TreeSet<CLDRLocale>();
+        Set<CLDRLocale> sub = new TreeSet<>();
         for (CLDRLocale l : available) {
             if (l.getParent() == locale) {
                 sub.add(l);
diff --git a/tools/java/org/unicode/cldr/util/FileProcessor.java b/tools/java/org/unicode/cldr/util/FileProcessor.java
index 24e1288..43fb6d7 100644
--- a/tools/java/org/unicode/cldr/util/FileProcessor.java
+++ b/tools/java/org/unicode/cldr/util/FileProcessor.java
@@ -38,10 +38,11 @@
 
     public FileProcessor process(Class<?> classLocation, String fileName) {
         try {
+            System.err.println("# Reading config file " + fileName);
             BufferedReader in = FileReaders.openFile(classLocation, fileName);
             return process(in, fileName);
         } catch (Exception e) {
-            throw (RuntimeException) new IllegalArgumentException(lineCount + ":\t" + 0).initCause(e);
+            throw (RuntimeException) new IllegalArgumentException(lineCount + ":\t" + 0 + " - while reading" + fileName).initCause(e);
         }
 
     }
diff --git a/tools/java/org/unicode/cldr/util/FileReaders.java b/tools/java/org/unicode/cldr/util/FileReaders.java
index 029cbc5..198eae2 100644
--- a/tools/java/org/unicode/cldr/util/FileReaders.java
+++ b/tools/java/org/unicode/cldr/util/FileReaders.java
@@ -45,15 +45,15 @@
             return bufferedReader;
         } catch (Exception e) {
             String className = class1 == null ? null : class1.getCanonicalName();
-            String canonicalName = null;
+            String normalizedPath = null;
             try {
                 String relativeFileName = FileReaders.getRelativeFileName(class1, "../util/");
-                canonicalName = new File(relativeFileName).getCanonicalPath();
+                normalizedPath = PathUtilities.getNormalizedPathString(relativeFileName);
             } catch (Exception e1) {
                 throw new IllegalArgumentException("Couldn't open file: " + file + "; relative to class: "
                     + className, e);
             }
-            throw new IllegalArgumentException("Couldn't open file " + file + "; in path " + canonicalName + "; relative to class: "
+            throw new IllegalArgumentException("Couldn't open file " + file + "; in path " + normalizedPath + "; relative to class: "
                 + className, e);
         }
     }
@@ -81,16 +81,16 @@
             throw new IllegalArgumentException("File not found: " + resourceString);
         }
     }
-    
-    
+
+
     public static class ReadLineSimpleIterator implements SimpleIterator<String> {
         final BufferedReader bufferedReader;
-        
+
         public ReadLineSimpleIterator(BufferedReader bufferedReader) {
             super();
             this.bufferedReader = bufferedReader;
         }
-        
+
         @Override
         public String next() {
             try {
@@ -100,4 +100,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/tools/java/org/unicode/cldr/util/FindDTDOrder.java b/tools/java/org/unicode/cldr/util/FindDTDOrder.java
index cfbffd5..5497aa8 100644
--- a/tools/java/org/unicode/cldr/util/FindDTDOrder.java
+++ b/tools/java/org/unicode/cldr/util/FindDTDOrder.java
@@ -36,6 +36,7 @@
 /**
  * @deprecated
  */
+@Deprecated
 public class FindDTDOrder implements DeclHandler, ContentHandler, ErrorHandler {
     static final boolean SHOW_PROGRESS = CldrUtility.getProperty("verbose", false);
     static final boolean SHOW_ALL = CldrUtility.getProperty("show_all", false);
@@ -70,7 +71,7 @@
                     if (DEBUG) {
                         System.out.println("Opening " + file.getCanonicalFile());
                     }
-                    File dtd = new File(file.getCanonicalPath() + "/../" + "../../common/dtd/ldml.dtd");
+                    File dtd = new File(PathUtilities.getNormalizedPathString(file) + "/../" + "../../common/dtd/ldml.dtd");
                     if (DEBUG) {
                         System.out.println("Opening " + dtd.getCanonicalFile());
                     }
@@ -85,7 +86,7 @@
                         throw new IllegalArgumentException("just testing");
                     }
                     is = new InputSource(fis);
-                    is.setSystemId(file.getCanonicalPath() + "/../");
+                    is.setSystemId(PathUtilities.getNormalizedPathString(file) + "/../");
                     xmlReader.parse(is);
                     fis.close();
 
@@ -99,14 +100,14 @@
 
                     fis = new FileInputStream(filename);
                     is = new InputSource(fis);
-                    is.setSystemId(file.getCanonicalPath() + "/../");
+                    is.setSystemId(PathUtilities.getNormalizedPathString(file) + "/../");
                     xmlReader.parse(is);
                     fis.close();
                     // Then Attributes
-                    List<String> rawDtdAttributeOrder = Collections.unmodifiableList(new ArrayList<String>(me.attributeSet));
+                    List<String> rawDtdAttributeOrder = Collections.unmodifiableList(new ArrayList<>(me.attributeSet));
                     List<String> cldrFileAttributeOrder = CLDRFile.getAttributeOrder();
 
-                    LinkedHashSet<String> modifiedDtdOrder = new LinkedHashSet<String>(cldrFileAttributeOrder);
+                    LinkedHashSet<String> modifiedDtdOrder = new LinkedHashSet<>(cldrFileAttributeOrder);
                     // add items, keeping the ordering stable
                     modifiedDtdOrder.retainAll(rawDtdAttributeOrder); // remove any superfluous stuff
                     modifiedDtdOrder.addAll(rawDtdAttributeOrder);
@@ -116,7 +117,7 @@
                     modifiedDtdOrder.addAll(me.getCommonAttributes());
 
                     // now make a list for comparison
-                    List<String> dtdAttributeOrder = new ArrayList<String>(modifiedDtdOrder);
+                    List<String> dtdAttributeOrder = new ArrayList<>(modifiedDtdOrder);
 
                     // fix to and from
                     dtdAttributeOrder.remove("from");
@@ -140,7 +141,7 @@
         System.out.println(CldrUtility.LINE_SEPARATOR + "======== Start Attributes to Elements (unblocked) "
             + CldrUtility.LINE_SEPARATOR);
         for (String attribute : attributeToElements.keySet()) {
-            Set<String> filtered = new TreeSet<String>();
+            Set<String> filtered = new TreeSet<>();
             for (String element : attributeToElements.getAll(attribute)) {
                 if (!isBlocked(element)) {
                     filtered.add(element);
@@ -203,7 +204,7 @@
 
         // we make a new list, since otherwise the iteration fails in recursion (because of the modification)
         // if this were performance-sensitive we'd do it differently
-        ArrayList<String> newParents = new ArrayList<String>(parents);
+        ArrayList<String> newParents = new ArrayList<>(parents);
         newParents.add(current);
 
         for (String child : children) {
@@ -218,7 +219,7 @@
 
     Set elementOrderings = new LinkedHashSet(); // set of orderings
 
-    Set<String> allDefinedElements = new LinkedHashSet<String>();
+    Set<String> allDefinedElements = new LinkedHashSet<>();
 
     boolean showReason = false;
 
@@ -231,14 +232,14 @@
         log = new PrintWriter(System.out);
     }
 
-    private List<String> orderingList = new ArrayList<String>();
+    private List<String> orderingList = new ArrayList<>();
 
     public void checkData() {
         // verify that the ordering is the consistent for all child elements
         // do this by building an ordering from the lists.
         // The first item has no greater item in any set. So find an item that is
         // only first
-        MergeLists<String> mergeLists = new MergeLists<String>(new TreeSet<String>(new UTF16.StringComparator(true,
+        MergeLists<String> mergeLists = new MergeLists<>(new TreeSet<>(new UTF16.StringComparator(true,
             false, 0)))
                 .add(Arrays.asList("ldml"))
                 .addAll(elementOrderings); //
@@ -296,7 +297,7 @@
         // System.out.println("New code2: " + CldrUtility.breakLines(CldrUtility.join(result, " "), sep,
         // FIRST_LETTER_CHANGE.matcher(""), 80));
 
-        Set<String> missing = new TreeSet<String>(allDefinedElements);
+        Set<String> missing = new TreeSet<>(allDefinedElements);
         missing.removeAll(orderingList);
         orderingList.addAll(missing);
 
@@ -534,15 +535,16 @@
     // return true;
     // }
 
-    static final Set<String> ELEMENT_SKIP_LIST = new HashSet<String>(Arrays.asList(new String[] {
+    static final Set<String> ELEMENT_SKIP_LIST = new HashSet<>(Arrays.asList(new String[] {
         "collation", "base", "settings", "suppress_contractions", "optimize",
         "rules", "reset", "context", "p", "pc", "s", "sc", "t", "tc",
         "i", "ic", "extend", "x" }));
 
-    static final Set<String> SUBELEMENT_SKIP_LIST = new HashSet<String>(Arrays
+    static final Set<String> SUBELEMENT_SKIP_LIST = new HashSet<>(Arrays
         .asList(new String[] { "PCDATA", "EMPTY", "ANY" }));
 
     // refine later; right now, doesn't handle multiple elements well.
+    @Override
     public void elementDecl(String name, String model) throws SAXException {
         // if (ELEMENT_SKIP_LIST.contains(name)) return;
         if (name.indexOf("contractions") >= 0
@@ -554,7 +556,7 @@
             log.println("Element\t" + name + "\t" + model);
         }
         String[] list = model.split("[^-_A-Z0-9a-z]+");
-        List<String> mc = new ArrayList<String>();
+        List<String> mc = new ArrayList<>();
         /*
          * if (name.equals("currency")) { mc.add("alias"); mc.add("symbol");
          * mc.add("pattern"); }
@@ -584,7 +586,7 @@
             }
         }
         if (recordingAttributeElements) {
-            Set<String> children = new TreeSet<String>(mc);
+            Set<String> children = new TreeSet<>(mc);
             children.remove("alias");
             children.remove("special");
             children.remove("cp");
@@ -606,24 +608,25 @@
         // if (SHOW_PROGRESS) log.println();
     }
 
-    Set<String> skipCommon = new LinkedHashSet<String>(Arrays.asList(new String[] { "validSubLocales",
+    Set<String> skipCommon = new LinkedHashSet<>(Arrays.asList(new String[] { "validSubLocales",
         "standard", "references",
         "alt", "draft",
     }));
 
-    Set<String> attributeSet = new TreeSet<String>();
+    Set<String> attributeSet = new TreeSet<>();
     {
         attributeSet.add("_q");
         attributeSet.addAll(skipCommon);
     }
     List<String> attributeList;
 
-    Map<String, Set<String>> attribEquiv = new TreeMap<String, Set<String>>();
+    Map<String, Set<String>> attribEquiv = new TreeMap<>();
 
     Relation<String, String> attributeToElements = Relation.of(new TreeMap<String, Set<String>>(),
         TreeSet.class);
     private XEquivalenceClass attributeEquivalents;
 
+    @Override
     public void attributeDecl(String eName, String aName, String type,
         String mode, String value) throws SAXException {
         if (SHOW_ALL)
@@ -636,7 +639,7 @@
             attributeSet.add(aName);
             Set<String> l = attribEquiv.get(eName);
             if (l == null)
-                attribEquiv.put(eName, l = new TreeSet<String>());
+                attribEquiv.put(eName, l = new TreeSet<>());
             l.add(aName);
         }
         if (recordingAttributeElements) {
@@ -644,6 +647,7 @@
         }
     }
 
+    @Override
     public void internalEntityDecl(String name, String value) throws SAXException {
         if (SHOW_ALL)
             log.println("internalEntityDecl");
@@ -651,6 +655,7 @@
         // "\t" + value);
     }
 
+    @Override
     public void externalEntityDecl(String name, String publicId, String systemId)
         throws SAXException {
         if (SHOW_ALL)
@@ -664,6 +669,7 @@
      *
      * @see org.xml.sax.ContentHandler#endDocument()
      */
+    @Override
     public void endDocument() throws SAXException {
         if (SHOW_ALL)
             log.println("endDocument");
@@ -674,6 +680,7 @@
      *
      * @see org.xml.sax.ContentHandler#startDocument()
      */
+    @Override
     public void startDocument() throws SAXException {
         if (SHOW_ALL)
             log.println("startDocument");
@@ -684,6 +691,7 @@
      *
      * @see org.xml.sax.ContentHandler#characters(char[], int, int)
      */
+    @Override
     public void characters(char[] ch, int start, int length) throws SAXException {
         if (SHOW_ALL)
             log.println("characters");
@@ -694,6 +702,7 @@
      *
      * @see org.xml.sax.ContentHandler#ignorableWhitespace(char[], int, int)
      */
+    @Override
     public void ignorableWhitespace(char[] ch, int start, int length)
         throws SAXException {
         if (SHOW_ALL)
@@ -705,6 +714,7 @@
      *
      * @see org.xml.sax.ContentHandler#endPrefixMapping(java.lang.String)
      */
+    @Override
     public void endPrefixMapping(String prefix) throws SAXException {
         if (SHOW_ALL)
             log.println("endPrefixMapping");
@@ -715,6 +725,7 @@
      *
      * @see org.xml.sax.ContentHandler#skippedEntity(java.lang.String)
      */
+    @Override
     public void skippedEntity(String name) throws SAXException {
         if (SHOW_ALL)
             log.println("skippedEntity");
@@ -725,6 +736,7 @@
      *
      * @see org.xml.sax.ContentHandler#setDocumentLocator(org.xml.sax.Locator)
      */
+    @Override
     public void setDocumentLocator(Locator locator) {
         if (SHOW_ALL)
             log.println("setDocumentLocator");
@@ -736,6 +748,7 @@
      * @see org.xml.sax.ContentHandler#processingInstruction(java.lang.String,
      * java.lang.String)
      */
+    @Override
     public void processingInstruction(String target, String data)
         throws SAXException {
         if (SHOW_ALL)
@@ -748,6 +761,7 @@
      * @see org.xml.sax.ContentHandler#startPrefixMapping(java.lang.String,
      * java.lang.String)
      */
+    @Override
     public void startPrefixMapping(String prefix, String uri) throws SAXException {
         if (SHOW_ALL)
             log.println("startPrefixMapping");
@@ -759,6 +773,7 @@
      * @see org.xml.sax.ContentHandler#endElement(java.lang.String,
      * java.lang.String, java.lang.String)
      */
+    @Override
     public void endElement(String namespaceURI, String localName, String qName)
         throws SAXException {
         if (SHOW_ALL)
@@ -771,6 +786,7 @@
      * @see org.xml.sax.ContentHandler#startElement(java.lang.String,
      * java.lang.String, java.lang.String, org.xml.sax.Attributes)
      */
+    @Override
     public void startElement(String namespaceURI, String localName, String qName,
         Attributes atts) throws SAXException {
         if (SHOW_ALL)
@@ -782,6 +798,7 @@
      *
      * @see org.xml.sax.ErrorHandler#error(org.xml.sax.SAXParseException)
      */
+    @Override
     public void error(SAXParseException exception) throws SAXException {
         if (SHOW_ALL)
             log.println("error");
@@ -793,6 +810,7 @@
      *
      * @see org.xml.sax.ErrorHandler#fatalError(org.xml.sax.SAXParseException)
      */
+    @Override
     public void fatalError(SAXParseException exception) throws SAXException {
         if (SHOW_ALL)
             log.println("fatalError");
@@ -804,6 +822,7 @@
      *
      * @see org.xml.sax.ErrorHandler#warning(org.xml.sax.SAXParseException)
      */
+    @Override
     public void warning(SAXParseException exception) throws SAXException {
         if (SHOW_ALL)
             log.println("warning");
diff --git a/tools/java/org/unicode/cldr/util/GrammarDerivation.java b/tools/java/org/unicode/cldr/util/GrammarDerivation.java
new file mode 100644
index 0000000..66fa301
--- /dev/null
+++ b/tools/java/org/unicode/cldr/util/GrammarDerivation.java
@@ -0,0 +1,85 @@
+package org.unicode.cldr.util;
+
+import java.util.Map;
+import java.util.Objects;
+import java.util.TreeMap;
+
+import org.unicode.cldr.util.GrammarInfo.GrammaticalFeature;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.base.MoreObjects.ToStringHelper;
+import com.ibm.icu.util.Freezable;
+
+public class GrammarDerivation implements Freezable<GrammarDerivation>{
+
+    public enum CompoundUnitStructure {per, times, power, prefix}
+
+    public class Values {
+        public final String value0;
+        public final String value1;
+
+        public Values(String... values) {
+            super();
+            this.value0 = values[0];
+            this.value1 = values.length == 2 ? values[0] : null;
+        }
+        @Override
+        public String toString() {
+            final ToStringHelper temp = MoreObjects.toStringHelper(getClass()).add("value0", value0);
+            if (value1 != null) {
+                temp.add("value1", value1);
+            }
+            return temp.toString();
+        }
+
+    }
+
+    private Map<GrammaticalFeature, Map<CompoundUnitStructure, Values>> data = new TreeMap<>();
+
+    public void add(String featureStr, String structureStr, String... values) {
+        GrammaticalFeature feature = GrammaticalFeature.fromName(featureStr);
+        CompoundUnitStructure structure = CompoundUnitStructure.valueOf(structureStr);
+        Map<CompoundUnitStructure, Values> structureToValues = data.get(feature);
+        if (structureToValues == null) {
+            data.put(feature, structureToValues = new TreeMap<>());
+        }
+        structureToValues.put(structure, new Values(values));
+    }
+
+    public Values get(GrammaticalFeature feature, CompoundUnitStructure structure) {
+        Map<CompoundUnitStructure, Values> structureToValues = data.get(feature);
+        if (structureToValues == null) {
+            return null;
+        }
+        return structureToValues.get(structure);
+    }
+
+
+    @Override
+    public boolean isFrozen() {
+        return data instanceof TreeMap;
+    }
+
+    @Override
+    public GrammarDerivation freeze() {
+        if (!isFrozen()) {
+            data = CldrUtility.protectCollection(data);
+        }
+        return this;
+    }
+
+    @Override
+    public GrammarDerivation cloneAsThawed() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(data);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(getClass()).add("data", data).toString();
+    }
+}
diff --git a/tools/java/org/unicode/cldr/util/GrammarInfo.java b/tools/java/org/unicode/cldr/util/GrammarInfo.java
new file mode 100644
index 0000000..0c2172d
--- /dev/null
+++ b/tools/java/org/unicode/cldr/util/GrammarInfo.java
@@ -0,0 +1,437 @@
+package org.unicode.cldr.util;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo;
+
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableListMultimap;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSet;
+import com.ibm.icu.util.Freezable;
+import com.ibm.icu.util.Output;
+
+/**
+ * Get the info from supplemental data, eg CLDRConfig.getInstance().getSupplementalDataInfo().getGrammarInfo("fr"); Use hasGrammarInfo() to see which locales have it.
+ * @author markdavis
+ *
+ */
+public class GrammarInfo implements Freezable<GrammarInfo>{
+
+    public enum GrammaticalTarget {nominal}
+
+    public enum GrammaticalFeature {
+        grammaticalNumber("plural", "Ⓟ", "other"),
+        grammaticalCase("case", "Ⓒ", "nominative"),
+        grammaticalDefiniteness("definiteness", "Ⓓ", "indefinite"),
+        grammaticalGender("gender", "Ⓖ", "neuter");
+
+        private final String shortName;
+        private final String symbol;
+        private final String defaultValue;
+
+        public static final Pattern PATH_HAS_FEATURE = Pattern.compile("\\[@(count|case|gender|definiteness)=");
+
+        GrammaticalFeature(String shortName, String symbol, String defaultValue) {
+            this.shortName = shortName;
+            this.symbol = symbol;
+            this.defaultValue = defaultValue;
+        }
+        public String getShortName() {
+            return shortName;
+        }
+        public CharSequence getSymbol() {
+            return symbol;
+        }
+        public String getDefault(Collection<String> values) {
+            return this == grammaticalGender && values != null && !values.contains("neuter") ? "masculine" : defaultValue;
+        }
+        public static Matcher pathHasFeature(String path) {
+            Matcher result = PATH_HAS_FEATURE.matcher(path);
+            return result.find() ? result : null;
+        }
+        static final Map<String, GrammaticalFeature> shortNameToEnum =
+            ImmutableMap.copyOf(Arrays.asList(GrammaticalFeature.values())
+            .stream()
+            .collect(Collectors.toMap(e -> e.shortName, e -> e)));
+
+        public static GrammaticalFeature fromName(String name) {
+            GrammaticalFeature result = shortNameToEnum.get(name);
+            return result != null ? result : valueOf(name);
+        }
+    }
+
+    public enum GrammaticalScope {general, units}
+
+    private Map<GrammaticalTarget, Map<GrammaticalFeature, Map<GrammaticalScope,Set<String>>>> targetToFeatureToUsageToValues = new TreeMap<>();
+    private boolean frozen = false;
+
+    public void add(GrammaticalTarget target, GrammaticalFeature feature, GrammaticalScope usage, String value) {
+        Map<GrammaticalFeature, Map<GrammaticalScope,Set<String>>> featureToUsageToValues = targetToFeatureToUsageToValues.get(target);
+        if (featureToUsageToValues == null) {
+            targetToFeatureToUsageToValues.put(target, featureToUsageToValues = new TreeMap<>());
+        }
+        if (feature != null) {
+            Map<GrammaticalScope,Set<String>> usageToValues = featureToUsageToValues.get(feature);
+            if (usageToValues == null) {
+                featureToUsageToValues.put(feature, usageToValues = new TreeMap<>());
+            }
+            Set<String> values = usageToValues.get(usage);
+            if (values == null) {
+                usageToValues.put(usage, values = new TreeSet<>());
+            }
+            if (value != null) {
+                values.add(value);
+            } else {
+                int debug = 0;
+            }
+        }
+    }
+
+    public void add(GrammaticalTarget target, GrammaticalFeature feature, GrammaticalScope usage, Collection<String> valueSet) {
+        Map<GrammaticalFeature, Map<GrammaticalScope,Set<String>>> featureToUsageToValues = targetToFeatureToUsageToValues.get(target);
+        if (featureToUsageToValues == null) {
+            targetToFeatureToUsageToValues.put(target, featureToUsageToValues = new TreeMap<>());
+        }
+        if (feature != null) {
+            Map<GrammaticalScope,Set<String>> usageToValues = featureToUsageToValues.get(feature);
+            if (usageToValues == null) {
+                featureToUsageToValues.put(feature, usageToValues = new TreeMap<>());
+            }
+            Set<String> values = usageToValues.get(usage);
+            if (values == null) {
+                usageToValues.put(usage, values = new TreeSet<>());
+            }
+            values.addAll(valueSet);
+        }
+    }
+
+
+    /**
+     * Note: when there is known to be no features, the featureRaw will be null
+     */
+    public void add(String targetsRaw, String featureRaw, String usagesRaw, String valuesRaw) {
+        for (String targetString : SupplementalDataInfo.split_space.split(targetsRaw)) {
+            GrammaticalTarget target = GrammaticalTarget.valueOf(targetString);
+            if (featureRaw == null) {
+                add(target, null, null, (String)null);
+            } else {
+                final GrammaticalFeature feature = GrammaticalFeature.valueOf(featureRaw);
+
+                List<String> usages = usagesRaw == null ? Collections.singletonList(GrammaticalScope.general.toString()) : SupplementalDataInfo.split_space.splitToList(usagesRaw);
+
+                List<String> values = valuesRaw == null ? Collections.emptyList() : SupplementalDataInfo.split_space.splitToList(valuesRaw);
+                for (String usageRaw : usages) {
+                    GrammaticalScope usage = GrammaticalScope.valueOf(usageRaw);
+                    add(target, feature, usage, values);
+                }
+            }
+        }
+    }
+
+    @Override
+    public boolean isFrozen() {
+        return frozen;
+    }
+
+    @Override
+    public GrammarInfo freeze() {
+        if (!frozen) {
+            Map<GrammaticalTarget, Map<GrammaticalFeature, Map<GrammaticalScope, Set<String>>>> temp = CldrUtility.protectCollection(targetToFeatureToUsageToValues);
+            if (!temp.equals(targetToFeatureToUsageToValues)) {
+                throw new IllegalArgumentException();
+            }
+            targetToFeatureToUsageToValues = temp;
+            frozen = true;
+        }
+        return this;
+    }
+
+    @Override
+    public GrammarInfo cloneAsThawed() {
+        GrammarInfo result = new GrammarInfo();
+        this.forEach3((t,f,u,v) -> result.add(t,f,u,v));
+        return result;
+    }
+
+    static interface Handler4<T,F,U,V> {
+        void apply(T t, F f, U u, V v);
+    }
+
+    public void forEach(Handler4<GrammaticalTarget, GrammaticalFeature, GrammaticalScope, String> handler) {
+        for (Entry<GrammaticalTarget, Map<GrammaticalFeature, Map<GrammaticalScope,Set<String>>>> entry1 : targetToFeatureToUsageToValues.entrySet()) {
+            GrammaticalTarget target = entry1.getKey();
+            final Map<GrammaticalFeature, Map<GrammaticalScope,Set<String>>> featureToUsageToValues = entry1.getValue();
+            if (featureToUsageToValues.isEmpty()) {
+                handler.apply(target, null, null, null);
+            } else
+                for (Entry<GrammaticalFeature, Map<GrammaticalScope,Set<String>>> entry2 : featureToUsageToValues.entrySet()) {
+                    GrammaticalFeature feature = entry2.getKey();
+                    for (Entry<GrammaticalScope, Set<String>> entry3 : entry2.getValue().entrySet()) {
+                        final GrammaticalScope usage = entry3.getKey();
+                        for (String value : entry3.getValue()) {
+                            handler.apply(target, feature, usage, value);
+                        }
+                    }
+                }
+        }
+    }
+
+    static interface Handler3<T,F,U, V> {
+        void apply(T t, F f, U u, V v);
+    }
+
+    public void forEach3(Handler3<GrammaticalTarget, GrammaticalFeature, GrammaticalScope, Collection<String>> handler) {
+        for (Entry<GrammaticalTarget, Map<GrammaticalFeature, Map<GrammaticalScope,Set<String>>>> entry1 : targetToFeatureToUsageToValues.entrySet()) {
+            GrammaticalTarget target = entry1.getKey();
+            final Map<GrammaticalFeature, Map<GrammaticalScope,Set<String>>> featureToUsageToValues = entry1.getValue();
+            if (featureToUsageToValues.isEmpty()) {
+                handler.apply(target, null, null, null);
+            } else
+                for (Entry<GrammaticalFeature, Map<GrammaticalScope,Set<String>>> entry2 : featureToUsageToValues.entrySet()) {
+                    GrammaticalFeature feature = entry2.getKey();
+                    for (Entry<GrammaticalScope, Set<String>> entry3 : entry2.getValue().entrySet()) {
+                        final GrammaticalScope usage = entry3.getKey();
+                        final Collection<String> values = entry3.getValue();
+                        handler.apply(target, feature, usage, values);
+                    }
+                }
+        }
+    }
+
+    /** Returns null if there is no known information. Otherwise returns the information for the locale (which may be empty if there are no variants) */
+    public Collection<String> get(GrammaticalTarget target, GrammaticalFeature feature, GrammaticalScope usage) {
+        Map<GrammaticalFeature, Map<GrammaticalScope,Set<String>>> featureToUsageToValues = targetToFeatureToUsageToValues.get(target);
+        if (featureToUsageToValues == null) {
+            return Collections.emptySet();
+        }
+        Map<GrammaticalScope,Set<String>> usageToValues = featureToUsageToValues.get(feature);
+        if (usageToValues == null) {
+            return Collections.emptySet();
+        }
+        Collection<String> result = usageToValues.get(usage);
+        return result == null
+            ? usageToValues.get(GrammaticalScope.general)
+                : result;
+    }
+
+    public boolean hasInfo(GrammaticalTarget target) {
+        return targetToFeatureToUsageToValues.containsKey(target);
+    }
+
+    @Override
+    public String toString() {
+        return toString("\n");
+    }
+    public String toString(String lineSep) {
+        StringBuilder result = new StringBuilder();
+        this.forEach3((t,f,u, v) ->
+        {
+            result.append(lineSep);
+            result.append("{" + (t == null ? "" : t.toString()) + "}"
+                + "\t{" + (f == null ? "" : f.toString()) + "}"
+                + "\t{" +  (u == null ? "" : u.toString()) + "}"
+                + "\t{" +  (v == null ? "" : Joiner.on(' ').join(v)) + "}");
+        });
+        return result.toString();
+    }
+
+    static public String getGrammaticalInfoAttributes(GrammarInfo grammarInfo, UnitPathType pathType, String plural, String gender, String caseVariant) {
+        String grammaticalAttributes = "";
+        if (pathType.features.contains(GrammaticalFeature.grammaticalNumber)) { // count is special
+            grammaticalAttributes += "[@count=\"" + (plural == null ? "other" : plural) + "\"]";
+        }
+        if (grammarInfo != null && gender != null
+            && pathType.features.contains(GrammaticalFeature.grammaticalGender)
+            ) {
+            Collection<String> genders = grammarInfo.get(GrammaticalTarget.nominal, GrammaticalFeature.grammaticalGender, GrammaticalScope.units);
+            if (!gender.equals(GrammaticalFeature.grammaticalGender.getDefault(genders))) {
+                grammaticalAttributes += "[@gender=\"" + gender + "\"]";
+            }
+        }
+        if (grammarInfo != null && caseVariant != null
+            && pathType.features.contains(GrammaticalFeature.grammaticalCase)
+            && !caseVariant.equals(GrammaticalFeature.grammaticalCase.getDefault(null))) {
+            grammaticalAttributes += "[@case=\"" + caseVariant + "\"]";
+        }
+        return grammaticalAttributes;
+    }
+
+    public static final ImmutableMultimap<String,PluralInfo.Count> NON_COMPUTABLE_PLURALS = ImmutableListMultimap.of(
+        "pl", PluralInfo.Count.one,
+        "pl", PluralInfo.Count.other,
+        "ru", PluralInfo.Count.one,
+        "ru", PluralInfo.Count.other);
+    /**
+     * TODO: change this to be data-file driven
+     */
+    public static final Set<String> SEED_LOCALES = ImmutableSet.of("pl", "ru", "da", "de", "nb", "sv", "hi", "id", "es", "fr", "it", "nl", "pt", "en", "ja", "th", "vi", "zh", "zh_TW", "ko", "yue");
+
+    /**
+     * TODO: change this to be data-file driven
+     */
+    public static final Set<String> SPECIAL_TRANSLATION_UNITS = ImmutableSet.of(
+        // new in v38
+        "mass-grain",
+        "volume-dessert-spoon",
+        "volume-dessert-spoon-imperial",
+        "volume-drop",
+        "volume-dram",
+        "volume-jigger",
+        "volume-pinch",
+        "volume-quart-imperial",
+        // "volume-pint-imperial",
+
+        "acceleration-meter-per-square-second", "area-acre", "area-hectare",
+        "area-square-centimeter", "area-square-foot", "area-square-kilometer", "area-square-mile", "concentr-percent", "consumption-mile-per-gallon",
+        "consumption-mile-per-gallon-imperial", "duration-day", "duration-hour", "duration-minute", "duration-month", "duration-second", "duration-week",
+        "duration-year", "energy-foodcalorie", "energy-kilocalorie", "length-centimeter", "length-foot", "length-inch", "length-kilometer", "length-meter",
+        "length-mile", "length-millimeter", "length-parsec", "length-picometer", "length-solar-radius", "length-yard", "light-solar-luminosity", "mass-dalton",
+        "mass-earth-mass", "mass-milligram", "mass-solar-mass", "pressure-kilopascal", "speed-kilometer-per-hour", "speed-meter-per-second", "speed-mile-per-hour",
+        "temperature-celsius", "temperature-fahrenheit", "temperature-generic", "temperature-kelvin", "acceleration-g-force", "consumption-liter-per-100-kilometer",
+        "mass-gram", "mass-kilogram", "mass-ounce", "mass-pound", "volume-centiliter", "volume-cubic-centimeter", "volume-cubic-foot", "volume-cubic-mile",
+        "volume-cup", "volume-deciliter", "volume-fluid-ounce", "volume-fluid-ounce-imperial", "volume-gallon", "volume-gallon", "volume-gallon-imperial",
+        "volume-liter", "volume-milliliter", "volume-pint", "volume-quart", "volume-tablespoon", "volume-teaspoon");
+    // compounds
+    // "kilogram-per-cubic-meter", "kilometer-per-liter", "concentr-gram-per-mole", "speed-mile-per-second", "volumetricflow-cubic-foot-per-second",
+    // "volumetricflow-cubic-meter-per-second", "gram-per-cubic-centimeter",
+
+
+    public void getSourceCaseAndPlural(String locale, String gender, String value, String desiredCase, String desiredPlural,
+        Output<String> sourceCase, Output<String> sourcePlural) {
+        switch(locale) {
+        case "pl":
+            getSourceCaseAndPluralPolish(gender, value, desiredCase, desiredPlural, sourceCase, sourcePlural);
+            break;
+        case "ru":
+            getSourceCaseAndPluralRussian(gender, value, desiredCase, desiredPlural, sourceCase, sourcePlural);
+            break;
+        default:
+            throw new UnsupportedOperationException(locale);
+        }
+    }
+
+    /** Russian rules for paucal (few) and fractional (other)
+     * <pre>
+     * plural = other
+     * Nominative ⇒ genitive singular
+     * Accusative + masculine ⇒ genitive singular
+     * All other combinations of gender + case ⇒ same-case, plural
+     *
+     * Other
+     * genitive singular
+     *
+     * Plurals:
+     *   one,
+     *   few (2~4),
+     *   many, = plural
+     *   other (where other is 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0)
+     * </pre>
+     */
+    private void getSourceCaseAndPluralRussian(String gender, String value,
+        String desiredCase, String desiredPlural,
+        Output<String> sourceCase, Output<String> sourcePlural) {
+        switch (desiredPlural) {
+        case "few":
+            // default source
+            sourceCase.value = desiredCase;
+            sourcePlural.value = "many";
+            // special cases
+            switch (desiredCase) {
+            case "nominative":
+                sourceCase.value = "genitive";
+                sourcePlural.value = "one";
+                break;
+            case "accusative":
+                switch (gender) {
+                case "masculine":
+                    sourceCase.value = "genitive";
+                    sourcePlural.value = "one";
+                    break;
+                }
+                break;
+            }
+        case "other":
+            sourceCase.value = "genitive";
+            sourcePlural.value = "one";
+            return;
+        }
+    }
+
+    /** Polish rules
+     * <pre>
+     * plural = few
+     *
+     * neuter + ending in -um + (nominative, accusative) ⇒ vocative plural
+     * Feminine||neuter + (nominative, accusative) ⇒ genitive singular
+     * Animate||inanimate + (nominative, accusative) ⇒ vocative plural
+     * Personal + nominative ⇒ vocative plural
+     * Personal + accusative ⇒ genitive plural
+     * All other combinations of gender + case ⇒ same-case, plural
+     *
+     * plural = other
+     * genitive singular
+     *
+     * Plurals:
+     *   one,
+     *   few (2~4),
+     *   many, = plural
+     *   other (where other is 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0)
+     * </pre>
+     */
+    private void getSourceCaseAndPluralPolish(String gender, String value,
+        String desiredCase, String desiredPlural,
+        Output<String> sourceCase, Output<String> sourcePlural) {
+        switch (desiredPlural) {
+        case "few":
+            // default
+            sourceCase.value = desiredCase;
+            sourcePlural.value = "many";
+            // special cases
+            boolean isNominative = false;
+            switch (desiredCase) {
+            case "nominative":
+                isNominative = true;
+            case "vocative":
+            case "accusative":
+                switch (gender) {
+                case "neuter":
+                    if (value.endsWith("um")) {
+                        sourceCase.value = "vocative";
+                        break;
+                    }
+                    // otherwise fall thorugh to feminine
+                case "feminine":
+                    sourceCase.value = "nominative";
+                    sourcePlural.value = "few";
+                    break;
+                case "animate":
+                case "inanimate":
+                    sourceCase.value = "vocative";
+                    break;
+                case "personal":
+                    sourceCase.value = isNominative ? "vocative" : "genitive";
+                    break;
+                }
+                break;
+            }
+            return;
+        case "other":
+            sourceCase.value = "genitive";
+            sourcePlural.value = "one";
+            return;
+        }
+    }
+}
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/util/ICUServiceBuilder.java b/tools/java/org/unicode/cldr/util/ICUServiceBuilder.java
index df610be..2873444 100644
--- a/tools/java/org/unicode/cldr/util/ICUServiceBuilder.java
+++ b/tools/java/org/unicode/cldr/util/ICUServiceBuilder.java
@@ -33,7 +33,7 @@
     public static Currency NO_CURRENCY = Currency.getInstance("XXX");
     private CLDRFile cldrFile;
     private CLDRFile collationFile;
-    private static Map<CLDRLocale, ICUServiceBuilder> ISBMap = new HashMap<CLDRLocale, ICUServiceBuilder>();
+    private static Map<CLDRLocale, ICUServiceBuilder> ISBMap = new HashMap<>();
 
     private static TimeZone utc = TimeZone.getTimeZone("GMT");
     private static DateFormat iso = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", ULocale.ENGLISH);
@@ -54,11 +54,11 @@
         return iso.parse(date);
     }
 
-    private Map<String, SimpleDateFormat> cacheDateFormats = new HashMap<String, SimpleDateFormat>();
-    private Map<String, DateFormatSymbols> cacheDateFormatSymbols = new HashMap<String, DateFormatSymbols>();
-    private Map<String, NumberFormat> cacheNumberFormats = new HashMap<String, NumberFormat>();
-    private Map<String, DecimalFormatSymbols> cacheDecimalFormatSymbols = new HashMap<String, DecimalFormatSymbols>();
-    private Map<String, RuleBasedCollator> cacheRuleBasedCollators = new HashMap<String, RuleBasedCollator>();
+    private Map<String, SimpleDateFormat> cacheDateFormats = new HashMap<>();
+    private Map<String, DateFormatSymbols> cacheDateFormatSymbols = new HashMap<>();
+    private Map<String, NumberFormat> cacheNumberFormats = new HashMap<>();
+    private Map<String, DecimalFormatSymbols> cacheDecimalFormatSymbols = new HashMap<>();
+    private Map<String, RuleBasedCollator> cacheRuleBasedCollators = new HashMap<>();
 
     private SupplementalDataInfo supplementalData;
 
@@ -130,7 +130,7 @@
     }
 
     public RuleBasedCollator getRuleBasedCollator(String type) throws Exception {
-        RuleBasedCollator col = (RuleBasedCollator) cacheRuleBasedCollators.get(type);
+        RuleBasedCollator col = cacheRuleBasedCollators.get(type);
         if (col == null) {
             col = _getRuleBasedCollator(type);
             cacheRuleBasedCollators.put(type, col);
@@ -182,7 +182,7 @@
 
     public SimpleDateFormat getDateFormat(String calendar, int dateIndex, int timeIndex, String numbersOverride) {
         String key = cldrFile.getLocaleID() + "," + calendar + "," + dateIndex + "," + timeIndex;
-        SimpleDateFormat result = (SimpleDateFormat) cacheDateFormats.get(key);
+        SimpleDateFormat result = cacheDateFormats.get(key);
         if (result != null) return (SimpleDateFormat) result.clone();
 
         String pattern = getPattern(calendar, dateIndex, timeIndex);
@@ -195,7 +195,7 @@
 
     public SimpleDateFormat getDateFormat(String calendar, String pattern, String numbersOverride) {
         String key = cldrFile.getLocaleID() + "," + calendar + ",," + pattern + ",,," + numbersOverride;
-        SimpleDateFormat result = (SimpleDateFormat) cacheDateFormats.get(key);
+        SimpleDateFormat result = cacheDateFormats.get(key);
         if (result != null) return (SimpleDateFormat) result.clone();
         result = getFullFormat(calendar, pattern, numbersOverride);
         cacheDateFormats.put(key, result);
@@ -282,7 +282,7 @@
         int minEras = (calendar.equals("chinese") || calendar.equals("dangi")) ? 0 : 1;
 
         List<String> temp = getArray(prefix + "eras/eraAbbr/era[@type=\"", 0, null, "\"]", minEras);
-        formatData.setEras(last = (String[]) temp.toArray(new String[temp.size()]));
+        formatData.setEras(last = temp.toArray(new String[temp.size()]));
         if (minEras != 0) checkFound(last);
         // if (temp.size() < 2 && notGregorian) {
         // if (gregorianBackup == null) gregorianBackup = _getDateFormatSymbols("gregorian");
@@ -290,7 +290,7 @@
         // }
 
         temp = getArray(prefix + "eras/eraNames/era[@type=\"", 0, null, "\"]", minEras);
-        formatData.setEraNames(last = (String[]) temp.toArray(new String[temp.size()]));
+        formatData.setEraNames(last = temp.toArray(new String[temp.size()]));
         if (minEras != 0) checkFound(last);
         // if (temp.size() < 2 && notGregorian) {
         // if (gregorianBackup == null) gregorianBackup = _getDateFormatSymbols("gregorian");
@@ -437,7 +437,7 @@
         final int arrayCount = isDay ? 7 : type.equals("month") ? 12 : 4;
         List<String> temp = getArray(prefix, isDay ? 0 : 1, isDay ? Days : null, postfix, arrayCount);
         if (isDay) temp.add(0, "");
-        String[] result = (String[]) temp.toArray(new String[temp.size()]);
+        String[] result = temp.toArray(new String[temp.size()]);
         checkFound(result);
         return result;
     }
@@ -445,7 +445,7 @@
     static final Matcher gregorianMonthsMatcher = PatternCache.get(".*gregorian.*months.*").matcher("");
 
     private List<String> getArray(String prefix, int firstIndex, String[] itemNames, String postfix, int minimumSize) {
-        List<String> result = new ArrayList<String>();
+        List<String> result = new ArrayList<>();
         String lastType;
         for (int i = firstIndex;; ++i) {
             lastType = itemNames != null && i < itemNames.length ? itemNames[i] : String.valueOf(i);
@@ -459,10 +459,6 @@
             throw new RuntimeException("Internal Error: ICUServiceBuilder.getArray():" + cldrFile.getLocaleID() + " "
                 + prefix + lastType + postfix + " - result.size=" + result.size() + ", less than acceptable minimum "
                 + minimumSize);
-            // Collection s = CollectionUtilities.addAll(cldrFile.iterator(prefix), new
-            // TreeSet());//cldrFile.keySet(".*gregorian.*months.*", );
-            // String item = cldrFile.getWinningValueWithBailey(prefix + lastType + postfix);
-            // throw new IllegalArgumentException("Can't find enough items");
         }
         /*
          * <months>
@@ -495,6 +491,7 @@
             this.roundingIncrement = currencyNumberInfo.getRoundingIncrement();
         }
 
+        @Override
         public String getName(ULocale locale,
             int nameStyle,
             boolean[] isChoiceFormat) {
@@ -529,10 +526,12 @@
          * @return the non-negative rounding increment, or 0.0 if none
          * @stable ICU 2.2
          */
+        @Override
         public double getRoundingIncrement() {
             return roundingIncrement;
         }
 
+        @Override
         public int getDefaultFractionDigits() {
             return fractDigits;
         }
@@ -592,7 +591,7 @@
 
     public NumberFormat getGenericNumberFormat(String ns) {
         // CLDRFile cldrFile = cldrFactory.make(localeID, true);
-        NumberFormat result = (NumberFormat) cacheNumberFormats.get(cldrFile.getLocaleID() + "@numbers=" + ns);
+        NumberFormat result = cacheNumberFormats.get(cldrFile.getLocaleID() + "@numbers=" + ns);
         if (result == null) {
             ULocale ulocale = new ULocale(cldrFile.getLocaleID() + "@numbers=" + ns);
             result = NumberFormat.getInstance(ulocale);
@@ -747,7 +746,7 @@
     private DecimalFormatSymbols _getDecimalFormatSymbols(String numberSystem) {
         String key = (numberSystem == null) ? cldrFile.getLocaleID() : cldrFile.getLocaleID() + "@numbers="
             + numberSystem;
-        DecimalFormatSymbols symbols = (DecimalFormatSymbols) cacheDecimalFormatSymbols.get(key);
+        DecimalFormatSymbols symbols = cacheDecimalFormatSymbols.get(key);
         if (symbols != null) {
             return (DecimalFormatSymbols) symbols.clone();
         }
@@ -865,6 +864,7 @@
 
     public enum Context {
         format, stand_alone;
+        @Override
         public String toString() {
             return name().replace('_', '-');
         }
diff --git a/tools/java/org/unicode/cldr/util/IntMap.java b/tools/java/org/unicode/cldr/util/IntMap.java
index 6ae159e..77c1a41 100644
--- a/tools/java/org/unicode/cldr/util/IntMap.java
+++ b/tools/java/org/unicode/cldr/util/IntMap.java
@@ -40,6 +40,7 @@
 
     public abstract int approximateStorage();
 
+    @Override
     public String toString() {
         return getValueMap().toString();
     }
@@ -53,10 +54,12 @@
             this.intToValue = intToValue;
         }
 
+        @Override
         public T get(int index) {
             return intToValue[index];
         }
 
+        @Override
         public Map<T, Integer> getValueMap(Map<T, Integer> output) {
             for (int i = 0; i < intToValue.length; ++i) {
                 output.put(intToValue[i], i);
@@ -64,6 +67,7 @@
             return output;
         }
 
+        @Override
         public int approximateStorage() {
             int size = OBJECT_OVERHEAD;
             for (T item : intToValue) {
@@ -75,9 +79,10 @@
     }
 
     public static class BasicIntMapFactory<T> implements IntMapFactory<T> {
+        @Override
         @SuppressWarnings("unchecked")
         public BasicIntMap<T> make(Collection<T> values) {
-            return new BasicIntMap<T>((T[]) new ArrayList<T>(new HashSet<T>(values)).toArray());
+            return new BasicIntMap<>((T[]) new ArrayList<>(new HashSet<>(values)).toArray());
         }
     }
 
@@ -97,6 +102,7 @@
             this.intToValue = intToValue;
         }
 
+        @Override
         public String get(int index) {
             // the packedIndex stores the string as an index in the top 24 bits, and length in the bottom 8.
             int packedIndex = intToValue[index];
@@ -105,6 +111,7 @@
             return data.substring(dataIndex, dataIndex + len);
         }
 
+        @Override
         public Map<String, Integer> getValueMap(Map<String, Integer> output) {
             for (int i = 0; i < intToValue.length; ++i) {
                 output.put(get(i), i);
@@ -112,6 +119,7 @@
             return output;
         }
 
+        @Override
         public int approximateStorage() {
             int size = OBJECT_OVERHEAD + POINTER_OVERHEAD * 2;
             size += data.length() * 2 + STRING_OVERHEAD;
@@ -121,6 +129,7 @@
     }
 
     public static final Comparator<String> LONGEST_FIRST_COMPARATOR = new Comparator<String>() {
+        @Override
         public int compare(String a, String b) {
             return a.length() > b.length() ? -1
                 : a.length() < b.length() ? 1
@@ -129,9 +138,10 @@
     };
 
     public static class CompactStringIntMapFactory implements IntMapFactory<String> {
+        @Override
         public CompactStringIntMap make(Collection<String> values) {
             // first sort, longest first
-            Set<String> sorted = new TreeSet<String>(LONGEST_FIRST_COMPARATOR);
+            Set<String> sorted = new TreeSet<>(LONGEST_FIRST_COMPARATOR);
             sorted.addAll(values);
 
             StringBuilder data = new StringBuilder();
diff --git a/tools/java/org/unicode/cldr/util/Iso639Data.java b/tools/java/org/unicode/cldr/util/Iso639Data.java
index 7533b12..f7582f7 100644
--- a/tools/java/org/unicode/cldr/util/Iso639Data.java
+++ b/tools/java/org/unicode/cldr/util/Iso639Data.java
@@ -30,7 +30,7 @@
     static Relation<String, String> toNames;
 
     static Relation<String, String> toRetirements;
-    
+
     static Map<String, String> toChangeTo;
 
     static Map<String, Scope> toScope;
@@ -97,7 +97,7 @@
             }
             return Scope.valueOf(input); // to get exception
         }
-    };
+    }
 
     /**
      * <h3><a NAME="L"></a>Living languages</h3>
@@ -130,7 +130,7 @@
      */
     public enum Type {
         Ancient, Constructed, Extinct, Historical, Living, Special, Collection, Unknown
-    };
+    }
 
     /**
      * This indicates the source of the language subtag.
@@ -140,7 +140,7 @@
      */
     public enum Source {
         ISO_639_1, ISO_639_2, ISO_639_3, BCP47, CLDR
-    };
+    }
 
     public static String getVersion() {
         return version;
@@ -269,7 +269,7 @@
      */
     enum IsoColumn {
         Id, Part2B, Part2T, Part1, Scope, Type, Ref_Name
-    };
+    }
 
     /**
      * Id char(3) NOT NULL, -- The three-letter 639-3 identifier Print_Name
@@ -279,7 +279,7 @@
      */
     enum IsoNamesColumn {
         Id, Print_Name, Inverted_Name
-    };
+    }
 
     private static void getData() {
         try {
@@ -289,18 +289,18 @@
 
             in = CldrUtility.getUTF8Data("iso-639-3.tab");
             SplitToArray tabs = new SplitToArray(Splitter.on('\t').trimResults());
-            toAlpha3 = new HashMap<String, String>();
-            fromAlpha3 = new HashMap<String, String>();
-            toBiblio3 = new HashMap<String, String>();
-            fromBiblio3 = new HashMap<String, String>();
-            toScope = new HashMap<String, Scope>();
-            toType = new HashMap<String, Type>();
+            toAlpha3 = new HashMap<>();
+            fromAlpha3 = new HashMap<>();
+            toBiblio3 = new HashMap<>();
+            fromBiblio3 = new HashMap<>();
+            toScope = new HashMap<>();
+            toType = new HashMap<>();
             toNames = Relation.of(new TreeMap<String, Set<String>>(), LinkedHashSet.class);
             toRetirements = Relation.of(new TreeMap<String, Set<String>>(), LinkedHashSet.class);
-            toChangeTo = new TreeMap<String, String>();
+            toChangeTo = new TreeMap<>();
             macro_encompassed = Relation.of(new TreeMap<String, Set<String>>(), LinkedHashSet.class);
-            encompassed_macro = new HashMap<String, String>();
-            toSource = new HashMap<String, Source>();
+            encompassed_macro = new HashMap<>();
+            toSource = new HashMap<>();
             toSource.put("sh", Source.ISO_639_1); // add deprecated language
 
             int count = 0; // line count for debugging
@@ -469,7 +469,7 @@
             }
             in.close();
 
-            Map<String, String> toHeirarchyTemp = new TreeMap<String, String>();
+            Map<String, String> toHeirarchyTemp = new TreeMap<>();
             in = CldrUtility.getUTF8Data("external/Iso639-5.html");
             String lastCode = null;
             int column = 0;
@@ -563,7 +563,7 @@
             in.close();
 
             Pattern SPLIT_HEIRARCHY = PatternCache.get("\\s*:\\s*");
-            toHeirarchy = new TreeMap<String, List<String>>();
+            toHeirarchy = new TreeMap<>();
             // for (String code : toHeirarchyTemp.keySet()) {
             // System.out.println(code + " => " + toHeirarchyTemp.get(code));
             // }
@@ -643,7 +643,7 @@
     public static Set<String> getEncompassed() {
         return encompassed_macro.keySet();
     }
-    
+
     public static String getChangeTo(String subtag) {
         return getChangeToMap().get(subtag);
     }
diff --git a/tools/java/org/unicode/cldr/util/IsoCurrencyParser.java b/tools/java/org/unicode/cldr/util/IsoCurrencyParser.java
index aac26bb..4ea6ade 100644
--- a/tools/java/org/unicode/cldr/util/IsoCurrencyParser.java
+++ b/tools/java/org/unicode/cldr/util/IsoCurrencyParser.java
@@ -94,8 +94,8 @@
         .put("EUROPEAN MONETARY CO-OPERATION FUND (EMCF)", "ZZ")
         .build();
 
-    static Map<String, String> iso4217CountryToCountryCode = new TreeMap<String, String>();
-    static Set<String> exceptionList = new LinkedHashSet<String>();
+    static Map<String, String> iso4217CountryToCountryCode = new TreeMap<>();
+    static Set<String> exceptionList = new LinkedHashSet<>();
     static {
         StandardCodes sc = StandardCodes.make();
         Set<String> countries = sc.getAvailableCodes("territory");
@@ -138,11 +138,13 @@
             return minor_unit;
         }
 
+        @Override
         public String toString() {
             return String.format("[%s,\t%s [%s],\t%d]", name, countryCode,
                 StandardCodes.make().getData("territory", countryCode), numericCode);
         }
 
+        @Override
         public int compareTo(Object o) {
             Data other = (Data) o;
             int result;
@@ -213,7 +215,7 @@
         // we can remove these as well.
         // SVC - El Salvador Colon - not used anymore ( uses USD instead )
         // ZWL - Last Zimbabwe Dollar - abandoned due to hyper-inflation.
-        Set<String> KNOWN_BAD_ISO_DATA_CODES = new TreeSet<String>(Arrays.asList("SVC", "ZWL"));
+        Set<String> KNOWN_BAD_ISO_DATA_CODES = new TreeSet<>(Arrays.asList("SVC", "ZWL"));
         String country_code;
         String currency_name;
         String alphabetic_code;
@@ -226,6 +228,7 @@
         public void cleanup() {
         }
 
+        @Override
         public void handlePathValue(String path, String value) {
             try {
                 XPathParts parts = XPathParts.getFrozenInstance(path);
diff --git a/tools/java/org/unicode/cldr/util/IsoRegionData.java b/tools/java/org/unicode/cldr/util/IsoRegionData.java
index b370dcb..a6eccdf 100644
--- a/tools/java/org/unicode/cldr/util/IsoRegionData.java
+++ b/tools/java/org/unicode/cldr/util/IsoRegionData.java
@@ -11,17 +11,17 @@
 import java.util.Set;
 import java.util.TreeSet;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.text.UnicodeSet;
 import com.ibm.icu.util.ICUUncheckedIOException;
 
 public class IsoRegionData {
-    static Map<String, String> _numeric = new HashMap<String, String>();
-    static Map<String, String> _alpha3 = new HashMap<String, String>();
-    static Map<String, String> _fips10 = new HashMap<String, String>();
-    static Map<String, String> _internet = new HashMap<String, String>();
-    static Set<String> other_internet = new TreeSet<String>();
-    static Set<String> available = new HashSet<String>();
+    static Map<String, String> _numeric = new HashMap<>();
+    static Map<String, String> _alpha3 = new HashMap<>();
+    static Map<String, String> _fips10 = new HashMap<>();
+    static Map<String, String> _internet = new HashMap<>();
+    static Set<String> other_internet = new TreeSet<>();
+    static Set<String> available = new HashSet<>();
 
     static final UnicodeSet NMTOKEN = new UnicodeSet(
         "[\\-.0-\\:A-Z_a-z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\U00010000-\\U000EFFFF]")
@@ -66,7 +66,7 @@
             }
             codes.close();
 
-            Set<String> errors = new LinkedHashSet<String>();
+            Set<String> errors = new LinkedHashSet<>();
             codes = CldrUtility.getUTF8Data("territory_codes.txt");
             while (true) {
                 String line = codes.readLine();
@@ -90,14 +90,14 @@
                 String internet = values[3];
                 if (internet != null) {
                     internet = internet.toUpperCase();
-                    LinkedHashSet<String> internetStrings = new LinkedHashSet<String>(
+                    LinkedHashSet<String> internetStrings = new LinkedHashSet<>(
                         Arrays.asList(internet.split("/")));
                     if (!other_internet.containsAll(internetStrings)) {
                         errors.addAll(internetStrings);
                         errors.removeAll(other_internet);
                     }
                     other_internet.removeAll(internetStrings);
-                    internet = CollectionUtilities.join(internetStrings, " ");
+                    internet = Joiner.on(" ").join(internetStrings);
                 }
                 String fips10 = values[4];
                 _numeric.put(alpha2, numeric);
@@ -112,7 +112,7 @@
         } catch (IOException e) {
             throw new ICUUncheckedIOException(e);
         }
-        _internet.put("ZZ", CollectionUtilities.join(other_internet, " "));
+        _internet.put("ZZ", Joiner.on(" ").join(other_internet));
 
         other_internet = Collections.unmodifiableSet(other_internet);
 
diff --git a/tools/java/org/unicode/cldr/util/LDMLUtilities.java b/tools/java/org/unicode/cldr/util/LDMLUtilities.java
index 6ecc56a..02c8660 100644
--- a/tools/java/org/unicode/cldr/util/LDMLUtilities.java
+++ b/tools/java/org/unicode/cldr/util/LDMLUtilities.java
@@ -811,7 +811,7 @@
         StringBuffer xp1 = new StringBuffer();
         StringBuffer xp2 = new StringBuffer();
         int l1 = xp1.length(), l2 = xp2.length();
-        Map<String, Object> map = new HashMap<String, Object>();
+        Map<String, Object> map = new HashMap<>();
         if (n2 == null || n2.length == 0) {
             Node[] na = new Node[n1.length];
             for (int i = 0; i < n1.length; i++) {
@@ -878,7 +878,7 @@
              * continue;
              */
             // initialize the stack for every alias!
-            stack = new HashMap<String, String>();
+            stack = new HashMap<>();
             if (node == null) {
                 System.err.println("list.item(" + i + ") returned null!. The list reports it's length as: "
                     + array.length);
@@ -1316,7 +1316,7 @@
         NodeList list = parent.getChildNodes();
         int length = list.getLength();
 
-        List<Node> al = new ArrayList<Node>();
+        List<Node> al = new ArrayList<>();
         for (int i = 0; i < length; i++) {
             Node item = list.item(i);
             if (item.getNodeType() != Node.ELEMENT_NODE) {
@@ -1853,6 +1853,7 @@
         // Local class: cheap non-printing ErrorHandler
         // This is used to suppress validation warnings
         ErrorHandler nullHandler = new ErrorHandler() {
+            @Override
             public void warning(SAXParseException e) throws SAXException {
                 int col = e.getColumnNumber();
                 String msg = (filename2 + ":" + e.getLineNumber()
@@ -1865,6 +1866,7 @@
                 }
             }
 
+            @Override
             public void error(SAXParseException e) throws SAXException {
                 int col = e.getColumnNumber();
                 String msg = (filename2 + ":" + e.getLineNumber()
@@ -1876,6 +1878,7 @@
                 }
             }
 
+            @Override
             public void fatalError(SAXParseException e) throws SAXException {
                 throw e;
             }
@@ -1959,15 +1962,7 @@
         }
 
         File f = new File(filename);
-        String tmp = null;
-        try {
-            // This normally gives a better path
-            tmp = f.getCanonicalPath();
-        } catch (IOException ioe) {
-            // But this can be used as a backup, for cases
-            // where the file does not exist, etc.
-            tmp = f.getAbsolutePath();
-        }
+        String tmp = PathUtilities.getNormalizedPathString(f);
 
         // URLs must explicitly use only forward slashes
         if (File.separatorChar == '\\') {
@@ -2228,6 +2223,7 @@
     private static void setNamespace(XPath xpath, String string) {
         if (string.contains("special/icu:")) {
             xpath.setNamespaceContext(new javax.xml.namespace.NamespaceContext() {
+                @Override
                 public String getNamespaceURI(String prefix) {
                     if (prefix.equals("icu")) {
                         return "http://www.icu-project.org";
@@ -2235,10 +2231,12 @@
                     return null;
                 }
 
+                @Override
                 public String getPrefix(String namespaceURI) {
                     return null;
                 }
 
+                @Override
                 public Iterator<String> getPrefixes(String namespaceURI) {
                     return null;
                 }
diff --git a/tools/java/org/unicode/cldr/util/LanguageGroup.java b/tools/java/org/unicode/cldr/util/LanguageGroup.java
index aa10e8a..ad00cec 100644
--- a/tools/java/org/unicode/cldr/util/LanguageGroup.java
+++ b/tools/java/org/unicode/cldr/util/LanguageGroup.java
@@ -9,13 +9,15 @@
 
 import org.unicode.cldr.util.ChainedMap.M3;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.util.ULocale;
 
 public enum LanguageGroup {
-    root("und"), germanic("gem"), celtic("cel"), romance("roa"), slavic("sla"), baltic("bat"), indic("inc"), other_indo("ine_001"), dravidian("dra"), uralic(
-        "urj"), cjk("und_Hani"), sino_tibetan("sit"), tai("tai"), austronesian("map"), turkic("trk"), afroasiatic(
-            "afa"), austroasiatic("aav"), niger_congo("nic"), east_sudanic("sdv"), songhay("son"), american("und_019"), art("art"), other("und_001");
+    root("und"), germanic("gem"), celtic("cel"), romance("roa"), slavic("sla"), baltic("bat"),
+    indic("inc"), iranian("ira"), other_indo("ine_001"), caucasian("cau"), dravidian("dra"),
+    uralic("urj"), cjk("und_Hani"), sino_tibetan("sit"), tai("tai"), austronesian("map"),
+    turkic("trk"), afroasiatic("afa"), austroasiatic("aav"), niger_congo("nic"),
+    east_sudanic("sdv"), songhay("son"), american("und_019"), art("art"), other("und_001");
 
     public final String iso;
 
@@ -35,7 +37,6 @@
             if (map.put(loc, group) != null) {
                 throw new IllegalArgumentException("duplicate: " + s + ", " + group);
             }
-            ;
             GROUP_LANGUAGE.put(group, loc, count);
             ++count;
         }
@@ -45,38 +46,42 @@
         LinkedHashMap<ULocale, LanguageGroup> temp = new LinkedHashMap<>();
         LANGUAGE_GROUP = Collections.unmodifiableMap(temp);
         add(temp, root, "root");
-        add(temp, germanic, "en", "fy", "nl", "af", "de", "gsw", "wae", "ksh", "lb", "sv", "da", "nb", "nn", "fo", "is", "yi");
+        add(temp, germanic, "en", "fy", "nl", "af", "de", "gsw", "wae", "ksh", "lb", "sv", "da",
+            "nb", "nn", "fo", "is", "yi", "nds");
         add(temp, celtic, "ga", "gd", "cy", "gv", "kw", "br");
-        add(temp, romance, "fr", "pt", "gl", "es", "ca", "ast", "it", "rm", "ro");
-        add(temp, slavic, "pl", "cs", "sk", "sl", "hr", "bs", "mk", "sr", "bg", "ru", "be", "uk");
-        add(temp, baltic, "lt", "lv");
-        add(temp, other_indo, "el", "hy", "sq", "fa", "ps", "os");
-        add(temp, indic, "ur", "hi", "gu", "sd", "bn", "as", "ccp", "or", "mr", "ne", "pa", "si");
+        add(temp, romance, "fr", "pt", "gl", "es", "ca", "ast", "it", "rm", "ro", "fur", "an",
+            "co", "oc", "sc", "scn", "wa");
+        add(temp, slavic, "pl", "cs", "sk", "sl", "hr", "bs", "mk", "sr", "bg", "ru", "be", "uk",
+            "dsb", "hsb", "cu", "szl");
+        add(temp, baltic, "lt", "lv", "prg");
+        add(temp, indic, "ur", "hi", "gu", "sd", "bn", "as", "ccp", "or", "mr", "ne", "pa", "si",
+            "kok", "ks", "mai", "doi", "dv", "sa", "trw");
+        add(temp, iranian, "fa", "ps", "ku", "os", "ckb", "lrc", "mzn", "tg", "bgn", "sdh");
+        add(temp, other_indo, "el", "hy", "sq");
         add(temp, dravidian, "ta", "te", "ml", "kn");
         add(temp, cjk, "zh", "yue", "ja", "ko");
-        add(temp, turkic, "tr", "az", "tk", "kk", "ky", "uz", "ug");
-        add(temp, uralic, "hu", "fi", "et", "se", "smn");
-        add(temp, afroasiatic, "ar", "mt", "he", "om", "so", "ha", "am", "tzm", "zgh");
-        add(temp, tai, "th", "lo");
-        add(temp, austronesian, "id", "ms", "jv", "fil", "haw");
-        add(temp, austroasiatic, "vi", "km");
-        add(temp, niger_congo, "sw", "swc", "yo", "ig", "ff", "sn", "zu");
-        add(temp, other, "ka", "eu", "mn", "naq");
-        add(temp, sino_tibetan, "my");
-        add(temp, afroasiatic, "aa", "kab", "shi", "ssy", "ti");
-        add(temp, american, "chr", "kl", "lkt", "qu");
-        add(temp, art, "eo", "vo", "ia");
-        add(temp, austronesian, "mg", "to");
+        add(temp, turkic, "tr", "az", "tk", "kk", "ky", "uz", "ug", "sah", "tt", "ba", "cv");
+        add(temp, uralic, "hu", "fi", "et", "se", "smn", "myv", "sma", "smj", "sms");
+        add(temp, afroasiatic, "ar", "mt", "he", "om", "so", "ha", "am", "tzm", "zgh", "aa", "kab",
+            "shi", "ssy", "ti", "byn", "gez", "sid", "syr", "tig", "wal");
+        add(temp, tai, "th", "lo", "blt");
+        add(temp, austronesian, "id", "ms", "jv", "fil", "haw", "mg", "to", "ceb", "mi", "su",
+            "trv");
+        add(temp, austroasiatic, "vi", "km", "sat");
+        add(temp, niger_congo, "sw", "swc", "yo", "ig", "ff", "sn", "zu", "wo", "xh", "agq", "ak",
+            "asa", "bas", "bem", "bez", "bm", "cgg", "dua", "dyo", "ebu", "ee", "ewo", "guz",
+            "jgo", "kam", "ki", "kkj", "ksb", "ksf", "lag", "lg", "ln", "lu", "luy", "mua", "nd",
+            "nnh", "nr", "nyn", "rn", "rof", "rw", "sbp", "sg", "ss", "tn", "ts", "vai", "ve",
+            "dav", "jmc", "kde", "mer", "mgh", "mgo", "nmg", "nso", "rwk", "seh", "vun", "xog",
+            "yav", "bss", "cch", "gaa", "kaj", "kcg", "ken", "kpe", "nqo", "ny", "st");
+        add(temp, american, "chr", "kl", "lkt", "qu", "arn", "cad", "cic", "gn", "iu", "moh",
+            "mus", "nv", "osa", "quc", "nci");
         add(temp, east_sudanic, "luo", "mas", "nus", "saq", "teo", "kln");
-        add(temp, indic, "kok", "ks");
-        add(temp, niger_congo, "agq", "ak", "asa", "bas", "bem", "bez", "bm", "cgg", "dua", "dyo", "ebu", "ee", "ewo", "guz", "jgo", "kam", "ki", "kkj", "ksb",
-            "ksf", "lag", "lg", "ln", "lu", "luy", "mua", "nd", "nnh", "nr", "nyn", "rn", "rof", "rw", "sbp", "sg", "ss", "tn", "ts", "vai", "ve", "dav",
-            "jmc", "kde", "mer", "mgh", "mgo", "nmg", "nso", "rwk", "seh", "vun", "xog", "yav");
-        add(temp, romance, "fur", "kea", "mfe");
-        add(temp, sino_tibetan, "bo", "brx", "dz", "ii");
-        add(temp, slavic, "dsb", "hsb");
+        add(temp, sino_tibetan, "my", "bo", "brx", "dz", "ii", "mni");
         add(temp, songhay, "dje", "khq", "ses", "twq");
-        add(temp, turkic, "sah");
+        add(temp, caucasian, "ka", "ce");
+        add(temp, other, "eu", "mn", "naq", "pcm", "kea", "mfe", "wbp");
+        add(temp, art, "eo", "vo", "ia", "io", "jbo");
         //GROUP_LANGUAGE.freeze();
     }
 
@@ -129,7 +134,7 @@
             Set<ULocale> locales = LanguageGroup.getLocales(languageGroup);
             String englishName = languageGroup.getName(english);
             System.out.print("\t\t<languageGroup id=\"" + languageGroup.iso
-                + "\" code=\"" + CollectionUtilities.join(locales, ", ")
+                + "\" code=\"" + Joiner.on(", ").join(locales)
                 + "\"/>\t<!-- " + englishName + " -->\n");
         }
         System.out.print("\t</languageGroups>"
diff --git a/tools/java/org/unicode/cldr/util/LanguageInfo.java b/tools/java/org/unicode/cldr/util/LanguageInfo.java
index b5c2978..6175fc6 100644
--- a/tools/java/org/unicode/cldr/util/LanguageInfo.java
+++ b/tools/java/org/unicode/cldr/util/LanguageInfo.java
@@ -20,7 +20,7 @@
 
     public enum CldrDir {
         base, main, seed
-    };
+    }
 
     private int literatePopulation;
     private Relation<OfficialStatus, String> statusToRegions = Relation.of(new EnumMap<OfficialStatus, Set<String>>(OfficialStatus.class), TreeSet.class);
@@ -68,7 +68,7 @@
 
     static final Map<String, LanguageInfo> languageCodeToInfo;
     static {
-        TreeMap<String, LanguageInfo> temp = new TreeMap<String, LanguageInfo>();
+        TreeMap<String, LanguageInfo> temp = new TreeMap<>();
         // get population/official status
         LanguageTagParser ltp = new LanguageTagParser();
         for (String territory : SDI.getTerritoriesWithPopulationData()) {
diff --git a/tools/java/org/unicode/cldr/util/LanguageTagCanonicalizer.java b/tools/java/org/unicode/cldr/util/LanguageTagCanonicalizer.java
index 8577f66..f76b801 100644
--- a/tools/java/org/unicode/cldr/util/LanguageTagCanonicalizer.java
+++ b/tools/java/org/unicode/cldr/util/LanguageTagCanonicalizer.java
@@ -50,7 +50,11 @@
      * <br>TODO: map invalid language tags to <unknown>, eg ZZ; drop invalid U or T extensions, convert ICU locale extensions to BCP47
      */
     // TODO, handle variants
+    @Override
     public synchronized String transform(String locale) {
+        return transform (locale, OutputOption.ICU_LCVARIANT);
+    }
+    public synchronized String transform(String locale, OutputOption oo) {
         ltp1.set(locale);
 
         copyFields2(LanguageTagField.language, getReplacement(LanguageTagField.language, LanguageTagField.language.get(ltp1), locale));
@@ -61,7 +65,7 @@
 
         List<String> originalVariants = ltp1.getVariants();
         if (originalVariants.size() != 0) {
-            Set<String> newVariants = new TreeSet<String>();
+            Set<String> newVariants = new TreeSet<>();
             for (String item : originalVariants) {
                 String replacement = getReplacement(LanguageTagField.variant, item, locale);
                 if (replacement == null) {
@@ -74,13 +78,13 @@
             }
             ltp1.setVariants(newVariants);
         }
-        final String result = ltp1.toString();
+        final String result = ltp1.toString(oo);
         if ("und".equals(ltp1.getLanguage())) return result;
         if (likely == null) {
             return result;
         }
         // TODO: make more efficient, since likely will do the parsing again.
-        String likelyMin = likely.minimize(result);
+        String likelyMin = likely.minimize(result, oo);
         return likelyMin == null ? result : likelyMin;
     }
 
@@ -173,7 +177,7 @@
 
         List<String> originalVariants = ltp1.getVariants();
         if (originalVariants.size() != 0) {
-            Set<String> newVariants = new TreeSet<String>();
+            Set<String> newVariants = new TreeSet<>();
             for (String item : originalVariants) {
                 String replacement = getReplacement(LanguageTagField.variant, item, locale);
                 if (replacement == null) {
@@ -185,6 +189,6 @@
                 }
             }
             ltp1.setVariants(newVariants);
-        }        
+        }
     }
 }
diff --git a/tools/java/org/unicode/cldr/util/LanguageTagParser.java b/tools/java/org/unicode/cldr/util/LanguageTagParser.java
index fc96458..87abda3 100644
--- a/tools/java/org/unicode/cldr/util/LanguageTagParser.java
+++ b/tools/java/org/unicode/cldr/util/LanguageTagParser.java
@@ -32,7 +32,6 @@
 import com.google.common.base.Splitter;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Row.R2;
 import com.ibm.icu.text.UnicodeSet;
 
@@ -57,7 +56,7 @@
                 return o1.charAt(0) == 't' ? 0 : 2;
             case 2:
                 return o1.charAt(1) <= '9' ? 1 : 3;
-            default: 
+            default:
                 throw new IllegalArgumentException();
             }
         }
@@ -92,10 +91,10 @@
     }
 
     /**
-     * @return Returns the grandfathered flag
+     * @return True if the language tag is marked as “Type: grandfathered” in BCP 47.
      */
-    public boolean isGrandfathered() {
-        return grandfathered;
+    public boolean isLegacy() {
+        return legacy;
     }
 
     /**
@@ -158,7 +157,7 @@
      * @return Returns each of the language-script tags in the collection.
      */
     public static Set<String> getLanguageAndScript(Collection<String> in, Set<String> output) {
-        if (output == null) output = new TreeSet<String>();
+        if (output == null) output = new TreeSet<>();
         LanguageTagParser lparser = new LanguageTagParser();
         for (Iterator<String> it = in.iterator(); it.hasNext();) {
             output.add(lparser.set(it.next()).getLanguageScript());
@@ -169,13 +168,13 @@
     // private fields
 
     private String original;
-    private boolean grandfathered = false;
+    private boolean legacy = false;
     private String language;
     private String script;
     private String region;
-    private Set<String> variants = new TreeSet<String>();
-    private Map<String, List<String>> extensions = new TreeMap<String, List<String>>(); // use tree map
-    private Map<String, List<String>> localeExtensions = new TreeMap<String, List<String>>(EXTENSION_ORDER);
+    private Set<String> variants = new TreeSet<>();
+    private Map<String, List<String>> extensions = new TreeMap<>(); // use tree map
+    private Map<String, List<String>> localeExtensions = new TreeMap<>(EXTENSION_ORDER);
 
     private static final UnicodeSet ALPHA = new UnicodeSet("[a-zA-Z]").freeze();
     private static final UnicodeSet DIGIT = new UnicodeSet("[0-9]").freeze();
@@ -184,7 +183,7 @@
     private static final UnicodeSet X = new UnicodeSet("[xX]").freeze();
     private static final UnicodeSet ALPHA_MINUS_X = new UnicodeSet(ALPHA).removeAll(X).freeze();
     private static StandardCodes standardCodes = StandardCodes.make();
-    private static final Set<String> grandfatheredCodes = standardCodes.getAvailableCodes("grandfathered");
+    private static final Set<String> legacyCodes = standardCodes.getAvailableCodes("legacy");
     private static final String separator = "-_"; // '-' alone for 3066bis language tags
     private static final UnicodeSet SEPARATORS = new UnicodeSet().addAll(separator).freeze();
     private static final Splitter SPLIT_BAR = Splitter.on(CharMatcher.anyOf(separator));
@@ -216,7 +215,7 @@
 
         // clear everything out
         language = region = script = "";
-        grandfathered = false;
+        legacy = false;
         variants.clear();
         extensions.clear();
         localeExtensions.clear();
@@ -233,7 +232,7 @@
                 }
                 List<String> valueList = SPLIT_BAR.splitToList(value);
                 switch(key.length()) {
-                case 1: 
+                case 1:
                     extensions.put(key, valueList);
                     break;
                 case 2:
@@ -247,10 +246,9 @@
             languageTag = languageTag.substring(0, atPosition);
         }
 
-        // first test for grandfathered
-        if (grandfatheredCodes.contains(languageTag)) {
+        if (legacyCodes.contains(languageTag)) {
             language = languageTag;
-            grandfathered = true;
+            legacy = true;
             return this;
         }
 
@@ -328,7 +326,7 @@
      * @return true iff the language tag validates
      */
     public boolean isValid() {
-        if (grandfathered) return true; // don't need further checking, since we already did so when parsing
+        if (legacy) return true; // don't need further checking, since we already did so when parsing
         if (!validates(language, "language")) return false;
         if (!validates(script, "script")) return false;
         if (!validates(region, "territory")) return false;
@@ -425,8 +423,8 @@
                 if (subtag.length() < minLength) {
                     return subtag;
                 }
-                if (takesSubkeys 
-                    && subtag.length() == 2 
+                if (takesSubkeys
+                    && subtag.length() == 2
                     && (!firstT || isTKey(subtag))) { // start new key-value pair
                     if (!result.isEmpty() || base.length() != 1) { // don't add empty t- or u-
                         localeExtensions.put(base, ImmutableList.copyOf(result));
@@ -490,7 +488,7 @@
     }
 
     public enum OutputOption {
-        ICU('_'), BCP47('-');
+        ICU('_'), ICU_LCVARIANT('_'), BCP47('-');
         final char separator;
         final Joiner joiner;
 
@@ -511,6 +509,7 @@
         }
     }
 
+    @Override
     public String toString() {
         return toString(OutputOption.ICU);
     }
@@ -631,7 +630,7 @@
     public static boolean isTKey(String key) {
         return key.length() == 2 && key.charAt(1) < 'a';
     }
-    
+
     public boolean hasT() {
         for (String key : localeExtensions.keySet()) {
             if (key.equals("t") || isTKey(key)) {
@@ -654,7 +653,7 @@
 
     public enum Fields {
         LANGUAGE, SCRIPT, REGION, VARIANTS
-    };
+    }
 
     public static Set<Fields> LANGUAGE_SCRIPT = Collections.unmodifiableSet(EnumSet.of(Fields.LANGUAGE, Fields.SCRIPT));
     public static Set<Fields> LANGUAGE_REGION = Collections.unmodifiableSet(EnumSet.of(Fields.LANGUAGE, Fields.REGION));
@@ -753,7 +752,7 @@
             this.separator = separator;
             this.separator2 = separator2;
         }
-    };
+    }
 
     public String toString(Format format) {
         StringBuilder result = new StringBuilder();
@@ -801,7 +800,7 @@
 
     private void appendField(Format format, StringBuilder result, String fieldName, Collection<String> fieldValues) {
         if (!fieldValues.isEmpty()) {
-            appendField(format, result, fieldName, CollectionUtilities.join(fieldValues, ","));
+            appendField(format, result, fieldName, Joiner.on(",").join(fieldValues));
         }
     }
 
@@ -829,35 +828,42 @@
                     if (!haveT) {
                         result.append(format.separator).append('t');
                         if (haveTLang) { // empty is illegal, but just in case
-                            result.append(format.separator).append(CollectionUtilities.join(tLang, format.separator));
+                            result.append(format.separator).append(
+                                Joiner.on(format.separator).join(tLang));
                             haveTLang = false;
                         }
                         haveT = true;
                     }
-                    appendFieldKey(format, result, entry.getKey(), CollectionUtilities.join(entry.getValue(), format.separator));
+                    appendFieldKey(format, result, entry.getKey(),
+                        Joiner.on(format.separator).join(entry.getValue()));
                 } else {
                     if (!haveU) {
                         result2.append(format.separator).append('u');
                         if (haveUSpecial) { // not yet valid, but just in case
-                            result2.append(format.separator).append(CollectionUtilities.join(uSpecial, format.separator));
+                            result2.append(format.separator).append(
+                                Joiner.on(format.separator).join(uSpecial));
                             haveUSpecial = false;
                         }
                         haveU = true;
                     }
-                    appendFieldKey(format, result2, entry.getKey(), CollectionUtilities.join(entry.getValue(), format.separator));
+                    appendFieldKey(format, result2, entry.getKey(),
+                        Joiner.on(format.separator).join(entry.getValue()));
                 }
             }
             if (haveTLang) {
-                result.append(format.separator).append('t').append(format.separator).append(CollectionUtilities.join(tLang, format.separator));
+                result.append(format.separator).append('t').append(format.separator).append(
+                    Joiner.on(format.separator).join(tLang));
             }
             if (haveUSpecial) {
-                result2.append(format.separator).append('u').append(format.separator).append(CollectionUtilities.join(uSpecial, format.separator));
+                result2.append(format.separator).append('u').append(format.separator).append(
+                    Joiner.on(format.separator).join(uSpecial));
             }
             result.append(result2); // put in right order
         } else {
             for (Entry<String, List<String>> entry : fieldValues.entrySet()) {
                 if (match == null || match.contains(entry.getKey())) {
-                    appendFieldKey(format, result, entry.getKey(), CollectionUtilities.join(entry.getValue(), format.separator));
+                    appendFieldKey(format, result, entry.getKey(),
+                        Joiner.on(format.separator).join(entry.getValue()));
                 }
             }
         }
diff --git a/tools/java/org/unicode/cldr/util/LenientDateParser.java b/tools/java/org/unicode/cldr/util/LenientDateParser.java
index fa6cb7f..b134b42 100644
--- a/tools/java/org/unicode/cldr/util/LenientDateParser.java
+++ b/tools/java/org/unicode/cldr/util/LenientDateParser.java
@@ -24,7 +24,6 @@
 import org.unicode.cldr.util.Dictionary.Matcher.Status;
 import org.unicode.cldr.util.LenientDateParser.Token.Type;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.OlsonTimeZone;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.lang.UCharacter;
@@ -62,7 +61,7 @@
     static final DecimalFormat threeDigits = new DecimalFormat("000");
     static final DecimalFormat twoDigits = new DecimalFormat("00");
 
-    public static final Set<Integer> allOffsets = new TreeSet<Integer>();
+    public static final Set<Integer> allOffsets = new TreeSet<>();
 
     static {
         TimeZone GMT = TimeZone.getTimeZone("Etc/GMT");
@@ -79,8 +78,8 @@
         }
     }
 
-    private static final UnicodeSet disallowedInSeparator = (UnicodeSet) new UnicodeSet("[:alphabetic:]").freeze();
-    private static final UnicodeSet IGNORABLE = (UnicodeSet) new UnicodeSet("[,[:whitespace:]]").freeze();
+    private static final UnicodeSet disallowedInSeparator = new UnicodeSet("[:alphabetic:]").freeze();
+    private static final UnicodeSet IGNORABLE = new UnicodeSet("[,[:whitespace:]]").freeze();
     private static final EnumSet<Type> dateTypes = EnumSet.of(Type.DAY, Type.MONTH, Type.YEAR, Type.WEEKDAY, Type.ERA);
     private static final EnumSet<Type> timeTypes = EnumSet.of(Type.HOUR, Type.MINUTE, Type.SECOND, Type.AMPM,
         Type.TIMEZONE);
@@ -92,7 +91,7 @@
     static final Date january15 = new Date(thisYear, 0, 15, 0, 0, 0);
 
     public class Parser {
-        final List<Token> tokens = new ArrayList<Token>();
+        final List<Token> tokens = new ArrayList<>();
         final SoFar haveSoFar = new SoFar();
         Token previous;
         final BreakIterator breakIterator;
@@ -283,7 +282,7 @@
 
             // TODO look at the separators
             // now get the integers
-            Set<Type> ordering = new LinkedHashSet<Type>();
+            Set<Type> ordering = new LinkedHashSet<>();
             ordering.addAll(haveStringMonth ? dateOrdering.yd : dateOrdering.ymd);
             ordering.addAll(integerTimeTypes);
 
@@ -400,8 +399,8 @@
             if (firstType != null) {
                 // skip
             } else {
-                boolean hasDate = CollectionUtilities.containsSome(dateTypes, set);
-                boolean hasTime = CollectionUtilities.containsSome(timeTypes, set);
+                boolean hasDate = !Collections.disjoint(dateTypes, set);
+                boolean hasTime = !Collections.disjoint(timeTypes, set);
                 if (hasDate != hasTime) {
                     firstType = hasDate ? Type.YEAR : Type.HOUR;
                 }
@@ -496,7 +495,7 @@
                 }
                 return UNKNOWN;
             }
-        };
+        }
 
         private final int value;
         private final Type type;
@@ -590,6 +589,7 @@
             return allowsBefore;
         }
 
+        @Override
         public String toString() {
             return "{" + getType() + ":" + getIntValue() + "/" + toShortString(allowsBefore) + "/"
                 + toShortString(allowsAfter) + "}";
@@ -662,6 +662,7 @@
             return true;
         }
 
+        @Override
         public Type getType() {
             return revisedType == null ? super.getType() : revisedType;
         }
@@ -670,6 +671,7 @@
             return allowsAt;
         }
 
+        @Override
         public String toString() {
             return "{" + getType() + ":" + getIntValue() + "/" + toShortString(allowsAt) + "}";
         }
@@ -702,7 +704,7 @@
         // Matcher<String> matcher = converter.getDictionary().getMatcher();
         // later, cache this dictionary
 
-        Map<CharSequence, Token> map = DEBUG ? new TreeMap<CharSequence, Token>() : new HashMap<CharSequence, Token>();
+        Map<CharSequence, Token> map = DEBUG ? new TreeMap<>() : new HashMap<>();
         DateFormatSymbols symbols = new DateFormatSymbols(locale);
         // load the data
         loadArray(map, symbols.getAmPmStrings(), Type.AMPM);
@@ -722,7 +724,7 @@
         Calendar temp = Calendar.getInstance();
 
         String[] zoneFormats = { "z", "zzzz", "Z", "ZZZZ", "v", "vvvv", "V", "VVVV" };
-        List<SimpleDateFormat> zoneFormatList = new ArrayList<SimpleDateFormat>();
+        List<SimpleDateFormat> zoneFormatList = new ArrayList<>();
         for (String zoneFormat : zoneFormats) {
             zoneFormatList.add(new SimpleDateFormat(zoneFormat, locale));
         }
@@ -791,8 +793,8 @@
         // get separators from formats
         // we walk through to see what can come before or after a separator, accumulating them all together
         FormatParser formatParser = new FormatParser();
-        Map<String, EnumSet<Type>> beforeTypes = new HashMap<String, EnumSet<Type>>();
-        Map<String, EnumSet<Type>> afterTypes = new HashMap<String, EnumSet<Type>>();
+        Map<String, EnumSet<Type>> beforeTypes = new HashMap<>();
+        Map<String, EnumSet<Type>> afterTypes = new HashMap<>();
         EnumSet<Type> nonDateTypes = EnumSet.allOf(Type.class);
         nonDateTypes.removeAll(dateTypes);
         EnumSet<Type> nonTimeTypes = EnumSet.allOf(Type.class);
@@ -809,7 +811,7 @@
         add(beforeTypes, " ", timeTypes);
         add(afterTypes, " ", timeTypes);
 
-        Set<String> allSeparators = new HashSet<String>(beforeTypes.keySet());
+        Set<String> allSeparators = new HashSet<>(beforeTypes.keySet());
         allSeparators.addAll(afterTypes.keySet());
         for (String item : allSeparators) {
             loadItem(map, item, beforeTypes.get(item), afterTypes.get(item));
@@ -891,12 +893,12 @@
     static {
         Set<String> canonicalZones = supplementalData.getCanonicalZones();
         // get all the CLDR IDs
-        Set<String> allCLDRZones = new TreeSet<String>(canonicalZones);
+        Set<String> allCLDRZones = new TreeSet<>(canonicalZones);
         for (String canonicalZone : canonicalZones) {
             allCLDRZones.addAll(supplementalData.getZone_aliases(canonicalZone));
         }
         // get all the ICU IDs
-        Set<String> allIcuZones = new TreeSet<String>();
+        Set<String> allIcuZones = new TreeSet<>();
         for (String canonicalZone : TimeZone.getAvailableIDs()) {
             allIcuZones.add(canonicalZone);
             for (int i = 0; i < TimeZone.countEquivalentIDs(canonicalZone); ++i) {
@@ -928,14 +930,14 @@
         }
 
         // add missing Etc zones
-        canonicalZones = new TreeSet<String>(supplementalData.getCanonicalZones());
+        canonicalZones = new TreeSet<>(supplementalData.getCanonicalZones());
         Set<String> zones = getAllGmtZones();
         zones.removeAll(canonicalZones);
         System.out.println("Missing GMT Zones: " + zones);
         canonicalZones.addAll(zones);
         canonicalZones = Collections.unmodifiableSet(canonicalZones);
 
-        List<String> values = new ArrayList<String>();
+        List<String> values = new ArrayList<>();
         for (String id : canonicalZones) { // TimeZone.getAvailableIDs() has extraneous values
             values.add(id);
         }
@@ -944,7 +946,7 @@
     }
 
     private static Set<String> getFirstMinusSecond(Set<String> first, Set<String> second) {
-        Set<String> difference = new TreeSet<String>(first);
+        Set<String> difference = new TreeSet<>(first);
         difference.removeAll(second);
         return difference;
     }
@@ -954,8 +956,8 @@
      */
     static class BestTimeZone implements Comparator<String> {
         // TODO replace by HashMap once done debugging
-        Map<String, Integer> regionToRank = new TreeMap<String, Integer>();
-        Map<String, Map<String, Integer>> regionToZoneToRank = new TreeMap<String, Map<String, Integer>>();
+        Map<String, Integer> regionToRank = new TreeMap<>();
+        Map<String, Map<String, Integer>> regionToZoneToRank = new TreeMap<>();
 
         public BestTimeZone(ULocale locale) {
             // build the two maps that we'll use later.
@@ -1002,7 +1004,7 @@
 
         private void addRank(String region2, String zone) {
             Map<String, Integer> zoneToRank = regionToZoneToRank.get(region2);
-            if (zoneToRank == null) regionToZoneToRank.put(region2, zoneToRank = new TreeMap<String, Integer>());
+            if (zoneToRank == null) regionToZoneToRank.put(region2, zoneToRank = new TreeMap<>());
             if (!zoneToRank.containsKey(zone)) {
                 zoneToRank.put(zone, zoneToRank.size()); // earlier is better.
             }
@@ -1033,6 +1035,7 @@
             return count;
         }
 
+        @Override
         public int compare(String z1, String z2) {
             // Etc/GMT.* is lower
             if (z1.startsWith("Etc/GMT")) {
@@ -1098,10 +1101,10 @@
             int comparison = w1.compareTo(w2);
             return comparison;
         }
-    };
+    }
 
     private static LinkedHashSet<String> getIcuEquivalentZones(String zoneID) {
-        LinkedHashSet<String> result = new LinkedHashSet<String>();
+        LinkedHashSet<String> result = new LinkedHashSet<>();
         final int count = TimeZone.countEquivalentIDs(zoneID);
         for (int i = 0; i < count; ++i) {
             result.add(TimeZone.getEquivalentID(zoneID, i));
@@ -1123,7 +1126,7 @@
         }
         formatParser.set(pattern);
         List<Object> list = formatParser.getItems();
-        List<Type> temp = new ArrayList<Type>();
+        List<Type> temp = new ArrayList<>();
         for (int i = 0; i < list.size(); ++i) {
             Object item = list.get(i);
             if (item instanceof String) {
@@ -1215,7 +1218,7 @@
         }
     }
 
-    private static final UnicodeSet DIGITS = (UnicodeSet) new UnicodeSet("[:nd:]").freeze();
+    private static final UnicodeSet DIGITS = new UnicodeSet("[:nd:]").freeze();
 
     private static void loadItem(Map<CharSequence, Token> map, String item, int i, Type type) {
         map.put(item, new Token(i, type));
@@ -1245,7 +1248,7 @@
      */
 
     public static Set<String> getAllGmtZones() {
-        Set<Integer> offsets = new TreeSet<Integer>();
+        Set<Integer> offsets = new TreeSet<>();
         for (String tzid : supplementalData.getCanonicalZones()) {
             TimeZone zone = TimeZone.getTimeZone(tzid);
             for (long date = startDate; date < endDate; date = getTransitionAfter(
@@ -1253,7 +1256,7 @@
                 offsets.add(zone.getOffset(date));
             }
         }
-        Set<String> result = new LinkedHashSet<String>();
+        Set<String> result = new LinkedHashSet<>();
         for (int offset : offsets) {
             String zone = "Etc/GMT";
             if (offset != 0) {
diff --git a/tools/java/org/unicode/cldr/util/Level.java b/tools/java/org/unicode/cldr/util/Level.java
index 4c3c3ef..98a1b68 100644
--- a/tools/java/org/unicode/cldr/util/Level.java
+++ b/tools/java/org/unicode/cldr/util/Level.java
@@ -20,7 +20,7 @@
     COMPREHENSIVE(100, "G0", 2);
 
     public static final Set<Level> CORE_TO_MODERN = ImmutableSet.of(CORE, BASIC, MODERATE, MODERN);
-    
+
     @Deprecated
     public static final Level POSIX = BASIC;
     @Deprecated
@@ -69,6 +69,7 @@
         }
     }
 
+    @Override
     public String toString() {
         return this.name().toLowerCase();
     }
diff --git a/tools/java/org/unicode/cldr/util/LocaleIDParser.java b/tools/java/org/unicode/cldr/util/LocaleIDParser.java
index 17b2e30..564284f 100644
--- a/tools/java/org/unicode/cldr/util/LocaleIDParser.java
+++ b/tools/java/org/unicode/cldr/util/LocaleIDParser.java
@@ -40,7 +40,7 @@
     }
 
     public static Set<String> getLanguageScript(Collection<String> in, Set<String> output) {
-        if (output == null) output = new TreeSet<String>();
+        if (output == null) output = new TreeSet<>();
         LocaleIDParser lparser = new LocaleIDParser();
         for (Iterator<String> it = in.iterator(); it.hasNext();) {
             output.add(lparser.set(it.next()).getLanguageScript());
@@ -66,7 +66,7 @@
      * @return Returns the variants.
      */
     public String[] getVariants() {
-        return (String[]) variants.clone();
+        return variants.clone();
     }
 
     // TODO, update to RFC3066
@@ -97,7 +97,7 @@
             region = pieces[i++];
             if (i >= pieces.length) return this;
         }
-        List<String> al = new ArrayList<String>();
+        List<String> al = new ArrayList<>();
         while (i < pieces.length && pieces[i].length() > 0) {
             al.add(pieces[i++]);
         }
@@ -193,7 +193,7 @@
     }
 
     public LocaleIDParser setVariants(String[] variants) {
-        this.variants = (String[]) variants.clone();
+        this.variants = variants.clone();
         return this;
     }
 
@@ -220,7 +220,7 @@
         String parentID = getParent(localeID);
 
         String prefix = (parentID == null || "root".equals(parentID)) ? "" : parentID + "_";
-        Set<String> siblings = new TreeSet<String>();
+        Set<String> siblings = new TreeSet<>();
         for (String id : set) {
             if (id.startsWith(prefix) && set(id).getLevels().equals(myLevel)) {
                 siblings.add(id);
@@ -230,6 +230,7 @@
         return siblings;
     }
 
+    @Override
     public String toString() {
         StringBuffer result = new StringBuffer(language);
         if (script.length() != 0) result.append('_').append(script);
diff --git a/tools/java/org/unicode/cldr/util/LocaleStringProvider.java b/tools/java/org/unicode/cldr/util/LocaleStringProvider.java
new file mode 100644
index 0000000..21be94e
--- /dev/null
+++ b/tools/java/org/unicode/cldr/util/LocaleStringProvider.java
@@ -0,0 +1,9 @@
+package org.unicode.cldr.util;
+
+import org.unicode.cldr.util.CLDRFile.Status;
+
+public interface LocaleStringProvider {
+    public String getStringValue(String xpath);
+    public String getLocaleID();
+    public String getSourceLocaleID(String xpath, Status status);
+}
diff --git a/tools/java/org/unicode/cldr/util/LogicalGrouping.java b/tools/java/org/unicode/cldr/util/LogicalGrouping.java
index ec1b803..481a773 100644
--- a/tools/java/org/unicode/cldr/util/LogicalGrouping.java
+++ b/tools/java/org/unicode/cldr/util/LogicalGrouping.java
@@ -1,5 +1,7 @@
 package org.unicode.cldr.util;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -7,6 +9,9 @@
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.unicode.cldr.util.DayPeriodInfo.DayPeriod;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalFeature;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalScope;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalTarget;
 import org.unicode.cldr.util.PluralRulesUtil.KeywordStatus;
 import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo;
 import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo.Count;
@@ -17,9 +22,12 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Multimap;
 import com.ibm.icu.text.PluralRules;
+import com.ibm.icu.util.Output;
 
 public class LogicalGrouping {
 
+    static final SupplementalDataInfo supplementalData = CLDRConfig.getInstance().getSupplementalDataInfo();
+
     public static final ImmutableSet<String> metazonesDSTSet = ImmutableSet.of(
         "Acre", "Africa_Western", "Alaska", "Almaty", "Amazon",
         "America_Central", "America_Eastern", "America_Mountain", "America_Pacific", "Anadyr", "Apia",
@@ -52,14 +60,14 @@
     /**
      * Cache from locale and path (<Pair<String, String>), to logical group (Set<String>)
      */
-    private static ConcurrentHashMap<Pair<String, String>, Set<String>> cacheLocaleAndPathToLogicalGroup = new ConcurrentHashMap<Pair<String, String>, Set<String>>();
+    private static ConcurrentHashMap<Pair<String, String>, Set<String>> cacheLocaleAndPathToLogicalGroup = new ConcurrentHashMap<>();
 
     /**
      * Statistics on occurrences of types of logical groups, for performance testing, debugging.
      * GET_TYPE_COUNTS should be false for production to maximize performance.
      */
     public static final boolean GET_TYPE_COUNTS = false;
-    public static final ConcurrentHashMap<String, Long> typeCount = GET_TYPE_COUNTS ? new ConcurrentHashMap<String, Long>() : null;
+    public static final ConcurrentHashMap<String, Long> typeCount = GET_TYPE_COUNTS ? new ConcurrentHashMap<>() : null;
 
     /**
      * GET_TYPE_FROM_PARTS is more elegant when true, but performance is a little faster when it's false.
@@ -69,8 +77,9 @@
 
     /**
      * Return a sorted set of paths that are in the same logical set as the given path
-     *
      * @param path the distinguishing xpath
+     * @param pathType TODO
+     *
      * @return the set of paths, or null (to be treated as equivalent to empty set)
      *
      * For example, given the path
@@ -83,14 +92,14 @@
      * //ldml/dates/calendars/calendar[@type="gregorian"]/quarters/quarterContext[@type="format"]/quarterWidth[@type="abbreviated"]/quarter[@type="2"]
      * //ldml/dates/calendars/calendar[@type="gregorian"]/quarters/quarterContext[@type="format"]/quarterWidth[@type="abbreviated"]/quarter[@type="3"]
      * //ldml/dates/calendars/calendar[@type="gregorian"]/quarters/quarterContext[@type="format"]/quarterWidth[@type="abbreviated"]/quarter[@type="4"]
-     * 
+     *
      * Caches: Most of the calculations are independent of the locale, and can be cached on a static basis.
      * The paths that are locale-dependent are /dayPeriods and @count. Those can be computed on a per-locale basis;
      * and cached (they are shared across a number of locales).
      *
      * Reference: https://unicode.org/cldr/trac/ticket/11854
      */
-    public static Set<String> getPaths(CLDRFile cldrFile, String path) {
+    public static Set<String> getPaths(CLDRFile cldrFile, String path, Output<PathType> pathTypeOut) {
         if (path == null) {
             return null; // return null for null path
             // return new TreeSet<String>(); // return empty set for null path
@@ -98,7 +107,7 @@
         XPathParts parts = null;
         PathType pathType = null;
         if (GET_TYPE_FROM_PARTS) {
-            parts = XPathParts.getInstance(path); // can't always be frozen, some addPath do setAttribute
+            parts = XPathParts.getFrozenInstance(path);
             pathType = PathType.getPathTypeFromParts(parts);
         } else {
             /*
@@ -106,9 +115,12 @@
              */
             pathType = PathType.getPathTypeFromPath(path);
         }
-        
+        if (pathTypeOut != null) {
+            pathTypeOut.value = pathType;
+        }
+
         if (GET_TYPE_COUNTS) {
-            typeCount.compute(pathType.toString(), (k, v) -> (v == null) ? 1 : v + 1);            
+            typeCount.compute(pathType.toString(), (k, v) -> (v == null) ? 1 : v + 1);
         }
 
         if (pathType == PathType.SINGLETON) {
@@ -116,22 +128,24 @@
              * Skip cache for PathType.SINGLETON and simply return a set of one.
              * TODO: should we ever return null instead of singleton here?
              */
-            Set<String> set = new TreeSet<String>();
+            Set<String> set = new TreeSet<>();
             set.add(path);
             return set;
         }
 
         if (!GET_TYPE_FROM_PARTS) {
-            parts = XPathParts.getInstance(path);
+            parts = XPathParts.getFrozenInstance(path).cloneAsThawed();
+        } else {
+            parts = parts.cloneAsThawed();
         }
 
         if (PathType.isLocaleDependent(pathType)) {
             String locale = cldrFile.getLocaleID();
-            Pair<String, String> key = new Pair<String, String>(locale, path);
+            Pair<String, String> key = new Pair<>(locale, path);
             if (cacheLocaleAndPathToLogicalGroup.containsKey(key)) {
-                return new TreeSet<String>(cacheLocaleAndPathToLogicalGroup.get(key));
+                return new TreeSet<>(cacheLocaleAndPathToLogicalGroup.get(key));
             }
-            Set<String> set = new TreeSet<String>();
+            Set<String> set = new TreeSet<>();
             pathType.addPaths(set, cldrFile, path, parts);
             cacheLocaleAndPathToLogicalGroup.put(key, set);
             return set;
@@ -140,21 +154,23 @@
              * All other paths are locale-independent.
              */
             if (cachePathToLogicalGroup.containsKey(path)) {
-                return new TreeSet<String>(cachePathToLogicalGroup.get(path));
+                return new TreeSet<>(cachePathToLogicalGroup.get(path));
             }
-            Set<String> set = new TreeSet<String>();
+            Set<String> set = new TreeSet<>();
             pathType.addPaths(set, cldrFile, path, parts);
             cachePathToLogicalGroup.putAll(path, set);
             return set;
         }
     }
 
+    public static Set<String> getPaths(CLDRFile cldrFile, String path) {
+        return getPaths(cldrFile, path, null);
+    }
+
     /**
      * Returns the plural info for a given locale.
      */
     private static PluralInfo getPluralInfo(CLDRFile cldrFile) {
-        SupplementalDataInfo supplementalData = SupplementalDataInfo.getInstance(
-            cldrFile.getSupplementalDirectory());
         return supplementalData.getPlurals(PluralType.cardinal,
             cldrFile.getLocaleID());
     }
@@ -166,7 +182,7 @@
      *         that it belongs to.
      */
     public static boolean isOptional(CLDRFile cldrFile, String path) {
-        XPathParts parts = XPathParts.getInstance(path);
+        XPathParts parts = XPathParts.getFrozenInstance(path);
 
         if (parts.containsElement("relative")) {
             String fieldType = parts.findAttributeValue("field", "type");
@@ -180,12 +196,26 @@
         // fully by paths with count="(0|1)", which are always optional themselves.
         if (!path.contains("[@count=")) return false;
         String pluralType = parts.getAttributeValue(-1, "count");
-        if (pluralType.equals("0") || pluralType.equals("1")) return true;
-        if (!pluralType.equals("zero") && !pluralType.equals("one")) return false;
+        switch (pluralType) {
+        case "0": case "1":
+            return true;
+        case "zero": case "one":
+            break; // continue
+        case "many": // special case for french
+            String localeId = cldrFile.getLocaleID();
+            if (localeId.startsWith("fr")
+                && (localeId.length() == 2 || localeId.charAt(2) == '_')) {
+                return true;
+            }
+            return false;
+        default:
+            return false;
+        }
 
+        parts = parts.cloneAsThawed();
         PluralRules pluralRules = getPluralInfo(cldrFile).getPluralRules();
         parts.setAttribute(-1, "count", "0");
-        Set<Double> explicits = new HashSet<Double>();
+        Set<Double> explicits = new HashSet<>();
         if (cldrFile.isHere(parts.toString())) {
             explicits.add(0.0);
         }
@@ -204,11 +234,11 @@
         }
         return false;
     }
-    
+
     /**
      * Path types for logical groupings
      */
-    private enum PathType {
+    public enum PathType {
         SINGLETON { // no logical groups for singleton paths
             @Override
             @SuppressWarnings("unused")
@@ -232,7 +262,7 @@
             @Override
             @SuppressWarnings("unused")
             void addPaths(Set<String> set, CLDRFile cldrFile, String path, XPathParts parts) {
-               String dayName = parts.size() > 7 ? parts.getAttributeValue(7, "type") : null;
+                String dayName = parts.size() > 7 ? parts.getAttributeValue(7, "type") : null;
                 // This is just a quick check to make sure the path is good.
                 if (dayName != null && days.contains(dayName)) {
                     for (String str : days) {
@@ -255,7 +285,6 @@
                             set.add(parts.toString());
                         }
                     } else {
-                        SupplementalDataInfo supplementalData = SupplementalDataInfo.getInstance(cldrFile.getSupplementalDirectory());
                         DayPeriodInfo.Type dayPeriodContext = DayPeriodInfo.Type.fromString(parts.findAttributeValue("dayPeriodContext", "type"));
                         DayPeriodInfo dpi = supplementalData.getDayPeriods(dayPeriodContext, cldrFile.getLocaleID());
                         List<DayPeriod> dayPeriods = dpi.getPeriods();
@@ -338,7 +367,7 @@
                 String decimalFormatLengthType = parts.size() > 3 ? parts.getAttributeValue(3, "type") : null;
                 String decimalFormatPatternType = parts.size() > 5 ? parts.getAttributeValue(5, "type") : null;
                 if (decimalFormatLengthType != null && decimalFormatPatternType != null &&
-                        compactDecimalFormatLengths.contains(decimalFormatLengthType)) {
+                    compactDecimalFormatLengths.contains(decimalFormatLengthType)) {
                     int numZeroes = decimalFormatPatternType.length() - 1;
                     int baseZeroes = (numZeroes / 3) * 3;
                     for (int i = 0; i < 3; i++) {
@@ -354,21 +383,93 @@
             }
         },
         COUNT {
-             @Override
-             @SuppressWarnings("unused")
-             void addPaths(Set<String> set, CLDRFile cldrFile, String path, XPathParts parts) {
-                 PluralInfo pluralInfo = getPluralInfo(cldrFile);
-                 Set<Count> pluralTypes = pluralInfo.getCounts();
-                 String lastElement = parts.getElement(-1);
-                 for (Count count : pluralTypes) {
-                     parts.setAttribute(lastElement, "count", count.toString());
-                     set.add(parts.toString());
-                 }
-             }
-        };
+            @Override
+            @SuppressWarnings("unused")
+            void addPaths(Set<String> set, CLDRFile cldrFile, String path, XPathParts parts) {
+                addCaseOnly(set, cldrFile, parts);
+            }
+        },
+        COUNT_CASE {
+            @Override
+            @SuppressWarnings("unused")
+            void addPaths(Set<String> set, CLDRFile cldrFile, String path, XPathParts parts) {
+                if (!GrammarInfo.SEED_LOCALES.contains(cldrFile.getLocaleID())) {
+                    addCaseOnly(set, cldrFile, parts);
+                    return;
+                }
+                GrammarInfo grammarInfo = supplementalData.getGrammarInfo(cldrFile.getLocaleID());
+                if (grammarInfo == null
+                    || (parts.getElement(3).equals("unitLength")
+                        && GrammarInfo.SPECIAL_TRANSLATION_UNITS.contains(parts.getAttributeValue(3, "type")))) {
+                    addCaseOnly(set, cldrFile, parts);
+                    return;
+                }
+                Set<Count> pluralTypes = getPluralInfo(cldrFile).getCounts();
+                Collection<String> rawCases = grammarInfo.get(GrammaticalTarget.nominal, GrammaticalFeature.grammaticalCase, GrammaticalScope.units);
+                setGrammarAttributes(set, parts, pluralTypes, rawCases, null);
+
+            }
+        },
+        COUNT_CASE_GENDER {
+            @Override
+            @SuppressWarnings("unused")
+            void addPaths(Set<String> set, CLDRFile cldrFile, String path, XPathParts parts) {
+                if (!GrammarInfo.SEED_LOCALES.contains(cldrFile.getLocaleID())) {
+                    addCaseOnly(set, cldrFile, parts);
+                    return;
+                }
+                GrammarInfo grammarInfo = supplementalData.getGrammarInfo(cldrFile.getLocaleID());
+                if (grammarInfo == null) {
+                    addCaseOnly(set, cldrFile, parts);
+                    return;
+                }
+                Set<Count> pluralTypes = getPluralInfo(cldrFile).getCounts();
+                Collection<String> rawCases = grammarInfo.get(GrammaticalTarget.nominal, GrammaticalFeature.grammaticalCase, GrammaticalScope.units);
+                Collection<String> rawGenders = grammarInfo.get(GrammaticalTarget.nominal, GrammaticalFeature.grammaticalGender, GrammaticalScope.units);
+                setGrammarAttributes(set, parts, pluralTypes, rawCases, rawGenders);
+            }
+        }
+
+        ;
 
         abstract void addPaths(Set<String> set, CLDRFile cldrFile, String path, XPathParts parts);
 
+        public void addCaseOnly(Set<String> set, CLDRFile cldrFile, XPathParts parts) {
+            Set<Count> pluralTypes = getPluralInfo(cldrFile).getCounts();
+            for (Count count : pluralTypes) {
+                parts.setAttribute(-1, "count", count.toString());
+                set.add(parts.toString());
+            }
+        }
+
+        public void setGrammarAttributes(Set<String> set, XPathParts parts, Set<Count> pluralTypes, Collection<String> rawCases, Collection<String> rawGenders) {
+            final String defaultGender = GrammaticalFeature.grammaticalGender.getDefault(rawGenders);
+            final String defaultCase = GrammaticalFeature.grammaticalCase.getDefault(rawCases);
+
+            if (rawCases == null || rawCases.isEmpty()) {
+                rawCases = Collections.singleton(defaultCase);
+            }
+            if (rawGenders == null || rawGenders.isEmpty()) {
+                rawGenders = Collections.singleton(defaultGender);
+            }
+            for (String gender : rawGenders) {
+                if (gender.equals(defaultGender)) {
+                    gender = null;
+                }
+                for (String case1 : rawCases) {
+                    if (case1.equals(defaultCase)) {
+                        case1 = null;
+                    }
+                    for (Count count : pluralTypes) {
+                        parts.setAttribute(-1, "gender", gender);
+                        parts.setAttribute(-1, "count", count.toString());
+                        parts.setAttribute(-1, "case", case1);
+                        set.add(parts.toString());
+                    }
+                }
+            }
+        }
+
         /**
          * Is the given PathType locale-dependent (for caching)?
          *
@@ -379,7 +480,7 @@
             /*
              * The paths that are locale-dependent are @count and /dayPeriods.
              */
-            return (pathType == COUNT || pathType == DAY_PERIODS);
+            return (pathType == COUNT || pathType == DAY_PERIODS || pathType.equals(COUNT_CASE) || pathType.equals(COUNT_CASE_GENDER));
         }
 
         /**
@@ -389,12 +490,12 @@
          * @return the PathType
          *
          * Note: it would be more elegant and cleaner, but slower, if we used XPathParts to
-         * determine the PathType. We avoid that since XPathParts.set is a performance hot spot.
+         * determine the PathType. We avoid that since XPathParts.set is a performance hot spot. (NOTE: don't know if the preceding is true anymore.)
          */
-        private static PathType getPathTypeFromPath(String path) {
+        public static PathType getPathTypeFromPath(String path) {
             /*
              * Would changing the order of these tests ever change the return value?
-             * Assume it could if in doubt. 
+             * Assume it could if in doubt.
              */
             if (path.indexOf("/metazone") > 0) {
                 return PathType.METAZONE;
@@ -420,6 +521,14 @@
             if (path.indexOf("/decimalFormatLength") > 0) {
                 return PathType.DECIMAL_FORMAT_LENGTH;
             }
+            if (path.indexOf("/unitLength[@type=\"long\"]") > 0) {
+                if (path.indexOf("compoundUnitPattern1") > 0) {
+                    return PathType.COUNT_CASE_GENDER;
+                }
+                if (path.indexOf("/unitPattern[") > 0) {
+                    return PathType.COUNT_CASE;
+                }
+            }
             if (path.indexOf("[@count=") > 0) {
                 return PathType.COUNT;
             }
@@ -431,11 +540,16 @@
          *
          * @param parts the XPathParts
          * @return the PathType
+         * @deprecated
          */
+        @Deprecated
         private static PathType getPathTypeFromParts(XPathParts parts) {
+            if (true) {
+                throw new UnsupportedOperationException("Code not updated. We may want to try using XPathParts in a future optimization, so leaving for now.");
+            }
             /*
              * Would changing the order of these tests ever change the return value?
-             * Assume it could if in doubt. 
+             * Assume it could if in doubt.
              */
             if (parts.containsElement("metazone")) {
                 return PathType.METAZONE;
diff --git a/tools/java/org/unicode/cldr/util/LsrvCanonicalizer.java b/tools/java/org/unicode/cldr/util/LsrvCanonicalizer.java
new file mode 100644
index 0000000..aa97c15
--- /dev/null
+++ b/tools/java/org/unicode/cldr/util/LsrvCanonicalizer.java
@@ -0,0 +1,541 @@
+package org.unicode.cldr.util;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.EnumSet;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+import org.unicode.cldr.util.StandardCodes.LstrType;
+
+import com.google.common.base.Joiner;
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Objects;
+import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.TreeMultimap;
+import com.ibm.icu.impl.Row.R2;
+
+/**
+ * Provides Unicode Language Identifier canonicalization for use in testing.
+ * The implementation is designed to be simple, and is not at all optimized for production use.
+ * It is used to verify the correctness of the specification algorithm,
+ * sanity-check the supplementalMetadata.xml alias data,
+ * and generate test files for use by implementations.
+ */
+public class LsrvCanonicalizer {
+
+    public static final Set<LstrType> LSRV = ImmutableSet.of(LstrType.language, LstrType.script, LstrType.region, LstrType.variant);
+    public static final Joiner UNDERBAR_JOINER = Joiner.on('_');
+
+    /**
+     * A representation of a Unicode Language Identifier in a format that makes it simple to process.
+     * The LSRV fields are represented as multimaps, though the LSR fields restricted to have only have 0 or 1 element.
+     */
+    public static class XLanguageTag {
+        final Multimap<LstrType, String> data;
+
+        private XLanguageTag(Multimap<LstrType, String> result) {
+            data = ImmutableMultimap.copyOf(result);
+        }
+        public Set<LstrType> keys() {
+            return data.keySet();
+        }
+        public Collection<String> get(LstrType lstrType) {
+            return data.get(lstrType);
+        }
+        public String toLocaleString() {
+            StringBuilder buffer = new StringBuilder();
+            final Collection<String> region = data.get(LstrType.language);
+            if (!region.isEmpty()) {
+                buffer.append(UNDERBAR_JOINER.join(region));
+            } else {
+                buffer.append("und");
+            }
+            addItem(buffer, LstrType.script, "", "_", UNDERBAR_JOINER);
+            addItem(buffer, LstrType.region, "", "_", UNDERBAR_JOINER);
+            addItem(buffer, LstrType.variant, "", "_", UNDERBAR_JOINER);
+
+            return buffer.toString();
+        }
+        @Override
+        public String toString() {
+            StringBuilder buffer = new StringBuilder();
+            addItem(buffer, LstrType.language, "", "L:", UNDERBAR_JOINER);
+            addItem(buffer, LstrType.script, ";", "S:", UNDERBAR_JOINER);
+            addItem(buffer, LstrType.region, ";", "R:", UNDERBAR_JOINER);
+            addItem(buffer, LstrType.variant, ";", "V:", UNDERBAR_JOINER);
+            return buffer.toString();
+        }
+
+        public void addItem(StringBuilder buffer, LstrType lstrType, String separator, String prefix, final Joiner dashJoiner) {
+            final Collection<String> region = data.get(lstrType);
+            if (!region.isEmpty()) {
+                if (buffer.length() > 0) {
+                    buffer.append(separator);
+                }
+                buffer.append(prefix).append(dashJoiner.join(region));
+            }
+        }
+
+        public static XLanguageTag fromTag(LstrType lstrType, String tag) {
+            Multimap<LstrType,String> result = TreeMultimap.create();
+            LanguageTagParser source = new LanguageTagParser();
+            final boolean isLanguage = lstrType == LstrType.language;
+            String prefix = isLanguage ? "" : "und_";
+            try {
+                source.set(prefix + tag);
+            } catch (Exception e) {
+                return null;  // skip ill-formed for now
+//                if (lstrType == LstrType.region && tag.length() == 3) {
+//                    //result.put(LstrType.language, "und");
+//                    result.put(LstrType.region, tag);
+//                } else {
+//                    result.put(LstrType.language, tag);
+//                }
+//                //System.out.println("ILLEGAL SOURCE\t" + lstrType + ":\t" + tag + " ⇒ " + result); // for debugging
+//                return new XLanguageTag(result);
+            }
+            if (!source.getLanguage().isEmpty()
+                && !source.getLanguage().contains("und")) {
+                result.put(LstrType.language, source.getLanguage());
+            }
+            if (!source.getScript().isEmpty()) {
+                result.put(LstrType.script, source.getScript());
+            }
+            if (!source.getRegion().isEmpty()) {
+                result.put(LstrType.region, source.getRegion());
+            }
+            if (!source.getVariants().isEmpty()) {
+                result.putAll(LstrType.variant, source.getVariants());
+            }
+            return new XLanguageTag(result);
+        }
+        @Override
+        public boolean equals(Object obj) {
+            return data.equals(((XLanguageTag)obj).data);
+        }
+        @Override
+        public int hashCode() {
+            return data.hashCode();
+        }
+        public XLanguageTag set(LstrType lstrType, String string) {
+            Multimap<LstrType,String> result = TreeMultimap.create(data);
+            if (lstrType != LstrType.variant) {
+                result.removeAll(lstrType);
+            }
+            result.put(lstrType, string);
+            return new XLanguageTag(result);
+        }
+
+        /**
+         * containsAll is used in matching a ReplacementRule.<br>
+         * It is here instead of on ReplacementRule so we can use in the denormalization utility used in testing.
+         */
+        public boolean containsAll(XLanguageTag type) {
+            for (LstrType lstrType : LSRV) {
+                final Collection<String> sources = get(lstrType);
+                final Collection<String> types = type.get(lstrType);
+                if (!sources.containsAll(types)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        /**
+         * Once a rule matches, this actually does the replacement.<br>
+         * It is here instead of on ReplacementRule so we can use it in the denormalization utility used in testing.
+         */
+        public XLanguageTag replacePartsFrom(XLanguageTag typeParts, XLanguageTag replacementParts) {
+            Multimap<LstrType,String> result = TreeMultimap.create();
+            for (LstrType lstrType : LSRV) {
+                Collection<String> sources = get(lstrType);
+                Collection<String> types = typeParts.get(lstrType);
+                Collection<String> replacements = replacementParts.get(lstrType);
+                result.putAll(lstrType, sources);
+                if (!types.isEmpty() && !replacements.isEmpty()) {
+                    removeAll(result, lstrType, types);
+                    result.putAll(lstrType, replacements);
+                } else if (!types.isEmpty() && replacements.isEmpty()) {
+                    removeAll(result, lstrType, types);
+                } else if (types.isEmpty() && !replacements.isEmpty()) {
+                    if (sources.isEmpty()) {
+                        result.putAll(lstrType, replacements);
+                    }
+                } else {
+                    // otherwise both empty, skip
+                }
+            }
+            return new XLanguageTag(result);
+        }
+    }
+
+    /**
+     * A representation of the alias data for Unicode Language Identifiers in the supplementalMetadata.txt file.
+     */
+
+    public static class ReplacementRule implements Comparable<ReplacementRule> {
+        private final XLanguageTag typeParts;
+        final XLanguageTag replacementParts;
+        final List<XLanguageTag> secondaryReplacementSet; // TODO, using this information in special cases to impute the best language according to LDML
+        final String reason;
+        final boolean regular;
+
+        private ReplacementRule(LstrType lstrType, String type, XLanguageTag typeParts, XLanguageTag replacementParts,
+            List<XLanguageTag> secondaryReplacementSet, String reason) {
+            this.typeParts = typeParts;
+            this.replacementParts = replacementParts;
+            this.secondaryReplacementSet = secondaryReplacementSet;
+            this.reason = reason;
+            this.regular = typeParts.keys().equals(replacementParts.keys()) &&
+                typeParts.get(LstrType.variant).size() == replacementParts.get(LstrType.variant).size();
+        }
+
+        static ReplacementRule from(LstrType lstrType, String type, List<String> replacement, String reason) {
+            XLanguageTag typeParts = XLanguageTag.fromTag(lstrType, type);
+            if (typeParts == null) {
+                return null; // skip ill-formed for now
+            }
+            XLanguageTag replacementParts = XLanguageTag.fromTag(lstrType, replacement.get(0));
+            if (replacementParts == null) {
+                return null; // skip ill-formed for now
+            }
+            List<XLanguageTag> secondaryReplacementSet = new ArrayList<>();
+            for (int i = 1; i < replacement.size(); ++i) {
+                secondaryReplacementSet.add(XLanguageTag.fromTag(lstrType, replacement.get(i)));
+            }
+            return new ReplacementRule(lstrType, type, typeParts, replacementParts, secondaryReplacementSet, reason);
+        }
+
+        @Override
+        public int compareTo(ReplacementRule o) {
+            return ComparisonChain.start()
+                .compare(-getType().keys().size(), -o.getType().keys().size()) // sort most keys first
+                .compare(getType().toString(), o.getType().toString())
+                .result();
+        }
+        @Override
+        public boolean equals(Object obj) {
+            return compareTo((ReplacementRule) obj) == 0;
+        }
+        @Override
+        public int hashCode() {
+            return Objects.hashCode(getType());
+        }
+        @Override
+        public String toString() {
+            return MoreObjects.toStringHelper(getClass())
+                .add("type", getType())
+                .add("replacement", replacementParts)
+                .toString();
+        }
+        public XLanguageTag getType() {
+            return typeParts;
+        }
+        public XLanguageTag getReplacement() {
+            return replacementParts;
+        }
+    }
+
+    /**
+     * Utility to remove multiple items from Multimap
+     */
+    public static <K,V> Multimap<K, V> removeAll(Multimap<K, V> result, K key, Iterable<V> value) {
+        for (V type : value) {
+            result.remove(key, type);
+        }
+        return result;
+    }
+
+    private Set<ReplacementRule> rules = new TreeSet<>();
+    private Multimap<LstrType, String> inType = TreeMultimap.create();
+    private Map<LstrType, String> irrelevant = new TreeMap<>();
+
+    private void add(ReplacementRule replacementRule) {
+        getRules().add(replacementRule);
+    }
+
+    /**
+     * Canonicalize a Unicode Language Identifier (LSRV - language, script, region, variants)
+     * @param lstrType This is a special flag used to indicate which supplementalMetadata alias type the languageTag is from.
+     * That determines whether to extend the type and replacement to be full LSRVs if they are partial, by adding "und_", for example.
+     * @param languageTag May be partial, if the lstrType is not LstrType.language.
+     */
+    public String canonicalize(LstrType lstrType, String languageTag) {
+        XLanguageTag newTag = canonicalizeToX(XLanguageTag.fromTag(lstrType, languageTag), null);
+        return newTag.toString();
+    }
+
+    /**
+     * Canonicalize a Unicode Language Identifier (LSRV - language, script, region, variants) in the XLanguageTag format.
+     * Also returns the rules used in the canonicalization.<br>
+     * NOT OPTIMIZED: just uses a linear search for simplicity; production code would use more efficient mechanisms
+     */
+    public XLanguageTag canonicalizeToX(XLanguageTag fromTag, List<ReplacementRule> rulesUsed) {
+        if (rulesUsed != null) {
+            rulesUsed.clear();
+        }
+        XLanguageTag newTag = fromTag;
+        startAtTheTop:
+            while (true) {
+                for (ReplacementRule rule : getRules()) {
+                    if (newTag.containsAll(rule.getType())) {
+                        XLanguageTag temp = newTag.replacePartsFrom(rule.getType(), rule.getReplacement());
+                        if (!temp.equals(newTag)) {
+                            newTag = temp;
+                            if (rulesUsed != null) {
+                                rulesUsed.add(rule);
+                            }
+                            continue startAtTheTop;
+                        }
+                    }
+                }
+                return newTag;
+            }
+    }
+
+    /**
+     * Decanonicalize a Unicode Language Identifier (LSRV - language, script, region, variants) in the XLanguageTag format.
+     * Also returns the rules used in the canonicalization. Used in test case generation
+     * NOT OPTIMIZED: just for testing
+     */
+    public Set<XLanguageTag> decanonicalizeToX(XLanguageTag fromTag) {
+        Set<XLanguageTag> result = new HashSet<>();
+        result.add(fromTag);
+        Set<XLanguageTag> intermediate = new HashSet<>();
+        while (true) {
+            for (ReplacementRule rule : getRules()) {
+                if (!rule.getType().get(LstrType.variant).isEmpty()) {
+                    continue;
+                }
+                for (XLanguageTag newTag : result) {
+                    if (newTag.containsAll(rule.getReplacement())) { // reverse normal order
+                        XLanguageTag changed = newTag.replacePartsFrom(rule.getReplacement(), rule.getType()); // reverse normal order
+                        if (!intermediate.contains(changed)
+                            && !result.contains(changed)) {
+                            intermediate.add(changed);
+                        }
+                    }
+                }
+            }
+            if (intermediate.isEmpty()) {
+                result.remove(fromTag);
+                return result;
+            }
+            result.addAll(intermediate);
+            intermediate.clear();
+        }
+    }
+
+
+    /**
+     * Utility for getting a filtered list of rules, mostly useful in debugging.
+     */
+    public List<ReplacementRule> filter(LstrType lstrType, String value) {
+        List<ReplacementRule> result = new ArrayList<>();
+        for (ReplacementRule rule : getRules()) {
+            final Collection<String> items = rule.getType().get(lstrType);
+            if (value == null && !items.isEmpty()
+                || value != null && items.contains(value)) {
+                result.add(rule);
+            }
+        }
+        return result;
+    }
+
+    public static final LsrvCanonicalizer getInstance() {
+        return SINGLETON;
+    }
+    private static final LsrvCanonicalizer SINGLETON = load();
+
+    private static LsrvCanonicalizer load() {
+        SupplementalDataInfo SDI = CLDRConfig.getInstance().getSupplementalDataInfo();
+        Map<String, Map<String, R2<List<String>, String>>> aliases = SDI.getLocaleAliasInfo();
+        // type -> tag -> , like "language" -> "sh" -> <{"sr_Latn"}, reason>
+
+        LsrvCanonicalizer rrs = new LsrvCanonicalizer();
+        for (Entry<String, Map<String, R2<List<String>, String>>> typeTagReplacement : aliases.entrySet()) {
+            String type = typeTagReplacement.getKey();
+            if (type.contains("-")) {
+                throw new IllegalArgumentException("Bad format for alias: should have _ instead of -.");
+            }
+            LstrType lstrType = LstrType.fromString(type);
+            if (!LSRV.contains(lstrType)) {
+                continue;
+            }
+            for (Entry<String, R2<List<String>, String>> tagReplacementReason : typeTagReplacement.getValue().entrySet()) {
+                String tag = tagReplacementReason.getKey();
+                if (tag.contains("-")) {
+                    throw new IllegalArgumentException("Bad format for alias: should have _ instead of -.");
+                }
+                List<String> replacement = tagReplacementReason.getValue().get0();
+                if (replacement == null) {
+                    System.out.println("No replacement: " + tagReplacementReason);
+                    continue;
+                }
+                String reason = tagReplacementReason.getValue().get1();
+                final ReplacementRule replacementRule = ReplacementRule.from(lstrType, tag, replacement, reason);
+                if (replacementRule == null) {
+                    // System.out.println("No rule: " + tagReplacementReason);
+                    continue;
+                }
+                rrs.add(replacementRule);
+            }
+        }
+        rrs.rules = ImmutableSet.copyOf(rrs.rules);
+        for (ReplacementRule rule :  rrs.rules) {
+            XLanguageTag type = rule.getType();
+            XLanguageTag replacement = rule.getReplacement();
+            for (LstrType lstrType : LsrvCanonicalizer.LSRV) {
+                rrs.inType.putAll(lstrType, type.get(lstrType));
+                rrs.inType.putAll(lstrType, replacement.get(lstrType));
+            }
+        }
+        rrs.inType = ImmutableMultimap.copyOf(rrs.inType);
+
+        for (LstrType lstrType : LsrvCanonicalizer.LSRV) {
+            Set<String> all = new LinkedHashSet<>(Validity.getInstance().getStatusToCodes(lstrType).get(Validity.Status.regular));
+            all.removeAll(rrs.inType.get(lstrType));
+            if (lstrType == LstrType.variant && all.contains("fonipa")) {
+                rrs.irrelevant.put(lstrType, "fonipa");
+            } else {
+                rrs.irrelevant.put(lstrType, all.iterator().next());
+            }
+        }
+        rrs.irrelevant = ImmutableMap.copyOf(rrs.irrelevant);
+        return rrs;
+    }
+
+    /**
+     * Returns the set of all the Replacement rules in the canonicalizer.
+     */
+    public Set<ReplacementRule> getRules() {
+        return rules;
+    }
+
+    /**
+     * Types of test data
+     */
+    public enum TestDataTypes {explicit, fromAliases, decanonicalized, withIrrelevants}
+
+    /**
+     * Returns test data for the rules, used to generate test data files.
+     * @param testDataTypes if null, returns all the data; otherwise the specified set.
+     * @return
+     */
+    public Map<TestDataTypes,Map<String, String>> getTestData(Set<TestDataTypes> testDataTypes) {
+        Map<TestDataTypes,Map<String, String>> result = new TreeMap<>();
+
+        if (testDataTypes == null) {
+            testDataTypes = EnumSet.allOf(TestDataTypes.class);
+        }
+        Set<String> allToTest = new TreeSet<>();
+        if (testDataTypes.contains(TestDataTypes.explicit)) {
+            Map<String, String> testData2 = new TreeMap<>();
+            String[][] tests = {
+                {"hye_arevmda", "hyw"},
+                {"art_lojban", "jbo"},
+                {"en_arevela", "en"},
+                {"hy_arevela", "hy"},
+                {"en_arevmda_arevela", "en"},
+                {"hy_arevmda", "hyw"},
+                {"hy_arevmda_arevela", "hyw"},
+                {"en_lojban", "en"},
+                {"en_US_polytoni", "en_US_polyton"},
+                {"en_US_heploc", "en_US_alalc97"},
+                {"en_US_aaland", "en_US"},
+                {"en_aaland", "en_AX"},
+                {"no_nynorsk_bokmal", "nb"},
+                {"no_bokmal_nynorsk", "nb"},
+                {"zh_guoyu_hakka_xiang", "hak"},
+                {"zh_hakka_xiang", "hak"},
+            };
+            for (String row[] : tests) {
+                String toTest = row[0];
+                String expected = row[1];
+                testData2.put(toTest, expected);
+            }
+            allToTest.addAll(testData2.keySet());
+            result.put(TestDataTypes.explicit, ImmutableMap.copyOf(testData2));
+        }
+
+        if (testDataTypes.contains(TestDataTypes.fromAliases)) {
+            Map<String, String> testData2 = new TreeMap<>();
+            for (ReplacementRule rule : getRules()) {
+                String toTest = rule.getType().toLocaleString();
+                String expected = rule.getReplacement().toLocaleString();
+                if (!allToTest.contains(toTest)) {
+                    testData2.put(toTest,expected);
+                }
+            }
+            allToTest.addAll(testData2.keySet());
+            result.put(TestDataTypes.fromAliases, ImmutableMap.copyOf(testData2));
+        }
+
+        if (testDataTypes.contains(TestDataTypes.decanonicalized)) {
+            Map<String, String> testData2 = new TreeMap<>();
+            for (String testItem: allToTest) {
+                for (XLanguageTag decon : decanonicalizeToX(XLanguageTag.fromTag(LstrType.language, testItem))) {
+                    XLanguageTag newTag = canonicalizeToX(decon, null);
+                    final String toTest = decon.toLocaleString();
+                    if (!allToTest.contains(toTest)) {
+                        testData2.put(toTest, newTag.toLocaleString());
+                    }
+                }
+            }
+            allToTest.addAll(testData2.keySet());
+            result.put(TestDataTypes.decanonicalized, ImmutableMap.copyOf(testData2));
+        }
+
+        if (testDataTypes.contains(TestDataTypes.withIrrelevants)) {
+            Map<String, String> testData2 = new TreeMap<>();
+            for (String testItem: allToTest) {
+                XLanguageTag fluffedUp = fluff(XLanguageTag.fromTag(LstrType.language, testItem), irrelevant);
+                XLanguageTag newTag = canonicalizeToX(fluffedUp, null);
+                final String toTest = fluffedUp.toLocaleString();
+                if (!allToTest.contains(toTest)) {
+                    testData2.put(toTest, newTag.toLocaleString());
+                }
+           }
+            allToTest.addAll(testData2.keySet());
+            result.put(TestDataTypes.withIrrelevants, ImmutableMap.copyOf(testData2));
+        }
+
+        result = ImmutableMap.copyOf(result);
+        return result;
+    }
+
+    private static XLanguageTag fluff(XLanguageTag type, Map<LstrType, String> toAddIfMissing) {
+        XLanguageTag newTag = type;
+        for (LstrType lstrType : LsrvCanonicalizer.LSRV) {
+            if (type.get(lstrType).isEmpty() || lstrType == LstrType.variant) {
+                newTag = newTag.set(lstrType, toAddIfMissing.get(lstrType));
+            }
+        }
+        return newTag;
+    }
+
+    /**
+     * Returns all the fields used in the type attribute of the alias rule.
+     */
+    public Collection<String> getInType(LstrType language) {
+        return inType.get(language);
+    }
+
+    /**
+     * Returns some sample fields that do not appear in the type attribute of the alias rule, used for testing.
+     */
+    public String getIrrelevantField(LstrType language) {
+        return irrelevant.get(language);
+    }
+
+}
diff --git a/tools/java/org/unicode/cldr/util/MapComparator.java b/tools/java/org/unicode/cldr/util/MapComparator.java
index 538a42d..0095413 100644
--- a/tools/java/org/unicode/cldr/util/MapComparator.java
+++ b/tools/java/org/unicode/cldr/util/MapComparator.java
@@ -28,8 +28,8 @@
     {
         uca.setNumericCollation(true);
     }
-    private Map<K, Integer> ordering = new TreeMap<K, Integer>(); // maps from name to rank
-    private List<K> rankToName = new ArrayList<K>();
+    private Map<K, Integer> ordering = new TreeMap<>(); // maps from name to rank
+    private List<K> rankToName = new ArrayList<>();
     private boolean errorOnMissing = true;
     private volatile boolean locked = false;
     private int before = 1;
@@ -121,6 +121,7 @@
 
     private static final UnicodeSet numbers = new UnicodeSet("[\\-0-9.]").freeze();
 
+    @Override
     @SuppressWarnings({ "unchecked", "rawtypes" })
     public int compare(K a, K b) {
         if (false && (a.equals("lines") || b.equals("lines"))) {
@@ -192,6 +193,7 @@
         return ((Comparable) a).compareTo(b);
     }
 
+    @Override
     public String toString() {
         StringBuffer buffer = new StringBuffer();
         boolean isFirst = true;
@@ -211,6 +213,7 @@
      *
      * @see com.ibm.icu.dev.test.util.Freezeble
      */
+    @Override
     public boolean isFrozen() {
         return locked;
     }
@@ -220,6 +223,7 @@
      *
      * @see com.ibm.icu.dev.test.util.Freezeble
      */
+    @Override
     public MapComparator<K> freeze() {
         locked = true;
         return this;
@@ -230,6 +234,7 @@
      *
      * @see com.ibm.icu.dev.test.util.Freezeble
      */
+    @Override
     @SuppressWarnings("unchecked")
     public MapComparator<K> cloneAsThawed() {
         try {
@@ -242,7 +247,7 @@
             throw new InternalError("should never happen");
         }
     }
-    
+
     public int getOrdering(K item) {
         Integer result = ordering.get(item);
         return result == null ? -1 : result;
diff --git a/tools/java/org/unicode/cldr/util/MatchValue.java b/tools/java/org/unicode/cldr/util/MatchValue.java
index 6a54b68..758524b 100644
--- a/tools/java/org/unicode/cldr/util/MatchValue.java
+++ b/tools/java/org/unicode/cldr/util/MatchValue.java
@@ -1,7 +1,7 @@
 package org.unicode.cldr.util;
 
 import java.text.ParseException;
-import java.util.ArrayList;
+import java.util.Date;
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -23,7 +23,6 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.impl.Row.R2;
@@ -34,10 +33,16 @@
 import com.ibm.icu.util.VersionInfo;
 
 public abstract class MatchValue implements Predicate<String> {
+    public static final String DEFAULT_SAMPLE = "❓";
+
     @Override
     public abstract boolean is(String item);
     public abstract String getName();
 
+    public String getSample() {
+        return DEFAULT_SAMPLE;
+    }
+
     @Override
     public String toString() {
         return getName();
@@ -60,13 +65,13 @@
             case "set":
                 result =  SetMatchValue.of(subargument);
                 break;
-            case "validity": 
+            case "validity":
                 result =  ValidityMatchValue.of(subargument);
                 break;
-            case "bcp47": 
+            case "bcp47":
                 result =  Bcp47MatchValue.of(subargument);
                 break;
-            case "range": 
+            case "range":
                 result =  RangeMatchValue.of(subargument);
                 break;
             case "literal":
@@ -90,7 +95,7 @@
             case "unicodeset":
                 result =  UnicodeSpanMatchValue.of(subargument);
                 break;
-            default: 
+            default:
                 throw new IllegalArgumentException("Illegal/Unimplemented match type: " + originalArg);
             }
             if (!originalArg.equals(result.getName())) {
@@ -125,16 +130,21 @@
                 return false;
             }
             return lang.is(ltp.getLanguage())
-                && (ltp.getScript().isEmpty() 
+                && (ltp.getScript().isEmpty()
                     || script.is(ltp.getScript()))
-                && (ltp.getRegion().isEmpty() 
+                && (ltp.getRegion().isEmpty()
                     || region.is(ltp.getRegion()))
-                && (ltp.getVariants().isEmpty() 
+                && (ltp.getVariants().isEmpty()
                     || and(variant,ltp.getVariants()))
                 && ltp.getExtensions().isEmpty()
                 && ltp.getLocaleExtensions().isEmpty()
                 ;
-        }        
+        }
+
+        @Override
+        public String getSample() {
+            return "de";
+        }
     }
 
     // TODO remove these if possible — ticket/10120
@@ -222,8 +232,8 @@
 
         @Override
         public String getName() {
-            return "validity/" 
-                + (shortId ? "short-" : "") + type.toString() 
+            return "validity/"
+                + (shortId ? "short-" : "") + type.toString()
                 + (enumParser.isAll(statuses) ? "" : "/" + enumParser.format(statuses));
         }
 
@@ -254,7 +264,7 @@
             if (shortId) {
                 typeName = typeName.substring(6);
             }
-            LstrType type = LstrType.valueOf(typeName);
+            LstrType type = LstrType.fromString(typeName);
             return new ValidityMatchValue(type, statuses, shortId);
         }
 
@@ -262,21 +272,21 @@
         public boolean is(String item) {
             // TODO handle deprecated
             switch(type) {
-            case script: 
+            case script:
                 if (SCRIPT_HACK.contains(item)) {
-                    return true; 
+                    return true;
                 }
                 break;
-            case variant: 
+            case variant:
                 if (VARIANT_HACK.contains(item)) {
-                    return true; 
+                    return true;
                 }
-                item = item.toLowerCase(Locale.ROOT); 
+                item = item.toLowerCase(Locale.ROOT);
                 break;
-            case language: 
-                item = item.equals("root") ? "und" : item; 
+            case language:
+                item = item.equals("root") ? "und" : item;
                 break;
-            case unit: 
+            case unit:
                 if (shortId) {
                     if (shortCodeToStatus == null) { // lazy evaluation to avoid circular dependencies
                         Map<String, Status> _shortCodeToStatus = new TreeMap<>();
@@ -301,6 +311,11 @@
             final Status status = Validity.getInstance().getCodeToStatus(type).get(item);
             return status != null && statuses.contains(status);
         }
+
+        @Override
+        public String getSample() {
+            return Validity.getInstance().getCodeToStatus(type).keySet().iterator().next();
+        }
     }
 
     static public class Bcp47MatchValue extends MatchValue {
@@ -399,6 +414,12 @@
                 valid.addAll(aliases);
             }
         }
+        @Override
+        public String getSample() {
+            is("X"); // force load data
+            return valid == null ? "XX"
+                : valid.iterator().next();
+        }
     }
 
     static final Splitter RANGE = Splitter.on('~').trimResults();
@@ -441,6 +462,10 @@
             }
             return start <= value && value <= end;
         }
+        @Override
+        public String getSample() {
+            return String.valueOf((int)(start + end)/2);
+        }
     }
 
     static final Splitter LIST = Splitter.on(", ").trimResults();
@@ -451,7 +476,7 @@
 
         @Override
         public String getName() {
-            return "literal/" + CollectionUtilities.join(items, ", ");
+            return "literal/" + Joiner.on(", ").join(items);
         }
 
         private LiteralMatchValue(String key) {
@@ -466,6 +491,11 @@
         public boolean is(String item) {
             return items.contains(item);
         }
+
+        @Override
+        public String getSample() {
+            return items.iterator().next();
+        }
     }
 
     static public class RegexMatchValue extends MatchValue {
@@ -588,6 +618,11 @@
         public  boolean is(String items) {
             return and(subtest,SPACE_SPLITTER.split(items));
         }
+
+        @Override
+        public String getSample() {
+            return subtest.getSample();
+        }
     }
 
     static final Splitter BARS_SPLITTER = Splitter.on("||").omitEmptyStrings();
@@ -596,12 +631,12 @@
         final List<MatchValue> subtests;
 
         private OrMatchValue(Iterator<MatchValue> iterator) {
-            this.subtests = ImmutableList.copyOf(CollectionUtilities.addAll(iterator, new ArrayList<>()));
+            this.subtests = ImmutableList.copyOf(iterator);
         }
 
         @Override
         public String getName() {
-            return "or/"+ CollectionUtilities.join(subtests, "||");
+            return "or/"+ Joiner.on("||").join(subtests);
         }
 
         public static OrMatchValue of(String key) {
@@ -621,13 +656,25 @@
             }
             return false;
         }
+        @Override
+        public String getSample() {
+            for (MatchValue subtest : subtests) {
+                String result = subtest.getSample();
+                if (!result.equals(DEFAULT_SAMPLE)) {
+                    return result;
+                }
+            }
+            return DEFAULT_SAMPLE;
+        }
     }
 
     static public class TimeMatchValue extends MatchValue {
+        final String sample;
         final SimpleDateFormat formatter;
 
         public TimeMatchValue(String key) {
             formatter = new SimpleDateFormat(key,ULocale.ROOT);
+            sample = formatter.format(new Date());
         }
 
         @Override
@@ -648,13 +695,19 @@
                 return false;
             }
         }
+        @Override
+        public String getSample() {
+            return sample;
+        }
     }
 
     static public class UnicodeSpanMatchValue extends MatchValue {
+        final String sample;
         final UnicodeSet uset;
 
         public UnicodeSpanMatchValue(String key) {
             uset = new UnicodeSet(key);
+            sample = new StringBuilder().appendCodePoint(uset.getRangeStart(0)).toString();
         }
 
         @Override
@@ -670,6 +723,11 @@
         public  boolean is(String item) {
             return uset.span(item, SpanCondition.CONTAINED) == item.length();
         }
+
+        @Override
+        public String getSample() {
+            return sample;
+        }
     }
 
 }
diff --git a/tools/java/org/unicode/cldr/util/MergeLists.java b/tools/java/org/unicode/cldr/util/MergeLists.java
index e63a1f9..0b26860 100644
--- a/tools/java/org/unicode/cldr/util/MergeLists.java
+++ b/tools/java/org/unicode/cldr/util/MergeLists.java
@@ -12,7 +12,7 @@
 
 public class MergeLists<T> {
 
-    Collection<Collection<T>> source = new ArrayList<Collection<T>>();
+    Collection<Collection<T>> source = new ArrayList<>();
     Set<T> orderedWorkingSet;
 
     public MergeLists() {
@@ -27,7 +27,7 @@
         if (orderedItems.size() == 0) { // skip empties
             return this;
         }
-        final LinkedHashSet<T> linkedHashSet = new LinkedHashSet<T>(orderedItems);
+        final LinkedHashSet<T> linkedHashSet = new LinkedHashSet<>(orderedItems);
         if (linkedHashSet.size() != orderedItems.size()) {
             throw new IllegalArgumentException("Multiple items in ordering!");
         }
@@ -48,7 +48,7 @@
     }
 
     public List<T> merge() {
-        List<T> result = new ArrayList<T>();
+        List<T> result = new ArrayList<>();
 
         for (Collection<T> sublist : source) {
             orderedWorkingSet.addAll(sublist);
@@ -58,11 +58,11 @@
         // this is slower, but puts things into as much of the order specified as possible
         // could be optimized further, but we don't care that much
 
-        Set<T> first = new LinkedHashSet<T>();
+        Set<T> first = new LinkedHashSet<>();
         while (orderedWorkingSet.size() != 0) {
             getFirsts(first);
             if (first.size() == 0) {
-                Map<T, Collection<T>> reasons = new LinkedHashMap<T, Collection<T>>();
+                Map<T, Collection<T>> reasons = new LinkedHashMap<>();
                 getFirsts(first, reasons);
                 throw new IllegalArgumentException(
                     "Inconsistent requested ordering: cannot merge if we have [...A...B...] and [...B...A...]: "
@@ -78,7 +78,7 @@
     }
 
     public static <T> boolean hasConsistentOrder(Collection<T> a, Collection<T> b) {
-        LinkedHashSet<T> remainder = new LinkedHashSet<T>(a);
+        LinkedHashSet<T> remainder = new LinkedHashSet<>(a);
         remainder.retainAll(b);
         if (remainder.size() == 0) {
             return true;
diff --git a/tools/java/org/unicode/cldr/util/MultiComparator.java b/tools/java/org/unicode/cldr/util/MultiComparator.java
index 14319ae..6f4b8d4 100644
--- a/tools/java/org/unicode/cldr/util/MultiComparator.java
+++ b/tools/java/org/unicode/cldr/util/MultiComparator.java
@@ -17,10 +17,11 @@
     }
 
     /* Lexigraphic compare. Returns the first difference
-     * @return zero if equal. Otherwise +/- (i+1) 
+     * @return zero if equal. Otherwise +/- (i+1)
      * where i is the index of the first comparator finding a difference
      * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
      */
+    @Override
     public int compare(T arg0, T arg1) {
         for (int i = 0; i < comparators.length; ++i) {
             int result = comparators[i].compare(arg0, arg1);
diff --git a/tools/java/org/unicode/cldr/util/Organization.java b/tools/java/org/unicode/cldr/util/Organization.java
index f5fc148..0ba6fb8 100644
--- a/tools/java/org/unicode/cldr/util/Organization.java
+++ b/tools/java/org/unicode/cldr/util/Organization.java
@@ -43,6 +43,7 @@
     openoffice_org("Open Office"),
     oracle("Oracle", "sun", "Sun Micro"),
     pakistan("Pakistan"),
+    rodakych("Rodakych", "Nigerian Pidgin"),
     rumantscha("Lia Rumantscha"),
     sil("SIL", "SIL International"),
     srilanka("Sri Lanka ICTA", "Sri Lanka"),
@@ -68,7 +69,7 @@
 
     static Map<String, Organization> OrganizationNameMap;
     static {
-        OrganizationNameMap = new HashMap<String, Organization>();
+        OrganizationNameMap = new HashMap<>();
         for (Organization x : values()) {
             OrganizationNameMap.put(x.displayName.toLowerCase().replace('-', '_').replace('.', '_'), x);
             for (String name : x.names) {
diff --git a/tools/java/org/unicode/cldr/util/Pair.java b/tools/java/org/unicode/cldr/util/Pair.java
index 975e432..9b76c7e 100644
--- a/tools/java/org/unicode/cldr/util/Pair.java
+++ b/tools/java/org/unicode/cldr/util/Pair.java
@@ -22,7 +22,7 @@
     private boolean frozen;
 
     public static <T extends Comparable<T>, U extends Comparable<U>> Pair<T, U> of(T arg0, U arg1) {
-        return new Pair<T, U>(arg0, arg1);
+        return new Pair<>(arg0, arg1);
     }
 
     public static <T extends Comparable<T>, U extends Comparable<U>> Pair<T, U> ofFrozen(T arg0, U arg1) {
@@ -67,10 +67,12 @@
     public Pair() {
     }
 
+    @Override
     public int hashCode() {
         return Utility.checkHash(first) * 37 + Utility.checkHash(second);
     }
 
+    @Override
     public boolean equals(Object other) {
         try {
             Pair<?, ?> that = (Pair<?, ?>) other;
@@ -80,12 +82,14 @@
         }
     }
 
+    @Override
     public int compareTo(Pair<T, U> that) {
         int trial = Utility.checkCompare(first, that.first);
         if (trial != 0) return trial;
         return Utility.checkCompare(second, that.second);
     }
 
+    @Override
     public Object clone() {
         if (frozen) return this;
         try {
@@ -95,20 +99,24 @@
         }
     }
 
+    @Override
     public String toString() {
         return '(' + (first == null ? "null" : first.toString())
             + ',' + (second == null ? "null" : second.toString()) + ')';
     }
 
+    @Override
     public boolean isFrozen() {
         return frozen;
     }
 
+    @Override
     public Pair<T, U> freeze() {
         frozen = true;
         return this;
     }
 
+    @Override
     public Object cloneAsThawed() {
         try {
             Pair<?, ?> result = (Pair<?, ?>) super.clone();
diff --git a/tools/java/org/unicode/cldr/util/PathChecker.java b/tools/java/org/unicode/cldr/util/PathChecker.java
new file mode 100644
index 0000000..3bfc816
--- /dev/null
+++ b/tools/java/org/unicode/cldr/util/PathChecker.java
@@ -0,0 +1,102 @@
+package org.unicode.cldr.util;
+
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.unicode.cldr.util.DtdData.ValueStatus;
+
+import com.ibm.icu.impl.Row;
+import com.ibm.icu.impl.Row.R3;
+
+/**
+ * Checks that an {element,attribute,attributeValue} tuple is valid, caching the results.
+ */
+public class PathChecker {
+    // caches for speed
+    private static final Map<XPathParts, Boolean> seen = new ConcurrentHashMap<>();
+    private static Map<DtdType, Map<String,Map<String,Map<String,ValueStatus>>>> seenEAV = new ConcurrentHashMap<>();
+
+    /**
+     * Returns true if the path is ok. The detailed errors (if any) are set only the first time the path is seen!
+     */
+    public boolean checkPath(String path) {
+        XPathParts parts = XPathParts.getFrozenInstance(path);
+        return checkPath(parts, null);
+    }
+
+    /**
+     * Returns true if the path is ok. The detailed errors (if any) are set only the first time the path is seen!
+     */
+
+    public boolean checkPath(String path, Map<Row.R3<String,String,String>, ValueStatus> errors) {
+        XPathParts parts = XPathParts.getFrozenInstance(path);
+        return checkPath(parts, errors);
+    }
+
+    /**
+     * Returns true if the path is ok. The detailed errors (if any) are set only the first time the path is seen!
+     */
+    public boolean checkPath(XPathParts parts, Map<Row.R3<String, String, String>, ValueStatus> errors) {
+        Boolean seenAlready = seen.get(parts);
+        if (seenAlready != null) {
+            return seenAlready;
+        }
+        DtdData dtdData = parts.getDtdData();
+        boolean ok = true;
+        if (errors != null) {
+            errors.clear();
+        }
+
+        for (int elementIndex = 0; elementIndex < parts.size(); ++elementIndex) {
+            String element = parts.getElement(elementIndex);
+            for (Entry<String, String> entry : parts.getAttributes(elementIndex).entrySet()) {
+                String attribute = entry.getKey();
+                String attrValue = entry.getValue();
+                ok &= checkAttribute(dtdData, element, attribute, attrValue, errors);
+            }
+        }
+        seen.put(parts, ok);
+        return ok;
+    }
+
+    private boolean checkAttribute(DtdData dtdData, String element, String attribute, String attrValue, Map<R3<String, String, String>, ValueStatus> errors) {
+        // check if we've seen the EAV yet
+        // we don't need to synchronize because a miss isn't serious
+        Map<String, Map<String, Map<String, ValueStatus>>> elementToAttrToAttrValueToStatus = seenEAV.get(dtdData.dtdType);
+        if (elementToAttrToAttrValueToStatus == null) {
+            Map<String, Map<String, Map<String, ValueStatus>>> subAlready = seenEAV.putIfAbsent(dtdData.dtdType, elementToAttrToAttrValueToStatus = new ConcurrentHashMap<>());
+            if (subAlready != null) {
+                elementToAttrToAttrValueToStatus = subAlready; // discards empty map
+            }
+        }
+        Map<String, Map<String, ValueStatus>> attrToAttrValueToStatus = elementToAttrToAttrValueToStatus.get(element);
+        if (attrToAttrValueToStatus == null) {
+            Map<String, Map<String, ValueStatus>> subAlready = elementToAttrToAttrValueToStatus.putIfAbsent(element, attrToAttrValueToStatus = new ConcurrentHashMap<>());
+            if (subAlready != null) {
+                attrToAttrValueToStatus = subAlready; // discards empty map
+            }
+        }
+        Map<String, ValueStatus> attrValueToStatus = attrToAttrValueToStatus.get(attribute);
+        if (attrValueToStatus == null) {
+            Map<String, ValueStatus> setAlready = attrToAttrValueToStatus.putIfAbsent(attribute, attrValueToStatus = new ConcurrentHashMap<>());
+            if (setAlready != null) {
+                attrValueToStatus = setAlready; // discards empty map
+            }
+        }
+        ValueStatus valueStatus = attrValueToStatus.get(attrValue);
+        if (valueStatus == null) {
+            valueStatus = dtdData.getValueStatus(element, attribute, attrValue);
+            if (valueStatus != ValueStatus.valid) {
+                // Set breakpoint here for debugging (referenced from http://cldr.unicode.org/development/testattributevalues)
+                dtdData.getValueStatus(element, attribute, attrValue);
+            }
+            attrValueToStatus.putIfAbsent(attrValue, valueStatus);
+        }
+
+        if (errors != null && valueStatus != ValueStatus.valid) {
+            errors.put(Row.of(element, attribute, attrValue), valueStatus);
+        }
+        return valueStatus != null;
+    }
+}
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/util/PathDescription.java b/tools/java/org/unicode/cldr/util/PathDescription.java
index 65bb743..34bb50d 100644
--- a/tools/java/org/unicode/cldr/util/PathDescription.java
+++ b/tools/java/org/unicode/cldr/util/PathDescription.java
@@ -24,7 +24,7 @@
     }
 
     // BE sure to sync with the list in xmbSkip!
-    public static final Set<String> EXTRA_LANGUAGES = new TreeSet<String>(
+    public static final Set<String> EXTRA_LANGUAGES = new TreeSet<>(
         Arrays
             .asList(
                 "ach|af|ak|ak|am|ar|az|be|bem|bg|bh|bn|br|bs|ca|chr|ckb|co|crs|cs|cy|da|de|de_AT|de_CH|ee|el|en|en_AU|en_CA|en_GB|en_US|eo|es|es_419|es_ES|et|eu|fa|fi|fil|fo|fr|fr_CA|fr_CH|fy|ga|gaa|gd|gl|gn|gsw|gu|ha|haw|he|hi|hr|ht|hu|hy|ia|id|ig|io|is|it|ja|jv|ka|kg|kk|km|kn|ko|kri|ku|ky|la|lg|ln|lo|loz|lt|lua|lv|mfe|mg|mi|mk|ml|mn|mr|ms|mt|my|nb|ne|nl|nl_BE|nn|nso|ny|nyn|oc|om|or|pa|pcm|pl|ps|pt|pt_BR|pt_PT|qu|rm|rn|ro|ro|ro_MD|ru|rw|sd|si|sk|sl|sn|so|sq|sr|sr_Latn|sr_ME|st|su|sv|sw|ta|te|tg|th|ti|tk|tlh|tn|to|tr|tt|tum|ug|uk|und|ur|uz|vi|wo|xh|yi|yo|zh|zh_Hans|zh_Hant|zh_HK|zu|zxx"
@@ -51,7 +51,7 @@
 
     private Matcher metazoneMatcher = METAZONE_PATTERN.matcher("");
     private String starredPathOutput;
-    private Output<String[]> pathArguments = new Output<String[]>();
+    private Output<String[]> pathArguments = new Output<>();
     private EnumSet<Status> status = EnumSet.noneOf(Status.class);
 
     public static final String MISSING_DESCRIPTION = "Before translating, please see http://cldr.org/translation.";
@@ -62,8 +62,8 @@
         Map<String, List<Set<String>>> starredPaths,
         ErrorHandling errorHandling) {
         this.english = english;
-        this.extras = extras == null ? new HashMap<String, String>() : extras;
-        this.starredPaths = starredPaths == null ? new HashMap<String, List<Set<String>>>() : starredPaths;
+        this.extras = extras == null ? new HashMap<>() : extras;
+        this.starredPaths = starredPaths == null ? new HashMap<>() : starredPaths;
         allMetazones = supplementalDataInfo.getAllMetazones();
         this.errorHandling = errorHandling;
     }
@@ -160,7 +160,7 @@
                 length = length.equals("long") ? "" : "abbreviated ";
                 code = code + ", " + length + daylightType + " form";
             } else if (type.equals("timezone")) {
-                String country = (String) ZONE2COUNTRY.get(code);
+                String country = ZONE2COUNTRY.get(code);
                 int lastSlash = code.lastIndexOf('/');
                 String codeName = lastSlash < 0 ? code : code.substring(lastSlash + 1).replace('_', ' ');
 
@@ -240,7 +240,7 @@
     private List<String> addStarredInfo(Map<String, List<Set<String>>> starredPaths, String path) {
         Matcher starAttributeMatcher = STAR_ATTRIBUTE_PATTERN.matcher(path);
         StringBuilder starredPath = new StringBuilder();
-        List<String> attributes = new ArrayList<String>();
+        List<String> attributes = new ArrayList<>();
         int lastEnd = 0;
         while (starAttributeMatcher.find()) {
             int start = starAttributeMatcher.start(1);
@@ -257,12 +257,12 @@
 
         List<Set<String>> attributeList = starredPaths.get(starredPathString);
         if (attributeList == null) {
-            starredPaths.put(starredPathString, attributeList = new ArrayList<Set<String>>());
+            starredPaths.put(starredPathString, attributeList = new ArrayList<>());
         }
         int i = 0;
         for (String attribute : attributes) {
             if (attributeList.size() <= i) {
-                TreeSet<String> subset = new TreeSet<String>();
+                TreeSet<String> subset = new TreeSet<>();
                 subset.add(attribute);
                 attributeList.add(subset);
             } else {
diff --git a/tools/java/org/unicode/cldr/util/PathHeader.java b/tools/java/org/unicode/cldr/util/PathHeader.java
index 2568d4c..5bbabf7 100644
--- a/tools/java/org/unicode/cldr/util/PathHeader.java
+++ b/tools/java/org/unicode/cldr/util/PathHeader.java
@@ -25,7 +25,6 @@
 import org.unicode.cldr.util.With.SimpleIterator;
 
 import com.google.common.base.Splitter;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
 import com.ibm.icu.lang.UCharacter;
@@ -78,7 +77,7 @@
         LTR_ALWAYS
     }
 
-    private static EnumNames<SectionId> SectionIdNames = new EnumNames<SectionId>();
+    private static EnumNames<SectionId> SectionIdNames = new EnumNames<>();
 
     /**
      * The Section for a path. Don't change these without committee buy-in. The
@@ -97,12 +96,13 @@
             return SectionIdNames.forString(name);
         }
 
+        @Override
         public String toString() {
             return SectionIdNames.toString(this);
         }
     }
 
-    private static EnumNames<PageId> PageIdNames = new EnumNames<PageId>();
+    private static EnumNames<PageId> PageIdNames = new EnumNames<>();
     private static Relation<SectionId, PageId> SectionIdToPageIds = Relation.of(new TreeMap<SectionId, Set<PageId>>(),
         TreeSet.class);
 
@@ -143,7 +143,7 @@
     public enum PageId {
         Alphabetic_Information(SectionId.Core_Data, "Alphabetic Information"),
         Numbering_Systems(SectionId.Core_Data, "Numbering Systems"),
-        LinguisticElements(SectionId.Core_Data, "Linguistic Elements"), 
+        LinguisticElements(SectionId.Core_Data, "Linguistic Elements"),
 
         Locale_Name_Patterns(SectionId.Locale_Display_Names, "Locale Name Patterns"),
         Languages_A_D(SectionId.Locale_Display_Names, "Languages (A-D)"),
@@ -161,7 +161,7 @@
         T_Oceania( SectionId.Locale_Display_Names, "Territories (Oceania)"),
         Locale_Variants(SectionId.Locale_Display_Names, "Locale Variants"),
         Keys( SectionId.Locale_Display_Names),
-        
+
         Fields(SectionId.DateTime),
         Gregorian(SectionId.DateTime),
         Generic( SectionId.DateTime),
@@ -177,7 +177,7 @@
         Japanese(SectionId.DateTime),
         Persian( SectionId.DateTime),
         Minguo(SectionId.DateTime),
-        
+
         Timezone_Display_Patterns(SectionId.Timezones, "Timezone Display Patterns"),
         NAmerica(SectionId.Timezones, "North America"),
         SAmerica( SectionId.Timezones, "South America"),
@@ -194,13 +194,12 @@
         Oceania(SectionId.Timezones),
         UnknownT( SectionId.Timezones, "Unknown Region"),
         Overrides(SectionId.Timezones),
-        
+
         Symbols( SectionId.Numbers),
-        MinimalPairs(SectionId.Numbers, "Minimal Pairs"),
         Number_Formatting_Patterns( SectionId.Numbers, "Number Formatting Patterns"),
         Compact_Decimal_Formatting( SectionId.Numbers, "Compact Decimal Formatting"),
         Compact_Decimal_Formatting_Other( SectionId.Numbers, "Compact Decimal Formatting (Other Numbering Systems)"),
-        
+
         Measurement_Systems( SectionId.Units, "Measurement Systems"),
         Duration( SectionId.Units),
         Graphics( SectionId.Units),
@@ -216,18 +215,20 @@
         Coordinates( SectionId.Units),
         OtherUnits( SectionId.Units, "Other Units"),
         CompoundUnits( SectionId.Units, "Compound Units"),
+
+
         Displaying_Lists( SectionId.Misc, "Displaying Lists"),
-        
+        MinimalPairs(SectionId.Misc, "Minimal Pairs"),
         Transforms( SectionId.Misc),
-        
+
         Identity( SectionId.Special),
         Version( SectionId.Special),
         Suppress( SectionId.Special),
         Deprecated( SectionId.Special),
         Unknown( SectionId.Special),
-        
+
         C_NAmerica( SectionId.Currencies, "North America (C)"),
-        //need to add (C) to differentiate from Timezone territories 
+        //need to add (C) to differentiate from Timezone territories
         C_SAmerica(SectionId.Currencies, "South America (C)"),
         C_NWEurope(SectionId.Currencies, "Northern/Western Europe"),
         C_SEEurope(SectionId.Currencies, "Southern/Eastern Europe"),
@@ -244,11 +245,11 @@
         C_Oceania(SectionId.Currencies, "Oceania (C)"),
         C_Unknown(SectionId.Currencies, "Unknown Region (C)"),
 
-        // BCP47 
+        // BCP47
         u_Extension(SectionId.BCP47),
         t_Extension(SectionId.BCP47),
 
-        // Supplemental 
+        // Supplemental
         Alias(SectionId.Supplemental),
         IdValidity(SectionId.Supplemental),
         Locale(SectionId.Supplemental),
@@ -277,10 +278,10 @@
         RBNF( SectionId.Supplemental),
         Segmentation(SectionId.Supplemental),
         DayPeriod(SectionId.Supplemental),
-        
+
         Category(SectionId.Characters),
 
-        // [Smileys, People, Animals & Nature, Food & Drink, Travel & Places, Activities, Objects, Symbols, Flags] 
+        // [Smileys, People, Animals & Nature, Food & Drink, Travel & Places, Activities, Objects, Symbols, Flags]
         Smileys(SectionId.Characters, "Smileys & Emotion"),
         People(SectionId.Characters, "People & Body"),
         Animals_Nature(SectionId.Characters, "Animals & Nature"),
@@ -321,6 +322,7 @@
          *
          * @return a page ID, such as 'Languages'
          */
+        @Override
         public String toString() {
             return PageIdNames.toString(this);
         }
@@ -365,7 +367,7 @@
     static final Map<String, String> metazoneToContinent = supplementalDataInfo
         .getMetazoneToContinentMap();
     static final StandardCodes standardCode = StandardCodes.make();
-    static final Map<String, String> metazoneToPageTerritory = new HashMap<String, String>();
+    static final Map<String, String> metazoneToPageTerritory = new HashMap<>();
     static {
         Map<String, Map<String, String>> metazoneToRegionToZone = supplementalDataInfo.getMetazoneToRegionToZone();
         for (Entry<String, Map<String, String>> metazoneEntry : metazoneToRegionToZone.entrySet()) {
@@ -424,16 +426,15 @@
     }
 
     /**
-     * Return a factory for use in creating the headers. This should be cached.
-     * The calls are thread-safe. The englishFile sets a static for now; after
-     * the first time, null can be passed.
+     * Return a factory for use in creating the headers. This is cached after first use.
+     * The calls are thread-safe. Null gets the default (CLDRConfig) english file.
      *
      * @param englishFile
      */
     public static Factory getFactory(CLDRFile englishFile) {
         if (factorySingleton == null) {
             if (englishFile == null) {
-                throw new IllegalArgumentException("English CLDRFile must not be null");
+                englishFile = CLDRConfig.getInstance().getEnglish();
             }
             if (!englishFile.getLocaleID().equals(ULocale.ENGLISH.getBaseName())) {
                 throw new IllegalArgumentException("PathHeader's CLDRFile must be '" +
@@ -443,17 +444,18 @@
         }
         return factorySingleton;
     }
-    
+
     /**
      * Convenience method for common case. See {{@link #getFactory(CLDRFile)}}
      */
     public static Factory getFactory() {
-        return getFactory(CLDRConfig.getInstance().getEnglish());
+        return getFactory(null);
     }
 
     /**
      * @deprecated
      */
+    @Deprecated
     public String getSection() {
         return sectionId.toString();
     }
@@ -465,6 +467,7 @@
     /**
      * @deprecated
      */
+    @Deprecated
     public String getPage() {
         return pageId.toString();
     }
@@ -611,24 +614,24 @@
                 PathHeader.class,
                 "data/PathHeader.txt");
         // synchronized with lookup
-        static final Output<String[]> args = new Output<String[]>();
+        static final Output<String[]> args = new Output<>();
         // synchronized with lookup
-        static final Counter<RawData> counter = new Counter<RawData>();
+        static final Counter<RawData> counter = new Counter<>();
         // synchronized with lookup
-        static final Map<RawData, String> samples = new HashMap<RawData, String>();
+        static final Map<RawData, String> samples = new HashMap<>();
         // synchronized with lookup
         static long order;
         static SubstringOrder suborder;
 
-        static final Map<String, PathHeader> cache = new HashMap<String, PathHeader>();
+        static final Map<String, PathHeader> cache = new HashMap<>();
         // synchronized with cache
-        static final Map<SectionId, Map<PageId, SectionPage>> sectionToPageToSectionPage = new EnumMap<SectionId, Map<PageId, SectionPage>>(
+        static final Map<SectionId, Map<PageId, SectionPage>> sectionToPageToSectionPage = new EnumMap<>(
             SectionId.class);
         static final Relation<SectionPage, String> sectionPageToPaths = Relation
             .of(new TreeMap<SectionPage, Set<String>>(),
                 HashSet.class);
         private static CLDRFile englishFile;
-        private Set<String> matchersFound = new HashSet<String>();
+        private Set<String> matchersFound = new HashSet<>();
 
         /**
          * Create a factory for creating PathHeaders.
@@ -675,6 +678,7 @@
         /**
          * Return the PathHeader for a given path. Thread-safe.
          */
+        @Override
         public PathHeader transform(String path) {
             return fromPath(path, null);
         }
@@ -713,7 +717,7 @@
                         throw new IllegalArgumentException();
                     }
                 }
-                Output<Finder> matcherFound = new Output<Finder>();
+                Output<Finder> matcherFound = new Output<>();
                 RawData data = lookup.get(cleanPath, null, args, matcherFound, failures);
                 if (data == null) {
                     return null;
@@ -745,7 +749,7 @@
                         Map<PageId, SectionPage> pageToPathHeaders = sectionToPageToSectionPage
                             .get(result.sectionId);
                         if (pageToPathHeaders == null) {
-                            sectionToPageToSectionPage.put(result.sectionId, pageToPathHeaders = new EnumMap<PageId, SectionPage>(PageId.class));
+                            sectionToPageToSectionPage.put(result.sectionId, pageToPathHeaders = new EnumMap<>(PageId.class));
                         }
                         SectionPage sectionPage = pageToPathHeaders.get(result.pageId);
                         if (sectionPage == null) {
@@ -802,6 +806,10 @@
             public int hashCode() {
                 return sectionId.hashCode() ^ pageId.hashCode();
             }
+            @Override
+            public String toString() {
+                return sectionId + " > " + pageId;
+            }
         }
 
         /**
@@ -822,7 +830,7 @@
          * @target a collection where the paths are to be returned.
          */
         public static Set<String> getCachedPaths(SectionId sectionId, PageId page) {
-            Set<String> target = new HashSet<String>();
+            Set<String> target = new HashSet<>();
             synchronized (cache) {
                 Map<PageId, SectionPage> pageToSectionPage = sectionToPageToSectionPage
                     .get(sectionId);
@@ -865,13 +873,14 @@
          *
          * @deprecated Use getSectionIdsToPageIds
          */
+        @Deprecated
         public static LinkedHashMap<String, Set<String>> getSectionsToPages() {
-            LinkedHashMap<String, Set<String>> sectionsToPages = new LinkedHashMap<String, Set<String>>();
+            LinkedHashMap<String, Set<String>> sectionsToPages = new LinkedHashMap<>();
             for (PageId pageId : PageId.values()) {
                 String sectionId2 = pageId.getSectionId().toString();
                 Set<String> pages = sectionsToPages.get(sectionId2);
                 if (pages == null) {
-                    sectionsToPages.put(sectionId2, pages = new LinkedHashSet<String>());
+                    sectionsToPages.put(sectionId2, pages = new LinkedHashSet<>());
                 }
                 pages.add(pageId.toString());
             }
@@ -919,7 +928,7 @@
         }
 
         private static class ChronologicalOrder {
-            private Map<String, Integer> map = new HashMap<String, Integer>();
+            private Map<String, Integer> map = new HashMap<>();
             private String item;
             private int order;
             private ChronologicalOrder toClear;
@@ -1011,6 +1020,7 @@
          *
          * @deprecated
          */
+        @Deprecated
         public class CounterData extends Row.R4<String, RawData, String, String> {
             public CounterData(String a, RawData b, String c) {
                 super(a, b, c == null ? "no sample" : c, c == null ? "no sample" : fromPath(c)
@@ -1023,9 +1033,10 @@
          *
          * @deprecated
          */
+        @Deprecated
         public Counter<CounterData> getInternalCounter() {
             synchronized (lookup) {
-                Counter<CounterData> result = new Counter<CounterData>();
+                Counter<CounterData> result = new Counter<>();
                 for (Map.Entry<Finder, RawData> foo : lookup) {
                     Finder finder = foo.getKey();
                     RawData data = foo.getValue();
@@ -1036,7 +1047,7 @@
             }
         }
 
-        static Map<String, Transform<String, String>> functionMap = new HashMap<String, Transform<String, String>>();
+        static Map<String, Transform<String, String>> functionMap = new HashMap<>();
         static String[] months = { "Jan", "Feb", "Mar",
             "Apr", "May", "Jun",
             "Jul", "Aug", "Sep",
@@ -1060,6 +1071,7 @@
             // To change the order of items within a section or heading, set
             // order/suborder to be the relative position of the current item.
             functionMap.put("month", new Transform<String, String>() {
+                @Override
                 public String transform(String source) {
                     int m = Integer.parseInt(source);
                     order = m;
@@ -1067,12 +1079,14 @@
                 }
             });
             functionMap.put("count", new Transform<String, String>() {
+                @Override
                 public String transform(String source) {
                     suborder = new SubstringOrder(source);
                     return source;
                 }
             });
             functionMap.put("count2", new Transform<String, String>() {
+                @Override
                 public String transform(String source) {
                     int pos = source.indexOf('-');
                     source = pos + source.substring(pos);
@@ -1082,6 +1096,7 @@
                 }
             });
             functionMap.put("currencySymbol", new Transform<String, String>() {
+                @Override
                 public String transform(String source) {
                     order = 901;
                     if (source.endsWith("narrow")) {
@@ -1094,6 +1109,7 @@
                 }
             });
             functionMap.put("unitCount", new Transform<String, String>() {
+                @Override
                 public String transform(String source) {
                     String[] unitLengths = { "long", "short", "narrow" };
                     int pos = 9;
@@ -1109,6 +1125,7 @@
                 }
             });
             functionMap.put("day", new Transform<String, String>() {
+                @Override
                 public String transform(String source) {
                     int m = days.indexOf(source);
                     order = m;
@@ -1116,6 +1133,7 @@
                 }
             });
             functionMap.put("dayPeriod", new Transform<String, String>() {
+                @Override
                 public String transform(String source) {
                     try {
                         order = dayPeriods.getNumericOrder(source);
@@ -1136,6 +1154,7 @@
                     .put("iso8601", "ISO 8601")
                     .freeze();
 
+                @Override
                 public String transform(String source) {
                     String result = fixNames.get(source);
                     return result != null ? result : UCharacter.toTitleCase(source, null);
@@ -1143,6 +1162,7 @@
             });
 
             functionMap.put("calField", new Transform<String, String>() {
+                @Override
                 public String transform(String source) {
                     String[] fields = source.split(":", 3);
                     order = 0;
@@ -1226,11 +1246,13 @@
             });
 
             functionMap.put("titlecase", new Transform<String, String>() {
+                @Override
                 public String transform(String source) {
                     return UCharacter.toTitleCase(source, null);
                 }
             });
             functionMap.put("categoryFromScript", new Transform<String, String>() {
+                @Override
                 public String transform(String source) {
                     String script = hyphenSplitter.split(source);
                     Info info = ScriptMetadata.getInfo(script);
@@ -1249,6 +1271,7 @@
                     .put("cf", "Currency Format")
                     .freeze();
 
+                @Override
                 public String transform(String source) {
                     String fixedName = fixNames.get(source);
                     return fixedName != null ? fixedName : source;
@@ -1258,6 +1281,7 @@
                 char[] languageRangeStartPoints = { 'A', 'E', 'K', 'O', 'T' };
                 char[] languageRangeEndPoints = { 'D', 'J', 'N', 'S', 'Z' };
 
+                @Override
                 public String transform(String source0) {
                     char firstLetter = getEnglishFirstLetter(source0).charAt(0);
                     for (int i = 0; i < languageRangeStartPoints.length; i++) {
@@ -1270,11 +1294,13 @@
                 }
             });
             functionMap.put("firstLetter", new Transform<String, String>() {
+                @Override
                 public String transform(String source0) {
                     return getEnglishFirstLetter(source0);
                 }
             });
             functionMap.put("languageSort", new Transform<String, String>() {
+                @Override
                 public String transform(String source0) {
                     String languageOnlyPart;
                     int underscorePos = source0.indexOf("_");
@@ -1288,6 +1314,7 @@
                 }
             });
             functionMap.put("scriptFromLanguage", new Transform<String, String>() {
+                @Override
                 public String transform(String source0) {
                     String language = hyphenSplitter.split(source0);
                     String script = likelySubtags.getLikelyScript(language);
@@ -1302,6 +1329,7 @@
             });
             functionMap.put("categoryFromTerritory",
                 catFromTerritory = new Transform<String, String>() {
+                @Override
                 public String transform(String source) {
                     String territory = getSubdivisionsTerritory(source, null);
                     String container = Containment.getContainer(territory);
@@ -1310,8 +1338,9 @@
                 }
             });
             functionMap.put("territorySection", new Transform<String, String>() {
-                final Set<String> specialRegions = new HashSet<String>(Arrays.asList("EZ", "EU", "QO", "UN", "ZZ"));
+                final Set<String> specialRegions = new HashSet<>(Arrays.asList("EZ", "EU", "QO", "UN", "ZZ"));
 
+                @Override
                 public String transform(String source0) {
                     // support subdivisions
                     String theTerritory = getSubdivisionsTerritory(source0, null);
@@ -1327,7 +1356,7 @@
                     switch (theContinent) { // was Integer.valueOf
                     case "019": // Americas - For the territorySection, we just group North America & South America
                         final String subcontinent = Containment.getSubcontinent(theTerritory);
-                        theSubContinent = subcontinent.equals("005") ? "005" : "003"; // was Integer.valueOf(subcontinent) == 5 
+                        theSubContinent = subcontinent.equals("005") ? "005" : "003"; // was Integer.valueOf(subcontinent) == 5
                         return "Territories (" + englishFile.getName(CLDRFile.TERRITORY_NAME, theSubContinent) + ")";
                     case "001":
                     case "ZZ":
@@ -1339,6 +1368,7 @@
             });
             functionMap.put("categoryFromTimezone",
                 catFromTimezone = new Transform<String, String>() {
+                @Override
                 public String transform(String source0) {
                     String territory = Containment.getRegionFromZone(source0);
                     if (territory == null) {
@@ -1348,8 +1378,9 @@
                 }
             });
             functionMap.put("timeZonePage", new Transform<String, String>() {
-                Set<String> singlePageTerritories = new HashSet<String>(Arrays.asList("AQ", "RU", "ZZ"));
+                Set<String> singlePageTerritories = new HashSet<>(Arrays.asList("AQ", "RU", "ZZ"));
 
+                @Override
                 public String transform(String source0) {
                     String theTerritory = Containment.getRegionFromZone(source0);
                     if (theTerritory == null || theTerritory == "001") {
@@ -1381,6 +1412,7 @@
             });
 
             functionMap.put("timezoneSorting", new Transform<String, String>() {
+                @Override
                 public String transform(String source) {
                     final List<String> codeValues = Arrays.asList(
                         "generic-long",
@@ -1399,6 +1431,7 @@
             });
 
             functionMap.put("tzdpField", new Transform<String, String>() {
+                @Override
                 public String transform(String source) {
                     Map<String, String> fieldNames = Builder.with(new HashMap<String, String>())
                         .put("regionFormat", "Region Format - Generic")
@@ -1429,6 +1462,7 @@
                 }
             });
             functionMap.put("unit", new Transform<String, String>() {
+                @Override
                 public String transform(String source) {
                     int m = unitOrder.indexOf(source);
                     order = m;
@@ -1438,6 +1472,7 @@
 
             functionMap.put("numericSort", new Transform<String, String>() {
                 // Probably only works well for small values, like -5 through +4.
+                @Override
                 public String transform(String source) {
                     Integer pos = Integer.valueOf(source) + 5;
                     suborder = new SubstringOrder(pos.toString());
@@ -1447,6 +1482,7 @@
 
             functionMap.put("metazone", new Transform<String, String>() {
 
+                @Override
                 public String transform(String source) {
                     if (PathHeader.UNIFORM_CONTINENTS) {
                         String container = getMetazonePageTerritory(source);
@@ -1526,11 +1562,12 @@
 
             final Map<String, String> currencyToTerritoryOverrides = CldrUtility.asMap(ctto);
             final Map<String, String> subContinentToContinent = CldrUtility.asMap(sctc);
-            final Set<String> fundCurrencies = new HashSet<String>(Arrays.asList("CHE", "CHW", "CLF", "COU", "ECV", "MXV", "USN", "USS", "UYI", "XEU", "ZAL"));
-            final Set<String> offshoreCurrencies = new HashSet<String>(Arrays.asList("CNH"));
+            final Set<String> fundCurrencies = new HashSet<>(Arrays.asList("CHE", "CHW", "CLF", "COU", "ECV", "MXV", "USN", "USS", "UYI", "XEU", "ZAL"));
+            final Set<String> offshoreCurrencies = new HashSet<>(Arrays.asList("CNH"));
             // TODO: Put this into supplementalDataInfo ?
 
             functionMap.put("categoryFromCurrency", new Transform<String, String>() {
+                @Override
                 public String transform(String source0) {
                     String tenderOrNot = "";
                     String territory = likelySubtags.getLikelyTerritoryFromCurrency(source0);
@@ -1562,6 +1599,7 @@
                 }
             });
             functionMap.put("continentFromCurrency", new Transform<String, String>() {
+                @Override
                 public String transform(String source0) {
                     String subContinent;
                     String territory = likelySubtags.getLikelyTerritoryFromCurrency(source0);
@@ -1583,6 +1621,7 @@
                 }
             });
             functionMap.put("numberingSystem", new Transform<String, String>() {
+                @Override
                 public String transform(String source0) {
                     if ("latn".equals(source0)) {
                         return "";
@@ -1617,6 +1656,7 @@
 
                 };
 
+                @Override
                 public String transform(String source) {
                     order = getIndex(source, datefield);
                     return source;
@@ -1659,6 +1699,7 @@
                     "Saturday", "Saturday Short", "Saturday Narrow",
                 };
 
+                @Override
                 public String transform(String source) {
                     order = getIndex(source, relativeDateField) + 100;
                     return "Relative " + longNames[getIndex(source, relativeDateField)];
@@ -1667,11 +1708,13 @@
             // Sorts numberSystem items (except for decimal formats).
             functionMap.put("number", new Transform<String, String>() {
                 private final String[] symbols = { "decimal", "group",
-                    "plusSign", "minusSign", "percentSign", "perMille",
+                    "plusSign", "minusSign", "approximatelySign",
+                    "percentSign", "perMille",
                     "exponential", "superscriptingExponent",
                     "infinity", "nan", "list", "currencies"
                 };
 
+                @Override
                 public String transform(String source) {
                     String[] parts = source.split("-");
                     order = getIndex(parts[0], symbols);
@@ -1683,6 +1726,7 @@
                 }
             });
             functionMap.put("numberFormat", new Transform<String, String>() {
+                @Override
                 public String transform(String source) {
                     final List<String> fieldOrder = Arrays.asList(
                         "standard-decimal",
@@ -1702,6 +1746,7 @@
             });
 
             functionMap.put("localePattern", new Transform<String, String>() {
+                @Override
                 public String transform(String source) {
                     // Put localeKeyTypePattern behind localePattern and
                     // localeSeparator.
@@ -1775,7 +1820,7 @@
             });
             /**
              * Use the ordering of the emoji in getEmojiToOrder rather than alphabetic,
-             * since the collator data won't be ready until the candidates are final. 
+             * since the collator data won't be ready until the candidates are final.
              */
             functionMap.put("emoji", new Transform<String, String>() {
                 @Override
@@ -1806,7 +1851,8 @@
             } else {
                 languageOnlyPart = s;
             }
-            return englishFile.getName(CLDRFile.LANGUAGE_NAME, languageOnlyPart).substring(0, 1).toUpperCase();
+            final String name = englishFile.getName(CLDRFile.LANGUAGE_NAME, languageOnlyPart);
+            return name == null ? "?" : name.substring(0, 1).toUpperCase();
         }
 
         static class HyphenSplitter {
@@ -1848,7 +1894,7 @@
                     return input;
                 }
                 int functionEnd = input.indexOf('(', functionStart);
-                int argEnd = input.indexOf(')', functionEnd);
+                int argEnd = input.indexOf(')', functionEnd+2); // we must insert at least one character
                 Transform<String, String> func = functionMap.get(input.substring(functionStart + 1,
                     functionEnd));
                 final String arg = input.substring(functionEnd + 1, argEnd);
@@ -1871,7 +1917,8 @@
          */
         public Set<String> pathsForFile(CLDRFile file) {
             // make sure we cache all the path headers
-            Set<String> filePaths = CollectionUtilities.addAll(file.fullIterable().iterator(), new HashSet<String>());
+            HashSet<String> filePaths = new HashSet<>();
+            file.fullIterable().forEach(filePaths::add);
             for (String path : filePaths) {
                 try {
                     fromPath(path); // call to make sure cached
@@ -1887,7 +1934,7 @@
          * @return
          */
         public Set<String> getUnmatchedRegexes() {
-            Map<String, RawData> outputUnmatched = new LinkedHashMap<String, RawData>();
+            Map<String, RawData> outputUnmatched = new LinkedHashMap<>();
             lookup.getUnmatchedPatterns(matchersFound, outputUnmatched);
             return outputUnmatched.keySet();
         }
@@ -1957,11 +2004,11 @@
         if (n == -1) return "";
         return str.substring(0, n + 1);
     }
-    
+
     public static String getUrlForLocalePath(String locale, String path) {
         return getUrl(SURVEY_URL, locale, path);
     }
-    
+
     public String getUrlForLocalePath(String locale) {
         return getUrl(SURVEY_URL, locale, originalPath);
     }
@@ -1978,6 +2025,7 @@
      * @param subsection
      * @return
      */
+    @Deprecated
     public static String getPageUrl(String baseUrl, String locale, PageId subsection) {
         return trimLast(baseUrl) + "v#/" + locale + "/" + subsection + "/";
     }
@@ -1994,6 +2042,7 @@
      * @param path
      * @return
      */
+    @Deprecated
     public static String getLinkedView(String baseUrl, String localeId, String path) {
 //        String value = file.getStringValue(path);
 //        if (value == null) {
diff --git a/tools/java/org/unicode/cldr/util/PathStarrer.java b/tools/java/org/unicode/cldr/util/PathStarrer.java
index 0f63ef4..a72e650 100644
--- a/tools/java/org/unicode/cldr/util/PathStarrer.java
+++ b/tools/java/org/unicode/cldr/util/PathStarrer.java
@@ -7,7 +7,7 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Utility;
 import com.ibm.icu.text.Transform;
 
@@ -20,7 +20,7 @@
     public static final String STAR_PATTERN = "([^\"]*+)";
 
     private String starredPathString;
-    private final List<String> attributes = new ArrayList<String>();
+    private final List<String> attributes = new ArrayList<>();
     private final List<String> protectedAttributes = Collections.unmodifiableList(attributes);
     private String substitutionPattern = STAR_PATTERN;
 
@@ -28,7 +28,7 @@
     private final StringBuilder starredPathOld = new StringBuilder();
 
     public String set(String path) {
-        XPathParts parts = XPathParts.getInstance(path);
+        XPathParts parts = XPathParts.getFrozenInstance(path).cloneAsThawed();
         return set(parts, Collections.<String> emptySet());
     }
 
@@ -75,7 +75,7 @@
     }
 
     public String getAttributesString(String separator) {
-        return CollectionUtilities.join(attributes, separator);
+        return Joiner.on(separator).join(attributes);
     }
 
     public String getResult() {
diff --git a/tools/java/org/unicode/cldr/util/PathUtilities.java b/tools/java/org/unicode/cldr/util/PathUtilities.java
index 79d7320..e2f237d 100644
--- a/tools/java/org/unicode/cldr/util/PathUtilities.java
+++ b/tools/java/org/unicode/cldr/util/PathUtilities.java
@@ -1,328 +1,101 @@
 package org.unicode.cldr.util;
 
-import java.util.HashMap;
-import java.util.Map;
-
-import org.unicode.cldr.icu.LDMLConstants;
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 
 /**
- * @deprecated
+ * Recommended utility methods for normalizing paths used throughout the CLDR
+ * libraries.
+ *
+ * <p>The methods in this class are used to normalize file and directory paths
+ * such that resulting paths are:
+ * <ul>
+ *     <li>Absolute with respect to the current working directory (if relative).
+ *     <li>Normalized with respect to "upward" parent path segments.
+ * </ul>
+ *
+ * <p>For example if the current directory is {@code "/home/user/work/cldr"}:
+ * <pre>{@code
+ * // Append to current directory.
+ * getNormalizedPathString("foo/bar") == "/home/user/work/cldr/foo/bar"
+ * // Resolve parent path segments.
+ * getNormalizedPathString("../bar") == "/home/user/work/bar"
+ * // Retain (but normalize) absolute paths.
+ * getNormalizedPathString("/tmp/foo/../bar") == "/tmp/bar"
+ * }</pre>
+ *
+ * <p>Note that it is very important to realize that this is NOT the same as
+ * obtaining the "canonical" path (e.g. via {@link File#getCanonicalPath()}
+ * since the methods in this class <em>do not follow symbolic links</em>.
+ *
+ * <p>This is important because in some build systems (e.g. Bazel), file
+ * hierarchies are created by mapping files using symbolic links, and there's
+ * no necessary reason that the canonical file path preserves the same relative
+ * relationship between files.
+ *
+ * <p>For example Bazel uses a content addressed file cache, so every file used
+ * at build time has a canonical path of something like:
+ * <pre>{@code
+ *     /tmp/build/cache/<hex-formatted-content-fingerprint>
+ * }</pre>
+ *
+ * <p>These files are them mapped (via symbolic links) to a hierarchy such as:
+ * <pre>{@code
+ *     /<buid-root>/common/supplemental/plurals.xml
+ *     /<buid-root>/common/supplemental/pluralRanges.xml
+ *     ...
+ *     /<buid-root>/common/dtd/ldmlSupplemental.dtd
+ * }</pre>
+ *
+ * <p>When the XML files are parsed by the CLDR library, the DTD file is found
+ * via the relative path {@code "../../common/dtd/ldmlSupplemental.dtd}.
+ *
+ * <p>If the canonical path for these XML files were given to the XML parser, it
+ * would attempt to resolve the DTD file location as:
+ * <pre>{@code
+ * /tmp/build/cache/<hex-formatted-content-fingerprint>/../../common/dtd/ldmlSupplemental.dtd
+ * }</pre>
+ * which is just:
+ * <pre>{@code
+ * /tmp/build/common/dtd/ldmlSupplemental.dtd
+ * }</pre>
+ * which will obviously not work.
+ *
+ * <p>Over time the CLDR libraries should transition to using {@link Path}
+ * instances (in favour of {@link File} or strings) when handling file paths and
+ * hopefully some of these methods can eventually be deprecated and removed.
  */
-public class PathUtilities {
-
-    // ===== types of data and menu names
-    public static final String LOCALEDISPLAYNAMES = "//ldml/localeDisplayNames/";
-    /**
-     * All of the data items under LOCALEDISPLAYNAMES (menu items)
-     */
-    public static final String LOCALEDISPLAYNAMES_ITEMS[] = { LDMLConstants.LANGUAGES,
-        LDMLConstants.SCRIPTS, LDMLConstants.TERRITORIES, LDMLConstants.VARIANTS, LDMLConstants.KEYS,
-        LDMLConstants.TYPES, PathUtilities.CURRENCIES, PathUtilities.TIMEZONES,
-        PathUtilities.CODEPATTERNS, PathUtilities.MEASNAMES };
-    public static final String OTHER_CALENDARS_XPATH = "//ldml/dates/calendars/calendar";
-
-    public static final String LOCALEDISPLAYPATTERN_XPATH = LOCALEDISPLAYNAMES
-        + LDMLConstants.LOCALEDISPLAYPATTERN;
-    public static final String NUMBERSCURRENCIES = LDMLConstants.NUMBERS + "/"
-        + PathUtilities.CURRENCIES;
-    public static final String CURRENCIES = "currencies";
-    public static final String TIMEZONES = "timezones";
-    public static final String METAZONES = "metazones";
-    public static String xOTHER = "misc";
-    public static final String CODEPATTERNS = "codePatterns";
-    public static final String MEASNAMES = "measurementSystemNames";
-
-    public static String xpathToMenu(String path) {
-        String theMenu = null;
-        if (path.startsWith(LOCALEDISPLAYNAMES)) {
-            for (int i = 0; i < LOCALEDISPLAYNAMES_ITEMS.length; i++) {
-                if (path.startsWith(LOCALEDISPLAYNAMES
-                    + LOCALEDISPLAYNAMES_ITEMS[i])) {
-                    theMenu = LOCALEDISPLAYNAMES_ITEMS[i];
-                }
-            }
-            if (path.startsWith(LOCALEDISPLAYPATTERN_XPATH)) {
-                theMenu = LDMLConstants.LOCALEDISPLAYPATTERN;
-            }
-            // } else if(path.startsWith(GREGO_XPATH)) {
-            // theMenu=GREGORIAN_CALENDAR;
-        } else if (path.startsWith(OTHER_CALENDARS_XPATH)) {
-            String items[] = getCalendarsItems();
-            for (String which : items) {
-                String CAL_XPATH = "//ldml/dates/calendars/calendar[@type=\"" + which + "\"]";
-                if (path.startsWith(CAL_XPATH)) {
-                    theMenu = which;
-                    break;
-                }
-            }
-        } else if (path.startsWith(LOCALEDISPLAYPATTERN_XPATH)) {
-            theMenu = LDMLConstants.LOCALEDISPLAYPATTERN;
-        } else if (path.startsWith("//ldml/" + NUMBERSCURRENCIES)) {
-            theMenu = CURRENCIES;
-        } else if (path.startsWith("//ldml/" + "dates/timeZoneNames/zone")) {
-            theMenu = TIMEZONES;
-        } else if (path.startsWith("//ldml/" + "units")) {
-            theMenu = "units";
-        } else if (path.startsWith("//ldml/" + "dates/timeZoneNames/metazone")) {
-            theMenu = getMetazoneContinent(path);
-            if (theMenu == null) {
-                theMenu = METAZONES;
-            }
-        } else if (path.startsWith("//ldml/" + LDMLConstants.CHARACTERS + "/" + LDMLConstants.EXEMPLAR_CHARACTERS)) {
-            theMenu = LDMLConstants.CHARACTERS;
-        } else if (path.startsWith("//ldml/" + LDMLConstants.NUMBERS)) {
-            theMenu = LDMLConstants.NUMBERS;
-        } else if (path.startsWith("//ldml/" + LDMLConstants.REFERENCES)) {
-            theMenu = LDMLConstants.REFERENCES;
-        } else {
-            theMenu = xOTHER;
-            // other?
-        }
-        return theMenu;
+public final class PathUtilities {
+    /** Returns the normalized, absolute path string for the given path. */
+    public static String getNormalizedPathString(String first, String... rest) {
+        return getNormalizedPath(first, rest).toString();
     }
 
-    public static String[] getCalendarsItems() {
-        // TODO : Make this data driven from supplementalMetaData ;
-        // I couldn't get the xpath right....
-        // CLDRFile mySupp = getFactory().make("supplementalMetaData",false);
-        // String xpath =
-        // "//supplementalData/metadata/validity/variable[@id=\"$calendar\"][@type=\"choice\"]";
-        // String items = mySupp.getStringValue(xpath);
-        // if ( items != null ) {
-        // return (items.split(" "));
-        // }
-        // else {
-
-        String defaultCalendarsItems = "gregorian buddhist coptic ethiopic chinese hebrew indian islamic japanese persian roc";
-        return (defaultCalendarsItems.split(" "));
-
-        // }
+    /** Returns the normalized, absolute path string of the given file. */
+    public static String getNormalizedPathString(File file) {
+        return getNormalizedPath(file).toString();
     }
 
-    public static String[] getMetazonesItems() {
-        String defaultMetazonesItems = "Africa America Antarctica Asia Australia Europe Atlantic Indian Pacific";
-        return (defaultMetazonesItems.split(" "));
+    /** Returns the normalized, absolute path string of the given path. */
+    public static String getNormalizedPathString(Path path) {
+        return getNormalizedPath(path).toString();
     }
 
-    private static Map<String, String> mzXpathToContinent = new HashMap<String, String>();
-
-    private synchronized static String getMetazoneContinent(String xpath) {
-        String continent = mzXpathToContinent.get(xpath);
-        if (continent == null) {
-            XPathParts parts = XPathParts.getFrozenInstance(xpath);
-            String thisMetazone = parts.getAttributeValue(3, "type");
-            continent = getMetazoneToContinentMap().get(thisMetazone);
-        }
-        return continent;
+    /** Returns the normalized, absolute path of the given path segments. */
+    public static Path getNormalizedPath(String first, String... rest) {
+        return getNormalizedPath(Paths.get(first, rest));
     }
 
-    static Map<String, String> mzToContinentMap = null;
-
-    private static Map<String, String> getMetazoneToContinentMap() {
-        if (mzToContinentMap == null) {
-            System.err
-                .println(
-                    "PathUtilities.java getMetazoneToContinentMap(): TODO: Get this data from supplemental data! http://unicode.org/cldr/trac/ticket/3761");
-            HashMap<String, String> newMap = new HashMap<String, String>();
-            for (int i = 0; i < mzToContinentStatic.length; i += 2) {
-                newMap.put(mzToContinentStatic[i + 0], mzToContinentStatic[i + 1]);
-            }
-            mzToContinentMap = newMap;
-        }
-        return mzToContinentMap;
+    /** Returns the normalized, absolute path of the given file. */
+    public static Path getNormalizedPath(File file) {
+        return getNormalizedPath(Paths.get(file.getPath()));
     }
 
-    private static final String mzToContinentStatic[] = {
+    /** Returns the normalized, absolute path of the given path. */
+    public static Path getNormalizedPath(Path path) {
+        return path.toAbsolutePath().normalize();
+    }
 
-        "Philippines", "Asia",
-        "Gambier", "Pacific",
-        "Ecuador", "America",
-        "Kuybyshev", "Europe",
-        "Europe_Western", "Atlantic",
-        "Chile", "America",
-        "Afghanistan", "Asia",
-        "Pierre_Miquelon", "America",
-        "Solomon", "Pacific",
-        "Arabian", "Asia",
-        "Krasnoyarsk", "Asia",
-        "Vladivostok", "Asia",
-        "Fiji", "Pacific",
-        "Niue", "Pacific",
-        "Marquesas", "Pacific",
-        "Karachi", "Asia",
-        "Aqtobe", "Asia",
-        "Irish", "Europe",
-        "Yakutsk", "Asia",
-        "Galapagos", "Pacific",
-        "Bangladesh", "Asia",
-        "America_Pacific", "America",
-        "Urumqi", "Asia",
-        "Tahiti", "Pacific",
-        "Samoa", "Pacific",
-        "Uzbekistan", "Asia",
-        "Turkey", "Europe",
-        "Kyrgystan", "Asia",
-        "Europe_Eastern", "Europe",
-        "Casey", "Antarctica",
-        "Lord_Howe", "Australia",
-        "Kizilorda", "Asia",
-        "Kashgar", "Asia",
-        "Africa_Western", "Africa",
-        "Macquarie", "Antarctica",
-        "Wake", "Pacific",
-        "Australia_Eastern", "Australia",
-        "Guyana", "America",
-        "Taipei", "Asia",
-        "Samarkand", "Asia",
-        "Mawson", "Antarctica",
-        "Africa_Eastern", "Africa",
-        "Guam", "Pacific",
-        "Kazakhstan_Western", "Asia",
-        "Aqtau", "Asia",
-        "Cook", "Pacific",
-        "Wallis", "Pacific",
-        "Irkutsk", "Asia",
-        "Africa_Southern", "Africa",
-        "French_Guiana", "America",
-        "Chatham", "Pacific",
-        "Oral", "Asia",
-        "Noronha", "America",
-        "Paraguay", "America",
-        "Moscow", "Europe",
-        "Hong_Kong", "Asia",
-        "Yerevan", "Asia",
-        "Vostok", "Antarctica",
-        "Rothera", "Antarctica",
-        "Colombia", "America",
-        "Newfoundland", "America",
-        "Hawaii_Aleutian", "Pacific",
-        "East_Timor", "Asia",
-        "GMT", "Atlantic",
-        "Indian_Ocean", "Indian",
-        "Reunion", "Indian",
-        "Vanuatu", "Pacific",
-        "Malaysia", "Asia",
-        "Kwajalein", "Pacific",
-        "Line_Islands", "Pacific",
-        "Shevchenko", "Asia",
-        "Azores", "Atlantic",
-        "Frunze", "Asia",
-        "Greenland_Eastern", "America",
-        "Hovd", "Asia",
-        "Lanka", "Asia",
-        "Almaty", "Asia",
-        "Macau", "Asia",
-        "Mongolia", "Asia",
-        "Easter", "Pacific",
-        "British", "Europe",
-        "Korea", "Asia",
-        "Papua_New_Guinea", "Pacific",
-        "Bering", "America",
-        "Cocos", "Indian",
-        "Mauritius", "Indian",
-        "Argentina", "America",
-        "Tokelau", "Pacific",
-        "America_Central", "America",
-        "Alaska", "America",
-        "Georgia", "Asia",
-        "Choibalsan", "Asia",
-        "Sakhalin", "Asia",
-        "Anadyr", "Asia",
-        "Dushanbe", "Asia",
-        "Indonesia_Eastern", "Asia",
-        "Japan", "Asia",
-        "Omsk", "Asia",
-        "Nauru", "Pacific",
-        "Cuba", "America",
-        "Iran", "Asia",
-        "Sverdlovsk", "Asia",
-        "Maldives", "Indian",
-        "Europe_Central", "Europe",
-        "Kamchatka", "Asia",
-        "Tajikistan", "Asia",
-        "Pitcairn", "Pacific",
-        "Gilbert_Islands", "Pacific",
-        "Novosibirsk", "Asia",
-        "Brunei", "Asia",
-        "Tonga", "Pacific",
-        "Changbai", "Asia",
-        "India", "Asia",
-        "Indonesia_Western", "Asia",
-        "Malaya", "Asia",
-        "Dacca", "Asia",
-        "Tashkent", "Asia",
-        "New_Zealand", "Pacific",
-        "Indonesia_Central", "Asia",
-        "Myanmar", "Asia",
-        "South_Georgia", "Atlantic",
-        "Truk", "Pacific",
-        "Pakistan", "Asia",
-        "Borneo", "Asia",
-        "DumontDUrville", "Antarctica",
-        "Argentina_Western", "America",
-        "Uruguay", "America",
-        "Dutch_Guiana", "America",
-        "Ponape", "Pacific",
-        "Gulf", "Asia",
-        "Aktyubinsk", "Asia",
-        "America_Mountain", "America",
-        "Dominican", "America",
-        "North_Mariana", "Pacific",
-        "Yukon", "America",
-        "Armenia", "Asia",
-        "Falkland", "Atlantic",
-        "Tbilisi", "Asia",
-        "Baku", "Asia",
-        "Venezuela", "America",
-        "Ashkhabad", "Asia",
-        "Cape_Verde", "Atlantic",
-        "Phoenix_Islands", "Pacific",
-        "Brasilia", "America",
-        "Marshall_Islands", "Pacific",
-        "Volgograd", "Europe",
-        "Yekaterinburg", "Asia",
-        "Kosrae", "Pacific",
-        "Tuvalu", "Pacific",
-        "Africa_Central", "Africa",
-        "Palau", "Pacific",
-        "Alaska_Hawaii", "America",
-        "Qyzylorda", "Asia",
-        "Bhutan", "Asia",
-        "Israel", "Asia",
-        "America_Eastern", "America",
-        "Nepal", "Asia",
-        "Azerbaijan", "Asia",
-        "Uralsk", "Asia",
-        "Bolivia", "America",
-        "Liberia", "Africa",
-        "Turkmenistan", "Asia",
-        "Davis", "Antarctica",
-        "Norfolk", "Pacific",
-        "Indochina", "Asia",
-        "Peru", "America",
-        "Acre", "America",
-        "China", "Asia",
-        "Chamorro", "Pacific",
-        "Atlantic", "America",
-        "Syowa", "Antarctica",
-        "Africa_FarWestern", "Africa",
-        "New_Caledonia", "Pacific",
-        "Greenland_Western", "America",
-        "Suriname", "America",
-        "Seychelles", "Indian",
-        "Christmas", "Indian",
-        "Australia_CentralWestern", "Australia",
-        "Greenland_Central", "America",
-        "French_Southern", "Indian",
-        "Australia_Central", "Australia",
-        "Australia_Western", "Australia",
-        "Magadan", "Asia",
-        "Kazakhstan_Eastern", "Asia",
-        "Goose_Bay", "America",
-        "Singapore", "Asia",
-        "Amazon", "America",
-        "Long_Shu", "Asia",
-        "Samara", "Europe",
-    };
-
+    private PathUtilities() {}
 }
diff --git a/tools/java/org/unicode/cldr/util/PatternPlaceholders.java b/tools/java/org/unicode/cldr/util/PatternPlaceholders.java
index 45fa69d..186673b 100644
--- a/tools/java/org/unicode/cldr/util/PatternPlaceholders.java
+++ b/tools/java/org/unicode/cldr/util/PatternPlaceholders.java
@@ -5,30 +5,43 @@
 import java.util.Map;
 import java.util.Map.Entry;
 
+import org.unicode.cldr.test.CheckCLDR.CheckStatus.Subtype;
 import org.unicode.cldr.tool.GenerateXMB;
 import org.unicode.cldr.util.RegexLookup.Merger;
 
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
 import com.ibm.icu.text.Transform;
 
 public class PatternPlaceholders {
 
     public enum PlaceholderStatus {
-        DISALLOWED("No placeholders allowed."), //
-        OPTIONAL("Zero or one placeholder allowed."), //
-        MULTIPLE("Zero or more placeholders allowed."), //
-        LOCALE_DEPENDENT( "Varies by locale."),
-        REQUIRED("Placeholder required");
-        
-        final String message;
+        DISALLOWED("No placeholders allowed."),//
+        REQUIRED("Specific number of placeholders allowed."),//
+        LOCALE_DEPENDENT("Some placeholders may be omitted in certain locales"),//
+        MULTIPLE("May have multiple instances of the same placeholder, eg “{0} cats and {0} dogs”.")//
+        ;
+
+        private final String message;
 
         private PlaceholderStatus(String message) {
             this.message = message;
         }
+        @Override
+        public String toString() {
+            return name() + ": " + message;
+        }
     }
 
+    public static final ImmutableSet<Subtype> PLACEHOLDER_SUBTYPES = ImmutableSet.of(
+        Subtype.gapsInPlaceholderNumbers,
+        Subtype.duplicatePlaceholders,
+        Subtype.missingPlaceholders,
+        Subtype.extraPlaceholders);
+
     private static class PlaceholderData {
         PlaceholderStatus status = PlaceholderStatus.REQUIRED;
-        Map<String, PlaceholderInfo> data = new LinkedHashMap<String, PlaceholderInfo>();
+        Map<String, PlaceholderInfo> data = new LinkedHashMap<>();
 
         public void add(String id, String name, String example) {
             PlaceholderInfo row = new PlaceholderInfo(name, example);
@@ -47,7 +60,7 @@
 
         @Override
         public String toString() {
-            return name + " (" + example + ")";
+            return "{" + name + "}, e.g. “" + example + "”";
         }
     }
 
@@ -77,9 +90,6 @@
                 String[] parts = source.split("\\s*;\\s+");
                 for (String part : parts) {
                     switch (part) {
-                    case "optional":
-                        result.status = PlaceholderStatus.OPTIONAL;
-                        continue;
                     case "locale":
                         result.status = PlaceholderStatus.LOCALE_DEPENDENT;
                         continue;
@@ -137,7 +147,7 @@
     public Map<String, PlaceholderInfo> get(String path) {
         // TODO change the original map to be unmodifiable, to avoid this step. Need to add a "finalize" to the lookup.
         final PlaceholderData map = patternPlaceholders.get(path);
-        return map == null ? null : Collections.unmodifiableMap(map.data);
+        return map == null ? ImmutableMap.of() : Collections.unmodifiableMap(map.data);
     }
 
     public PlaceholderStatus getStatus(String path) {
diff --git a/tools/java/org/unicode/cldr/util/Pick.java b/tools/java/org/unicode/cldr/util/Pick.java
index b0b24ca..6c80fd8 100644
--- a/tools/java/org/unicode/cldr/util/Pick.java
+++ b/tools/java/org/unicode/cldr/util/Pick.java
@@ -108,7 +108,7 @@
     static public Pick.Alternation or(int[] itemWeights, Object[] items) {
         return new Alternation().or2(itemWeights, items);
     }
-    
+
     static public Pick maybe(int percent, Object item) {
         return new Repeat(0, 1, new int[]{100-percent, percent}, item);
         //return Pick.or(1.0-percent, NOTHING).or2(percent, item);
@@ -116,7 +116,7 @@
     static public Pick repeat(int minCount, int maxCount, int itemWeights, Object item) {
         return new Repeat(minCount, maxCount, itemWeights, item);
     }
-    
+
     static public Pick codePoint(String source) {
         return new CodePoint(new UnicodeSet(source));
     }
@@ -162,12 +162,14 @@
             return this; // for chaining
         }
 
+        @Override
         protected void addTo(Target target) {
             for (int i = 0; i < items.length; ++i) {
                 items[i].addTo(target);
             }
         }
 
+        @Override
         public String getInternal(int depth, Set alreadySeen) {
             String result = checkName(name, alreadySeen);
             if (result.startsWith("$")) return result;
@@ -184,6 +186,7 @@
         private Sequence() {
         }
 
+        @Override
         public boolean match(String input, Position p) {
             int originalIndex = p.index;
             for (int i = 0; i < items.length; ++i) {
@@ -231,10 +234,12 @@
             return this; // for chaining
         }
 
+        @Override
         protected void addTo(Target target) {
             items[weightedIndex.toIndex(target.nextDouble())].addTo(target);
         }
 
+        @Override
         public String getInternal(int depth, Set alreadySeen) {
             String result = checkName(name, alreadySeen);
             if (result.startsWith("$")) return result;
@@ -251,6 +256,7 @@
         }
 
         // take first matching option
+        @Override
         public boolean match(String input, Position p) {
             for (int i = 0; i < weightedIndex.weights.length; ++i) {
                 if (p.isFailure(this, i)) continue;
@@ -288,6 +294,7 @@
             weightedIndex = new WeightedIndex(minCount).add(maxCount-minCount+1, 1);
         }
         */
+        @Override
         protected void addTo(Target target) {
             //int count ;
             for (int i = weightedIndex.toIndex(target.nextDouble()); i > 0; --i) {
@@ -295,6 +302,7 @@
             }
         }
 
+        @Override
         public String getInternal(int depth, Set alreadySeen) {
             String result = checkName(name, alreadySeen);
             if (result.startsWith("$")) return result;
@@ -305,6 +313,7 @@
         }
 
         // match longest, e.g. up to just before a failure
+        @Override
         public boolean match(String input, Position p) {
             //int bestMatch = p.index;
             int count = 0;
@@ -332,10 +341,12 @@
             this.source = source;
         }
 
+        @Override
         protected void addTo(Target target) {
             target.append(source.charAt(pick(target.random, 0, source.size() - 1)));
         }
 
+        @Override
         public boolean match(String s, Position p) {
             int cp = UTF16.charAt(s, p.index);
             if (source.contains(cp)) {
@@ -346,6 +357,7 @@
             return false;
         }
 
+        @Override
         public String getInternal(int depth, Set alreadySeen) {
             String result = checkName(name, alreadySeen);
             if (result.startsWith("$")) return result;
@@ -368,6 +380,7 @@
         private static final WeightedIndex choice = new WeightedIndex(0)
             .add(new int[] { 10, 10, 100, 10 });
 
+        @Override
         protected void addTo(Target target) {
             // get contents into separate buffer
             addBuffer.copyState(target);
@@ -382,7 +395,7 @@
                 int lastIndex = 0;
                 int newIndex = 0;
                 // the new length is a random value between old and new.
-                int newLenLimit = (int) pick(target.random, lastValue.length(), newValue.length());
+                int newLenLimit = pick(target.random, lastValue.length(), newValue.length());
 
                 while (mergeBuffer.length() < newLenLimit
                     && newIndex < newValue.length()
@@ -403,6 +416,7 @@
             if (DEBUG) System.out.println("Result: " + newValue);
         }
 
+        @Override
         public String getInternal(int depth, Set alreadySeen) {
             String result = checkName(name, alreadySeen);
             if (result.startsWith("$")) return result;
@@ -414,6 +428,7 @@
         /* (non-Javadoc)
          * @see Pick#match(java.lang.String, Pick.Position)
          */
+        @Override
         public boolean match(String input, Position p) {
             // TODO Auto-generated method stub
             return false;
@@ -429,7 +444,7 @@
         return newIndex + UTF16.getCharCount(cp);
     }
 
-    /*   
+    /*
             // quoted add
             appendQuoted(target, addBuffer.toString(), quoteBuffer);
             // fix buffers
@@ -445,16 +460,19 @@
             super(item);
         }
 
+        @Override
         protected void addTo(Target target) {
             target.quoter.setQuoting(true);
             item.addTo(target);
             target.quoter.setQuoting(false);
         }
 
+        @Override
         public boolean match(String s, Position p) {
             return false;
         }
 
+        @Override
         public String getInternal(int depth, Set alreadySeen) {
             String result = checkName(name, alreadySeen);
             if (result.startsWith("$")) return result;
@@ -464,6 +482,7 @@
     }
 
     private static class Literal extends FinalPick {
+        @Override
         public String toString() {
             return name;
         }
@@ -472,10 +491,12 @@
             this.name = source;
         }
 
+        @Override
         protected void addTo(Target target) {
             target.append(name);
         }
 
+        @Override
         public boolean match(String input, Position p) {
             int len = name.length();
             if (input.regionMatches(p.index, name, 0, len)) {
@@ -486,6 +507,7 @@
             return false;
         }
 
+        @Override
         public String getInternal(int depth, Set alreadySeen) {
             return "'" + name + "'";
         }
@@ -503,6 +525,7 @@
             }
         }
 
+        @Override
         public String toString() {
             return "index; " + index
                 + ", maxInt:" + maxInt
@@ -536,8 +559,8 @@
 
     /*
     public static final Pick NOTHING = new Nothing();
-    
-    
+
+
     private static class Nothing extends FinalPick {
         protected void addTo(Target target) {}
         protected boolean match(String input, Position p) {
@@ -579,6 +602,7 @@
             this.replacement = replacement;
         }
 
+        @Override
         public Pick handle(Pick a) {
             if (toReplace.equals(a.name)) {
                 a = replacement;
@@ -588,6 +612,7 @@
     }
 
     abstract private static class FinalPick extends Pick {
+        @Override
         public Pick visit(Visitor visitor) {
             return visitor.handle(this);
         }
@@ -600,6 +625,7 @@
             this.item = item;
         }
 
+        @Override
         public Pick visit(Visitor visitor) {
             Pick result = visitor.handle(this);
             if (visitor.alreadyEntered(this)) return result;
@@ -637,6 +663,7 @@
             }
         }
 
+        @Override
         public Pick visit(Visitor visitor) {
             Pick result = visitor.handle(this);
             if (visitor.alreadyEntered(this)) return result;
@@ -681,7 +708,7 @@
             if (newWeights == null) newWeights = new int[] { 1 };
             int oldLen = weights.length;
             if (maxCount < newWeights.length) maxCount = newWeights.length;
-            weights = (int[]) realloc(weights, weights.length + maxCount);
+            weights = realloc(weights, weights.length + maxCount);
             System.arraycopy(newWeights, 0, weights, oldLen, newWeights.length);
             int lastWeight = weights[oldLen + newWeights.length - 1];
             for (int i = oldLen + newWeights.length; i < maxCount; ++i) {
@@ -708,6 +735,7 @@
             return i + minCount;
         }
 
+        @Override
         public String toString() {
             String result = "";
             for (int i = 0; i < minCount; ++i) {
@@ -778,7 +806,7 @@
         if (DEBUG) System.out.println("\"" + toAdd + "\"");
         target.append(toAdd);
     }
-    
+
     private static void appendQuoted(StringBuffer target, String toAdd, StringBuffer quoteBuffer) {
         if (DEBUG) System.out.println("\"" + toAdd + "\"");
         Utility.appendToRule(target, toAdd, false, false, quoteBuffer);
@@ -789,7 +817,7 @@
         public abstract void handleString(String source, int start, int limit);
         public abstract void handleSequence(String source, int start, int limit);
         public abstract void handleAlternation(String source, int start, int limit);
-            
+
     }
     */
     /*
@@ -798,22 +826,22 @@
     public interface Spread {
         public double spread(double value);
     }
-    
+
     // give the weight for the high end.
     // values are linearly scaled according to the weight.
     static public class SimpleSpread implements Spread {
         static final Spread FLAT = new SimpleSpread(1.0);
         boolean flat = false;
         double aa, bb, cc;
-        public SimpleSpread(double maxWeight) {   
+        public SimpleSpread(double maxWeight) {
             if (maxWeight > 0.999 && maxWeight < 1.001) {
                 flat = true;
-            } else { 
+            } else {
                 double q = (maxWeight - 1.0);
                 aa = -1/q;
                 bb = 1/(q*q);
                 cc = (2.0+q)/q;
-           }                 
+           }
         }
         public double spread(double value) {
             if (flat) return value;
@@ -826,7 +854,7 @@
     static public int pick(Spread spread, Random random, int start, int end) {
         return start + (int)(spread.spread(random.nextDouble()) * (end + 1 - start));
     }
-    
+
     */
 
 }
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/util/PluralRanges.java b/tools/java/org/unicode/cldr/util/PluralRanges.java
index 839eefd..051159d 100644
--- a/tools/java/org/unicode/cldr/util/PluralRanges.java
+++ b/tools/java/org/unicode/cldr/util/PluralRanges.java
@@ -21,6 +21,7 @@
      * @internal
      * @deprecated
      */
+    @Deprecated
     public static final class Matrix implements Comparable<Matrix>, Cloneable {
         private byte[] data = new byte[Count.LENGTH * Count.LENGTH];
         {
@@ -34,6 +35,7 @@
          * @internal
          * @deprecated
          */
+        @Deprecated
         public void set(Count start, Count end, Count result) {
             data[start.ordinal() * Count.LENGTH + end.ordinal()] = result == null ? (byte) -1 : (byte) result.ordinal();
         }
@@ -43,6 +45,7 @@
          * @internal
          * @deprecated
          */
+        @Deprecated
         public void setIfNew(Count start, Count end, Count result) {
             byte old = data[start.ordinal() * Count.LENGTH + end.ordinal()];
             if (old >= 0) {
@@ -57,6 +60,7 @@
          * @internal
          * @deprecated
          */
+        @Deprecated
         public Count get(Count start, Count end) {
             byte result = data[start.ordinal() * Count.LENGTH + end.ordinal()];
             return result < 0 ? null : Count.VALUES.get(result);
@@ -67,6 +71,7 @@
          * @internal
          * @deprecated
          */
+        @Deprecated
         public Count endSame(Count end) {
             Count first = null;
             for (Count start : Count.VALUES) {
@@ -90,6 +95,7 @@
          * @internal
          * @deprecated
          */
+        @Deprecated
         public Count startSame(Count start, EnumSet<Count> endDone, Output<Boolean> emit) {
             emit.value = false;
             Count first = null;
@@ -168,6 +174,7 @@
      * @internal
      * @deprecated
      */
+    @Deprecated
     public void add(Count rangeStart, Count rangeEnd, Count result) {
         explicit[result.ordinal()] = true;
         if (rangeStart == null) {
@@ -202,6 +209,7 @@
      * @internal
      * @deprecated
      */
+    @Deprecated
     public static String showRange(Count start, Count end, Count result) {
         String startEnd = "start=\"" + start + "\"" + Utility.repeat(" ", 5 - start.toString().length())
             + " end=\"" + end + "\"" + Utility.repeat(" ", 5 - end.toString().length());
@@ -240,13 +248,14 @@
      * @internal
      * @deprecated
      */
+    @Deprecated
     public boolean isExplicitlySet(Count count) {
         return explicit[count.ordinal()];
     }
 
     @Override
     public boolean equals(Object other) {
-        return other instanceof PluralRanges ? matrix.equals((PluralRanges) other) : false;
+        return other instanceof PluralRanges ? matrix.equals(other) : false;
     }
 
     @Override
diff --git a/tools/java/org/unicode/cldr/util/PluralRulesUtil.java b/tools/java/org/unicode/cldr/util/PluralRulesUtil.java
index 1ae273a..c13ba17 100644
--- a/tools/java/org/unicode/cldr/util/PluralRulesUtil.java
+++ b/tools/java/org/unicode/cldr/util/PluralRulesUtil.java
@@ -78,7 +78,7 @@
 
         // Compute if the quick test is insufficient.
 
-        HashSet<Double> subtractedSet = new HashSet<Double>(values);
+        HashSet<Double> subtractedSet = new HashSet<>(values);
         for (Double explicit : explicits) {
             // int rounded = (int) Math.round(explicit*1000000);
             subtractedSet.remove(explicit - offset);
diff --git a/tools/java/org/unicode/cldr/util/PluralSamples.java b/tools/java/org/unicode/cldr/util/PluralSamples.java
index 3e62edf..07dc2f8 100644
--- a/tools/java/org/unicode/cldr/util/PluralSamples.java
+++ b/tools/java/org/unicode/cldr/util/PluralSamples.java
@@ -9,8 +9,9 @@
 import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo.Count;
 
 public class PluralSamples {
-    private static final Map<String, PluralSamples> cache = new ConcurrentHashMap<String, PluralSamples>();
-    private final Map<Count, Double>[] samples = new Map[4]; // we do 1, 2, 3, and 4 decimals
+    private static final Map<String, PluralSamples> cache = new ConcurrentHashMap<>();
+    private static final int SAMPLE_SIZE = 4;
+    private final Map<Count, Double>[] samples = new Map[SAMPLE_SIZE]; // we do 1, 2, 3, and 4 decimals
 
     public PluralSamples(String locale) {
         SupplementalDataInfo info = SupplementalDataInfo.getInstance();
@@ -24,14 +25,14 @@
     }
 
     private Map<Count, Double> getValuesForDigits(PluralInfo pluralInfo, int total, int start, int end) {
-        Map<Count, Double> set = new EnumMap<Count, Double>(Count.class);
+        Map<Count, Double> set = new EnumMap<>(Count.class);
         // Cycle through digits
         boolean favorPositive = start == 0;
         if (favorPositive) {
             ++start;
         }
         for (int item = start; item < end; ++item) {
-            double dItem = (double) item;
+            double dItem = item;
             Count count = pluralInfo.getCount(dItem);
             Double old = set.get(count);
             if (old == null) {
@@ -89,6 +90,9 @@
      * @return
      */
     public Map<PluralInfo.Count, Double> getSamples(int digits) {
-        return samples[digits - 1];
+        if (digits > 0 && digits <= SAMPLE_SIZE) {
+            return samples[digits - 1];
+        }
+        return null;
     }
 }
diff --git a/tools/java/org/unicode/cldr/util/PluralSnapshot.java b/tools/java/org/unicode/cldr/util/PluralSnapshot.java
index 84d779a..acf2c24 100644
--- a/tools/java/org/unicode/cldr/util/PluralSnapshot.java
+++ b/tools/java/org/unicode/cldr/util/PluralSnapshot.java
@@ -15,7 +15,7 @@
 import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo;
 import org.unicode.cldr.util.SupplementalDataInfo.PluralType;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.lang.UCharacter;
 import com.ibm.icu.text.NumberFormat;
@@ -48,7 +48,7 @@
 
     static final int LEN = 128;
 
-    static Set<Double> zeroOne = new TreeSet<Double>();
+    static Set<Double> zeroOne = new TreeSet<>();
     static {
         zeroOne.add(0.0d);
         zeroOne.add(1.0d);
@@ -77,7 +77,7 @@
         private SnapshotInfo(PluralType pluralType, Integral integral) {
             this.integral = integral;
             SupplementalDataInfo supplementalDataInfo = SupplementalDataInfo.getInstance();
-            Map<String, PluralSnapshot> rulesToSnapshot = new HashMap<String, PluralSnapshot>();
+            Map<String, PluralSnapshot> rulesToSnapshot = new HashMap<>();
             for (String locale : supplementalDataInfo.getPluralLocales(pluralType)) {
                 PluralInfo plurals = supplementalDataInfo.getPlurals(pluralType, locale);
                 String rules = plurals.getRules();
@@ -91,6 +91,7 @@
             }
         }
 
+        @Override
         public Iterator<Entry<PluralSnapshot, Set<String>>> iterator() {
             return snapshotToLocales.keyValuesSet().iterator();
         }
@@ -126,7 +127,7 @@
         }
     }
 
-    private static final EnumMap<PluralType, EnumMap<Integral, SnapshotInfo>> SINGLETONS = new EnumMap<PluralType, EnumMap<Integral, SnapshotInfo>>(
+    private static final EnumMap<PluralType, EnumMap<Integral, SnapshotInfo>> SINGLETONS = new EnumMap<>(
         PluralType.class);
     static {
         SINGLETONS.put(PluralType.cardinal, new EnumMap<Integral, SnapshotInfo>(Integral.class));
@@ -186,17 +187,20 @@
         return 0;
     }
 
+    @Override
     public boolean equals(Object other) {
         return compareTo((PluralSnapshot) other) == 0;
     }
 
+    @Override
     public int hashCode() {
         return count; // brain dead but we don't care.
     }
 
+    @Override
     public String toString() {
         StringBuilder result = new StringBuilder();
-        result.append("Plurals: 0, 1, ").append(CollectionUtilities.join(not01, ", "));
+        result.append("Plurals: 0, 1, ").append(Joiner.on(", ").join(not01));
         if (coveredBy01.size() != 0) {
             result.append("\nCovered by {0,1}:\t").append(coveredBy01);
         }
@@ -310,7 +314,7 @@
                     // lastCount = ss.count;
                     // lastCount01 = ss.count01;
                     // }
-                    Map<String, String> fullLocales = new TreeMap<String, String>();
+                    Map<String, String> fullLocales = new TreeMap<>();
                     for (String localeId : locales) {
                         String name = english.getName(localeId);
                         fullLocales.put(name, localeId);
diff --git a/tools/java/org/unicode/cldr/util/PreferredAndAllowedHour.java b/tools/java/org/unicode/cldr/util/PreferredAndAllowedHour.java
index 59abc4c..c68df98 100644
--- a/tools/java/org/unicode/cldr/util/PreferredAndAllowedHour.java
+++ b/tools/java/org/unicode/cldr/util/PreferredAndAllowedHour.java
@@ -1,17 +1,21 @@
 package org.unicode.cldr.util;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.LinkedHashSet;
-import java.util.List;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Comparators.lexicographical;
+import static com.google.common.collect.ImmutableList.toImmutableList;
 
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Set;
+import java.util.stream.Stream;
+
+import com.google.common.base.Joiner;
 import com.google.common.base.Splitter;
 import com.google.common.collect.ImmutableList;
-import com.ibm.icu.dev.util.CollectionUtilities;
 
 public final class PreferredAndAllowedHour implements Comparable<PreferredAndAllowedHour> {
-
+    // DO NOT change enum item names, they are mapped directly from data values via "valueOf".
     public enum HourStyle {
         H, Hb(H), HB(H), k, h, hb(h), hB(h), K;
         public final HourStyle base;
@@ -28,77 +32,77 @@
             try {
                 HourStyle.valueOf(c);
                 return true;
-            } catch (Exception e) {
+            } catch (IllegalArgumentException e) {
                 return false;
             }
         }
     }
 
+    // For splitting the style ID string.
+    private static final Splitter SPACE_SPLITTER = Splitter.on(' ').trimResults();
+
+    // If this used "getter" method references it wouldn't need so much explicit generic typing.
+    private static final Comparator<PreferredAndAllowedHour> COMPARATOR =
+        Comparator.<PreferredAndAllowedHour, HourStyle>comparing(t -> t.preferred)
+            .thenComparing(t -> t.allowed, lexicographical(Comparator.<HourStyle>naturalOrder()));
+
     public final HourStyle preferred;
-    public final List<HourStyle> allowed;
+    /** Unique allowed styles, in the order they were specified during construction. */
+    public final ImmutableList<HourStyle> allowed;
 
-    public PreferredAndAllowedHour(char preferred, Collection<Character> allowed) {
-        this(HourStyle.valueOf(String.valueOf(preferred)), mungeSet(allowed));
+    /**
+     * Creates a PreferredAndAllowedHour instance with "allowed" styles derived from single
+     * character IDs in the given collection. Note that the iteration order of the allowed
+     * styles is retained.
+     *
+     * <p>This constructor is limiting, since some styles are identified by two character
+     * strings, which cannot be referenced via this constructor.
+     */
+    public PreferredAndAllowedHour(char preferred, Set<Character> allowed) {
+        this(String.valueOf(preferred), allowed.stream().map(String::valueOf));
     }
 
-    public PreferredAndAllowedHour(Collection<HourStyle> allowed) {
-        this(allowed.iterator().next(), allowed);
+    /**
+     * Creates a PreferredAndAllowedHour instance with "allowed" styles derived from a space
+     * separated list of unique IDs. Note that the iteration order of the allowed styles is
+     * retained, since in some situations it is necessary that the preferred style should
+     * also be the first allowed style. The list of allowed style IDs must not contain
+     * duplicates.
+     */
+    public PreferredAndAllowedHour(String preferred, String allowedString) {
+        this(preferred, SPACE_SPLITTER.splitToList(allowedString).stream());
     }
 
-    public PreferredAndAllowedHour(HourStyle preferred, Collection<HourStyle> allowed) {
-        if (preferred == null) {
-            throw new NullPointerException();
-        }
-        if (!allowed.contains(preferred)) {
-            throw new IllegalArgumentException("Allowed (" + allowed +
-                ") must contain preferred(" + preferred +
-                ")");
-        }
-        this.preferred = preferred;
-        this.allowed = ImmutableList.copyOf(new LinkedHashSet<>(allowed));
-    }
-
-    public PreferredAndAllowedHour(String preferred2, String allowedString) {
-        this(HourStyle.valueOf(preferred2), mungeOperands(allowedString));
-    }
-
-    private static EnumSet<HourStyle> mungeSet(Collection<Character> allowed) {
-        EnumSet<HourStyle> temp = EnumSet.noneOf(HourStyle.class);
-        for (char c : allowed) {
-            temp.add(HourStyle.valueOf(String.valueOf(c)));
-        }
-        return temp;
-    }
-
-    static final Splitter SPACE_SPLITTER = Splitter.on(' ').trimResults();
-
-    private static LinkedHashSet<HourStyle> mungeOperands(String allowedString) {
-        LinkedHashSet<HourStyle> allowed = new LinkedHashSet<>();
-        for (String s : SPACE_SPLITTER.split(allowedString)) {
-            allowed.add(HourStyle.valueOf(s));
-        }
-        return allowed;
+    private PreferredAndAllowedHour(String preferredStyle, Stream<String> allowedStyles) {
+        this.preferred = checkNotNull(HourStyle.valueOf(preferredStyle));
+        this.allowed = allowedStyles.map(HourStyle::valueOf).collect(toImmutableList());
+        checkArgument(allowed.stream().distinct().count() == allowed.size(),
+                "Allowed (%s) must not contain duplicates", allowed);
+        // Note: In *some* cases the preferred style is required to be the first style in
+        // the allowed set, but not always (thus we cannot do a better check here).
+        // TODO: Figure out if we can enforce preferred == first(allowed) here.
+        checkArgument(allowed.contains(preferred),
+                "Allowed (%s) must contain preferred (%s)", allowed, preferred);
     }
 
     @Override
-    public int compareTo(PreferredAndAllowedHour arg0) {
-        int diff = preferred.compareTo(arg0.preferred);
-        if (diff != 0) return diff;
-        return CollectionUtilities.compare(allowed.iterator(), arg0.allowed.iterator());
+    public int compareTo(PreferredAndAllowedHour other) {
+        return COMPARATOR.compare(this, other);
     }
 
     @Override
     public String toString() {
-        return toString(Collections.singleton("?"));
+        return toString(ImmutableList.of("?"));
     }
 
     public String toString(Collection<String> regions) {
+        Joiner withSpaces = Joiner.on(" ");
         return "<hours preferred=\""
             + preferred
             + "\" allowed=\""
-            + CollectionUtilities.join(allowed, " ")
+            + withSpaces.join(allowed)
             + "\" regions=\""
-            + CollectionUtilities.join(regions, " ")
+            + withSpaces.join(regions)
             + "\"/>";
     }
 
diff --git a/tools/java/org/unicode/cldr/util/PrettyPath.java b/tools/java/org/unicode/cldr/util/PrettyPath.java
index 09b5168..30c61d0 100644
--- a/tools/java/org/unicode/cldr/util/PrettyPath.java
+++ b/tools/java/org/unicode/cldr/util/PrettyPath.java
@@ -20,6 +20,7 @@
  * @deprecated
  * TODO: what is supposed to replace PrettyPath? If no replacement is planned, make it no longer deprecated?
  */
+@Deprecated
 public class PrettyPath {
     private Transliterator prettyPathZoneTransform;
     {
@@ -28,8 +29,8 @@
     }
     private Transliterator prettyPathTransform = CheckCLDR.getTransliteratorFromFile("ID", "prettyPath.txt");
 
-    private Map<String, String> prettyPath_path = new HashMap<String, String>();
-    private Map<String, String> path_prettyPath_sortable = new HashMap<String, String>();
+    private Map<String, String> prettyPath_path = new HashMap<>();
+    private Map<String, String> path_prettyPath_sortable = new HashMap<>();
     private boolean showErrors;
 
     /**
@@ -53,7 +54,7 @@
      * @return pretty path
      */
     public String getPrettyPath(String path, boolean sortable) {
-        String prettyString = (String) path_prettyPath_sortable.get(path);
+        String prettyString = path_prettyPath_sortable.get(path);
         if (path_prettyPath_sortable.get(path) == null) {
             prettyString = prettyPathTransform.transliterate(path);
             // some internal errors, shown here for debugging for now.
@@ -80,7 +81,7 @@
     }
 
     private void addBackmap(String prettyString, String path, Map<String, String> prettyPath_path_map) {
-        String old = (String) prettyPath_path_map.get(prettyString);
+        String old = prettyPath_path_map.get(prettyString);
         if (old != null) {
             if (showErrors) System.out.println("Warning:\tFailed bijection, " + prettyString);
             if (showErrors) System.out.println("Warning:\tPath1: " + path);
@@ -97,7 +98,7 @@
      * @return
      */
     public String getOriginal(String prettyPath) {
-        return (String) prettyPath_path.get(prettyPath);
+        return prettyPath_path.get(prettyPath);
     }
 
     /**
diff --git a/tools/java/org/unicode/cldr/util/Quoter.java b/tools/java/org/unicode/cldr/util/Quoter.java
index 722e664..faac5e2 100644
--- a/tools/java/org/unicode/cldr/util/Quoter.java
+++ b/tools/java/org/unicode/cldr/util/Quoter.java
@@ -42,6 +42,7 @@
     }
 
     // warning, allows access to internals
+    @Override
     public String toString() {
         setQuoting(false); // finish quoting
         return output.toString();
@@ -53,14 +54,16 @@
     public static class RuleQuoter extends Quoter {
         private StringBuffer quoteBuffer = new StringBuffer();
 
+        @Override
         public void setQuoting(boolean value) {
             if (quoting == value) return;
             if (quoting) { // stop quoting
-                Utility.appendToRule(output, (int) -1, true, false, quoteBuffer); // close previous quote
+                Utility.appendToRule(output, -1, true, false, quoteBuffer); // close previous quote
             }
             quoting = value;
         }
 
+        @Override
         public Quoter append(String s) {
             if (DEBUG) System.out.println("\"" + s + "\"");
             if (quoting) {
diff --git a/tools/java/org/unicode/cldr/util/Rational.java b/tools/java/org/unicode/cldr/util/Rational.java
index 88004e5..ad7171f 100644
--- a/tools/java/org/unicode/cldr/util/Rational.java
+++ b/tools/java/org/unicode/cldr/util/Rational.java
@@ -27,7 +27,7 @@
 /**
  * Very basic class for rational numbers. No attempt to optimize, since it will just
  * be used for testing within CLDR.
- * 
+ *
  * @author markdavis
  *
  */
@@ -37,7 +37,7 @@
     public final BigInteger denominator;
 
     // Constraints:
-    //   always stored in normalized form. 
+    //   always stored in normalized form.
     //   no common factor > 1 (reduced)
     //   denominator never negative
     //   if numerator is zero, denominator is 1 or 0
@@ -53,7 +53,7 @@
 
     public static final Rational TEN = Rational.of(10, 1);
     public static final Rational TENTH = TEN.reciprocal();
-    
+
     public static final char REPTEND_MARKER = '˙';
 
     public static class RationalParser implements Freezable<RationalParser>{
@@ -71,12 +71,12 @@
                 throw new IllegalArgumentException("Can't reset constant " + id + " = " + value);
             }
             if (status != null) {
-                constantStatus.put(id, status); 
+                constantStatus.put(id, status);
             }
             return this;
         }
 
-        /* 
+        /*
          * input = comp (/ comp)?
          * comp = comp2 (* comp2)*
          * comp2 = digits (. digits)? | constant
@@ -277,8 +277,8 @@
 
     public static Rational of(BigDecimal bigDecimal) {
         // scale()
-        // If zero or positive, the scale is the number of digits to the right of the decimal point. 
-        // If negative, the unscaled value of the number is multiplied by ten to the power of the negation of the scale. 
+        // If zero or positive, the scale is the number of digits to the right of the decimal point.
+        // If negative, the unscaled value of the number is multiplied by ten to the power of the negation of the scale.
         // For example, a scale of -3 means the unscaled value is multiplied by 1000.
         final int scale = bigDecimal.scale();
         final BigInteger unscaled = bigDecimal.unscaledValue();
@@ -312,8 +312,8 @@
         final boolean denIsOne = newDenominator.equals(BigInteger.ONE);
 
         switch (style) {
-        case repeating: 
-            String result = toRepeating(30); // limit of 30 on the repeating length, so we don't get crazy
+        case repeating:
+            String result = toRepeating(30); // limit of 30 on the repeating length, so we don't get unreasonable
             if (result != null) {
                 return result;
             }
@@ -338,7 +338,7 @@
          * Only for large/small numbers, eg:
          * ≥ 1,000,000.0, => 1×10<sup>6</sup> — more than 6 trailing 0's
          * ≤ 0.0000001 — more than 6 leading zeros
-         * 
+         *
          * relevant BigDecimal APIs:
          * 123.4567 scale: 4 bigint: 1234567
          * 123456700 scale: 0 bigint: 123456700
@@ -382,7 +382,7 @@
 
 
     /**
-     * Goal is to be able to display rationals in a short but exact form, like 1,234,567/3 or 1.234567E21/3. 
+     * Goal is to be able to display rationals in a short but exact form, like 1,234,567/3 or 1.234567E21/3.
      * To do this, find the smallest denominator (excluding powers of 2 and 5), and modify the numerator in the same way.
      * @param denominator TODO
      * @param current
diff --git a/tools/java/org/unicode/cldr/util/RecordingCLDRFile.java b/tools/java/org/unicode/cldr/util/RecordingCLDRFile.java
new file mode 100644
index 0000000..8ba4a2d
--- /dev/null
+++ b/tools/java/org/unicode/cldr/util/RecordingCLDRFile.java
@@ -0,0 +1,54 @@
+package org.unicode.cldr.util;
+
+import java.util.HashSet;
+
+/**
+ * Like CLDRFile, with an added feature for recording the paths for which
+ * getStringValue, etc., are called.
+ *
+ * The first intended usage is for TestExampleDependencies, to identify all the paths on
+ * which a given example depends. Before calling ExampleGenerator.getExampleHtml, TestExampleDependencies
+ * calls clearRecordedPaths. After getting each example, TestExampleDependencies calls getRecordedPaths
+ * to get the set of all paths in this file that were accessed to generate the example.
+ */
+public class RecordingCLDRFile extends CLDRFile {
+    private HashSet<String> recordedPaths = new HashSet<>();
+
+    public RecordingCLDRFile(XMLSource dataSource) {
+        super(dataSource);
+    }
+
+    public RecordingCLDRFile(XMLSource dataSource, XMLSource... resolvingParents) {
+        super(dataSource, resolvingParents);
+    }
+
+    public void clearRecordedPaths() {
+        recordedPaths.clear();
+    }
+
+    public HashSet<String> getRecordedPaths() {
+        return recordedPaths;
+    }
+
+    @Override
+    public String getStringValue(String xpath) {
+        recordPath(xpath);
+        return super.getStringValue(xpath);
+    }
+
+    @Override
+    public String getWinningValue(String xpath) {
+        recordPath(xpath);
+        return super.getWinningValue(xpath);
+    }
+
+    @Override
+    public String getConstructedValue(String xpath) {
+        recordPath(xpath);
+        return super.getConstructedValue(xpath);
+    }
+
+    private void recordPath(String xpath) {
+        recordedPaths.add(xpath);
+    }
+}
diff --git a/tools/java/org/unicode/cldr/util/ReferenceStringSearch.java b/tools/java/org/unicode/cldr/util/ReferenceStringSearch.java
index 4bad166..d0a3382 100644
--- a/tools/java/org/unicode/cldr/util/ReferenceStringSearch.java
+++ b/tools/java/org/unicode/cldr/util/ReferenceStringSearch.java
@@ -66,6 +66,7 @@
     public static class ExtendedRange {
         int minStart, maxStart, minLimit, maxLimit;
 
+        @Override
         public String toString() {
             return minStart + ", " + maxStart + ", " + minLimit + ", " + maxLimit;
         }
@@ -86,6 +87,7 @@
         public int start;
         public int limit;
 
+        @Override
         public String toString() {
             return start + ", " + limit;
         }
@@ -164,7 +166,7 @@
 
     public ReferenceStringSearch setKey(String key) {
         this.key = key;
-        ArrayList<Integer> keyBufferList = new ArrayList<Integer>();
+        ArrayList<Integer> keyBufferList = new ArrayList<>();
         CollationElementIterator2 keyIterator = new CollationElementIterator2(collator).setText(key);
         while (true) {
             int collationElement = keyIterator.nextProcessed();
diff --git a/tools/java/org/unicode/cldr/util/RegexLogger.java b/tools/java/org/unicode/cldr/util/RegexLogger.java
index ae890f3..c3f9f24 100644
--- a/tools/java/org/unicode/cldr/util/RegexLogger.java
+++ b/tools/java/org/unicode/cldr/util/RegexLogger.java
@@ -164,10 +164,12 @@
 
         }
 
+        @Override
         public void log(Pattern pattern, String matchStr, boolean matched, LogType type, Class<?> cls) {
             log(pattern.pattern(), matchStr, matched, type, cls);
         }
 
+        @Override
         public void log(String pattern, String matchStr, boolean matched, LogType type, Class<?> cls) {
             log(pattern, matchStr, matched, 0, type, cls);
         }
@@ -175,6 +177,7 @@
         /**
          * Get all entries
          */
+        @Override
         public NavigableSet<PatternCountInterface> getEntries() {
             return getEntries(1);
         }
@@ -200,7 +203,7 @@
 
         @Override
         public NavigableSet<PatternCountInterface> getEntries(int minCount) {
-            NavigableSet<PatternCountInterface> returned = (NavigableSet<PatternCountInterface>) Sets.newTreeSet(Collections.EMPTY_SET);
+            NavigableSet<PatternCountInterface> returned = Sets.newTreeSet(Collections.EMPTY_SET);
             return returned;
         }
     }
@@ -297,6 +300,7 @@
             super(minCount, c);
         }
 
+        @Override
         public void process(PatternStringWithBoolean item, Multiset<PatternStringWithBoolean> countSet) {
             if (countSet.count(item) >= minCount) {
                 super.process(item, countSet);
@@ -361,6 +365,7 @@
                 this.callLocations);
         }
 
+        @Override
         public String getPattern() {
             return pattern;
         }
@@ -473,7 +478,12 @@
                     break;
                 }
                 if (current.startsWith("org.unicode.cldr.test.CheckCLDR") &&
-                    !lastClass.startsWith("org.unicode.cldr.test.CheckCLDR")) {
+                    /*
+                     * TODO: fix this function to avoid referencing lastClass when it is null.
+                     * The condition lastClass == null here prevents compiler warning/error or possible NullPointerException,
+                     * since lastClass is ALWAYS null here; but this is obviously not the best solution.
+                     */
+                    (lastClass == null || !lastClass.startsWith("org.unicode.cldr.test.CheckCLDR"))) {
                     lastClass = current;
                     // leave out
                     continue;
@@ -556,6 +566,7 @@
         private final Multimap<PatternStringWithBoolean, String> occurrences = TreeMultimap.create();
         private final IterableTransformer<String, String> transformer = new StringIterableTransformer();
 
+        @Override
         public void log(String pattern, String matchStr, boolean matched, double time, LogType type, Class<?> cls) {
             boolean isRegexFinder = findClassName("org.unicode.cldr.util.RegexLookup", 10);
             PatternStringWithBoolean key = new PatternStringWithBoolean(pattern, isRegexFinder);
@@ -663,6 +674,7 @@
             return ret;
         }
 
+        @Override
         public NavigableSet<PatternCountInterface> getEntries(final int minCount) {
             CountSets c = new CountSets(matchedFindSet, failedFindSet, matchedMatchSet, failedMatchSet, occurrences);
             final AddAllEntryProcessor processor = (minCount == 1) ? new AddAllEntryProcessor(minCount, c) : new EntryProcessor(minCount, c);
diff --git a/tools/java/org/unicode/cldr/util/RegexLookup.java b/tools/java/org/unicode/cldr/util/RegexLookup.java
index ecda0b4..9a4e51e 100644
--- a/tools/java/org/unicode/cldr/util/RegexLookup.java
+++ b/tools/java/org/unicode/cldr/util/RegexLookup.java
@@ -44,7 +44,7 @@
 
     public enum LookupType {
         STAR_PATTERN_LOOKUP, OPTIMIZED_DIRECTORY_PATTERN_LOOKUP, STANDARD
-    };
+    }
 
     private LookupType _lookupType;
 
@@ -73,14 +73,14 @@
         switch (type) {
         case STAR_PATTERN_LOOKUP:
             //   SPEntries = new StarPatternMap<T>();
-            storage = new StarPatternMap<T>();
+            storage = new StarPatternMap<>();
             break;
         case OPTIMIZED_DIRECTORY_PATTERN_LOOKUP:
             //   RTEntries = new RegexTree<T>();
-            storage = new RegexTree<T>();
+            storage = new RegexTree<>();
             break;
         default:
-            MEntries = new LinkedHashMap<Finder, T>();
+            MEntries = new LinkedHashMap<>();
             break;
         }
     }
@@ -130,6 +130,7 @@
          * Call Matches on the pattern, returning additional information in the Info field,
          * if it is non null
          */
+        @Override
         public boolean matches(String item, Object context, Info info) {
             synchronized (matcher) {
                 try {
@@ -166,6 +167,7 @@
          * Call find() on the pattern, returning additional information in the info field,
          * if it is non-null
          */
+        @Override
         public boolean find(String item, Object context, Info info) {
             synchronized (matcher) {
                 try {
@@ -181,6 +183,7 @@
             }
         }
 
+        @Override
         public String toString() {
             // Use pattern here, to avoid having to synchronize on matcher
             return pattern.pattern();
@@ -258,8 +261,8 @@
 
         @Override
         public List<T> getAll(String pattern, Object context, List<Finder> matcherList, Output<String[]> firstInfo) {
-            List<RTNode> list = new ArrayList<RTNode>();
-            List<T> retList = new ArrayList<T>();
+            List<RTNode> list = new ArrayList<>();
+            List<T> retList = new ArrayList<>();
 
             root.addToList(pattern, context, list);
             Collections.sort(list, rankComparator);
@@ -289,8 +292,9 @@
             return retList;
         }
 
+        @Override
         public T get(String pattern, Object context, Output<String[]> arguments, Output<Finder> matcherFound) {
-            List<Finder> matcherList = new ArrayList<Finder>();
+            List<Finder> matcherList = new ArrayList<>();
             Output<String[]> firstInfo = new Output<>();
             List<T> matches = getAll(pattern, context, matcherList, firstInfo); //need to get whole list because we want value that was entered first
             if (arguments != null) {
@@ -305,9 +309,10 @@
             return (matches.size() > 0) ? matches.get(0) : null;
         }
 
+        @Override
         public Set<Entry<Finder, T>> entrySet() {
-            LinkedHashMap<Finder, T> ret = new LinkedHashMap<Finder, T>();
-            TreeSet<RTNode> s = new TreeSet<RTNode>(rankComparator);
+            LinkedHashMap<Finder, T> ret = new LinkedHashMap<>();
+            TreeSet<RTNode> s = new TreeSet<>(rankComparator);
             root.addToEntrySet(s);
 
             for (RTNode n : s) {
@@ -320,7 +325,7 @@
         public class RTNode extends NodeBase<T> {
 //            Finder _finder;
 //            T _val;
-            List<RTNode> _children = new ArrayList<RTNode>();
+            List<RTNode> _children = new ArrayList<>();
             int _rank = -1; //rank -1 means the node was not inserted, but only used for structural purposes
 
             //constructor for regular nodes with a Finder
@@ -498,6 +503,7 @@
                 }
             }
 
+            @Override
             public String toString() {
                 return toString("", new StringBuilder()).toString();
             }
@@ -523,6 +529,7 @@
         }
 
         class RTNodeRankComparator implements Comparator<RTNode> {
+            @Override
             public int compare(RTNode a, RTNode b) {
                 if (a == b) {
                     return 0;
@@ -540,6 +547,7 @@
             }
         }
 
+        @Override
         public String toString() {
             return root.toString();
         }
@@ -550,21 +558,23 @@
         private int _size = 0;
 
         public StarPatternMap() {
-            _spmap = new HashMap<String, List<SPNode>>();
+            _spmap = new HashMap<>();
 //            _size = 0;
         }
 
+        @Override
         public int size() {
             return _size;
         }
 
+        @Override
         public void put(Finder pattern, T value) {
             //System.out.println("pattern.toString() is => "+pattern.toString());
             String starPattern = pathStarrer.transform2(pattern.toString().replaceAll("\\(\\[\\^\"\\]\\*\\)", "*"));
             //System.out.println("Putting => "+starPattern);
             List<SPNode> candidates = _spmap.get(starPattern);
             if (candidates == null) {
-                candidates = new ArrayList<SPNode>();
+                candidates = new ArrayList<>();
             }
             SPNode newNode = new SPNode(pattern, value);
             candidates.add(newNode);
@@ -572,6 +582,7 @@
             _size++;
         }
 
+        @Override
         public T get(Finder finder) {
             String starPattern = pathStarrer.transform2(finder.toString());
             List<SPNode> candidates = _spmap.get(starPattern);
@@ -586,9 +597,10 @@
             return null;
         }
 
+        @Override
         public List<T> getAll(String pattern, Object context, List<Finder> matcherList, Output<String[]> firstInfo) {
-            List<SPNode> list = new ArrayList<SPNode>();
-            List<T> retList = new ArrayList<T>();
+            List<SPNode> list = new ArrayList<>();
+            List<T> retList = new ArrayList<>();
 
             String starPattern = pathStarrer.transform2(pattern);
             List<SPNode> candidates = _spmap.get(starPattern);
@@ -615,8 +627,9 @@
             return retList;
         }
 
+        @Override
         public T get(String pattern, Object context, Output<String[]> arguments, Output<Finder> matcherFound) {
-            List<Finder> matcherList = new ArrayList<Finder>();
+            List<Finder> matcherList = new ArrayList<>();
             Output<String[]> firstInfo = new Output<>();
             List<T> matches = getAll(pattern, context, matcherList, firstInfo); //need to get whole list because we want value that was entered first
             if (arguments != null && firstInfo.value != null) {
@@ -629,8 +642,9 @@
             return (matches.size() > 0) ? matches.get(0) : null;
         }
 
+        @Override
         public Set<Entry<Finder, T>> entrySet() {
-            LinkedHashMap<Finder, T> ret = new LinkedHashMap<Finder, T>();
+            LinkedHashMap<Finder, T> ret = new LinkedHashMap<>();
 
             for (Entry<String, List<SPNode>> entry : _spmap.entrySet()) {
                 List<SPNode> candidates = entry.getValue();
@@ -656,6 +670,7 @@
                 super(finder, val);
             }
 
+            @Override
             public String toString() {
                 return this._finder.toString();
             }
@@ -681,6 +696,7 @@
     }
 
     public static Transform<String, RegexFinder> RegexFinderTransform = new Transform<String, RegexFinder>() {
+        @Override
         public RegexFinder transform(String source) {
             return new RegexFinder(source);
         }
@@ -691,6 +707,7 @@
      * with XPaths.
      */
     public static Transform<String, RegexFinder> RegexFinderTransformPath = new Transform<String, RegexFinder>() {
+        @Override
         public RegexFinder transform(String source) {
             final String newSource = source.replace("[@", "\\[@");
             return new RegexFinder(newSource.startsWith("//")
@@ -704,6 +721,7 @@
      * To work better with XPaths.
      */
     public static Transform<String, RegexFinder> RegexFinderTransformPath2 = new Transform<String, RegexFinder>() {
+        @Override
         public RegexFinder transform(String source) {
             final String newSource = source.replace("[@", "\\[@").replace('\'', '"');
             return new RegexFinder(newSource.startsWith("//")
@@ -881,7 +899,7 @@
             return null;
         } else {
             //slow but versatile implementation
-            List<T> matches = new ArrayList<T>();
+            List<T> matches = new ArrayList<>();
             for (Map.Entry<Finder, T> entry : MEntries.entrySet()) {
                 Finder matcher = entry.getKey();
                 Info firstInfo = new Info();
@@ -963,6 +981,7 @@
     /**
      * @deprecated Use {@link #of(LookupType,Transform)} instead
      */
+    @Deprecated
     public static <T> RegexLookup<T> of(LookupType lookupType) {
         return of(lookupType, RegexFinderTransform);
     }
diff --git a/tools/java/org/unicode/cldr/util/SemiFileReader.java b/tools/java/org/unicode/cldr/util/SemiFileReader.java
index 9a8bce7..94d5919 100644
--- a/tools/java/org/unicode/cldr/util/SemiFileReader.java
+++ b/tools/java/org/unicode/cldr/util/SemiFileReader.java
@@ -7,6 +7,7 @@
 
     protected abstract boolean handleLine(int lineCount, int start, int end, String[] items);
 
+    @Override
     protected void handleEnd() {
     }
 
diff --git a/tools/java/org/unicode/cldr/util/SetComparator.java b/tools/java/org/unicode/cldr/util/SetComparator.java
index c119139..77d5448 100644
--- a/tools/java/org/unicode/cldr/util/SetComparator.java
+++ b/tools/java/org/unicode/cldr/util/SetComparator.java
@@ -5,6 +5,7 @@
 import java.util.Set;
 
 public class SetComparator<T extends Comparable<T>> implements Comparator<Set<T>> {
+    @Override
     public int compare(Set<T> o1, Set<T> o2) {
         int size1 = o1.size();
         int size2 = o2.size();
diff --git a/tools/java/org/unicode/cldr/util/SimpleDictionary.java b/tools/java/org/unicode/cldr/util/SimpleDictionary.java
index 3216f73..50fcc01 100644
--- a/tools/java/org/unicode/cldr/util/SimpleDictionary.java
+++ b/tools/java/org/unicode/cldr/util/SimpleDictionary.java
@@ -24,7 +24,7 @@
  * @author markdavis
  */
 public class SimpleDictionary<T> extends Dictionary<T> {
-    private TreeMap<CharSequence, T> data = new TreeMap<CharSequence, T>();
+    private TreeMap<CharSequence, T> data = new TreeMap<>();
     private Set<CharSequence> possibleMatchesBefore;
     private Set<CharSequence> possibleMatchesAfter;
     private Status finalStatus;
@@ -34,6 +34,7 @@
 
     public static class SimpleDictionaryBuilder<T> implements DictionaryBuilder<T> {
 
+        @Override
         public SimpleDictionary<T> make(Map<CharSequence, T> source) {
             return new SimpleDictionary(source);
         }
@@ -77,6 +78,7 @@
         data.put(text, result);
     }
 
+    @Override
     public Iterator<Entry<CharSequence, T>> getMapping() {
         return Collections.unmodifiableMap(data).entrySet().iterator();
     }
@@ -168,6 +170,7 @@
             return finalStatus = Status.PARTIAL;
         }
 
+        @Override
         public boolean nextUniquePartial() {
             // we have already set the matchValue, so we don't need to reset here.
             return matchCount == 1;
@@ -182,7 +185,7 @@
          */
         private CharSequence filterToStartsWith(CharSequence probe) {
             CharSequence result = null;
-            possibleMatchesAfter = new TreeSet<CharSequence>();
+            possibleMatchesAfter = new TreeSet<>();
             for (CharSequence item : possibleMatchesBefore) {
                 if (startsWith(item, probe)) {
                     if (result == null) {
diff --git a/tools/java/org/unicode/cldr/util/SimpleEquivalenceClass.java b/tools/java/org/unicode/cldr/util/SimpleEquivalenceClass.java
index 80005e6..4bf7319 100644
--- a/tools/java/org/unicode/cldr/util/SimpleEquivalenceClass.java
+++ b/tools/java/org/unicode/cldr/util/SimpleEquivalenceClass.java
@@ -61,14 +61,17 @@
             }
         }
 
+        @Override
         public boolean hasNext() {
             return it.hasNext();
         }
 
+        @Override
         public Object next() {
             return it.next();
         }
 
+        @Override
         public void remove() {
             throw new IllegalArgumentException("can't remove");
         }
@@ -78,6 +81,7 @@
         return new MyIterator(comp);
     }
 
+    @Override
     public String toString() {
         return itemToSet.values().toString();
     }
diff --git a/tools/java/org/unicode/cldr/util/SimpleFactory.java b/tools/java/org/unicode/cldr/util/SimpleFactory.java
index 4548019..fc04e5d 100644
--- a/tools/java/org/unicode/cldr/util/SimpleFactory.java
+++ b/tools/java/org/unicode/cldr/util/SimpleFactory.java
@@ -60,6 +60,8 @@
 
     private static final boolean DEBUG_SIMPLEFACTORY = false;
 
+    private static final boolean USE_COMBINEDCACHE = false;
+
     /**
      * Simple class used as a key for the map that holds the CLDRFiles -only used in the new version of the code
      * @author ribnitz
@@ -128,6 +130,7 @@
             return true;
         }
 
+        @Override
         public String toString() {
             return "[ LocaleName: " + localeName + " Resolved: " + resolved + " Draft status: " + draftStatus + " Directories: " + directories + " ]";
         }
@@ -283,7 +286,7 @@
 
     // private volatile CLDRFile result; // used in handleMake
     private File sourceDirectories[];
-    private Set<String> localeList = new TreeSet<String>();
+    private Set<String> localeList = new TreeSet<>();
     private Cache<CLDRCacheKey, CLDRFile> combinedCache = null;
     //private   Map<CLDRCacheKey,CLDRFile> combinedCache=  null;
     //     Collections.synchronizedMap(new LruMap<CLDRCacheKey, CLDRFile>(CACHE_LIMIT));
@@ -306,6 +309,7 @@
     private SimpleFactory() {
     }
 
+    @Override
     public DraftStatus getMinimalDraftStatus() {
         return minimalDraftStatus;
     }
@@ -372,6 +376,8 @@
      * @return
      */
     public static Factory make(File sourceDirectory[], String matchString, DraftStatus minimalDraftStatus) {
+        // TODO change API to take list
+        sourceDirectory = filterOutNulls(sourceDirectory);
         if (!CACHE_SIMPLE_FACTORIES) {
             return new SimpleFactory(sourceDirectory, matchString, minimalDraftStatus);
         }
@@ -419,6 +425,16 @@
         }
     }
 
+    private static File[] filterOutNulls(File[] sourceDirectory) {
+        List<File> result = new ArrayList<>();
+        for (File f : sourceDirectory) {
+            if (f != null) {
+                result.add(f);
+            }
+        }
+        return result.toArray(new File[result.size()]);
+    }
+
     @SuppressWarnings("unchecked")
     private SimpleFactory(File sourceDirectories[], String matchString, DraftStatus minimalDraftStatus) {
         // initialize class based
@@ -462,6 +478,7 @@
         return sb.toString();
     }
 
+    @Override
     protected Set<String> handleGetAvailable() {
         return localeList;
     }
@@ -484,6 +501,7 @@
      * Make a CLDR file. The result is a locked file, so that it can be cached. If you want to modify it,
      * use clone().
      */
+    @Override
     @SuppressWarnings("unchecked")
     public CLDRFile handleMake(String localeName, boolean resolved, DraftStatus minimalDraftStatus) {
         @SuppressWarnings("rawtypes")
@@ -497,6 +515,27 @@
             // changed from IllegalArgumentException, which does't let us filter exceptions.
             throw new NoSourceDirectoryException(localeName);
         }
+
+        // disabling SimpleFactory.combinedCache and only use XMLNormalizingLoader.cache to avoid double-caching
+        if (!USE_COMBINEDCACHE) {
+            CLDRFile result = null; // result of the lookup / generation
+            if (resolved) {
+                ResolvingSource makeResolvingSource;
+                try {
+                    makeResolvingSource = makeResolvingSource(localeName, minimalDraftStatus);
+                } catch (Exception e) {
+                    throw new ICUException("Couldn't make resolved CLDR file for " + localeName, e);
+                }
+                result = new CLDRFile(makeResolvingSource);
+            } else {
+                if (parentDirs != null) {
+                    result = new CLDRFile(localeName, parentDirs, minimalDraftStatus);
+                    result.freeze();
+                }
+            }
+            return result;
+        }
+
         final Object cacheKey;
         CLDRFile result; // result of the lookup / generation
         if (USE_OLD_HANDLEMAKE_CODE) {
@@ -554,7 +593,8 @@
                         sb.append(minimalDraftStatus);
                         System.out.println(sb.toString());
                     }
-                    result = makeFile(localeName, parentDirs, minimalDraftStatus);
+                    // result = makeFile(localeName, parentDirs, minimalDraftStatus);
+                    result = new CLDRFile(localeName, parentDirs, minimalDraftStatus);
                     result.freeze();
                 }
             }
diff --git a/tools/java/org/unicode/cldr/util/SimpleHtmlParser.java b/tools/java/org/unicode/cldr/util/SimpleHtmlParser.java
index cdde571..7a63985 100644
--- a/tools/java/org/unicode/cldr/util/SimpleHtmlParser.java
+++ b/tools/java/org/unicode/cldr/util/SimpleHtmlParser.java
@@ -69,11 +69,11 @@
          * '&lt;element&gt;' contents '&lt;/element&gt;'
          */
         ELEMENT_CONTENT
-    };
+    }
 
     private enum State {
         BASE, IN_ELEMENT, AFTER_ELEMENT, IN_CONTENT, IN_ATTRIBUTE, IN_ATTRIBUTE_CONTENT, IN_ATTRIBUTE_CONTENT1, IN_ATTRIBUTE_CONTENT2, ELEMENT_STOP, IN_QUOTE
-    };
+    }
 
     private Reader input;
 
diff --git a/tools/java/org/unicode/cldr/util/SimpleXMLSource.java b/tools/java/org/unicode/cldr/util/SimpleXMLSource.java
index 7fa5887..c213626 100644
--- a/tools/java/org/unicode/cldr/util/SimpleXMLSource.java
+++ b/tools/java/org/unicode/cldr/util/SimpleXMLSource.java
@@ -40,17 +40,19 @@
         locked = true;
     }
 
+    @Override
     public String getValueAtDPath(String xpath) {
-        return (String) xpath_value.get(xpath);
+        return xpath_value.get(xpath);
     }
-    
+
     public String getValueAtDPathSkippingInheritanceMarker(String xpath) {
-        String result = (String) xpath_value.get(xpath);
+        String result = xpath_value.get(xpath);
         return CldrUtility.INHERITANCE_MARKER.equals(result) ? null : result;
     }
 
+    @Override
     public String getFullPathAtDPath(String xpath) {
-        String result = (String) xpath_fullXPath.get(xpath);
+        String result = xpath_fullXPath.get(xpath);
         if (result != null) return result;
         if (xpath_value.get(xpath) != null) return xpath; // we don't store duplicates
         // System.err.println("WARNING: "+getLocaleID()+": path not present in data: " + xpath);
@@ -58,10 +60,12 @@
         return null; // throw new IllegalArgumentException("Path not present in data: " + xpath);
     }
 
+    @Override
     public Comments getXpathComments() {
         return xpath_comments;
     }
 
+    @Override
     public void setXpathComments(Comments xpath_comments) {
         this.xpath_comments = xpath_comments;
     }
@@ -74,6 +78,7 @@
     // xpath_fullXPath.put(distinguishingXPath, fixedPath[0]);
     // }
     // }
+    @Override
     public void removeValueAtDPath(String distinguishingXPath) {
         String oldValue = xpath_value.get(distinguishingXPath);
         xpath_value.remove(distinguishingXPath);
@@ -81,15 +86,18 @@
         updateValuePathMapping(distinguishingXPath, oldValue, null);
     }
 
+    @Override
     public Iterator<String> iterator() { // must be unmodifiable or locked
         return Collections.unmodifiableSet(xpath_value.keySet()).iterator();
     }
 
+    @Override
     public XMLSource freeze() {
         locked = true;
         return this;
     }
 
+    @Override
     public XMLSource cloneAsThawed() {
         SimpleXMLSource result = (SimpleXMLSource) super.cloneAsThawed();
         result.xpath_comments = (Comments) result.xpath_comments.clone();
@@ -98,10 +106,12 @@
         return result;
     }
 
+    @Override
     public void putFullPathAtDPath(String distinguishingXPath, String fullxpath) {
         xpath_fullXPath.put(distinguishingXPath, fullxpath);
     }
 
+    @Override
     public void putValueAtDPath(String distinguishingXPath, String value) {
         String oldValue = xpath_value.get(distinguishingXPath);
         xpath_value.put(distinguishingXPath, value);
@@ -203,6 +213,7 @@
         this.dtdVersionInfo = dtdVersionInfo;
     }
 
+    @Override
     public VersionInfo getDtdVersionInfo() {
         return dtdVersionInfo;
     }
diff --git a/tools/java/org/unicode/cldr/util/SortedBag.java b/tools/java/org/unicode/cldr/util/SortedBag.java
index 521fa9f..edec261 100644
--- a/tools/java/org/unicode/cldr/util/SortedBag.java
+++ b/tools/java/org/unicode/cldr/util/SortedBag.java
@@ -33,6 +33,7 @@
         m = new TreeMap(c);
     }
 
+    @Override
     public boolean add(Object s) {
         Set o = (Set) m.get(s);
         if (o == null) {
@@ -44,6 +45,7 @@
         return result;
     }
 
+    @Override
     public Iterator iterator() {
         return new MyIterator();
     }
@@ -64,10 +66,12 @@
             return ((Set) m.get(mapIterator.next())).iterator();
         }
 
+        @Override
         public boolean hasNext() {
             return setIterator.hasNext() || mapIterator.hasNext();
         }
 
+        @Override
         public Object next() {
             if (!setIterator.hasNext()) {
                 setIterator = getSetIterator();
@@ -75,6 +79,7 @@
             return setIterator.next();
         }
 
+        @Override
         public void remove() {
             throw new UnsupportedOperationException();
         }
@@ -83,28 +88,34 @@
     /**
      *
      */
+    @Override
     public void clear() {
         m.clear();
     }
 
+    @Override
     public int size() {
         return size;
     }
 
+    @Override
     public boolean isEmpty() {
         return size == 0;
     }
 
+    @Override
     public boolean contains(Object o) {
         Set set = (Set) m.get(o);
         if (set == null) return false;
         return set.contains(o);
     }
 
+    @Override
     public Object[] toArray() {
         return toArray(new Object[size]);
     }
 
+    @Override
     public Object[] toArray(Object[] a) {
         int count = 0;
         for (Iterator it = iterator(); it.hasNext();) {
@@ -116,6 +127,7 @@
     /* (non-Javadoc)
      * @see java.util.Collection#remove(java.lang.Object)
      */
+    @Override
     public boolean remove(Object o) {
         Set set = (Set) m.get(o);
         if (set == null) return false;
@@ -125,6 +137,7 @@
         return true;
     }
 
+    @Override
     public boolean containsAll(Collection c) {
         for (Iterator it = c.iterator(); it.hasNext();) {
             if (!contains(it.next())) return false;
@@ -132,6 +145,7 @@
         return true;
     }
 
+    @Override
     public boolean addAll(Collection c) {
         boolean result = false;
         for (Iterator it = c.iterator(); it.hasNext();) {
@@ -140,6 +154,7 @@
         return result;
     }
 
+    @Override
     public boolean removeAll(Collection c) {
         boolean result = false;
         for (Iterator it = c.iterator(); it.hasNext();) {
@@ -148,6 +163,7 @@
         return result;
     }
 
+    @Override
     public boolean retainAll(Collection c) {
         // WARNING: this may not work if the comparator does not distinguish
         // all items that are equals().
diff --git a/tools/java/org/unicode/cldr/util/SpecialLocales.java b/tools/java/org/unicode/cldr/util/SpecialLocales.java
index 67261b4..9d2fe0d 100644
--- a/tools/java/org/unicode/cldr/util/SpecialLocales.java
+++ b/tools/java/org/unicode/cldr/util/SpecialLocales.java
@@ -11,6 +11,9 @@
 import java.util.Set;
 import java.util.TreeSet;
 
+import org.unicode.cldr.tool.CLDRFileTransformer;
+import org.unicode.cldr.tool.CLDRFileTransformer.LocaleTransform;
+
 import com.ibm.icu.util.ICUUncheckedIOException;
 
 /**
@@ -31,7 +34,7 @@
          * Locale may be modified by user. Contents aren't part of CLDR release and may change.
          */
         scratch
-    };
+    }
 
     /**
      * Get the type of this locale
@@ -89,10 +92,10 @@
         return singleton;
     }
 
-    private Map<CLDRLocale, Type> specials = new HashMap<CLDRLocale, Type>();
-    private Map<Type, Set<CLDRLocale>> types = new HashMap<Type, Set<CLDRLocale>>();
-    private Map<CLDRLocale, String> comments = new HashMap<CLDRLocale, String>();
-    private Set<CLDRLocale> specialsWildcards = new HashSet<CLDRLocale>();
+    private Map<CLDRLocale, Type> specials = new HashMap<>();
+    private Map<Type, Set<CLDRLocale>> types = new HashMap<>();
+    private Map<CLDRLocale, String> comments = new HashMap<>();
+    private Set<CLDRLocale> specialsWildcards = new HashSet<>();
 
     public Set<CLDRLocale> getByTypeInternal(Type t) {
         return types.get(t);
@@ -125,6 +128,23 @@
      * Internal constructor
      */
     private SpecialLocales() {
+        // First, read the algorithmic locales.
+        for(final LocaleTransform lt : CLDRFileTransformer.LocaleTransform.values()) {
+            if(lt.getPolicyIfExisting() != CLDRFileTransformer.PolicyIfExisting.DISCARD) {
+                continue;
+            }
+            // Add each of these as if they were in SpecialLocales.txt
+            CLDRLocale inputLocale = CLDRLocale.getInstance(lt.getInputLocale());
+            CLDRLocale outputLocale = CLDRLocale.getInstance(lt.getOutputLocale());
+
+            // add as readonly
+            addToType(Type.readonly, outputLocale);
+
+            // add similar comment to SpecialLocales.txt
+            comments.put(outputLocale, "@"+outputLocale.getBaseName()+" is generated from @"+inputLocale.getBaseName() +
+                " via transliteration, and so @@ may not be edited directly. Edit @"+inputLocale.getBaseName()+" to make changes.");
+        }
+
         // from StandardCodes.java
         String line;
         int ln = 0;
@@ -143,13 +163,13 @@
                 if (line.length() == 0)
                     continue;
                 List<String> stuff = CldrUtility.splitList(line, ';', true);
-                String id = (String) stuff.get(0);
+                String id = stuff.get(0);
                 boolean includeSublocs = (id.endsWith(INCLUDE_SUBLOCALES));
                 if (includeSublocs) {
                     id = id.substring(0, id.length() - INCLUDE_SUBLOCALES.length());
                 }
-                String type = (String) stuff.get(1);
-                String comment = (String) stuff.get(2);
+                String type = stuff.get(1);
+                String comment = stuff.get(2);
                 Type t = null;
 
                 // verify that the locale is valid
@@ -168,13 +188,7 @@
                         + line);
                 }
 
-                Set<CLDRLocale> s = types.get(t);
-                if (s == null) {
-                    s = new TreeSet<CLDRLocale>();
-                    types.put(t, s);
-                }
-                s.add(l);
-                specials.put(l, t);
+                addToType(t, l);
                 if (includeSublocs) {
                     specialsWildcards.add(l);
                 }
@@ -195,4 +209,15 @@
         types = Collections.unmodifiableMap(types);
     }
 
+    private Set<CLDRLocale> addToType(Type t, CLDRLocale l) {
+        Set<CLDRLocale> s = types.get(t);
+        if (s == null) {
+            s = new TreeSet<>();
+            types.put(t, s);
+        }
+        s.add(l);
+        specials.put(l, t);
+        return s;
+    }
+
 }
diff --git a/tools/java/org/unicode/cldr/util/SpreadSheet.java b/tools/java/org/unicode/cldr/util/SpreadSheet.java
index ae9ab93..1f32693 100644
--- a/tools/java/org/unicode/cldr/util/SpreadSheet.java
+++ b/tools/java/org/unicode/cldr/util/SpreadSheet.java
@@ -15,16 +15,19 @@
     }
 
     public static List<List<String>> convert(BufferedReader r) throws IOException {
-        List<List<String>> result = new ArrayList<List<String>>();
+        List<List<String>> result = new ArrayList<>();
         // boolean inQuote = false;
         while (true) {
             String line = r.readLine();
             if (line == null) break;
+            if (line.startsWith("#")) {
+                continue;
+            }
             if (DEBUG) {
                 System.out.println("Spreadsheet:\t" + line);
             }
             String[] parts = line.split("\t");
-            List<String> row = new ArrayList<String>(parts.length);
+            List<String> row = new ArrayList<>(parts.length);
             for (String part : parts) {
                 if (part.startsWith("\"") && part.endsWith("\"")) {
                     row.add(part.substring(1, part.length() - 1));
diff --git a/tools/java/org/unicode/cldr/util/StackTracker.java b/tools/java/org/unicode/cldr/util/StackTracker.java
index 18f4d96..7a026d5 100644
--- a/tools/java/org/unicode/cldr/util/StackTracker.java
+++ b/tools/java/org/unicode/cldr/util/StackTracker.java
@@ -33,7 +33,7 @@
  */
 @CLDRTool(alias = "test.stacktracker", description = "Test for StackTracker", hidden = "test")
 public class StackTracker implements Iterable<Object> {
-    private Hashtable<Object, String> stacks = new Hashtable<Object, String>();
+    private Hashtable<Object, String> stacks = new Hashtable<>();
 
     /**
      * Add object (i.e. added to cache)
diff --git a/tools/java/org/unicode/cldr/util/StandardCodes.java b/tools/java/org/unicode/cldr/util/StandardCodes.java
index 85d2964..9952e71 100644
--- a/tools/java/org/unicode/cldr/util/StandardCodes.java
+++ b/tools/java/org/unicode/cldr/util/StandardCodes.java
@@ -48,7 +48,7 @@
 public class StandardCodes {
 
     public enum CodeType {
-        language, script, territory, extlang, grandfathered, redundant, variant, currency, tzid;
+        language, script, territory, extlang, legacy, redundant, variant, currency, tzid;
         public static CodeType from(String name) {
             if ("region".equals(name)) {
                 return territory;
@@ -61,7 +61,7 @@
 
     private static final Set<String> TypeStringSet;
     static {
-        LinkedHashSet<String> foo = new LinkedHashSet<String>();
+        LinkedHashSet<String> foo = new LinkedHashSet<>();
         for (CodeType x : CodeType.values()) {
             foo.add(x.toString());
         }
@@ -74,18 +74,18 @@
 
     private static StandardCodes singleton;
 
-    private EnumMap<CodeType, Map<String, List<String>>> type_code_data = new EnumMap<CodeType, Map<String, List<String>>>(
+    private EnumMap<CodeType, Map<String, List<String>>> type_code_data = new EnumMap<>(
         CodeType.class);
 
-    private EnumMap<CodeType, Map<String, List<String>>> type_name_codes = new EnumMap<CodeType, Map<String, List<String>>>(
+    private EnumMap<CodeType, Map<String, List<String>>> type_name_codes = new EnumMap<>(
         CodeType.class);
 
-    private EnumMap<CodeType, Map<String, String>> type_code_preferred = new EnumMap<CodeType, Map<String, String>>(
+    private EnumMap<CodeType, Map<String, String>> type_code_preferred = new EnumMap<>(
         CodeType.class);
 
-    private Map<String, Set<String>> country_modernCurrency = new TreeMap<String, Set<String>>();
+    private Map<String, Set<String>> country_modernCurrency = new TreeMap<>();
 
-    private Map<CodeType, Set<String>> goodCodes = new TreeMap<CodeType, Set<String>>();
+    private Map<CodeType, Set<String>> goodCodes = new TreeMap<>();
 
     private static final boolean DEBUG = false;
 
@@ -177,7 +177,7 @@
         // position 2.
         if (data.size() < 3)
             return null;
-        String replacement = (String) data.get(2);
+        String replacement = data.get(2);
         if (!replacement.equals("") && !replacement.equals("--"))
             return replacement;
         return null;
@@ -193,7 +193,7 @@
      */
     @Deprecated
     public List<String> getCodes(String type, String data) {
-        return getCodes(CodeType.valueOf(type), data);
+        return getCodes(CodeType.from(type), data);
     }
 
     /**
@@ -212,7 +212,7 @@
      */
     @Deprecated
     public String getPreferred(String type, String code) {
-        return getPreferred(CodeType.valueOf(type), code);
+        return getPreferred(CodeType.from(type), code);
     }
 
     /**
@@ -284,10 +284,10 @@
                 SupplementalDataInfo sd = SupplementalDataInfo.getInstance();
                 if (code_name == null)
                     return null;
-                result = new TreeSet<String>(code_name.keySet());
+                result = new TreeSet<>(code_name.keySet());
                 switch (type) {
                 case currency:
-                    break; // nothing special                    
+                    break; // nothing special
                 case language:
                     return sd.getCLDRLanguageCodes();
                 case script:
@@ -296,7 +296,7 @@
                     break; // nothing special
                 default:
                     for (Iterator<String> it = result.iterator(); it.hasNext();) {
-                        String code = (String) it.next();
+                        String code = it.next();
                         if (code.equals("root") || code.equals("QO"))
                             continue;
                         List<String> data = getFullData(type, code);
@@ -323,7 +323,7 @@
     public Set<String> getGoodCountries() {
         synchronized (goodCodes) {
             if (GOOD_COUNTRIES == null) {
-                Set<String> temp = new LinkedHashSet<String>();
+                Set<String> temp = new LinkedHashSet<>();
                 for (String s : getGoodAvailableCodes(CodeType.territory)) {
                     if (isCountry(s)) {
                         temp.add(s);
@@ -342,8 +342,8 @@
         return country_modernCurrency.get(countryCode);
     }
 
-    private EnumMap<Organization, Map<String, Level>> platform_locale_level = null;
-    private EnumMap<Organization, Relation<Level, String>> platform_level_locale = null;
+    private Map<Organization, Map<String, Level>> platform_locale_level = null;
+    private Map<Organization, Relation<Level, String>> platform_level_locale = null;
     private Map<String, Map<String, String>> platform_locale_levelString = null;
 
 //    /**
@@ -364,6 +364,7 @@
 
     static Comparator caseless = new Comparator() {
 
+        @Override
         public int compare(Object arg0, Object arg1) {
             String s1 = (String) arg0;
             String s2 = (String) arg1;
@@ -378,6 +379,7 @@
      *
      * @deprecated
      */
+    @Deprecated
     public Map<Organization, Map<String, Level>> getLocaleTypes() {
         synchronized (StandardCodes.class) {
             if (platform_locale_level == null) {
@@ -492,7 +494,7 @@
     }
 
     public Set<String> getLocaleCoverageLocales(Organization organization, Set<Level> choice) {
-        Set<String> result = new LinkedHashSet<String>();
+        Set<String> result = new LinkedHashSet<>();
         for (String locale : getLocaleCoverageLocales(organization)) {
             if (choice.contains(getLocaleCoverageLevel(organization, locale))) {
                 result.add(locale);
@@ -503,7 +505,7 @@
 
     private void loadPlatformLocaleStatus() {
         LocaleIDParser parser = new LocaleIDParser();
-        platform_locale_level = new EnumMap<Organization, Map<String, Level>>(Organization.class);
+        platform_locale_level = new EnumMap<>(Organization.class);
         SupplementalDataInfo sd = SupplementalDataInfo.getInstance();
         Set<String> defaultContentLocales = sd.getDefaultContentLocales();
         String line;
@@ -531,7 +533,7 @@
                 }
 
                 // verify that the locale is valid BCP47
-                String locale = (String) stuff.get(1);
+                String locale = stuff.get(1);
                 if (!locale.equals("*")) {
                     parser.set(locale);
                     String valid = validate(parser);
@@ -546,13 +548,13 @@
                     }
                 }
 
-                Level status = Level.get((String) stuff.get(2));
+                Level status = Level.get(stuff.get(2));
                 if (status == Level.UNDETERMINED) {
                     System.out.println("Warning: Level unknown on: " + line);
                 }
                 Map<String, Level> locale_status = platform_locale_level.get(organization);
                 if (locale_status == null) {
-                    platform_locale_level.put(organization, locale_status = new TreeMap<String, Level>());
+                    platform_locale_level.put(organization, locale_status = new TreeMap<>());
                 }
                 locale_status.put(locale, status);
                 if (!locale.equals("*")) {
@@ -577,7 +579,7 @@
 
                 String language = parser.getLanguage();
                 if (!language.equals(locale)) {
-                    Level languageLevel = (Level) locale_level.get(language);
+                    Level languageLevel = locale_level.get(language);
                     if (languageLevel == null || languageLevel.compareTo(childLevel) < 0) {
                         locale_level.put(language, childLevel);
                     }
@@ -585,7 +587,7 @@
                 String oldLanguage = language;
                 language = parser.getLanguageScript();
                 if (!language.equals(oldLanguage)) {
-                    Level languageLevel = (Level) locale_level.get(language);
+                    Level languageLevel = locale_level.get(language);
                     if (languageLevel == null || languageLevel.compareTo(childLevel) < 0) {
                         locale_level.put(language, childLevel);
                     }
@@ -593,10 +595,10 @@
             }
         }
         // backwards compat hack
-        platform_locale_levelString = new TreeMap<String, Map<String, String>>();
+        platform_locale_levelString = new TreeMap<>();
         platform_level_locale = new EnumMap<>(Organization.class);
         for (Organization platform : platform_locale_level.keySet()) {
-            Map<String, String> locale_levelString = new TreeMap<String, String>();
+            Map<String, String> locale_levelString = new TreeMap<>();
             platform_locale_levelString.put(platform.toString(), locale_levelString);
             Map<String, Level> locale_level = platform_locale_level.get(platform);
             for (String locale : locale_level.keySet()) {
@@ -670,7 +672,7 @@
     // ========== PRIVATES ==========
 
     private StandardCodes() {
-        String[] files = { /* "lstreg.txt", */"ISO4217.txt" }; // , "TZID.txt"
+        String[] files = { "ISO4217.txt" }; // , "TZID.txt"
         type_code_preferred.put(CodeType.tzid, new TreeMap<String, String>());
         add(CodeType.language, "root", "Root");
         String originalLine = null;
@@ -738,10 +740,10 @@
                         if (type.equals("currency")) {
                             // currency | TPE | Timor Escudo | TP | EAST TIMOR | O
                             if (data.get(3).equals("C")) {
-                                String country = (String) data.get(1);
+                                String country = data.get(1);
                                 Set<String> codes = country_modernCurrency.get(country);
                                 if (codes == null) {
-                                    country_modernCurrency.put(country, codes = new TreeSet<String>());
+                                    country_modernCurrency.put(country, codes = new TreeSet<>());
                                 }
                                 codes.add(code);
                             }
@@ -753,7 +755,7 @@
                     // ArrayList());
                     String preferred = null;
                     for (int i = 0; i < pieces.size(); ++i) {
-                        code = (String) pieces.get(i);
+                        code = pieces.get(i);
                         add(type, code, data);
                         if (preferred == null)
                             preferred = code;
@@ -786,7 +788,7 @@
             Map<String, Map<String, String>> m = languageRegistry.get(type);
             for (String code : m.keySet()) {
                 Map<String, String> mm = m.get(code);
-                List<String> data = new ArrayList<String>(0);
+                List<String> data = new ArrayList<>(0);
                 data.add(mm.get("Description"));
                 data.add(mm.get("Added"));
                 String pref = mm.get("Preferred-Value");
@@ -849,7 +851,7 @@
      * @param string3
      */
     private void add(CodeType type, String string2, String string3) {
-        List<String> l = new ArrayList<String>();
+        List<String> l = new ArrayList<>();
         l.add(string3);
         add(type, string2, l);
     }
@@ -858,10 +860,10 @@
         // hack
         if (type == CodeType.script) {
             if (code.equals("Qaai")) {
-                otherData = new ArrayList<String>(otherData);
+                otherData = new ArrayList<>(otherData);
                 otherData.set(0, "Inherited");
             } else if (code.equals("Zyyy")) {
-                otherData = new ArrayList<String>(otherData);
+                otherData = new ArrayList<>(otherData);
                 otherData.set(0, "Common");
             }
         }
@@ -873,7 +875,7 @@
         // add to main list
         Map<String, List<String>> code_data = getCodeData(type);
         if (code_data == null) {
-            code_data = new TreeMap<String, List<String>>();
+            code_data = new TreeMap<>();
             type_code_data.put(type, code_data);
         }
         List<String> lastData = code_data.get(code);
@@ -886,12 +888,12 @@
         // now add mapping from name to codes
         Map<String, List<String>> name_codes = type_name_codes.get(type);
         if (name_codes == null) {
-            name_codes = new TreeMap<String, List<String>>();
+            name_codes = new TreeMap<>();
             type_name_codes.put(type, name_codes);
         }
         List<String> codes = name_codes.get(name);
         if (codes == null) {
-            codes = new ArrayList<String>();
+            codes = new ArrayList<>();
             name_codes.put(name, codes);
         }
         codes.add(code);
@@ -911,7 +913,7 @@
     public Map<String, List<String>> getWorldBankInfo() {
         if (WorldBankInfo == null) {
             List<String> temp = fillFromCommaFile("WorldBankInfo.txt", false);
-            WorldBankInfo = new HashMap<String, List<String>>();
+            WorldBankInfo = new HashMap<>();
             for (String line : temp) {
                 List<String> row = CldrUtility.splitList(line, ';', true);
                 String key = row.get(0);
@@ -928,7 +930,7 @@
     public Set<String> getMoribundLanguages() {
         if (moribundLanguages == null) {
             List<String> temp = fillFromCommaFile("moribund_languages.txt", true);
-            moribundLanguages = new TreeSet<String>();
+            moribundLanguages = new TreeSet<>();
             moribundLanguages.addAll(temp);
             moribundLanguages = CldrUtility.protectCollection(moribundLanguages);
         }
@@ -938,7 +940,7 @@
     // produces a list of the 'clean' lines
     private List<String> fillFromCommaFile(String filename, boolean trim) {
         try {
-            List<String> result = new ArrayList<String>();
+            List<String> result = new ArrayList<>();
             String line;
             BufferedReader lstreg = CldrUtility.getUTF8Data(filename);
             while (true) {
@@ -1024,17 +1026,19 @@
     static final String registryName = CldrUtility.getProperty("registry", "language-subtag-registry");
 
     public enum LstrType {
-        language("und", "zxx", "mul", "mis", "root"), 
-        script("Zzzz", "Zsym", "Zxxx", "Zmth"), 
-        region("ZZ"), 
-        variant(), 
-        extlang(true, false), 
-        grandfathered(true, false),
+        language("und", "zxx", "mul", "mis", "root"),
+        script("Zzzz", "Zsym", "Zxxx", "Zmth"),
+        region("ZZ"),
+        variant(),
+        extlang(true, false),
+        legacy(true, false),
         redundant(true, false),
         /** specialized codes for validity; TODO: rename LstrType **/
         currency(false, true, "XXX"),
         subdivision(false, true),
-        unit(false, true);
+        unit(false, true),
+        usage(false, true),
+        zone(false, true);
 
         public final Set<String> specials;
         public final String unknown;
@@ -1056,7 +1060,7 @@
             isUnicode = unicode;
         }
 
-        // 
+        //
         static final Pattern WELLFORMED = Pattern.compile("([0-9]{3}|[a-zA-Z]{2})[a-zA-Z0-9]{1,4}");
 
         boolean isWellFormed(String candidate) {
@@ -1068,8 +1072,30 @@
             }
         }
 
+        /**
+         * Generate compatibility string, returning 'territory' instead of 'region', etc.
+         */
         public String toCompatString() {
-            return this == region ? "territory" : toString();
+            switch (this) {
+            case region: return "territory";
+            case legacy: return "language";
+            case redundant: return "language";
+            default: return toString();
+            }
+        }
+
+        /**
+         * Create LstrType from string, allowing the compat string 'territory'.
+         */
+        public static LstrType fromString(String rawType) {
+            try {
+                return valueOf(rawType);
+            } catch (IllegalArgumentException e) {
+                if ("territory".equals(rawType)) {
+                    return region;
+                }
+                throw e;
+            }
         }
     }
 
@@ -1120,11 +1146,11 @@
     }
 
     private static void initLstr() {
-        Map<LstrType, Map<String, Map<LstrField, String>>> result2 = new TreeMap<LstrType, Map<String, Map<LstrField, String>>>();
+        Map<LstrType, Map<String, Map<LstrField, String>>> result2 = new TreeMap<>();
 
         int lineNumber = 1;
 
-        Set<String> funnyTags = new TreeSet<String>();
+        Set<String> funnyTags = new TreeSet<>();
         String line;
         try {
             BufferedReader lstreg = CldrUtility.getUTF8Data(registryName);
@@ -1180,9 +1206,11 @@
                 LstrField label = LstrField.from(line.substring(0, pos2));
                 String rest = line.substring(pos2 + 1).trim();
                 if (label == LstrField.Type) {
-                    subtagData = CldrUtility.get(result2, lastType = LstrType.valueOf(rest));
+                    lastType = rest.equals("grandfathered") ?
+                        LstrType.legacy : LstrType.fromString(rest);
+                    subtagData = CldrUtility.get(result2, lastType);
                     if (subtagData == null) {
-                        result2.put(LstrType.valueOf(rest), subtagData = new TreeMap<String, Map<LstrField, String>>());
+                        result2.put(lastType, subtagData = new TreeMap<>());
                     }
                 } else if (label == LstrField.Subtag
                     || label == LstrField.Tag) {
@@ -1194,7 +1222,7 @@
                         endTag = lastTag.substring(pos + 2);
                         lastTag = lastTag.substring(0, pos);
                     }
-                    currentData = new TreeMap<LstrField, String>();
+                    currentData = new TreeMap<>();
                     if (endTag == null) {
                         putSubtagData(lastTag, subtagData, currentData);
                         languageCount.add(lastType, 1);
@@ -1225,7 +1253,7 @@
                     //                        lastRest = translitCache.get(rest);
                     //                    }
                     lastRest = rest;
-                    String oldValue = (String) CldrUtility.get(currentData, lastLabel);
+                    String oldValue = CldrUtility.get(currentData, lastLabel);
                     if (oldValue != null) {
                         lastRest = oldValue + DESCRIPTION_SEPARATOR + lastRest;
                     }
@@ -1243,15 +1271,15 @@
             }
         }
         // copy raw
-        Map<LstrType, Map<String, Map<LstrField, String>>> rawLstreg = new TreeMap<LstrType, Map<String, Map<LstrField, String>>>();
+        Map<LstrType, Map<String, Map<LstrField, String>>> rawLstreg = new TreeMap<>();
         for (Entry<LstrType, Map<String, Map<LstrField, String>>> entry1 : result2.entrySet()) {
             LstrType key1 = entry1.getKey();
-            TreeMap<String, Map<LstrField, String>> raw1 = new TreeMap<String, Map<LstrField, String>>();
+            TreeMap<String, Map<LstrField, String>> raw1 = new TreeMap<>();
             rawLstreg.put(key1, raw1);
             for (Entry<String, Map<LstrField, String>> entry2 : entry1.getValue().entrySet()) {
                 String key2 = entry2.getKey();
                 final Map<LstrField, String> value2 = entry2.getValue();
-                TreeMap<LstrField, String> raw2 = new TreeMap<LstrField, String>();
+                TreeMap<LstrField, String> raw2 = new TreeMap<>();
                 raw2.putAll(value2);
                 raw1.put(key2, raw2);
             }
@@ -1260,11 +1288,11 @@
 
         // add extras
         for (int i = 0; i < extras.length; ++i) {
-            Map<String, Map<LstrField, String>> subtagData = CldrUtility.get(result2, LstrType.valueOf(extras[i][0]));
+            Map<String, Map<LstrField, String>> subtagData = CldrUtility.get(result2, LstrType.fromString(extras[i][0]));
             if (subtagData == null) {
-                result2.put(LstrType.valueOf(extras[i][0]), subtagData = new TreeMap<String, Map<LstrField, String>>());
+                result2.put(LstrType.fromString(extras[i][0]), subtagData = new TreeMap<>());
             }
-            Map<LstrField, String> labelData = new TreeMap<LstrField, String>();
+            Map<LstrField, String> labelData = new TreeMap<>();
             for (int j = 2; j < extras[i].length; j += 2) {
                 labelData.put(LstrField.from(extras[i][j]), extras[i][j + 1]);
             }
@@ -1282,12 +1310,12 @@
             subtagData.put(extras[i][1], labelData);
         }
         // build compatibility map
-        Map<String, Map<String, Map<String, String>>> result = new LinkedHashMap<String, Map<String, Map<String, String>>>();
+        Map<String, Map<String, Map<String, String>>> result = new LinkedHashMap<>();
         for (Entry<LstrType, Map<String, Map<LstrField, String>>> entry : result2.entrySet()) {
-            Map<String, Map<String, String>> copy2 = new LinkedHashMap<String, Map<String, String>>();
+            Map<String, Map<String, String>> copy2 = new LinkedHashMap<>();
             result.put(entry.getKey().toString(), copy2);
             for (Entry<String, Map<LstrField, String>> entry2 : entry.getValue().entrySet()) {
-                Map<String, String> copy3 = new LinkedHashMap<String, String>();
+                Map<String, String> copy3 = new LinkedHashMap<>();
                 copy2.put(entry2.getKey(), copy3);
                 for (Entry<LstrField, String> entry3 : entry2.getValue().entrySet()) {
                     copy3.put(entry3.getKey().toString(), entry3.getValue());
@@ -1310,7 +1338,7 @@
         return subtagData.put(lastTag, currentData);
     }
 
-    static Counter<LstrType> languageCount = new Counter<LstrType>();
+    static Counter<LstrType> languageCount = new Counter<>();
 
     public static Counter<LstrType> getLanguageCount() {
         return languageCount;
@@ -1339,6 +1367,7 @@
     /**
      * @deprecated
      */
+    @Deprecated
     public Map<String, List<ZoneLine>> getZone_rules() {
         return zoneParser.getZone_rules();
     }
@@ -1346,6 +1375,7 @@
     /**
      * @deprecated
      */
+    @Deprecated
     public Map<String, List<String>> getZoneData() {
         return zoneParser.getZoneData();
     }
@@ -1353,6 +1383,7 @@
     /**
      * @deprecated
      */
+    @Deprecated
     public Set<String> getCanonicalTimeZones() {
         return zoneParser.getZoneData().keySet();
     }
@@ -1360,6 +1391,7 @@
     /**
      * @deprecated
      */
+    @Deprecated
     public Map<String, Set<String>> getCountryToZoneSet() {
         return zoneParser.getCountryToZoneSet();
     }
@@ -1367,6 +1399,7 @@
     /**
      * @deprecated
      */
+    @Deprecated
     public List<String> getDeprecatedZoneIDs() {
         return zoneParser.getDeprecatedZoneIDs();
     }
@@ -1374,6 +1407,7 @@
     /**
      * @deprecated
      */
+    @Deprecated
     public Comparator<String> getTZIDComparator() {
         return zoneParser.getTZIDComparator();
     }
@@ -1381,6 +1415,7 @@
     /**
      * @deprecated
      */
+    @Deprecated
     public Map<String, Set<String>> getZoneLinkNew_OldSet() {
         return zoneParser.getZoneLinkNew_OldSet();
     }
@@ -1388,6 +1423,7 @@
     /**
      * @deprecated
      */
+    @Deprecated
     public Map<String, String> getZoneLinkold_new() {
         return zoneParser.getZoneLinkold_new();
     }
@@ -1395,6 +1431,7 @@
     /**
      * @deprecated
      */
+    @Deprecated
     public Map getZoneRuleID_rules() {
         return zoneParser.getZoneRuleID_rules();
     }
@@ -1402,6 +1439,7 @@
     /**
      * @deprecated
      */
+    @Deprecated
     public Map<String, String> getZoneToCounty() {
         return zoneParser.getZoneToCounty();
     }
@@ -1409,6 +1447,7 @@
     /**
      * @deprecated
      */
+    @Deprecated
     public String getZoneVersion() {
         return zoneParser.getVersion();
     }
diff --git a/tools/java/org/unicode/cldr/util/StateDictionary.java b/tools/java/org/unicode/cldr/util/StateDictionary.java
index dd3d682..10e7b2d 100644
--- a/tools/java/org/unicode/cldr/util/StateDictionary.java
+++ b/tools/java/org/unicode/cldr/util/StateDictionary.java
@@ -67,6 +67,7 @@
         return new StateMatcher();
     }
 
+    @Override
     public String toString() {
         StringBuilder result = new StringBuilder();
         // TreeSet<Row> rowSet = new TreeSet<Row>(builtRows);
@@ -74,9 +75,9 @@
             result.append(row.toString()).append(CldrUtility.LINE_SEPARATOR);
         }
         Map<T, Integer> map = builtResults.getValueMap();
-        Set<Pair<Integer, String>> sorted = new TreeSet<Pair<Integer, String>>();
+        Set<Pair<Integer, String>> sorted = new TreeSet<>();
         for (T item : map.keySet()) {
-            sorted.add(new Pair<Integer, String>(map.get(item), item.toString()));
+            sorted.add(new Pair<>(map.get(item), item.toString()));
         }
         for (Pair<Integer, String> pair : sorted) {
             result.append(pair.getFirst()).append("*=").append(pair.getSecond()).append(CldrUtility.LINE_SEPARATOR);
@@ -84,6 +85,7 @@
         return result.toString();
     }
 
+    @Override
     public Iterator<Entry<CharSequence, T>> getMapping() {
         // TODO Optimize this to only return the items on demand
         return new TextFetcher().getWords().entrySet().iterator();
@@ -132,7 +134,7 @@
 
         Uniqueness hasUniqueValue = Uniqueness.UNKNOWN;
 
-        final TreeMap<Byte, Cell> byteToCell = new TreeMap<Byte, Cell>();
+        final TreeMap<Byte, Cell> byteToCell = new TreeMap<>();
 
         // keeps track of the number of cells with returns
         transient int returnCount;
@@ -166,6 +168,7 @@
             return result;
         }
 
+        @Override
         public int compareTo(Object o) {
             Row other = (Row) o;
             int result;
@@ -197,11 +200,12 @@
             return referenceNumber - other.referenceNumber;
         }
 
+        @Override
         public String toString() {
             StringBuilder buffer = new StringBuilder();
             buffer.append("R" + getReferenceNumber() + hasUniqueValue.debugName() + "{");
             boolean first = true;
-            Set<Byte> sorted = new TreeSet<Byte>(unsignedByteComparator);
+            Set<Byte> sorted = new TreeSet<>(unsignedByteComparator);
             sorted.addAll(byteToCell.keySet());
             for (Byte key : sorted) {
                 if (first) {
@@ -258,6 +262,7 @@
             return StateDictionary.addBytes(rowOffset, target, pos);
         }
 
+        @Override
         public String toString() {
             String result = deltaResult == 0 ? "" : String.valueOf(deltaResult);
             if (returns) {
@@ -310,6 +315,7 @@
 
         private int partialMatchValue;
 
+        @Override
         public Status next() {
             if (SHOW_DEBUG) {
                 System.out.println("NEXT: " + this);
@@ -410,6 +416,7 @@
             return matchIntValue;
         }
 
+        @Override
         public boolean nextUniquePartial() {
             if (partialLastRow.hasUniqueValue == Uniqueness.UNIQUE) {
                 matchValue = builtResults.get(partialMatchValue);
@@ -427,6 +434,7 @@
 
     static final Comparator<Byte> unsignedByteComparator = new Comparator<Byte>() {
 
+        @Override
         public int compare(Byte o1, Byte o2) {
             int b1 = o1 & 0xFF;
             int b2 = o2 & 0xFF;
@@ -437,6 +445,7 @@
 
     static final Comparator<Row> rowComparator = new Comparator<Row>() {
 
+        @Override
         public int compare(Row row1, Row row2) {
             if (row1 == row2) {
                 return 0;
@@ -497,7 +506,7 @@
 
     private class TextFetcher {
 
-        Map<CharSequence, T> result = new TreeMap<CharSequence, T>();
+        Map<CharSequence, T> result = new TreeMap<>();
 
         byte[] soFar = new byte[builtMaxByteLength];
 
@@ -507,7 +516,7 @@
 
         StringBuilder debugTreeView = new StringBuilder();
 
-        private HashSet<Row> rowsSeen = new HashSet<Row>();
+        private HashSet<Row> rowsSeen = new HashSet<>();
 
         public Map<CharSequence, T> getWords() {
             result.clear();
@@ -517,7 +526,7 @@
 
         public String debugShow() {
             rowsSeen.clear();
-            Counter<Integer> debugCounter = new Counter<Integer>();
+            Counter<Integer> debugCounter = new Counter<>();
             getDebugWords(0, 0, builtBaseRow, Integer.MAX_VALUE);
             for (Row row : builtRows) {
                 debugCounter.add(row.byteToCell.size(), 1);
@@ -543,7 +552,7 @@
                 rowsSeen.add(row);
             }
             // walk through the cells, display and recurse
-            Set<Byte> sorted = new TreeSet<Byte>(unsignedByteComparator);
+            Set<Byte> sorted = new TreeSet<>(unsignedByteComparator);
             sorted.addAll(row.byteToCell.keySet());
             for (Byte key : sorted) {
                 Cell cell = row.byteToCell.get(key);
@@ -605,7 +614,7 @@
      *
      */
     public void flatten() {
-        TreeSet<Row> s = new TreeSet<Row>(builtRows);
+        TreeSet<Row> s = new TreeSet<>(builtRows);
         int count = 0;
         int oldDepth = 999;
         String oldCell = "";
diff --git a/tools/java/org/unicode/cldr/util/StateDictionaryBuilder.java b/tools/java/org/unicode/cldr/util/StateDictionaryBuilder.java
index 39b0fad..a8f18b0 100644
--- a/tools/java/org/unicode/cldr/util/StateDictionaryBuilder.java
+++ b/tools/java/org/unicode/cldr/util/StateDictionaryBuilder.java
@@ -46,7 +46,7 @@
     // new ByteString(false); // new
     // ByteString(true); //
 
-    private IntMapFactory<T> intMapFactory = new BasicIntMapFactory<T>();
+    private IntMapFactory<T> intMapFactory = new BasicIntMapFactory<>();
 
     /**
      * Get/set the IntMapFactory used to store the values for T. The default is BasicIntMapFactory.
@@ -85,17 +85,18 @@
      * @param source
      * @return
      */
+    @Override
     public StateDictionary<T> make(Map<CharSequence, T> source) {
         // clear out state
         buildingCurrentAddRow = null;
         builtTotalBytes = builtTotalStrings = builtMaxByteLength = 0;
-        builtRows = new ArrayList<Row>();
+        builtRows = new ArrayList<>();
         builtBaseRow = makeRow();
         builtResults = intMapFactory.make(source.values());
         if (SHOW_SIZE) System.out.println("***VALUE STORAGE: " + builtResults.approximateStorage());
 
         Map<T, Integer> valueToInt = builtResults.getValueMap();
-        Map<byte[], Integer> sorted = new TreeMap<byte[], Integer>(SHORTER_BYTE_ARRAY_COMPARATOR);
+        Map<byte[], Integer> sorted = new TreeMap<>(SHORTER_BYTE_ARRAY_COMPARATOR);
         for (CharSequence text : source.keySet()) {
             sorted.put(byteConverter.toBytes(text), valueToInt.get(source.get(text)));
         }
@@ -106,9 +107,9 @@
 
         // now compact the rows
         // first find out which rows are equivalent (recursively)
-        Map<Row, Row> replacements = new HashMap<Row, Row>();
+        Map<Row, Row> replacements = new HashMap<>();
         {
-            Map<Row, Row> equivalents = new TreeMap<Row, Row>(StateDictionary.rowComparator);
+            Map<Row, Row> equivalents = new TreeMap<>(StateDictionary.rowComparator);
             for (Row row : builtRows) {
                 Row cardinal = equivalents.get(row);
                 if (cardinal == null) {
@@ -131,7 +132,7 @@
             }
         }
         // now compact the rows array
-        ArrayList<Row> newRows = new ArrayList<Row>();
+        ArrayList<Row> newRows = new ArrayList<>();
         for (Row row : builtRows) {
             if (!replacements.containsKey(row)) {
                 newRows.add(row);
@@ -141,7 +142,7 @@
         setUniqueValues(builtBaseRow);
         builtRows = newRows;
         if (SHOW_SIZE) System.out.println("***ROWS: " + builtRows.size());
-        return new StateDictionary<T>(builtBaseRow, builtRows, builtResults, builtMaxByteLength, byteConverter);
+        return new StateDictionary<>(builtBaseRow, builtRows, builtResults, builtMaxByteLength, byteConverter);
     }
 
     private Row makeRow() {
@@ -237,6 +238,7 @@
 
     static final Comparator<byte[]> SHORTER_BYTE_ARRAY_COMPARATOR = new Comparator<byte[]>() {
 
+        @Override
         public int compare(byte[] o1, byte[] o2) {
             int minLen = o1.length;
             if (minLen > o2.length) {
diff --git a/tools/java/org/unicode/cldr/util/StringId.java b/tools/java/org/unicode/cldr/util/StringId.java
index d7e83f3..6f573c1 100644
--- a/tools/java/org/unicode/cldr/util/StringId.java
+++ b/tools/java/org/unicode/cldr/util/StringId.java
@@ -14,8 +14,8 @@
  * @author markdavis
  */
 public final class StringId {
-    private static final Map<String, Long> STRING_TO_ID = new ConcurrentHashMap<String, Long>();
-    private static final Map<Long, String> ID_TO_STRING = new ConcurrentHashMap<Long, String>();
+    private static final Map<String, Long> STRING_TO_ID = new ConcurrentHashMap<>();
+    private static final Map<Long, String> ID_TO_STRING = new ConcurrentHashMap<>();
     private static final MessageDigest digest;
     private static final Charset UTF_8 = Charset.forName("UTF-8");
     private static final int RETRY_LIMIT = 9;
diff --git a/tools/java/org/unicode/cldr/util/StringRange.java b/tools/java/org/unicode/cldr/util/StringRange.java
index c846f73..36d5f8a 100644
--- a/tools/java/org/unicode/cldr/util/StringRange.java
+++ b/tools/java/org/unicode/cldr/util/StringRange.java
@@ -120,7 +120,6 @@
                 }
             }
         }
-        ;
         return ranges;
     }
 
diff --git a/tools/java/org/unicode/cldr/util/StripUTF8BOMInputStream.java b/tools/java/org/unicode/cldr/util/StripUTF8BOMInputStream.java
index ee91116..eca3a4b 100644
--- a/tools/java/org/unicode/cldr/util/StripUTF8BOMInputStream.java
+++ b/tools/java/org/unicode/cldr/util/StripUTF8BOMInputStream.java
@@ -10,11 +10,11 @@
 import java.io.IOException;
 import java.io.InputStream;
 
-class StripUTF8BOMInputStream extends InputStream {
+public class StripUTF8BOMInputStream extends InputStream {
     InputStream base;
 
-    StripUTF8BOMInputStream(InputStream base) {
-        this.base = base;
+    public StripUTF8BOMInputStream(InputStream base) {
+        this.base = InputStreamFactory.buffer(base);
     }
 
     boolean checkForUTF8BOM = true;
@@ -24,6 +24,7 @@
      *
      * @see java.io.InputStream#read()
      */
+    @Override
     public int read() throws IOException {
         int result = base.read();
         if (!checkForUTF8BOM) return result;
@@ -37,4 +38,13 @@
         return result;
     }
 
+    @Override
+    public void close() throws IOException {
+        super.close();
+        if (base != null) {
+            base.close();
+            base = null;
+        }
+    }
+
 }
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/util/SupplementalDataInfo.java b/tools/java/org/unicode/cldr/util/SupplementalDataInfo.java
index 5b87847..f1056a7 100644
--- a/tools/java/org/unicode/cldr/util/SupplementalDataInfo.java
+++ b/tools/java/org/unicode/cldr/util/SupplementalDataInfo.java
@@ -1,7 +1,8 @@
 package org.unicode.cldr.util;
 
+import static org.unicode.cldr.util.PathUtilities.getNormalizedPathString;
+
 import java.io.File;
-import java.io.IOException;
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -44,13 +45,13 @@
 import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo.Count;
 import org.unicode.cldr.util.Validity.Status;
 
+import com.google.common.base.Joiner;
 import com.google.common.base.Splitter;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSetMultimap;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.TreeMultimap;
-import com.ibm.icu.dev.util.CollectionUtilities;
 import com.ibm.icu.impl.IterableComparator;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.impl.Row;
@@ -94,6 +95,8 @@
     private static final StandardCodes sc = StandardCodes.make();
     private static final String UNKNOWN_SCRIPT = "Zzzz";
 
+    public static final Splitter split_space = Splitter.on(' ').omitEmptyStrings();
+
     // TODO add structure for items shown by TestSupplementalData to be missing
     /*
      * [calendarData/calendar,
@@ -136,7 +139,7 @@
         public boolean isOfficial() {
             return compareTo(OfficialStatus.official_regional) >= 0;
         }
-    };
+    }
 
     /**
      * Population data for different languages.
@@ -230,6 +233,7 @@
             gdp += other.gdp;
         }
 
+        @Override
         public String toString() {
             return MessageFormat
                 .format(
@@ -239,15 +243,18 @@
 
         private boolean frozen;
 
+        @Override
         public boolean isFrozen() {
             return frozen;
         }
 
+        @Override
         public PopulationData freeze() {
             frozen = true;
             return this;
         }
 
+        @Override
         public PopulationData cloneAsThawed() {
             throw new UnsupportedOperationException("not yet implemented");
         }
@@ -284,7 +291,7 @@
     com.ibm.icu.util.Freezable<BasicLanguageData> {
         public enum Type {
             primary, secondary
-        };
+        }
 
         private Type type = Type.primary;
 
@@ -365,13 +372,15 @@
             + (type == Type.primary ? "" : " alt=\"" + type + "\"") + "/>";
         }
 
+        @Override
         public String toString() {
             return "[" + type
-                + (scripts.isEmpty() ? "" : "; scripts=" + CollectionUtilities.join(scripts, " "))
-                + (scripts.isEmpty() ? "" : "; territories=" + CollectionUtilities.join(territories, " "))
+                + (scripts.isEmpty() ? "" : "; scripts=" + Joiner.on(" ").join(scripts))
+                + (scripts.isEmpty() ? "" : "; territories=" + Joiner.on(" ").join(territories))
                 + "]";
         }
 
+        @Override
         public int compareTo(BasicLanguageData o) {
             int result;
             if (0 != (result = type.compareTo(o.type)))
@@ -383,6 +392,7 @@
             return 0;
         }
 
+        @Override
         public boolean equals(Object input) {
             return compareTo((BasicLanguageData) input) == 0;
         }
@@ -399,7 +409,7 @@
                 throw new IllegalArgumentException("Illegal Script: " + script);
             }
             if (scripts == Collections.EMPTY_SET) {
-                scripts = new TreeSet<String>();
+                scripts = new TreeSet<>();
             }
             scripts.add(script);
             return this;
@@ -411,7 +421,7 @@
                 throw new IllegalArgumentException("Illegal Territory: " + territory);
             }
             if (territories == Collections.EMPTY_SET) {
-                territories = new TreeSet<String>();
+                territories = new TreeSet<>();
             }
             territories.add(territory);
             return this;
@@ -419,10 +429,12 @@
 
         boolean frozen = false;
 
+        @Override
         public boolean isFrozen() {
             return frozen;
         }
 
+        @Override
         public BasicLanguageData freeze() {
             frozen = true;
             if (scripts != Collections.EMPTY_SET) {
@@ -434,8 +446,12 @@
             return this;
         }
 
+        @Override
         public BasicLanguageData cloneAsThawed() {
-            throw new UnsupportedOperationException();
+            BasicLanguageData result = new BasicLanguageData();
+            result.scripts = new TreeSet<>(scripts);
+            result.territories = new TreeSet<>(territories);
+            return this;
         }
 
         public void addScripts(Set<String> scripts2) {
@@ -482,7 +498,7 @@
     public static class NumberingSystemInfo {
         public enum NumberingSystemType {
             algorithmic, numeric, unknown
-        };
+        }
 
         public final String name;
         public final NumberingSystemType type;
@@ -555,6 +571,7 @@
             throw new IllegalArgumentException(e2);
         }
 
+        @Override
         public String toString() {
             return "{" + formatDate(from)
             + ", "
@@ -618,12 +635,14 @@
             return isLegalTender;
         }
 
+        @Override
         public int compareTo(CurrencyDateInfo o) {
             int result = dateRange.compareTo(o.dateRange);
             if (result != 0) return result;
             return currency.compareTo(o.currency);
         }
 
+        @Override
         public String toString() {
             return "{" + dateRange + ", " + currency + "}";
         }
@@ -658,6 +677,7 @@
             return metazone.compareTo(arg0.metazone);
         }
 
+        @Override
         public String toString() {
             return "{" + dateRange + ", " + metazone + "}";
         }
@@ -733,6 +753,7 @@
             return errors;
         }
 
+        @Override
         public boolean equals(Object o) {
             if (!(o instanceof TelephoneCodeInfo))
                 return false;
@@ -740,10 +761,12 @@
             return tc.code.equals(code) && tc.start.equals(start) && tc.end.equals(end) && tc.alt.equals(alt);
         }
 
+        @Override
         public int hashCode() {
             return 31 * code.hashCode() + start.hashCode() + end.hashCode() + alt.hashCode();
         }
 
+        @Override
         public int compareTo(TelephoneCodeInfo o) {
             int result = code.compareTo(o.code);
             if (result != 0) return result;
@@ -754,6 +777,7 @@
             return alt.compareTo(o.alt);
         }
 
+        @Override
         public String toString() {
             return "{" + code + ", " + formatDate(start) + ", " + formatDate(end) + ", " + alt + "}";
         }
@@ -791,12 +815,13 @@
             if (source == null) {
                 return null;
             }
-            Set<String> result = new HashSet<String>(Arrays.asList(NON_ASCII_LETTER.split(source)));
+            Set<String> result = new HashSet<>(Arrays.asList(NON_ASCII_LETTER.split(source)));
             result.remove("");
             inTerritorySetInternal = result;
             return Collections.unmodifiableSet(result);
         }
 
+        @Override
         public int compareTo(CoverageLevelInfo o) {
             if (value == o.value) {
                 return match.compareTo(o.match);
@@ -815,19 +840,21 @@
             }
         }
     }
-    
+
+    public enum RBNFGroup {SpelloutRules, OrdinalRules, NumberingSystemRules}
+
     public static final String STAR = "*";
     public static final Set<String> STAR_SET = Builder.with(new HashSet<String>()).add("*").freeze();
 
     private VersionInfo cldrVersion;
 
-    private Map<String, PopulationData> territoryToPopulationData = new TreeMap<String, PopulationData>();
+    private Map<String, PopulationData> territoryToPopulationData = new TreeMap<>();
 
-    private Map<String, Map<String, PopulationData>> territoryToLanguageToPopulationData = new TreeMap<String, Map<String, PopulationData>>();
+    private Map<String, Map<String, PopulationData>> territoryToLanguageToPopulationData = new TreeMap<>();
 
-    private Map<String, PopulationData> languageToPopulation = new TreeMap<String, PopulationData>();
+    private Map<String, PopulationData> languageToPopulation = new TreeMap<>();
 
-    private Map<String, PopulationData> baseLanguageToPopulation = new TreeMap<String, PopulationData>();
+    private Map<String, PopulationData> baseLanguageToPopulation = new TreeMap<>();
 
     private Relation<String, String> languageToScriptVariants = Relation.of(new TreeMap<String, Set<String>>(),
         TreeSet.class);
@@ -838,10 +865,10 @@
     transient private Relation<String, Pair<Boolean, Pair<Double, String>>> languageToTerritories2 = Relation
         .of(new TreeMap<String, Set<Pair<Boolean, Pair<Double, String>>>>(), TreeSet.class);
 
-    private Map<String, Map<BasicLanguageData.Type, BasicLanguageData>> languageToBasicLanguageData = new TreeMap<String, Map<BasicLanguageData.Type, BasicLanguageData>>();
+    private Map<String, Map<BasicLanguageData.Type, BasicLanguageData>> languageToBasicLanguageData = new TreeMap<>();
 
-    private Set<String> allLanguages = new TreeSet<String>();
-    final private List<String> approvalRequirements = new LinkedList<String>(); // xpath array
+    private Set<String> allLanguages = new TreeSet<>();
+    final private List<String> approvalRequirements = new LinkedList<>(); // xpath array
 
     private Relation<String, String> containment = Relation.of(new LinkedHashMap<String, Set<String>>(),
         LinkedHashSet.class);
@@ -854,28 +881,28 @@
     private Relation<String, String> containerToSubdivision = Relation.of(new LinkedHashMap<String, Set<String>>(),
         LinkedHashSet.class);
 
-    private Map<String, CurrencyNumberInfo> currencyToCurrencyNumberInfo = new TreeMap<String, CurrencyNumberInfo>();
+    private Map<String, CurrencyNumberInfo> currencyToCurrencyNumberInfo = new TreeMap<>();
 
     private Relation<String, CurrencyDateInfo> territoryToCurrencyDateInfo = Relation.of(
         new TreeMap<String, Set<CurrencyDateInfo>>(), LinkedHashSet.class);
 
-    private Map<String, Set<TelephoneCodeInfo>> territoryToTelephoneCodeInfo = new TreeMap<String, Set<TelephoneCodeInfo>>();
+    private Map<String, Set<TelephoneCodeInfo>> territoryToTelephoneCodeInfo = new TreeMap<>();
 
-    private Set<String> multizone = new TreeSet<String>();
+    private Set<String> multizone = new TreeSet<>();
 
-    private Map<String, String> zone_territory = new TreeMap<String, String>();
+    private Map<String, String> zone_territory = new TreeMap<>();
 
     private Relation<String, String> zone_aliases = Relation
         .of(new TreeMap<String, Set<String>>(), LinkedHashSet.class);
 
-    private Map<String, Map<String, Map<String, String>>> typeToZoneToRegionToZone = new TreeMap<String, Map<String, Map<String, String>>>();
+    private Map<String, Map<String, Map<String, String>>> typeToZoneToRegionToZone = new TreeMap<>();
     private Relation<String, MetaZoneRange> zoneToMetaZoneRanges = Relation.of(
         new TreeMap<String, Set<MetaZoneRange>>(), TreeSet.class);
 
-    private Map<String, String> metazoneContinentMap = new HashMap<String, String>();
-    private Set<String> allMetazones = new TreeSet<String>();
+    private Map<String, String> metazoneContinentMap = new HashMap<>();
+    private Set<String> allMetazones = new TreeSet<>();
 
-    private Map<String, String> alias_zone = new TreeMap<String, String>();
+    private Map<String, String> alias_zone = new TreeMap<>();
 
     public Relation<String, Integer> numericTerritoryMapping = Relation.of(new HashMap<String, Set<Integer>>(),
         HashSet.class);
@@ -886,41 +913,44 @@
     public Relation<String, Integer> numericCurrencyCodeMapping = Relation.of(new HashMap<String, Set<Integer>>(),
         HashSet.class);
 
-    static Map<String, SupplementalDataInfo> directory_instance = new HashMap<String, SupplementalDataInfo>();
+    static Map<String, SupplementalDataInfo> directory_instance = new HashMap<>();
 
-    public Map<String, Map<String, Row.R2<List<String>, String>>> typeToTagToReplacement = new TreeMap<String, Map<String, Row.R2<List<String>, String>>>();
+    public Map<String, Map<String, Row.R2<List<String>, String>>> typeToTagToReplacement = new TreeMap<>();
 
-    Map<String, List<Row.R4<String, String, Integer, Boolean>>> languageMatch = new HashMap<String, List<Row.R4<String, String, Integer, Boolean>>>();
+    Map<String, List<Row.R4<String, String, Integer, Boolean>>> languageMatch = new HashMap<>();
 
     public Relation<String, String> bcp47Key2Subtypes = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
     public Relation<String, String> bcp47Extension2Keys = Relation
         .of(new TreeMap<String, Set<String>>(), TreeSet.class);
     public Relation<Row.R2<String, String>, String> bcp47Aliases = Relation.of(
         new TreeMap<Row.R2<String, String>, Set<String>>(), LinkedHashSet.class);
-    public Map<Row.R2<String, String>, String> bcp47Descriptions = new TreeMap<Row.R2<String, String>, String>();
-    public Map<Row.R2<String, String>, String> bcp47Since = new TreeMap<Row.R2<String, String>, String>();
-    public Map<Row.R2<String, String>, String> bcp47Preferred = new TreeMap<Row.R2<String, String>, String>();
-    public Map<Row.R2<String, String>, String> bcp47Deprecated = new TreeMap<Row.R2<String, String>, String>();
-    public Map<String, String> bcp47ValueType = new TreeMap<String, String>();
-    
+    public Map<Row.R2<String, String>, String> bcp47Descriptions = new TreeMap<>();
+    public Map<Row.R2<String, String>, String> bcp47Since = new TreeMap<>();
+    public Map<Row.R2<String, String>, String> bcp47Preferred = new TreeMap<>();
+    public Map<Row.R2<String, String>, String> bcp47Deprecated = new TreeMap<>();
+    public Map<String, String> bcp47ValueType = new TreeMap<>();
 
-    public Map<String, Row.R2<String, String>> validityInfo = new LinkedHashMap<String, Row.R2<String, String>>();
+
+    public Map<String, Row.R2<String, String>> validityInfo = new LinkedHashMap<>();
     public Map<AttributeValidityInfo, String> attributeValidityInfo = new LinkedHashMap<>();
 
     public Multimap<String, String> languageGroups = TreeMultimap.create();
-    
-    public RationalParser rationalParser = new RationalParser();
-    public UnitConverter unitConverter = new UnitConverter(rationalParser);
-    
-    public UnitPreferences unitPreferences = new UnitPreferences();
 
+    public RationalParser rationalParser = new RationalParser();
+
+    private UnitConverter unitConverter = null;
+
+    private final UnitPreferences unitPreferences = new UnitPreferences();
+
+    public Map<String, GrammarInfo> grammarLocaleToTargetToFeatureToValues = new TreeMap<>();
+    public Map<String, GrammarDerivation> localeToGrammarDerivation = new TreeMap<>();
 
     public enum MeasurementType {
         measurementSystem, paperSize
     }
 
-    Map<MeasurementType, Map<String, String>> measurementData = new HashMap<MeasurementType, Map<String, String>>();
-    Map<String, PreferredAndAllowedHour> timeData = new HashMap<String, PreferredAndAllowedHour>();
+    Map<MeasurementType, Map<String, String>> measurementData = new HashMap<>();
+    Map<String, PreferredAndAllowedHour> timeData = new HashMap<>();
 
     public Relation<String, String> getAlpha3TerritoryMapping() {
         return alpha3TerritoryMapping;
@@ -948,11 +978,7 @@
     }
 
     public static SupplementalDataInfo getInstance(File supplementalDirectory) {
-        try {
-            return getInstance(supplementalDirectory.getCanonicalPath());
-        } catch (IOException e) {
-            throw new ICUUncheckedIOException(e);
-        }
+        return getInstance(getNormalizedPathString(supplementalDirectory));
     }
 
     static private SupplementalDataInfo defaultInstance = null;
@@ -960,6 +986,7 @@
      * Which directory did we come from?
      */
     final private File directory;
+    private Validity validity;
 
     /**
      * Get an instance chosen using setAsDefaultInstance(), otherwise return an instance using the default directory
@@ -992,18 +1019,13 @@
                 throw new IllegalArgumentException("Error: The string passed as a parameter resolves to the empty string.");
             }
             // canonicalize path
-            String canonicalpath = null;
-            try {
-                canonicalpath = new File(supplementalDirectory).getCanonicalPath();
-            } catch (IOException e) {
-                throw new ICUUncheckedIOException(e);
-            }
-            SupplementalDataInfo instance = directory_instance.get(canonicalpath);
+            String normalizedPath = getNormalizedPathString(supplementalDirectory);
+            SupplementalDataInfo instance = directory_instance.get(normalizedPath);
             if (instance != null) {
                 return instance;
             }
             // reaching here means we have not cached the entry
-            File directory = new File(canonicalpath);
+            File directory = new File(normalizedPath);
             instance = new SupplementalDataInfo(directory);
             MyHandler myHandler = instance.new MyHandler();
             XMLFileReader xfr = new XMLFileReader().setHandler(myHandler);
@@ -1026,10 +1048,7 @@
             builder.addAll(files2);
             for (File file : builder.get()) {
                 if (DEBUG) {
-                    try {
-                        System.out.println(file.getCanonicalPath());
-                    } catch (IOException e) {
-                    }
+                    System.out.println(getNormalizedPathString(file));
                 }
                 String name = file.toString();
                 String shortName = file.getName();
@@ -1041,14 +1060,14 @@
             }
 
             // xfr = new XMLFileReader().setHandler(instance.new MyHandler());
-            // .xfr.read(canonicalpath + "/supplementalMetadata.xml", -1, true);
+            // .xfr.read(normalizedPath + "/supplementalMetadata.xml", -1, true);
 
             instance.makeStuffSafe();
             // cache
             //            directory_instance.put(supplementalDirectory, instance);
-            directory_instance.put(canonicalpath, instance);
-            //            if (!canonicalpath.equals(supplementalDirectory)) {
-            //                directory_instance.put(canonicalpath, instance);
+            directory_instance.put(normalizedPath, instance);
+            //            if (!normalizedPath.equals(supplementalDirectory)) {
+            //                directory_instance.put(normalizedPath, instance);
             //            }
             return instance;
         }
@@ -1060,7 +1079,8 @@
 
     private SupplementalDataInfo(File directory) {
         this.directory = directory;
-    }; // hide
+        this.validity = Validity.getInstance(directory.toString() + "/../validity/");
+    } // hide
 
     private void makeStuffSafe() {
         // now make stuff safe
@@ -1152,7 +1172,7 @@
         coverageLevels = Collections.unmodifiableSortedSet(coverageLevels);
 
         measurementData = CldrUtility.protectCollection(measurementData);
-        
+
         final Map<String, R2<List<String>, String>> unitAliases = typeToTagToReplacement.get("unit");
         if (unitAliases != null) { // don't load unless the information is there (for old releases);
             unitConverter.addAliases(unitAliases);
@@ -1160,7 +1180,7 @@
         unitConverter.freeze();
         rationalParser.freeze();
         unitPreferences.freeze();
-        
+
         timeData = CldrUtility.protectCollection(timeData);
 
         validityInfo = CldrUtility.protectCollection(validityInfo);
@@ -1168,6 +1188,9 @@
         parentLocales = Collections.unmodifiableMap(parentLocales);
         languageGroups = ImmutableSetMultimap.copyOf(languageGroups);
 
+        grammarLocaleToTargetToFeatureToValues = CldrUtility.protectCollection(grammarLocaleToTargetToFeatureToValues);
+        localeToGrammarDerivation = CldrUtility.protectCollection(localeToGrammarDerivation);
+
         ImmutableSet.Builder<String> newScripts = ImmutableSet.<String> builder();
         Map<Validity.Status, Set<String>> scripts = Validity.getInstance().getStatusToCodes(LstrType.script);
         for (Entry<Status, Set<String>> e : scripts.entrySet()) {
@@ -1202,6 +1225,7 @@
             lastPluralLocales = "";
         }
 
+        @Override
         public void handlePathValue(String path, String value) {
             try {
                 XPathParts parts = XPathParts.getFrozenInstance(path);
@@ -1251,7 +1275,7 @@
                     if (handleCurrencyData(level2, parts)) {
                         return;
                     }
-                 } else if ("metazoneInfo".equals(level2)) {
+                } else if ("metazoneInfo".equals(level2)) {
                     if (handleMetazoneInfo(level3, parts)) {
                         return;
                     }
@@ -1272,7 +1296,7 @@
                 } else if (level1.equals("references")) {
                     String type = parts.getAttributeValue(-1, "type");
                     String uri = parts.getAttributeValue(-1, "uri");
-                    references.put(type, new Pair<String, String>(uri, value).freeze());
+                    references.put(type, new Pair<>(uri, value).freeze());
                     return;
                 } else if (level1.equals("likelySubtags")) {
                     handleLikelySubtags(parts);
@@ -1326,6 +1350,10 @@
                     if (handleLanguageGroups(value, parts)) {
                         return;
                     }
+                } else if (level1.contentEquals("grammaticalData")) {
+                    if (handleGrammaticalData(value, parts)) {
+                        return;
+                    }
                 }
 
                 // capture elements we didn't look at, since we should cover everything.
@@ -1335,19 +1363,66 @@
                 if (!skippedElements.contains(skipKey)) {
                     skippedElements.add(skipKey);
                 }
-                // System.out.println("Skipped Element: " + path);
+                //System.out.println("Skipped Element: " + path);
             } catch (Exception e) {
                 throw (IllegalArgumentException) new IllegalArgumentException("Exception while processing path: "
                     + path + ",\tvalue: " + value).initCause(e);
             }
         }
 
+        private boolean handleGrammaticalData(String value, XPathParts parts) {
+            /*
+            <!ATTLIST grammaticalFeatures targets NMTOKENS #REQUIRED >
+            <!ATTLIST grammaticalFeatures locales NMTOKENS #REQUIRED >
+            OR
+            <!ATTLIST grammaticalDerivations locales NMTOKENS #REQUIRED >
+             */
+
+            for (String locale : split_space.split(parts.getAttributeValue(2, "locales"))) {
+                switch (parts.getElement(2)) {
+                case "grammaticalFeatures":
+                    GrammarInfo targetToFeatureToValues = grammarLocaleToTargetToFeatureToValues.get(locale);
+                    if (targetToFeatureToValues == null) {
+                        grammarLocaleToTargetToFeatureToValues.put(locale, targetToFeatureToValues = new GrammarInfo());
+                    }
+                    final String targets = parts.getAttributeValue(2, "targets");
+                    if (parts.size() < 4) {
+                        targetToFeatureToValues.add(targets, null, null, null); // special case "known no features"
+                    } else {
+                        targetToFeatureToValues.add(targets, parts.getElement(3), parts.getAttributeValue(3, "scope"), parts.getAttributeValue(3, "values"));
+                    }
+                    break;
+                case "grammaticalDerivations":
+                    String feature = parts.getAttributeValue(3, "feature");
+                    String structure = parts.getAttributeValue(3, "structure");
+                    GrammarDerivation grammarCompoundDerivation = localeToGrammarDerivation.get(locale);
+                    if (grammarCompoundDerivation == null) {
+                        localeToGrammarDerivation.put(locale, grammarCompoundDerivation = new GrammarDerivation());
+                    }
+
+                    switch (parts.getElement(3)) {
+                    case "deriveCompound":
+                        grammarCompoundDerivation.add(feature, structure, parts.getAttributeValue(3, "value"));
+                        break;
+                    case "deriveComponent":
+                        grammarCompoundDerivation.add(feature, structure, parts.getAttributeValue(3, "value0"), parts.getAttributeValue(3, "value1"));
+                        break;
+                    default:
+                        throw new IllegalArgumentException("Structure not handled: " + parts);
+                    }
+                    break;
+                default: throw new IllegalArgumentException("Structure not handled: " + parts);
+                }
+            }
+            return true;
+        }
+
         /*
          * Handles
          * <unitPreferences category="area" usage="_default">
          *<unitPreference regions="001" draft="unconfirmed">square-centimeter</unitPreference>
-            */
-        
+         */
+
         private boolean handleUnitPreferences(XPathParts parts, String value) {
             String geq = parts.getAttributeValue(-1, "geq");
             String small = parts.getAttributeValue(-2, "scope");
@@ -1381,14 +1456,14 @@
             String territories = parts.getAttributeValue(-1, "territories");
             Map<String, String> data = measurementData.get(measurementType);
             if (data == null) {
-                measurementData.put(measurementType, data = new HashMap<String, String>());
+                measurementData.put(measurementType, data = new HashMap<>());
             }
             for (String territory : territories.trim().split("\\s+")) {
                 data.put(territory, type);
             }
             return true;
         }
-        
+
         private boolean handleUnitConstants(XPathParts parts) {
             //      <unitConstant constant="ft2m" value="0.3048"/>
 
@@ -1398,20 +1473,23 @@
             rationalParser.addConstant(constant, value, status);
             return true;
         }
-        
+
         private boolean handleUnitQuantities(XPathParts parts) {
             //      <unitQuantity quantity='wave-number' baseUnit='reciprocal-meter'/>
 
             final String baseUnit = parts.getAttributeValue(-1, "baseUnit");
             final String quantity = parts.getAttributeValue(-1, "quantity");
             final String status = parts.getAttributeValue(-1, "status");
+            if (unitConverter == null) {
+                unitConverter = new UnitConverter(rationalParser, validity);
+            }
             unitConverter.addQuantityInfo(baseUnit, quantity, status);
             return true;
         }
 
         private boolean handleUnitConversion(XPathParts parts) {
             // <convertUnit source='acre' target='square-meter' factor='ft2m^2 * 43560'/>
-            
+
             final String source = parts.getAttributeValue(-1, "source");
             final String target = parts.getAttributeValue(-1, "baseUnit");
 //            if (source.contentEquals(target)) {
@@ -1421,8 +1499,8 @@
             String offset = parts.getAttributeValue(-1, "offset");
             String systems = parts.getAttributeValue(-1, "systems");
             unitConverter.addRaw(
-                source, target, 
-                factor, offset, 
+                source, target,
+                factor, offset,
                 systems);
             return true;
         }
@@ -1506,7 +1584,7 @@
                 if (subtypeDescription != null) {
                     bcp47Descriptions.put(key_subtype, subtypeDescription.replaceAll("\\s+", " "));
                 }
-                if (subtypeDescription != null) {
+                if (subtypeSince != null) {
                     bcp47Since.put(key_subtype, subtypeSince);
                 }
                 if (subtypePreferred != null) {
@@ -1549,7 +1627,7 @@
             case "languageMatch":
                 List<R4<String, String, Integer, Boolean>> matches = languageMatch.get(type);
                 if (matches == null) {
-                    languageMatch.put(type, matches = new ArrayList<R4<String, String, Integer, Boolean>>());
+                    languageMatch.put(type, matches = new ArrayList<>());
                 }
                 String percent = parts.getAttributeValue(3, "percent");
                 String distance = parts.getAttributeValue(3, "distance");
@@ -1670,11 +1748,11 @@
                 Map<String, Map<String, String>> zoneToRegionToZone = typeToZoneToRegionToZone.get(maintype);
                 if (zoneToRegionToZone == null) {
                     typeToZoneToRegionToZone.put(maintype,
-                        zoneToRegionToZone = new TreeMap<String, Map<String, String>>());
+                        zoneToRegionToZone = new TreeMap<>());
                 }
                 Map<String, String> regionToZone = zoneToRegionToZone.get(mzone);
                 if (regionToZone == null) {
-                    zoneToRegionToZone.put(mzone, regionToZone = new TreeMap<String, String>());
+                    zoneToRegionToZone.put(mzone, regionToZone = new TreeMap<>());
                 }
                 if (region != null) {
                     regionToZone.put(region, zone);
@@ -1723,12 +1801,11 @@
             if (parts.contains("defaultContent")) {
                 String defContent = parts.getAttributeValue(-1, "locales").trim();
                 String[] defLocales = defContent.split("\\s+");
-                defaultContentLocales = Collections.unmodifiableSet(new TreeSet<String>(Arrays.asList(defLocales)));
+                defaultContentLocales = Collections.unmodifiableSet(new TreeSet<>(Arrays.asList(defLocales)));
                 return true;
             }
             if (level2.equals("alias")) {
                 // <alias>
-                // <!-- grandfathered 3066 codes -->
                 // <languageAlias type="art-lojban" replacement="jbo"/> <!-- Lojban -->
                 String level3 = parts.getElement(3);
                 if (!level3.endsWith("Alias")) {
@@ -1738,17 +1815,17 @@
                 Map<String, R2<List<String>, String>> tagToReplacement = typeToTagToReplacement.get(level3);
                 if (tagToReplacement == null) {
                     typeToTagToReplacement.put(level3,
-                        tagToReplacement = new TreeMap<String, R2<List<String>, String>>());
+                        tagToReplacement = new TreeMap<>());
                 }
                 final String replacement = parts.getAttributeValue(3, "replacement");
                 List<String> replacementList = null;
                 if (replacement != null) {
                     Set<String> builder = new LinkedHashSet<>();
                     for (String item : replacement.split("\\s+")) {
-                        String cleaned = SubdivisionNames.isOldSubdivisionCode(item) 
+                        String cleaned = SubdivisionNames.isOldSubdivisionCode(item)
                             ? replacement.replace("-", "").toLowerCase(Locale.ROOT)
                                 : item;
-                        builder.add(cleaned);
+                            builder.add(cleaned);
                     }
                     replacementList = ImmutableList.copyOf(builder);
                 }
@@ -1848,7 +1925,7 @@
                     .get(territory);
                 if (territoryLanguageToPopulation == null) {
                     territoryToLanguageToPopulationData.put(territory,
-                        territoryLanguageToPopulation = new TreeMap<String, PopulationData>());
+                        territoryLanguageToPopulation = new TreeMap<>());
                 }
                 OfficialStatus officialStatus = OfficialStatus.unknown;
                 String officialStatusString = languageInTerritoryAttributes.get("officialStatus");
@@ -1885,7 +1962,7 @@
                 // if (language.equals("en")) {
                 // System.out.println(territory + "\tnewData:\t" + newData + "\tdata:\t" + data);
                 // }
-                
+
                 if (languageTagParser == null) {
                     languageTagParser = new LanguageTagParser();
                 }
@@ -1942,7 +2019,7 @@
 
             Set<TelephoneCodeInfo> tcSet = territoryToTelephoneCodeInfo.get(terr);
             if (tcSet == null) {
-                tcSet = new LinkedHashSet<TelephoneCodeInfo>();
+                tcSet = new LinkedHashSet<>();
                 territoryToTelephoneCodeInfo.put(terr, tcSet);
             }
             tcSet.add(tcInfo);
@@ -1986,7 +2063,7 @@
             // Reflecting submitted data, cldrbug #1013 -->
             // <language type="ab" scripts="Cyrl" territories="GE"
             // alt="secondary"/>
-            String language = (String) parts.getAttributeValue(2, "type");
+            String language = parts.getAttributeValue(2, "type");
             BasicLanguageData languageData = new BasicLanguageData();
             languageData
             .setType(parts.getAttributeValue(2, "alt") == null ? BasicLanguageData.Type.primary
@@ -1995,7 +2072,7 @@
             .setTerritories(parts.getAttributeValue(2, "territories"));
             Map<Type, BasicLanguageData> map = languageToBasicLanguageData.get(language);
             if (map == null) {
-                languageToBasicLanguageData.put(language, map = new EnumMap<Type, BasicLanguageData>(
+                languageToBasicLanguageData.put(language, map = new EnumMap<>(
                     BasicLanguageData.Type.class));
             }
             if (map.containsKey(languageData.type)) {
@@ -2050,22 +2127,22 @@
         return attributeValue == null ? -1 : Integer.parseInt(attributeValue);
     }
 
-    Set<String> skippedElements = new TreeSet<String>();
+    Set<String> skippedElements = new TreeSet<>();
 
-    private Map<String, Pair<String, String>> references = new TreeMap<String, Pair<String, String>>();
-    private Map<String, String> likelySubtags = new TreeMap<String, String>();
+    private Map<String, Pair<String, String>> references = new TreeMap<>();
+    private Map<String, String> likelySubtags = new TreeMap<>();
     // make public temporarily until we resolve.
-    private SortedSet<CoverageLevelInfo> coverageLevels = new TreeSet<CoverageLevelInfo>();
-    private Map<String, String> parentLocales = new HashMap<String, String>();
-    private Map<String, List<String>> calendarPreferences = new HashMap<String, List<String>>();
-    private Map<String, CoverageVariableInfo> localeSpecificVariables = new TreeMap<String, CoverageVariableInfo>();
+    private SortedSet<CoverageLevelInfo> coverageLevels = new TreeSet<>();
+    private Map<String, String> parentLocales = new HashMap<>();
+    private Map<String, List<String>> calendarPreferences = new HashMap<>();
+    private Map<String, CoverageVariableInfo> localeSpecificVariables = new TreeMap<>();
     private VariableReplacer coverageVariables = new VariableReplacer();
-    private Map<String, NumberingSystemInfo> numberingSystems = new HashMap<String, NumberingSystemInfo>();
-    private Set<String> numericSystems = new TreeSet<String>();
+    private Map<String, NumberingSystemInfo> numberingSystems = new HashMap<>();
+    private Set<String> numericSystems = new TreeSet<>();
     private Set<String> defaultContentLocales;
     public Map<CLDRLocale, CLDRLocale> baseToDefaultContent; // wo -> wo_Arab_SN
     public Map<CLDRLocale, CLDRLocale> defaultContentToBase; // wo_Arab_SN -> wo
-    private Set<String> CLDRLanguageCodes = new TreeSet<String>();;
+    private Set<String> CLDRLanguageCodes = new TreeSet<>();
     private Set<String> CLDRScriptCodes;
 
     /**
@@ -2119,7 +2196,7 @@
         if (map == null) {
             throw new IllegalArgumentException("Bad language code: " + language);
         }
-        return new LinkedHashSet<BasicLanguageData>(map.values());
+        return new LinkedHashSet<>(map.values());
     }
 
     public Map<Type, BasicLanguageData> getBasicLanguageDataMap(String language) {
@@ -2211,7 +2288,7 @@
     public Set<String> getSingleRegionZones() {
         synchronized (this) {
             if (singleRegionZones == null) {
-                singleRegionZones = new HashSet<String>();
+                singleRegionZones = new HashSet<>();
                 SupplementalDataInfo supplementalData = this; // TODO: this?
                 Set<String> multizoneCountries = supplementalData.getMultizones();
                 for (String zone : supplementalData.getCanonicalZones()) {
@@ -2454,7 +2531,7 @@
                 }
 
                 //if it is not, add a new map with the coverage level, and remove the last map in the list (used most seldom) if the list is too large
-                Map<String, Level> newMap = new ConcurrentHashMap<String, Level>();
+                Map<String, Level> newMap = new ConcurrentHashMap<>();
                 newMap.put(xpath, covLevel);
                 localeList.addFirst(new Node(loc, newMap));
 
@@ -2495,7 +2572,7 @@
 
     public synchronized RegexLookup<Level> getCoverageLookup() {
         if (coverageLookup == null) {
-            RegexLookup<Level> lookup = new RegexLookup<Level>(RegexLookup.LookupType.STAR_PATTERN_LOOKUP);
+            RegexLookup<Level> lookup = new RegexLookup<>(RegexLookup.LookupType.STAR_PATTERN_LOOKUP);
 
             Matcher variable = PatternCache.get("\\$\\{[A-Za-z][\\-A-Za-z]*\\}").matcher("");
 
@@ -2569,7 +2646,7 @@
             // to certain territories
             if (ci.inTerritory != null) {
                 if (ci.inTerritory.equals("EU")) {
-                    Set<String> containedTerritories = new HashSet<String>();
+                    Set<String> containedTerritories = new HashSet<>();
                     containedTerritories.addAll(getContained(ci.inTerritory));
                     containedTerritories.retainAll(cvi.targetTerritories);
                     if (containedTerritories.isEmpty()) {
@@ -2622,7 +2699,7 @@
     }
 
     private Set<String> getTargetScripts(String language) {
-        Set<String> targetScripts = new HashSet<String>();
+        Set<String> targetScripts = new HashSet<>();
         try {
             Set<BasicLanguageData> langData = getBasicLanguageData(language);
             Iterator<BasicLanguageData> ldi = langData.iterator();
@@ -2644,7 +2721,7 @@
     }
 
     private Set<String> getTargetTerritories(String language) {
-        Set<String> targetTerritories = new HashSet<String>();
+        Set<String> targetTerritories = new HashSet<>();
         try {
             Set<BasicLanguageData> langData = getBasicLanguageData(language);
             Iterator<BasicLanguageData> ldi = langData.iterator();
@@ -2665,7 +2742,7 @@
     }
 
     private Set<String> getCalendars(Set<String> territories) {
-        Set<String> targetCalendars = new HashSet<String>();
+        Set<String> targetCalendars = new HashSet<>();
         Iterator<String> it = territories.iterator();
         while (it.hasNext()) {
             List<String> addCalendars = getCalendars(it.next());
@@ -2691,7 +2768,7 @@
     }
 
     public Set<String> getCurrentCurrencies(Set<String> territories, Date startsBefore, Date endsAfter) {
-        Set<String> targetCurrencies = new HashSet<String>();
+        Set<String> targetCurrencies = new HashSet<>();
         Iterator<String> it = territories.iterator();
         while (it.hasNext()) {
             Set<CurrencyDateInfo> targetCurrencyInfo = getCurrencyDateInfo(it.next());
@@ -2710,7 +2787,7 @@
     }
 
     private Set<String> getCurrentTimeZones(Set<String> territories) {
-        Set<String> targetTimeZones = new HashSet<String>();
+        Set<String> targetTimeZones = new HashSet<>();
         Iterator<String> it = territories.iterator();
         while (it.hasNext()) {
             String[] countryIDs = TimeZone.getAvailableIDs(it.next());
@@ -2722,7 +2799,7 @@
     }
 
     private Set<String> getTargetPlurals(String language) {
-        Set<String> targetPlurals = new HashSet<String>();
+        Set<String> targetPlurals = new HashSet<>();
         targetPlurals.addAll(getPlurals(PluralType.cardinal, language).getCanonicalKeywords());
         // TODO: Kept 0 and 1 specifically until Mark figures out what to do with them.
         // They should be removed once this is done.
@@ -2757,7 +2834,7 @@
                 if (localeAttrib == null || localeAttrib.equals(STAR) || localeAttrib.isEmpty()) {
                     locales = null; // no locale listed == '*'
                 } else {
-                    Set<CLDRLocale> localeList = new HashSet<CLDRLocale>();
+                    Set<CLDRLocale> localeList = new HashSet<>();
                     String[] el = localeAttrib.split(" ");
                     for (int i = 0; i < el.length; i++) {
                         if (el[i].indexOf(":") == -1) { // Just a simple locale designation
@@ -2790,7 +2867,7 @@
         final int requiredVotes;
 
         public static List<ApprovalRequirementMatcher> buildAll(List<String> approvalRequirements) {
-            List<ApprovalRequirementMatcher> newList = new LinkedList<ApprovalRequirementMatcher>();
+            List<ApprovalRequirementMatcher> newList = new LinkedList<>();
 
             for (String xpath : approvalRequirements) {
                 newList.add(new ApprovalRequirementMatcher(xpath));
@@ -2976,22 +3053,22 @@
                 : standardType == PluralRules.PluralType.CARDINAL ? cardinal
                     : ordinal;
         }
-    };
+    }
 
     private EnumMap<PluralType, Map<String, PluralInfo>> localeToPluralInfo2 = new EnumMap<>(PluralType.class);
     {
         localeToPluralInfo2.put(PluralType.cardinal, new LinkedHashMap<String, PluralInfo>());
         localeToPluralInfo2.put(PluralType.ordinal, new LinkedHashMap<String, PluralInfo>());
     }
-    private Map<String, PluralRanges> localeToPluralRanges = new LinkedHashMap<String, PluralRanges>();
+    private Map<String, PluralRanges> localeToPluralRanges = new LinkedHashMap<>();
 
-    private Map<DayPeriodInfo.Type, Map<String, DayPeriodInfo>> typeToLocaleToDayPeriodInfo = new EnumMap<DayPeriodInfo.Type, Map<String, DayPeriodInfo>>(
+    private Map<DayPeriodInfo.Type, Map<String, DayPeriodInfo>> typeToLocaleToDayPeriodInfo = new EnumMap<>(
         DayPeriodInfo.Type.class);
-    private Map<String, CoverageLevel2> localeToCoverageLevelInfo = new ConcurrentHashMap<String, CoverageLevel2>();
+    private Map<String, CoverageLevel2> localeToCoverageLevelInfo = new ConcurrentHashMap<>();
     private CoverageCache coverageCache = new CoverageCache();
     private transient String lastPluralLocales = "";
     private transient PluralType lastPluralWasOrdinal = null;
-    private transient Map<Count, String> lastPluralMap = new EnumMap<Count, String>(Count.class);
+    private transient Map<Count, String> lastPluralMap = new EnumMap<>(Count.class);
     private transient String lastDayPeriodLocales = null;
     private transient DayPeriodInfo.Type lastDayPeriodType = null;
     private transient DayPeriodInfo.Builder dayPeriodBuilder = new DayPeriodInfo.Builder();
@@ -3078,7 +3155,7 @@
         DayPeriodInfo temp = dayPeriodBuilder.finish(locales);
         Map<String, DayPeriodInfo> locale2DPI = typeToLocaleToDayPeriodInfo.get(lastDayPeriodType);
         if (locale2DPI == null) {
-            typeToLocaleToDayPeriodInfo.put(lastDayPeriodType, locale2DPI = new LinkedHashMap<String, DayPeriodInfo>());
+            typeToLocaleToDayPeriodInfo.put(lastDayPeriodType, locale2DPI = new LinkedHashMap<>());
             //System.out.println(lastDayPeriodType + ", " + locale2DPI);
         }
         for (String locale : locales) {
@@ -3167,8 +3244,9 @@
         public static final SampleList EMPTY = new SampleList().freeze();
 
         private UnicodeSet uset = new UnicodeSet();
-        private List<FixedDecimal> fractions = new ArrayList<FixedDecimal>(0);
+        private List<FixedDecimal> fractions = new ArrayList<>(0);
 
+        @Override
         public String toString() {
             return toString(6, 3);
         }
@@ -3273,8 +3351,8 @@
 
         CountSampleList(PluralRules pluralRules, Set<Count> keywords, PluralType pluralType) {
             // Create the integer counts
-            countToIntegerSamples9999 = new EnumMap<Count, SampleList>(Count.class);
-            countToDigitToIntegerSamples9999 = new EnumMap<Count, SampleList[]>(Count.class);
+            countToIntegerSamples9999 = new EnumMap<>(Count.class);
+            countToDigitToIntegerSamples9999 = new EnumMap<>(Count.class);
             for (Count c : keywords) {
                 countToIntegerSamples9999.put(c, new SampleList());
                 SampleList[] row = new SampleList[5];
@@ -3376,7 +3454,7 @@
      * @author markdavis
      */
     public static class PluralInfo implements Comparable<PluralInfo> {
-        static final Set<Double> explicits = new HashSet<Double>();
+        static final Set<Double> explicits = new HashSet<>();
         static {
             explicits.add(0.0d);
             explicits.add(1.0d);
@@ -3405,7 +3483,7 @@
         private final Map<Count, String> countToRule;
 
         private PluralInfo(Map<Count, String> countToRule, PluralType pluralType) {
-            EnumMap<Count, String> tempCountToRule = new EnumMap<Count, String>(Count.class);
+            EnumMap<Count, String> tempCountToRule = new EnumMap<>(Count.class);
             tempCountToRule.putAll(countToRule);
             this.countToRule = Collections.unmodifiableMap(tempCountToRule);
 
@@ -3448,8 +3526,8 @@
 
             countSampleList = new CountSampleList(pluralRules, keywords, pluralType);
 
-            Map<Count, Set<Double>> countToExampleSetRaw = new TreeMap<Count, Set<Double>>();
-            Map<Integer, Count> exampleToCountRaw = new TreeMap<Integer, Count>();
+            Map<Count, Set<Double>> countToExampleSetRaw = new TreeMap<>();
+            Map<Integer, Count> exampleToCountRaw = new TreeMap<>();
 
             Output<Map<Count, SampleList[]>> output = new Output();
 
@@ -3459,10 +3537,10 @@
             // }
             // now fix the longer examples
             String otherFractionalExamples = "";
-            List<Double> otherFractions = new ArrayList<Double>(0);
+            List<Double> otherFractions = new ArrayList<>(0);
 
             // add fractional samples
-            Map<Count, String> countToStringExampleRaw = new TreeMap<Count, String>();
+            Map<Count, String> countToStringExampleRaw = new TreeMap<>();
             for (Count type : keywords) {
                 SampleList uset = countSampleList.get(type);
                 countToStringExampleRaw.put(type, uset.toString(5, 5));
@@ -3476,7 +3554,7 @@
             // Currently a bit of a hack, we should enhance SampleList to make this easier
             // and then use SampleList directly, see http://unicode.org/cldr/trac/ticket/9813
             for (Count type : countToStringExampleRaw.keySet()) {
-                Set<Double> doublesSet = new LinkedHashSet<Double>(0);
+                Set<Double> doublesSet = new LinkedHashSet<>(0);
                 String examples = countToStringExampleRaw.get(type);
                 if (examples == null) {
                     examples = "";
@@ -3497,7 +3575,7 @@
             countToExampleSet = Collections.unmodifiableMap(countToExampleSetRaw);
             countToStringExample = Collections.unmodifiableMap(countToStringExampleRaw);
             exampleToCount = Collections.unmodifiableMap(exampleToCountRaw);
-            Set<String> temp = new LinkedHashSet<String>();
+            Set<String> temp = new LinkedHashSet<>();
             // String keyword = pluralRules.select(0.0d);
             // double value = pluralRules.getUniqueKeywordValue(keyword);
             // if (value == pluralRules.NO_UNIQUE_VALUE) {
@@ -3531,6 +3609,7 @@
             canonicalKeywords = Collections.unmodifiableSet(temp);
         }
 
+        @Override
         public String toString() {
             return countToExampleSet + "; " + exampleToCount + "; " + pluralRules;
         }
@@ -3750,6 +3829,7 @@
     /**
      * @deprecated use {@link #getPlurals(PluralType)} instead
      */
+    @Deprecated
     public Set<String> getPluralLocales() {
         return getPluralLocales(PluralType.cardinal);
     }
@@ -3773,6 +3853,7 @@
     /**
      * @deprecated use {@link #getPlurals(PluralType, String)} instead
      */
+    @Deprecated
     public PluralInfo getPlurals(String locale) {
         return getPlurals(locale, true);
     }
@@ -3790,6 +3871,7 @@
     /**
      * @deprecated use {@link #getPlurals(PluralType, String, boolean)} instead.
      */
+    @Deprecated
     public PluralInfo getPlurals(String locale, boolean allowRoot) {
         return getPlurals(PluralType.cardinal, locale, allowRoot);
     }
@@ -3873,8 +3955,18 @@
      */
     public String getDefaultCurrency(String territory) {
 
-        Set<CurrencyDateInfo> targetCurrencyInfo = getCurrencyDateInfo(territory);
         String result = "XXX";
+        Set<CurrencyDateInfo> targetCurrencyInfo = getCurrencyDateInfo(territory);
+        if (targetCurrencyInfo == null) {
+            /*
+             * This happens during ConsoleCheckCLDR
+             * territory = "419"
+             * path = //ldml/numbers/currencyFormats[@numberSystem="latn"]/currencyFormatLength/currencyFormat[@type="accounting"]/pattern[@type="standard"]
+             * value = ¤#,##0.00
+             * Prevent NullPointerException
+             */
+            return result;
+        }
         Date now = new Date();
         for (CurrencyDateInfo cdi : targetCurrencyInfo) {
             if (cdi.getStart().before(now) && cdi.getEnd().after(now) && cdi.isLegalTender()) {
@@ -3999,7 +4091,7 @@
     }
 
 
-    static Set<String> MainTimeZones;;
+    static Set<String> MainTimeZones;
 
     /**
      * Return canonical timezones
@@ -4009,7 +4101,7 @@
     public Set<String> getCanonicalTimeZones() {
         synchronized (SupplementalDataInfo.class) {
             if (MainTimeZones == null) {
-                MainTimeZones = new TreeSet<String>();
+                MainTimeZones = new TreeSet<>();
                 SupplementalDataInfo info = SupplementalDataInfo.getInstance();
                 for (Entry<R2<String, String>, Set<String>> entry : info.getBcp47Aliases().keyValuesSet()) {
                     R2<String, String> subtype_aliases = entry.getKey();
@@ -4053,7 +4145,7 @@
 
     public boolean isDeprecated(DtdType type, String path) {
 
-        XPathParts parts = XPathParts.getInstance(path);
+        XPathParts parts = XPathParts.getFrozenInstance(path);
         for (int i = 0; i < parts.size(); ++i) {
             String element = parts.getElement(i);
             if (isDeprecated(type, element, "*", "*")) {
@@ -4097,9 +4189,9 @@
     private synchronized void initCLDRLocaleBasedData() throws InternalError {
         // This initialization depends on SDI being initialized.
         if (defaultContentToBase == null) {
-            Map<CLDRLocale, CLDRLocale> p2c = new TreeMap<CLDRLocale, CLDRLocale>();
-            Map<CLDRLocale, CLDRLocale> c2p = new TreeMap<CLDRLocale, CLDRLocale>();
-            TreeSet<CLDRLocale> tmpAllLocales = new TreeSet<CLDRLocale>();
+            Map<CLDRLocale, CLDRLocale> p2c = new TreeMap<>();
+            Map<CLDRLocale, CLDRLocale> c2p = new TreeMap<>();
+            TreeSet<CLDRLocale> tmpAllLocales = new TreeSet<>();
             // copied from SupplementalData.java - CLDRLocale based
             for (String l : defaultContentLocales) {
                 CLDRLocale child = CLDRLocale.getInstance(l);
@@ -4211,6 +4303,7 @@
     }
 
     public final static class LengthFirstComparator<T> implements Comparator<T> {
+        @Override
         public int compare(T a, T b) {
             String as = a.toString();
             String bs = b.toString();
@@ -4231,9 +4324,9 @@
 
         Set<String> dcl = sdi.getDefaultContentLocales();
         Map<String, String> likely = sdi.getLikelySubtags();
-        XEquivalenceClass<String, String> locales = new XEquivalenceClass<String, String>();
+        XEquivalenceClass<String, String> locales = new XEquivalenceClass<>();
         LanguageTagParser ltp = new LanguageTagParser();
-        Set<String> temp = new HashSet<String>();
+        Set<String> temp = new HashSet<>();
         for (Entry<String, String> entry : likely.entrySet()) {
             String source = entry.getKey();
             if (source.startsWith("und")) {
@@ -4406,11 +4499,11 @@
     public Multimap<String, String> getLanguageGroups() {
         return languageGroups;
     }
-    
+
     public UnitConverter getUnitConverter() {
         return unitConverter;
     }
-    
+
     public RationalParser getRationalParser() {
         return rationalParser;
     }
@@ -4418,4 +4511,55 @@
     public UnitPreferences getUnitPreferences() {
         return unitPreferences;
     }
+
+    /**
+     * locales that have grammar info
+     */
+    public Set<String> hasGrammarInfo() {
+        return grammarLocaleToTargetToFeatureToValues.keySet();
+    }
+
+    /**
+     * Grammar info for locales, with inheritance
+     * @param seedOnly
+     * @return
+     */
+    public GrammarInfo getGrammarInfo(String locale) {
+        return getGrammarInfo(locale, false);
+    }
+
+    /**
+     * Special hack for v38; should drop seedOnly later.
+     * @param locale
+     * @param seedOnly
+     * @return
+     */
+    @Deprecated
+    public GrammarInfo getGrammarInfo(String locale, boolean seedOnly) {
+        for (;locale != null; locale = LocaleIDParser.getParent(locale)) {
+            if (seedOnly && !GrammarInfo.SEED_LOCALES.contains(locale)) {
+                continue;
+            }
+            GrammarInfo result = grammarLocaleToTargetToFeatureToValues.get(locale);
+            if (result != null) {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    public Set<String> hasGrammarDerivation() {
+        return localeToGrammarDerivation.keySet();
+    }
+
+
+    public GrammarDerivation getGrammarDerivation(String locale) {
+        for (;locale != null; locale = LocaleIDParser.getParent(locale)) {
+            GrammarDerivation result = localeToGrammarDerivation.get(locale);
+            if (result != null) {
+                return result;
+            }
+        }
+        return null;
+    }
 }
diff --git a/tools/java/org/unicode/cldr/util/Tabber.java b/tools/java/org/unicode/cldr/util/Tabber.java
index a43baf4..e15c43f 100644
--- a/tools/java/org/unicode/cldr/util/Tabber.java
+++ b/tools/java/org/unicode/cldr/util/Tabber.java
@@ -60,6 +60,7 @@
         private List stops = new ArrayList();
         private List types = new ArrayList();
 
+        @Override
         public Tabber clear() {
             stops.clear();
             types.clear();
@@ -67,6 +68,7 @@
             return this;
         }
 
+        @Override
         public String toString() {
             StringBuffer buffer = new StringBuffer();
             for (int i = 0; i < stops.size(); ++i) {
@@ -93,6 +95,7 @@
         /**
          * Adds relative tab stop and how to align the text UP TO that stop
          */
+        @Override
         public Tabber add(int fieldWidth, byte type) {
             int last = getStop(stops.size() - 1);
             stops.add(new Integer(last + fieldWidth));
@@ -112,6 +115,7 @@
             return ((Integer) types.get(fieldNumber)).intValue();
         }
 
+        @Override
         public void process_field(int count, String source, int start, int limit, StringBuffer output) {
             String piece = source.substring(start, limit);
             int startPos = getStop(count - 1);
@@ -149,6 +153,7 @@
     }
 
     public static Tabber NULL_TABBER = new Tabber() {
+        @Override
         public void process_field(int count, String source, int start, int limit, StringBuffer output) {
             if (count > 0) output.append("\t");
             output.append(source.substring(start, limit));
@@ -181,6 +186,7 @@
             return this;
         }
 
+        @Override
         public void process_field(int count, String source, int start, int limit, StringBuffer output) {
             output.append("<" + element);
             String params = null;
diff --git a/tools/java/org/unicode/cldr/util/TempPrintWriter.java b/tools/java/org/unicode/cldr/util/TempPrintWriter.java
index 0a8aee7..b151f58 100644
--- a/tools/java/org/unicode/cldr/util/TempPrintWriter.java
+++ b/tools/java/org/unicode/cldr/util/TempPrintWriter.java
@@ -13,8 +13,8 @@
 import com.ibm.icu.util.ICUUncheckedIOException;
 
 /**
- * Simple utility to create a temporary file, write into it, then close it. 
- * If the file differs from the old file (except for date), then it is deleted. 
+ * Simple utility to create a temporary file, write into it, then close it.
+ * If the file differs from the old file (except for date), then it is deleted.
  * Otherwise it replaces the target file. Moved from UnicodeTools.
  * @author markdavis
  */
@@ -22,16 +22,17 @@
     final PrintWriter tempPrintWriter;
     final String tempName;
     final String filename;
+    boolean noReplace = false;
 
-    
+
     public static TempPrintWriter openUTF8Writer(String filename) {
         return new TempPrintWriter(new File(filename));
     }
-    
+
     public static TempPrintWriter openUTF8Writer(String dir, String filename) {
         return new TempPrintWriter(new File(dir, filename));
     }
-    
+
     public TempPrintWriter(String dir, String filename) {
         this(new File(dir, filename));
     }
@@ -53,11 +54,19 @@
         }
     }
 
+    public void dontReplaceFile() {
+        noReplace = true;
+    }
+
     @Override
     public void close() {
         tempPrintWriter.close();
         try {
-            replaceDifferentOrDelete(filename, tempName, false);
+            if (noReplace) {
+                new File(tempName).delete();
+            } else {
+                replaceDifferentOrDelete(filename, tempName, false);
+            }
         } catch (IOException e) {
             throw new ICUUncheckedIOException(e);
         }
@@ -80,12 +89,12 @@
     public void print(Object line) {
         tempPrintWriter.print(line);
     }
-    
+
     public void println() {
         tempPrintWriter.println();
     }
 
-    /** 
+    /**
      * If contents(newFile) ≠ contents(oldFile), rename newFile to old. Otherwise delete newfile. Return true if replaced. *
      */
     private static boolean replaceDifferentOrDelete(String oldFile, String newFile, boolean skipCopyright) throws IOException {
@@ -185,7 +194,7 @@
         }
     }
 
-    /** 
+    /**
      * Returns -1 if strings are equal; otherwise the first position they are different at.
      */
     public static int compare(String a, String b) {
diff --git a/tools/java/org/unicode/cldr/util/TestShimUtils.java b/tools/java/org/unicode/cldr/util/TestShimUtils.java
new file mode 100644
index 0000000..f8f90a9
--- /dev/null
+++ b/tools/java/org/unicode/cldr/util/TestShimUtils.java
@@ -0,0 +1,17 @@
+package org.unicode.cldr.util;
+
+/**
+ * Utilities for the TestShims
+ * should go away when we move to all junit tests.
+ * These are here so they can be shared between tools/java and tools/cldr-apps
+ */
+public class TestShimUtils {
+    public static String[] getArgs(Class<?> clazz, String defaultArgs) {
+        final String packageName = clazz.getPackage().getName();
+        final String propKey = packageName+".testArgs";
+        final String toSplit = System.getProperty(propKey, defaultArgs);
+        System.err.println(propKey+"="+toSplit);
+        final String s[] = toSplit.split(" "); // TODO: quoted strings, etc.
+        return s;
+    }
+}
diff --git a/tools/java/org/unicode/cldr/util/TestStateDictionaryBuilder.java b/tools/java/org/unicode/cldr/util/TestStateDictionaryBuilder.java
index 110a340..2f5a2a6 100644
--- a/tools/java/org/unicode/cldr/util/TestStateDictionaryBuilder.java
+++ b/tools/java/org/unicode/cldr/util/TestStateDictionaryBuilder.java
@@ -55,10 +55,10 @@
     Dictionary<T> simpleDictionary;
     Dictionary.Matcher<T> simpleMatcher;
 
-    Map<CharSequence, T> baseMapping = new TreeMap<CharSequence, T>();
+    Map<CharSequence, T> baseMapping = new TreeMap<>();
 
-    final StateDictionaryBuilder<T> stateDictionaryBuilder = new StateDictionaryBuilder<T>();
-    final SimpleDictionaryBuilder<T> simpleDictionaryBuilder = new SimpleDictionaryBuilder<T>();
+    final StateDictionaryBuilder<T> stateDictionaryBuilder = new StateDictionaryBuilder<>();
+    final SimpleDictionaryBuilder<T> simpleDictionaryBuilder = new SimpleDictionaryBuilder<>();
 
     // TODO: convert to TestFramework
     public static void main(String[] args) {
@@ -235,7 +235,7 @@
             "[[:assigned:] - [:ideographic:] - [:Co:] - [:Cs:]]"); // &
         // [\\u0000-\\u0FFF]
         int count = 0;
-        Map<String, T> data = new TreeMap<String, T>();
+        Map<String, T> data = new TreeMap<>();
         for (UnicodeSetIterator it = new UnicodeSetIterator(testSet); it.next();) {
             String name = UCharacter.getExtendedName(it.codepoint);
             if (name == null) {
@@ -283,7 +283,7 @@
             if ((++count & 0xFF) == 0xFF) {
                 System.out.println(count + ":\t" + myText);
             }
-            crossCheck(new CharSourceWrapper<CharSequence>(myText));
+            crossCheck(new CharSourceWrapper<>(myText));
             crossCheck("!" + myText);
             crossCheck(myText + "!");
         }
@@ -305,7 +305,7 @@
     }
 
     private void crossCheck(CharSequence myText) {
-        crossCheck(new CharSourceWrapper<CharSequence>(myText));
+        crossCheck(new CharSourceWrapper<>(myText));
     }
 
     private void crossCheck(CharSource myText) {
@@ -411,10 +411,10 @@
                 System.out.println("  DIFFERENCE");
                 showWords("Simple", simpleMatcher, myText);
                 showWords("STATE", stateMatcher, myText);
-                Set<String> simpleMinusState = new LinkedHashSet<String>(simpleResult);
+                Set<String> simpleMinusState = new LinkedHashSet<>(simpleResult);
                 simpleMinusState.removeAll(stateResult);
                 System.out.println("Simple-State" + simpleMinusState);
-                Set<String> stateMinusSimple = new LinkedHashSet<String>(stateResult);
+                Set<String> stateMinusSimple = new LinkedHashSet<>(stateResult);
                 stateMinusSimple.removeAll(simpleResult);
                 System.out.println("State-Simple" + stateMinusSimple);
             }
@@ -425,7 +425,7 @@
         title = title.equals("") ? "" : "\tType: " + title;
         // Walk through a strings and gather information about what we find
         // according to the matcher
-        Set<String> result = new LinkedHashSet<String>();
+        Set<String> result = new LinkedHashSet<>();
         // Set the text to operate on
         matcher.setText(myText);
         boolean uniquePartial = false;
diff --git a/tools/java/org/unicode/cldr/util/TestUtilities.java b/tools/java/org/unicode/cldr/util/TestUtilities.java
index a339068..00e07a2 100644
--- a/tools/java/org/unicode/cldr/util/TestUtilities.java
+++ b/tools/java/org/unicode/cldr/util/TestUtilities.java
@@ -30,7 +30,7 @@
 import org.unicode.cldr.test.ExampleGenerator;
 import org.unicode.cldr.tool.GenerateAttributeList;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.lang.UCharacter;
 import com.ibm.icu.lang.UProperty;
@@ -55,7 +55,7 @@
     enum State {
         a, b, c;
         public static State cc = c;
-    };
+    }
 
     String s;
 
@@ -166,8 +166,8 @@
     private static void checkNumericTimezone() throws IOException {
         String[] map_integer_zones = new String[1000];
         StandardCodes sc = StandardCodes.make();
-        Set<String> timezones = new TreeSet<String>(sc.getGoodAvailableCodes("tzid"));
-        Map<String, Integer> map_timezone_integer = new TreeMap<String, Integer>();
+        Set<String> timezones = new TreeSet<>(sc.getGoodAvailableCodes("tzid"));
+        Map<String, Integer> map_timezone_integer = new TreeMap<>();
         BufferedReader input = CldrUtility.getUTF8Data("timezone_numeric.txt");
         int maxNumeric = -1;
         Map<String, String> fixOld = sc.zoneParser.getZoneLinkold_new();
@@ -206,11 +206,11 @@
         RuleBasedCollator eng = (RuleBasedCollator) Collator.getInstance();
         eng.setNumericCollation(true);
 
-        Set<String> extra = new TreeSet<String>(eng);
+        Set<String> extra = new TreeSet<>(eng);
         extra.addAll(map_timezone_integer.keySet());
         extra.removeAll(timezones);
         System.out.println("Extra: " + extra);
-        Set<String> needed = new TreeSet<String>(eng);
+        Set<String> needed = new TreeSet<>(eng);
         needed.addAll(timezones);
         needed.removeAll(map_timezone_integer.keySet());
         System.out.println("Needed: " + needed);
@@ -218,7 +218,7 @@
         // fill in the slots with the missing items
         // make Etc/GMT go first
         int numeric = 1;
-        List<String> ordered = new ArrayList<String>(needed);
+        List<String> ordered = new ArrayList<>(needed);
         // if (ordered.contains("Etc/GMT")) {
         // ordered.remove("Etc/GMT");
         // ordered.add(0,"Etc/GMT");
@@ -235,7 +235,7 @@
 
         // print it out
         Map<String, Set<String>> equiv = sc.zoneParser.getZoneLinkNew_OldSet();
-        Set<String> old = new TreeSet<String>();
+        Set<String> old = new TreeSet<>();
         for (int i = 1; i <= maxNumeric; ++i) {
             Set<String> s = equiv.get(map_integer_zones[i]);
             if (s != null) {
@@ -303,7 +303,7 @@
             "comment",
             // collation
             "base", "settings", "suppress_contractions", "optimize", "rules" };
-        String list = CollectionUtilities.join(elements, " ");
+        String list = String.join(" ", elements);
         String prefix = "//supplementalData[@version=\"1.4\"]/metaData/";
         meta.add(prefix + "elementOrder", list);
 
@@ -320,7 +320,7 @@
             "validSubLocales", "standard", "references", "elements", "element", "attributes", "attribute",
             // these are always at the end
             "alt", "draft", };
-        meta.add(prefix + "attributeOrder", CollectionUtilities.join(attOrder, " "));
+        meta.add(prefix + "attributeOrder", String.join(" ", attOrder));
 
         String[] serialElements = new String[] { "variable", "comment",
             "tRule",
@@ -329,7 +329,7 @@
             "first_tertiary_ignorable", "last_tertiary_ignorable",
             "first_secondary_ignorable", "last_secondary_ignorable", "first_primary_ignorable",
             "last_primary_ignorable", "first_non_ignorable", "last_non_ignorable", "first_trailing", "last_trailing" };
-        meta.add(prefix + "serialElements", CollectionUtilities.join(serialElements, " "));
+        meta.add(prefix + "serialElements", String.join(" ", serialElements));
         /*
          *
          * <attributeValues elements="weekendStart weekendEnd" attributes="day"
@@ -356,33 +356,33 @@
                 Set<String>[] valueSets = attribute_valueSet.get(attribute);
                 for (int i = 0; i < 2; ++i) {
                     meta.add(prefix + "valid/attributeValues" + "[@elements=\"" + element + "\"]" + "[@attributes=\""
-                        + attribute + "\"]" + (i == 1 ? "[@x=\"true\"]" : ""), CollectionUtilities.join(
-                            valueSets[i], " "));
+                        + attribute + "\"]" + (i == 1 ? "[@x=\"true\"]" : ""),
+                        Joiner.on(" ").join(valueSets[i]));
                 }
             }
         }
 
         String[] dayValueOrder = new String[] { "sun", "mon", "tue", "wed", "thu", "fri", "sat" };
         meta.add(prefix + "valid/attributeValues[@order=\"given\"][@attributes=\"type\"][@elements=\"" + "day" + "\"]",
-            CollectionUtilities.join(dayValueOrder, " "));
+            String.join(" ", dayValueOrder));
         meta.add(prefix + "valid/attributeValues[@order=\"given\"][@attributes=\"" + "day" + "\"][@elements=\""
-            + "firstDay weekendEnd weekendStart" + "\"]", CollectionUtilities.join(dayValueOrder, " "));
+            + "firstDay weekendEnd weekendStart" + "\"]", String.join(" ", dayValueOrder));
 
         String[] widths = { "monthWidth", "dayWidth", "quarterWidth" };
         String[] widthOrder = new String[] { "abbreviated", "narrow", "wide" };
         meta.add(prefix + "valid/attributeValues[@order=\"given\"][@attributes=\"type\"][@elements=\""
-            + CollectionUtilities.join(widths, " ") + "\"]", CollectionUtilities.join(widthOrder, " "));
+            + String.join(" ", widths) + "\"]", String.join(" ", widthOrder));
 
         String[] formatLengths = { "dateFormatLength", "timeFormatLength", "dateTimeFormatLength",
             "decimalFormatLength", "scientificFormatLength", "percentFormatLength", "currencyFormatLength" };
         String[] lengthOrder = new String[] { "full", "long", "medium", "short" };
         meta.add(prefix + "valid/attributeValues[@order=\"given\"][@attributes=\"type\"][@elements=\""
-            + CollectionUtilities.join(formatLengths, " ") + "\"]", CollectionUtilities.join(lengthOrder, " "));
+            + String.join(" ", formatLengths) + "\"]", String.join(" ", lengthOrder));
 
         String[] dateFieldOrder = new String[] { "era", "year", "month", "week", "day", "weekday", "dayperiod", "hour",
             "minute", "second", "zone" };
         meta.add(prefix + "valid/attributeValues[@order=\"given\"][@attributes=\"type\"][@elements=\"field\"]",
-            CollectionUtilities.join(dateFieldOrder, " "));
+            String.join(" ", dateFieldOrder));
 
         String[][] suppressData = { { "ldml", "version", "*" }, { "orientation", "characters", "left-to-right" },
             { "orientation", "lines", "top-to-bottom" }, { "weekendStart", "time", "00:00" },
@@ -412,19 +412,23 @@
 
     static class MyHandler extends XMLFileReader.SimpleHandler {
 
+        @Override
         public void handleAttributeDecl(String eName, String aName, String type, String mode, String value) {
             System.out.println("eName: " + eName + ",\t aName: " + aName + ",\t type: " + type + ",\t mode: " + mode
                 + ",\t value: " + value);
         }
 
+        @Override
         public void handleElementDecl(String name, String model) {
             System.out.println("name: " + name + ",\t model: " + model);
         }
 
+        @Override
         public void handlePathValue(String path, String value) {
             System.out.println("path: " + path + ",\t value: " + value);
         }
 
+        @Override
         public void handleComment(String path, String comment) {
             System.out.println("path: " + path + ",\t comment: " + comment);
         }
@@ -515,11 +519,11 @@
 
             String oldType = type.equals("region") ? "territory" : type;
             Set<String> allCodes = sc.getAvailableCodes(oldType);
-            Set<String> temp = new TreeSet<String>(subtagData.keySet());
+            Set<String> temp = new TreeSet<>(subtagData.keySet());
             temp.removeAll(allCodes);
             System.out.println(type + "\t in new but not old\t" + temp);
 
-            temp = new TreeSet<String>(allCodes);
+            temp = new TreeSet<>(allCodes);
             temp.removeAll(subtagData.keySet());
             System.out.println(type + "\t in old but not new\t" + temp);
         }
@@ -564,9 +568,9 @@
             Map<String, Map<String, String>> subtagData = m.get(type);
             String oldType = type.equals("region") ? "territory" : type;
 
-            String aliasType = oldType.equals("grandfathered") ? "language" : oldType;
-            Set<String> allCodes = new TreeSet<String>();
-            Set<String> deprecatedCodes = new TreeSet<String>();
+            String aliasType =oldType.equals("legacy") ? "language" : oldType;
+            Set<String> allCodes = new TreeSet<>();
+            Set<String> deprecatedCodes = new TreeSet<>();
 
             for (Iterator<String> it2 = subtagData.keySet().iterator(); it2.hasNext();) {
                 String tag = it2.next();
@@ -585,7 +589,7 @@
             }
             // get old ones
             Set<String> goodCodes = sc.getAvailableCodes(oldType);
-            TreeSet<String> oldAndNotNew = new TreeSet<String>(goodCodes);
+            TreeSet<String> oldAndNotNew = new TreeSet<>(goodCodes);
             oldAndNotNew.removeAll(allCodes);
             oldAndNotNew.removeAll(deprecatedCodes);
             for (Iterator<String> it2 = oldAndNotNew.iterator(); it2.hasNext();) {
@@ -595,7 +599,7 @@
                 System.out.println("\t\t\t<" + aliasType + "Alias type=\"" + tag + "\" replacement=\"" + preferred
                     + "\"/> <!-- CLDR:" + sdata.get(0) + " -->");
             }
-            String allCodeString = CollectionUtilities.join(allCodes, " ");
+            String allCodeString = Joiner.on(" ").join(allCodes);
             System.out
                 .println("\t\t\t<variable id=\"$" + oldType + "\" type=\"list\">" + allCodeString + "</variable>");
         }
@@ -614,12 +618,12 @@
 
         Factory mainCldrFactory = Factory.make(CLDRPaths.COMMON_DIRECTORY + "main" + File.separator, ".*");
         Set<String> availableLocales = mainCldrFactory.getAvailable();
-        Set<String> available = new TreeSet<String>();
+        Set<String> available = new TreeSet<>();
         LocaleIDParser lip = new LocaleIDParser();
         for (Iterator<String> it = availableLocales.iterator(); it.hasNext();) {
             available.add(lip.set(it.next()).getLanguage());
         }
-        Set<String> langHack = new TreeSet<String>();
+        Set<String> langHack = new TreeSet<>();
         for (int i = 0; i < language_territory_hack.length; ++i) {
             String lang = language_territory_hack[i][0];
             langHack.add(lang);
diff --git a/tools/java/org/unicode/cldr/util/Timer.java b/tools/java/org/unicode/cldr/util/Timer.java
index 0e91b34..ad4314b 100644
--- a/tools/java/org/unicode/cldr/util/Timer.java
+++ b/tools/java/org/unicode/cldr/util/Timer.java
@@ -41,6 +41,7 @@
         return getDuration();
     }
 
+    @Override
     public String toString() {
         return nf.format(getDuration() / NANOS_PER_SECOND) + "s";
     }
diff --git a/tools/java/org/unicode/cldr/util/TimezoneFormatter.java b/tools/java/org/unicode/cldr/util/TimezoneFormatter.java
index f9f05ef..743e876 100644
--- a/tools/java/org/unicode/cldr/util/TimezoneFormatter.java
+++ b/tools/java/org/unicode/cldr/util/TimezoneFormatter.java
@@ -56,6 +56,7 @@
 
     public enum Location {
         GMT, LOCATION, NON_LOCATION;
+        @Override
         public String toString() {
             return this == GMT ? "gmt" : this == LOCATION ? "location" : "non-location";
         }
@@ -67,6 +68,7 @@
             return this == GENERIC ? "generic" : daylight ? "daylight" : "standard";
         }
 
+        @Override
         public String toString() {
             return name().toLowerCase(Locale.ENGLISH);
         }
@@ -74,6 +76,7 @@
 
     public enum Length {
         SHORT, LONG, OTHER;
+        @Override
         public String toString() {
             return this == SHORT ? "short" : this == LONG ? "long" : "other";
         }
@@ -92,7 +95,7 @@
             this.location = location;
             this.length = length;
         }
-    };
+    }
 
     // /**
     // * Type parameter for formatting
@@ -173,9 +176,12 @@
         String temp = desiredLocaleFile.getFullXPath("//ldml/dates/timeZoneNames/singleCountries");
         if (temp != null) {
             XPathParts xpp = XPathParts.getFrozenInstance(temp);
-            singleCountriesList = (String) xpp.findAttributeValue("singleCountries", "list");
+            temp = xpp.findAttributeValue("singleCountries", "list");
+            if (temp != null) {
+                singleCountriesList = temp;
+            }
         }
-        singleCountriesSet = new TreeSet<String>(CldrUtility.splitList(singleCountriesList, ' '));
+        singleCountriesSet = new TreeSet<>(CldrUtility.splitList(singleCountriesList, ' '));
     }
 
     /**
@@ -526,10 +532,10 @@
     private transient Matcher m = PatternCache.get("([-+])([0-9][0-9])([0-9][0-9])").matcher("");
 
     private transient boolean parseInfoBuilt;
-    private transient final Map<String, String> localizedCountry_countryCode = new HashMap<String, String>();
-    private transient final Map<String, String> exemplar_zone = new HashMap<String, String>();
-    private transient final Map<Object, Object> localizedExplicit_zone = new HashMap<Object, Object>();
-    private transient final Map<String, String> country_zone = new HashMap<String, String>();
+    private transient final Map<String, String> localizedCountry_countryCode = new HashMap<>();
+    private transient final Map<String, String> exemplar_zone = new HashMap<>();
+    private transient final Map<Object, Object> localizedExplicit_zone = new HashMap<>();
+    private transient final Map<String, String> country_zone = new HashMap<>();
 
     /**
      * Returns zoneid. In case of an offset, returns "Etc/GMT+/-HH" or "Etc/GMT+/-HHmm".
@@ -624,13 +630,13 @@
             // at this point, we don't really need the country, so ignore it
             // the city could be the last field of a zone, or could be an exemplar city
             // we have built the map so that both work
-            return (String) exemplar_zone.get(city);
+            return exemplar_zone.get(city);
         }
 
         // see if the string is a localized country
-        String countryCode = (String) localizedCountry_countryCode.get(inputText);
+        String countryCode = localizedCountry_countryCode.get(inputText);
         if (countryCode == null) countryCode = country; // if not, try raw code
-        return (String) country_zone.get(countryCode);
+        return country_zone.get(countryCode);
     }
 
     /**
@@ -656,8 +662,8 @@
         // now add exemplar cities, AND pick up explicit strings, AND localized countries
         String prefix = "//ldml/dates/timeZoneNames/zone[@type=\"";
         String countryPrefix = "//ldml/localeDisplayNames/territories/territory[@type=\"";
-        Map<String, Comparable> localizedNonWall = new HashMap<String, Comparable>();
-        Set<String> skipDuplicates = new HashSet<String>();
+        Map<String, Comparable> localizedNonWall = new HashMap<>();
+        Set<String> skipDuplicates = new HashSet<>();
         for (Iterator<String> it = desiredLocaleFile.iterator(); it.hasNext();) {
             String path = it.next();
             // dumb, simple implementation
@@ -715,7 +721,7 @@
             if (tzids.length == 1) {
                 country_zone.put(key, tzids[0]);
             } else {
-                Set<String> set = new LinkedHashSet<String>(Arrays.asList(tzids)); // make modifyable
+                Set<String> set = new LinkedHashSet<>(Arrays.asList(tzids)); // make modifyable
                 set.retainAll(singleCountriesSet);
                 if (set.size() == 1) {
                     country_zone.put(key, set.iterator().next());
@@ -760,6 +766,7 @@
         return this;
     }
 
+    @Override
     public Object parseObject(String source, ParsePosition pos) {
         TimeZone foo;
         CurrencyAmount fii;
@@ -767,6 +774,7 @@
         return null;
     }
 
+    @Override
     public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos) {
         // TODO Auto-generated method stub
         return null;
diff --git a/tools/java/org/unicode/cldr/util/Tokenizer.java b/tools/java/org/unicode/cldr/util/Tokenizer.java
index f3a2964..a154087 100644
--- a/tools/java/org/unicode/cldr/util/Tokenizer.java
+++ b/tools/java/org/unicode/cldr/util/Tokenizer.java
@@ -130,7 +130,7 @@
         int result = next();
         System.out.println(toString(result, backedupBefore));
         return result;
-    }    
+    }
     */
 
     public int next() {
@@ -236,6 +236,7 @@
         return buffer.toString();
     }
 
+    @Override
     public String toString() {
         return source.substring(0, index) + "$$$" + source.substring(index);
     }
@@ -304,6 +305,7 @@
         /* (non-Javadoc)
          * @see com.ibm.icu.text.SymbolTable#lookup(java.lang.String)
          */
+        @Override
         public char[] lookup(String s) {
             itemsLookedUp.add('$' + s);
             return (char[]) contents.get(s);
@@ -312,6 +314,7 @@
         /* (non-Javadoc)
          * @see com.ibm.icu.text.SymbolTable#lookupMatcher(int)
          */
+        @Override
         public UnicodeMatcher lookupMatcher(int ch) {
             // TODO Auto-generated method stub
             return null;
@@ -320,6 +323,7 @@
         /* (non-Javadoc)
          * @see com.ibm.icu.text.SymbolTable#parseReference(java.lang.String, java.text.ParsePosition, int)
          */
+        @Override
         public String parseReference(String text, ParsePosition pos, int limit) {
             int cp;
             int start = pos.getIndex();
diff --git a/tools/java/org/unicode/cldr/util/Transformer.java b/tools/java/org/unicode/cldr/util/Transformer.java
index e8a895c..3cbe862 100644
--- a/tools/java/org/unicode/cldr/util/Transformer.java
+++ b/tools/java/org/unicode/cldr/util/Transformer.java
@@ -19,15 +19,15 @@
     private V nextItem;
 
     public static <S, V> Transformer<S, V> iterator(Transform<S, ? extends V> transform, Iterator<? extends S> iterator) {
-        return new Transformer<S, V>(transform, iterator);
+        return new Transformer<>(transform, iterator);
     }
 
     public static <S, V> Transformer<S, V> iterator(Transform<S, ? extends V> transform, Iterable<? extends S> iterable) {
-        return new Transformer<S, V>(transform, iterable.iterator());
+        return new Transformer<>(transform, iterable.iterator());
     }
 
     public static <S, V> Transformer<S, V> iterator(Transform<S, ? extends V> transform, S... items) {
-        return new Transformer<S, V>(transform, Arrays.asList(items).iterator());
+        return new Transformer<>(transform, Arrays.asList(items).iterator());
     }
 
     public static <S, V> With<V> iterable(Transform<S, ? extends V> transform, Iterator<? extends S> iterator) {
diff --git a/tools/java/org/unicode/cldr/util/TransliteratorUtilities.java b/tools/java/org/unicode/cldr/util/TransliteratorUtilities.java
index 6a3de8f..6676d39 100644
--- a/tools/java/org/unicode/cldr/util/TransliteratorUtilities.java
+++ b/tools/java/org/unicode/cldr/util/TransliteratorUtilities.java
@@ -54,14 +54,14 @@
     }
 
     /**
-     * 
+     *
      */
     public static String getFileContents(String dir, String filename) throws IOException {
 //#if defined(FOUNDATION10) || defined(J2SE13)
 //##        BufferedReader br = TestUtil.openUTF8Reader(dir, filename);
 //#else
         BufferedReader br = FileUtilities.openUTF8Reader(dir, filename);
-//#endif 
+//#endif
         StringBuffer buffer = new StringBuffer();
         while (true) {
             String line = br.readLine();
@@ -99,39 +99,39 @@
         "'' > '&apos;' ; ";
 
     /*
-    The ampersand character (&) and the left angle bracket (<) MUST NOT appear 
-    
-    in their literal form, except when used as markup delimiters, or within a 
-    
-    comment, a processing instruction, or a CDATA section. If they are needed 
-    
-    elsewhere, they MUST be escaped using either numeric character references or 
-    
-    the strings "&amp;" and "&lt;" respectively. The right angle bracket (>) MAY 
-    
-    be represented using the string "&gt;", and MUST, for compatibility, be 
-    
-    escaped using either "&gt;" or a character reference when it appears in the string 
-    
+    The ampersand character (&) and the left angle bracket (<) MUST NOT appear
+
+    in their literal form, except when used as markup delimiters, or within a
+
+    comment, a processing instruction, or a CDATA section. If they are needed
+
+    elsewhere, they MUST be escaped using either numeric character references or
+
+    the strings "&amp;" and "&lt;" respectively. The right angle bracket (>) MAY
+
+    be represented using the string "&gt;", and MUST, for compatibility, be
+
+    escaped using either "&gt;" or a character reference when it appears in the string
+
     "]]>" in content, when that string is not marking the end of a CDATA section.
-    
-    In the content of elements, character data is any string of characters which does 
-    
-    not contain the start-delimiter of any markup and does not include the 
-    
-    CDATA-section-close delimiter, "]]>". In a CDATA section, character data is 
-    
-    any string of characters not including the CDATA-section-close delimiter, 
-    
+
+    In the content of elements, character data is any string of characters which does
+
+    not contain the start-delimiter of any markup and does not include the
+
+    CDATA-section-close delimiter, "]]>". In a CDATA section, character data is
+
+    any string of characters not including the CDATA-section-close delimiter,
+
     "]]>".
-    
-    To allow attribute values to contain both single and double quotes, the 
-    
-    apostrophe or single-quote character (') MAY be represented as "&apos;", and 
-    
+
+    To allow attribute values to contain both single and double quotes, the
+
+    apostrophe or single-quote character (') MAY be represented as "&apos;", and
+
     the double-quote character (") as "&quot;".
-    
-    
+
+
      */
 
     public static final Transliterator toXML = Transliterator.createFromRules(
diff --git a/tools/java/org/unicode/cldr/util/UExtension.java b/tools/java/org/unicode/cldr/util/UExtension.java
index eeb1592..b30f7d0 100644
--- a/tools/java/org/unicode/cldr/util/UExtension.java
+++ b/tools/java/org/unicode/cldr/util/UExtension.java
@@ -23,8 +23,8 @@
     static Relation<String, String> validKeyTypes = data.getBcp47Keys();
 
     private boolean validating = false;
-    private SortedMap<String, List<String>> keyTypes = new TreeMap<String, List<String>>();
-    private Set<String> attributes = new TreeSet<String>();
+    private SortedMap<String, List<String>> keyTypes = new TreeMap<>();
+    private Set<String> attributes = new TreeSet<>();
 
     public Set<String> getKeys() {
         return keyTypes.keySet();
@@ -82,7 +82,7 @@
                 if (list != null) {
                     throw new IllegalArgumentException("Multiple keys with same value: " + subtag);
                 }
-                list = new ArrayList<String>();
+                list = new ArrayList<>();
                 keyTypes.put(key, list);
             } else { // add subtype
                 if (key == null) {
@@ -114,6 +114,7 @@
         return this;
     }
 
+    @Override
     public String toString() {
         return "{attributes=" + attributes + ", keyTypes=" + keyTypes + "}";
     }
diff --git a/tools/java/org/unicode/cldr/util/UnicodeRelation.java b/tools/java/org/unicode/cldr/util/UnicodeRelation.java
index 46270cf..070982b 100644
--- a/tools/java/org/unicode/cldr/util/UnicodeRelation.java
+++ b/tools/java/org/unicode/cldr/util/UnicodeRelation.java
@@ -25,13 +25,14 @@
     public static SetMaker<Object> HASHSET_MAKER = new SetMaker<Object>() {
         @Override
         public Set<Object> make() {
-            return new HashSet<Object>();
+            return new HashSet<>();
         }
     };
 
     public static final SetMaker<Object> LINKED_HASHSET_MAKER = new SetMaker<Object>() {
+        @Override
         public Set<Object> make() {
-            return new LinkedHashSet<Object>();
+            return new LinkedHashSet<>();
         }
     };
 
@@ -73,7 +74,7 @@
     }
 
     public Set<T> get(String key) {
-        return data.get((String) key);
+        return data.get(key);
     }
 
     public UnicodeSet getKeys(T value) {
diff --git a/tools/java/org/unicode/cldr/util/UnicodeSetPrettyPrinter.java b/tools/java/org/unicode/cldr/util/UnicodeSetPrettyPrinter.java
index bfe4743..a533a22 100644
--- a/tools/java/org/unicode/cldr/util/UnicodeSetPrettyPrinter.java
+++ b/tools/java/org/unicode/cldr/util/UnicodeSetPrettyPrinter.java
@@ -27,9 +27,9 @@
  */
 public class UnicodeSetPrettyPrinter {
     private static final StringComparator CODEPOINT_ORDER = new UTF16.StringComparator(true, false, 0);
-    private static final UnicodeSet PATTERN_WHITESPACE = (UnicodeSet) new UnicodeSet("[[:Cn:][:Default_Ignorable_Code_Point:][:patternwhitespace:]]").freeze();
-    private static final UnicodeSet SORT_AT_END = (UnicodeSet) new UnicodeSet("[[:Cn:][:Cs:][:Co:][:Ideographic:]]").freeze();
-    private static final UnicodeSet QUOTED_SYNTAX = (UnicodeSet) new UnicodeSet("[\\[\\]\\-\\^\\&\\\\\\{\\}\\$\\:]").addAll(PATTERN_WHITESPACE).freeze();
+    private static final UnicodeSet PATTERN_WHITESPACE = new UnicodeSet("[[:Cn:][:Default_Ignorable_Code_Point:][:patternwhitespace:]]").freeze();
+    private static final UnicodeSet SORT_AT_END = new UnicodeSet("[[:Cn:][:Cs:][:Co:][:Ideographic:]]").freeze();
+    private static final UnicodeSet QUOTED_SYNTAX = new UnicodeSet("[\\[\\]\\-\\^\\&\\\\\\{\\}\\$\\:]").addAll(PATTERN_WHITESPACE).freeze();
 
     private boolean first = true;
     private StringBuffer target = new StringBuffer();
@@ -104,7 +104,7 @@
      */
     public UnicodeSetPrettyPrinter setToQuote(UnicodeSet toQuote) {
         if (toQuote != null) {
-            toQuote = (UnicodeSet) toQuote.cloneAsThawed();
+            toQuote = toQuote.cloneAsThawed();
             toQuote.addAll(PATTERN_WHITESPACE);
             this.toQuote = toQuote;
         }
@@ -120,7 +120,7 @@
         first = true;
         UnicodeSet putAtEnd = new UnicodeSet(uset).retainAll(SORT_AT_END); // remove all the unassigned gorp for now
         // make sure that comparison separates all strings, even canonically equivalent ones
-        TreeSet<String> orderedStrings = new TreeSet<String>(ordering);
+        TreeSet<String> orderedStrings = new TreeSet<>(ordering);
         for (UnicodeSetIterator it = new UnicodeSetIterator(uset); it.nextRange();) {
             if (it.codepoint == UnicodeSetIterator.IS_STRING) {
                 orderedStrings.add(it.string);
@@ -180,7 +180,7 @@
     }
 
     /**
-     * 
+     *
      */
     private void addSpaceAsNeededBefore(String s) {
         if (first) {
diff --git a/tools/java/org/unicode/cldr/util/UnicodeSets.java b/tools/java/org/unicode/cldr/util/UnicodeSets.java
index 483fbc8..9965248 100644
--- a/tools/java/org/unicode/cldr/util/UnicodeSets.java
+++ b/tools/java/org/unicode/cldr/util/UnicodeSets.java
@@ -10,7 +10,7 @@
 
 final public class UnicodeSets {
     /**
-     * Return the strings that are redundant, 
+     * Return the strings that are redundant,
      * where all of the string's code points are already in the UnicodeSet.
      * <br>Example: in [abc{ab}{ad}], {ab} is redundant, but {ad} is not.
      * Also checks where a combination of the string's substrings are otherwise
diff --git a/tools/java/org/unicode/cldr/util/UnitConverter.java b/tools/java/org/unicode/cldr/util/UnitConverter.java
index 7deee14..7439dba 100644
--- a/tools/java/org/unicode/cldr/util/UnitConverter.java
+++ b/tools/java/org/unicode/cldr/util/UnitConverter.java
@@ -2,6 +2,7 @@
 
 import java.math.BigInteger;
 import java.math.MathContext;
+import java.text.MessageFormat;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
@@ -14,9 +15,18 @@
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
+import org.unicode.cldr.util.GrammarDerivation.CompoundUnitStructure;
+import org.unicode.cldr.util.GrammarDerivation.Values;
+import org.unicode.cldr.util.GrammarInfo.GrammaticalFeature;
 import org.unicode.cldr.util.Rational.FormatStyle;
 import org.unicode.cldr.util.Rational.RationalParser;
+import org.unicode.cldr.util.StandardCodes.LstrType;
+import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo;
+import org.unicode.cldr.util.Validity.Status;
 
 import com.google.common.base.Splitter;
 import com.google.common.collect.BiMap;
@@ -30,14 +40,22 @@
 import com.google.common.collect.Multimap;
 import com.google.common.collect.TreeMultimap;
 import com.ibm.icu.impl.Row.R2;
+import com.ibm.icu.lang.UCharacter;
+import com.ibm.icu.text.PluralRules;
 import com.ibm.icu.util.Freezable;
 import com.ibm.icu.util.Output;
+import com.ibm.icu.util.ULocale;
 
 public class UnitConverter implements Freezable<UnitConverter> {
 
+    public static final Integer INTEGER_ONE = Integer.valueOf(1);
+
     static final Splitter BAR_SPLITTER = Splitter.on('-');
     static final Splitter SPACE_SPLITTER = Splitter.on(' ').trimResults().omitEmptyStrings();
 
+    public static final Set<String> HACK_SKIP_UNIT_NAMES = ImmutableSet.of("dot-per-centimeter", "dot-per-inch", "liter-per-100-kilometer", "millimeter-ofhg", "inch-ofhg");
+
+
     final RationalParser rationalParser;
 
     private Map<String,String> baseUnitToQuantity = new LinkedHashMap<>();
@@ -47,8 +65,12 @@
     private Multimap<String, String> sourceToSystems = LinkedHashMultimap.create();
     private Set<String> baseUnits;
     private Multimap<String, Continuation> continuations = TreeMultimap.create();
-    private MapComparator<String> quantityComparator; 
+    private Comparator<String> quantityComparator;
+
     private Map<String,String> fixDenormalized;
+    private ImmutableMap<String, UnitId> idToUnitId;
+
+    public final BiMap<String,String> SHORT_TO_LONG_ID;
 
     private boolean frozen = false;
 
@@ -57,17 +79,17 @@
     /** Warning: ordering is important; determines the normalized output */
     public static final Set<String> BASE_UNITS = ImmutableSet.of(
         "candela",
-        "kilogram", 
-        "meter", 
+        "kilogram",
+        "meter",
         "second",
-        "ampere", 
+        "ampere",
         "kelvin",
         // non-SI
-        "year", 
-        "bit", 
-        "item", 
-        "pixel", 
-        "em", 
+        "year",
+        "bit",
+        "item",
+        "pixel",
+        "em",
         "revolution",
         "portion"
         );
@@ -77,10 +99,19 @@
             throw new IllegalArgumentException();
         }
         baseUnitToQuantity.put(baseUnit, quantity);
-        baseUnitToStatus.put(baseUnit, quantity);
+        if (status != null) {
+            baseUnitToStatus.put(baseUnit, status);
+        }
         quantityToSimpleUnits.put(quantity, baseUnit);
     }
 
+    public static final Set<String> BASE_UNIT_PARTS = ImmutableSet.<String>builder()
+        .add("per").add("square").add("cubic").addAll(BASE_UNITS)
+        .build();
+
+    public static final Pattern PLACEHOLDER = Pattern.compile("[ \\u00A0\\u200E\\u200F\\u202F]*\\{0\\}[ \\u00A0\\u200E\\u200F\\u202F]*");
+    public static final boolean HACK = true;
+
     @Override
     public boolean isFrozen() {
         return frozen;
@@ -93,7 +124,8 @@
             rationalParser.freeze();
             sourceToTargetInfo = ImmutableMap.copyOf(sourceToTargetInfo);
             quantityToSimpleUnits = ImmutableMultimap.copyOf(quantityToSimpleUnits);
-            sourceToSystems = ImmutableMultimap.copyOf(sourceToSystems);    
+            quantityComparator = getQuantityComparator(baseUnitToQuantity, baseUnitToStatus);
+            sourceToSystems = ImmutableMultimap.copyOf(sourceToSystems);
             // other fields are frozen earlier in processing
             Builder<String> builder = ImmutableSet.<String>builder()
                 .addAll(BASE_UNITS);
@@ -103,6 +135,38 @@
             baseUnits = builder.build();
             continuations = ImmutableMultimap.copyOf(continuations);
             targetInfoComparator = new TargetInfoComparator();
+
+            Map<String, UnitId> _idToUnitId = new TreeMap<>();
+            for (Entry<String, String> shortAndLongId : SHORT_TO_LONG_ID.entrySet()) {
+                String shortId = shortAndLongId.getKey();
+                String longId = shortAndLongId.getKey();
+                UnitId uid = createUnitId(shortId).freeze();
+                boolean doTest = false;
+                Output<Rational> deprefix = new Output<>();
+                for (Entry<String, Integer> entry : uid.numUnitsToPowers.entrySet()) {
+                    final String unitPart = entry.getKey();
+                    UnitConverter.stripPrefix(unitPart, deprefix );
+                    if (!deprefix.value.equals(Rational.ONE) || !entry.getValue().equals(INTEGER_ONE)) {
+                        doTest = true;
+                        break;
+                    }
+                }
+                if (!doTest) {
+                    for (Entry<String, Integer> entry : uid.denUnitsToPowers.entrySet()) {
+                        final String unitPart = entry.getKey();
+                        UnitConverter.stripPrefix(unitPart, deprefix);
+                        if (!deprefix.value.equals(Rational.ONE)) {
+                            doTest = true;
+                            break;
+                        }
+                    }
+                }
+                if (doTest) {
+                    _idToUnitId.put(shortId, uid);
+                    _idToUnitId.put(longId, uid);
+                }
+            }
+            idToUnitId = ImmutableMap.copyOf(_idToUnitId);
         }
         return this;
     }
@@ -144,9 +208,9 @@
             return toString("x");
         }
         public String toString(String unit) {
-            return factor.toString(FormatStyle.simple) 
+            return factor.toString(FormatStyle.simple)
                 + " * " + unit
-                + (offset.equals(Rational.ZERO) ? "" : 
+                + (offset.equals(Rational.ZERO) ? "" :
                     (offset.compareTo(Rational.ZERO) < 0 ? " - " : " - ")
                     + offset.abs().toString(FormatStyle.simple));
         }
@@ -155,9 +219,9 @@
             return toDecimal("x");
         }
         public String toDecimal(String unit) {
-            return factor.toBigDecimal(MathContext.DECIMAL64) 
+            return factor.toBigDecimal(MathContext.DECIMAL64)
                 +  " * " + unit
-                + (offset.equals(Rational.ZERO) ? "" : 
+                + (offset.equals(Rational.ZERO) ? "" :
                     (offset.compareTo(Rational.ZERO) < 0 ? " - " : " - ")
                     + offset.toBigDecimal(MathContext.DECIMAL64).abs());
         }
@@ -266,13 +330,22 @@
         }
     }
 
-    public UnitConverter(RationalParser rationalParser) {
+    public UnitConverter(RationalParser rationalParser, Validity validity) {
         this.rationalParser = rationalParser;
+        // we need to pass in the validity so it is for the same CLDR version as the converter
+        Set<String> VALID_UNITS = validity.getStatusToCodes(LstrType.unit).get(Status.regular);
+        Map<String,String> _SHORT_TO_LONG_ID = new LinkedHashMap<>();
+        for (String longUnit : VALID_UNITS) {
+            int dashPos = longUnit.indexOf('-');
+            String coreUnit = longUnit.substring(dashPos+1);
+            _SHORT_TO_LONG_ID.put(coreUnit, longUnit);
+        }
+        SHORT_TO_LONG_ID = ImmutableBiMap.copyOf(_SHORT_TO_LONG_ID);
     }
 
     public void addRaw(String source, String target, String factor, String offset, String systems) {
         ConversionInfo info = new ConversionInfo(
-            factor == null ? Rational.ONE : rationalParser.parse(factor), 
+            factor == null ? Rational.ONE : rationalParser.parse(factor),
                 offset == null ? Rational.ZERO : rationalParser.parse(offset));
         Map<String, String> args = new LinkedHashMap<>();
         if (factor != null) {
@@ -339,12 +412,11 @@
         }
     }
 
-    private void addToSourceToTarget(String source, String target, ConversionInfo info, 
+    private void addToSourceToTarget(String source, String target, ConversionInfo info,
         Map<String, String> inputParameters, String systems) {
         if (sourceToTargetInfo.isEmpty()) {
             baseUnitToQuantity = ImmutableBiMap.copyOf(baseUnitToQuantity);
             baseUnitToStatus = ImmutableMap.copyOf(baseUnitToStatus);
-            quantityComparator = new MapComparator<>(baseUnitToQuantity.values()).freeze();
         } else if (sourceToTargetInfo.containsKey(source)) {
             throw new IllegalArgumentException("Duplicate source: " + source + ", " + target);
         }
@@ -359,6 +431,20 @@
         }
     }
 
+    private Comparator<String> getQuantityComparator(Map<String, String> baseUnitToQuantity2, Map<String, String> baseUnitToStatus2) {
+        // We want to sort all the quantities so that we have a natural ordering within compound units. So kilowatt-hour, not hour-kilowatt.
+        // For simple quantities, just use the ordering from baseUnitToStatus
+        MapComparator<String> simpleBaseUnitComparator = new MapComparator<>(baseUnitToStatus2.keySet()).freeze();
+        // For non-symbol quantities, use the ordering of the UnitIds
+        Map<UnitId, String> unitIdToQuantity = new TreeMap<>();
+        for (Entry<String, String> buq : baseUnitToQuantity2.entrySet()) {
+            UnitId uid = new UnitId(simpleBaseUnitComparator).add(continuations, buq.getKey(), true, 1).freeze();
+            unitIdToQuantity.put(uid, buq.getValue());
+        }
+        // System.out.println(Joiner.on("\n").join(unitIdToQuantity.values()));
+        return new MapComparator<>(unitIdToQuantity.values()).freeze();
+    }
+
     public Set<String> canConvertBetween(String unit) {
         TargetInfo targetInfo = sourceToTargetInfo.get(unit);
         if (targetInfo == null) {
@@ -424,13 +510,13 @@
     public ConversionInfo parseUnitId (String derivedUnit, Output<String> metricUnit, boolean showYourWork) {
         metricUnit.value = null;
 
-        UnitId outputUnit = new UnitId();
+        UnitId outputUnit = new UnitId(UNIT_COMPARATOR);
         Rational numerator = Rational.ONE;
         Rational denominator = Rational.ONE;
         boolean inNumerator = true;
         int power = 1;
 
-        Output<Rational> deprefix = new Output<>();      
+        Output<Rational> deprefix = new Output<>();
         Rational offset = Rational.ZERO;
         int countUnits = 0;
         for (Iterator<String> it = Continuation.split(derivedUnit, continuations).iterator(); it.hasNext();) {
@@ -553,25 +639,26 @@
             }
             return o1.compareTo(o2);
         }
-    };
+    }
 
     Comparator<String> UNIT_COMPARATOR = new UnitComparator();
 
-    public static final Set<String> BASE_UNIT_PARTS = ImmutableSet.<String>builder()
-        .add("per").add("square").add("cubic").addAll(BASE_UNITS)
-        .build();
-
-    /** 
+    /**
      * Only handles the canonical units; no kilo-, only normalized, etc.
      * @author markdavis
      *
      */
-    public class UnitId implements Freezable<UnitId> {
-        private Map<String, Integer> numUnitsToPowers = new TreeMap<>(UNIT_COMPARATOR);
-        private Map<String, Integer> denUnitsToPowers = new TreeMap<>(UNIT_COMPARATOR);
+    public class UnitId implements Freezable<UnitId>, Comparable<UnitId> {
+        public Map<String, Integer> numUnitsToPowers;
+        public Map<String, Integer> denUnitsToPowers;
+        public EntrySetComparator<String, Integer> entrySetComparator;
         private boolean frozen = false;
 
-        private UnitId() {} // 
+        private UnitId(Comparator<String> comparator) {
+            numUnitsToPowers = new TreeMap<>(comparator);
+            denUnitsToPowers = new TreeMap<>(comparator);
+            entrySetComparator = new EntrySetComparator<String, Integer>(comparator, Comparator.naturalOrder());
+        } //
 
         private UnitId add(Multimap<String, Continuation> continuations, String compoundUnit, boolean groupInNumerator, int groupPower) {
             if (frozen) {
@@ -585,7 +672,7 @@
                 case "square": power = 2; break;
                 case "cubic": power = 3; break;
                 case "per": inNumerator = false; break; // sticky, ignore multiples
-                default: 
+                default:
                     if (unitPart.startsWith("pow")) {
                         power = Integer.parseInt(unitPart.substring(3));
                     } else {
@@ -621,13 +708,13 @@
                         }
                     }
                     switch (power) {
-                    case 1: 
+                    case 1:
                         break;
-                    case 2: 
+                    case 2:
                         builder.append("square-"); break;
-                    case 3: 
+                    case 3:
                         builder.append("cubic-"); break;
-                    default: 
+                    default:
                         if (power > 3) {
                             builder.append("pow" + power + "-");
                         } else {
@@ -641,10 +728,166 @@
             }
             return builder.toString();
         }
+
+        public String toString(LocaleStringProvider resolvedFile, String width, String _pluralCategory, String caseVariant, Multimap<UnitPathType, String> partsUsed, boolean maximal) {
+            if (partsUsed != null) {
+                partsUsed.clear();
+            }
+            String result = null;
+            String numerator = null;
+            String timesPattern = null;
+            String placeholderPattern = null;
+            Output<Integer> deprefix = new Output<>();
+
+            PlaceholderLocation placeholderPosition = PlaceholderLocation.missing;
+            Matcher placeholderMatcher = PLACEHOLDER.matcher("");
+            Output<String> unitPatternOut = new Output<>();
+
+            PluralInfo pluralInfo = CLDRConfig.getInstance().getSupplementalDataInfo().getPlurals(resolvedFile.getLocaleID());
+            PluralRules pluralRules = pluralInfo.getPluralRules();
+            String singularPluralCategory = pluralRules.select(1d);
+            final ULocale locale = new ULocale(resolvedFile.getLocaleID());
+            String fullPerPattern = null;
+            int negCount = 0;
+
+            for (int i = 1; i >= 0; --i) { // two passes, numerator then den.
+                boolean positivePass = i > 0;
+                if (!positivePass) {
+                    switch(locale.toString()) {
+                    case "de": caseVariant = "accusative"; break; // German pro rule
+                    }
+                    numerator = result; // from now on, result ::= denominator
+                    result = null;
+                }
+
+                Map<String, Integer> target = positivePass ? numUnitsToPowers : denUnitsToPowers;
+                int unitsLeft = target.size();
+                for (Entry<String, Integer> entry : target.entrySet()) {
+                    String possiblyPrefixedUnit = entry.getKey();
+                    String unit = stripPrefixInt(possiblyPrefixedUnit, deprefix);
+                    String genderVariant = UnitPathType.gender.getTrans(resolvedFile, "long", unit, null, null, null, partsUsed);
+
+                    int power = entry.getValue();
+                    unitsLeft--;
+                    String pluralCategory = unitsLeft == 0 && positivePass ? _pluralCategory : singularPluralCategory;
+
+                    if (!positivePass) {
+                        if (maximal && 0 == negCount++) { // special case exact match for per form, and no previous result
+                            if (true) {
+                                throw new UnsupportedOperationException("not yet implemented fully");
+                            }
+                            String fullUnit;
+                            switch(power) {
+                            case 1: fullUnit = unit; break;
+                            case 2: fullUnit = "square-" + unit; break;
+                            case 3: fullUnit = "cubic-" + unit; break;
+                            default: throw new IllegalArgumentException("powers > 3 not supported");
+                            }
+                            fullPerPattern = UnitPathType.perUnit.getTrans(resolvedFile, width, fullUnit, _pluralCategory, caseVariant, genderVariant, partsUsed);
+                            // if there is a special form, we'll use it
+                            if (fullPerPattern != null) {
+                                continue;
+                            }
+                        }
+                    }
+
+                    // handle prefix, like kilo-
+                    String prefixPattern = null;
+                    if (deprefix.value != 1) {
+                        prefixPattern = UnitPathType.prefix.getTrans(resolvedFile, width, "10p" + deprefix.value, _pluralCategory, caseVariant, genderVariant, partsUsed);
+                    }
+
+                    // get the core pattern. Detect and remove the the placeholder (and surrounding spaces)
+                    String unitPattern = UnitPathType.unit.getTrans(resolvedFile, width, unit, pluralCategory, caseVariant, genderVariant, partsUsed);
+                    if (unitPattern == null) {
+                        return null; // unavailable
+                    }
+                    // we are set up for 2 kinds of placeholder patterns for units. {0}\s?stuff or stuff\s?{0}, or nothing(Eg Arabic)
+                    placeholderPosition = extractUnit(placeholderMatcher, unitPattern, unitPatternOut);
+                    if (placeholderPosition == PlaceholderLocation.middle) {
+                        return null; // signal we can't handle, but shouldn't happen with well-formed data.
+                    } else if (placeholderPosition != PlaceholderLocation.missing) {
+                        unitPattern = unitPatternOut.value;
+                        placeholderPattern = placeholderMatcher.group();
+                    }
+
+                    // we have all the pieces, so build it up
+                    if (prefixPattern != null) {
+                        unitPattern = combineLowercasing(locale, width, prefixPattern, unitPattern);
+                    }
+
+                    String powerPattern = null;
+                    switch (power) {
+                    case 1:
+                        break;
+                    case 2:
+                        powerPattern = UnitPathType.power.getTrans(resolvedFile, width, "power2", pluralCategory, caseVariant, genderVariant, partsUsed);
+                        break;
+                    case 3:
+                        powerPattern = UnitPathType.power.getTrans(resolvedFile, width, "power3", pluralCategory, caseVariant, genderVariant, partsUsed);
+                        break;
+                    default:
+                        throw new IllegalArgumentException("No power pattern > 3: " + this);
+                    }
+
+                    if (powerPattern != null) {
+                        unitPattern = combineLowercasing(locale, width, powerPattern, unitPattern);
+                    }
+
+                    if (result != null) {
+                        if (timesPattern == null) {
+                            timesPattern = getTimesPattern(resolvedFile, width);
+                        }
+                        result = MessageFormat.format(timesPattern, result, unitPattern);
+                    } else {
+                        result = unitPattern;
+                    }
+                }
+            }
+
+            // if there is a fullPerPattern, then we use it instead of per pattern + first denominator element
+            if (fullPerPattern != null) {
+                if (numerator != null) {
+                    numerator = MessageFormat.format(fullPerPattern, numerator);
+                } else {
+                    numerator = fullPerPattern;
+                    placeholderPattern = null;
+                }
+                if (result != null) {
+                    if (timesPattern == null) {
+                        timesPattern = getTimesPattern(resolvedFile, width);
+                    }
+                    numerator = MessageFormat.format(timesPattern, numerator, result);
+                }
+                result = numerator;
+            } else {
+                // glue the two parts together, if we have two of them
+                if (result == null) {
+                    result = numerator;
+                } else {
+                    String perPattern = UnitPathType.per.getTrans(resolvedFile, width, null, _pluralCategory, caseVariant, null, partsUsed);
+                    if (numerator == null) {
+                        result = MessageFormat.format(perPattern, "", result).trim();
+                    } else {
+                        result = MessageFormat.format(perPattern, numerator, result);
+                    }
+                }
+            }
+            return addPlaceholder(result, placeholderPattern, placeholderPosition);
+        }
+
+        public String getTimesPattern(LocaleStringProvider resolvedFile, String width) {  // TODO fix hack!
+            if (HACK && "en".equals(resolvedFile.getLocaleID())) {
+                return "{0}-{1}";
+            }
+            String timesPatternPath = "//ldml/units/unitLength[@type=\"" + width + "\"]/compoundUnit[@type=\"times\"]/compoundUnitPattern";
+            return resolvedFile.getStringValue(timesPatternPath);
+        }
+
         @Override
         public boolean equals(Object obj) {
             UnitId other = (UnitId) obj;
-            return numUnitsToPowers.equals(other.numUnitsToPowers) 
+            return numUnitsToPowers.equals(other.numUnitsToPowers)
                 && denUnitsToPowers.equals(other.denUnitsToPowers);
         }
         @Override
@@ -668,7 +911,7 @@
         }
 
         public UnitId resolve() {
-            UnitId result = new UnitId();
+            UnitId result = new UnitId(UNIT_COMPARATOR);
             result.numUnitsToPowers.putAll(numUnitsToPowers);
             result.denUnitsToPowers.putAll(denUnitsToPowers);
             for (Entry<String, Integer> entry : numUnitsToPowers.entrySet()) {
@@ -691,10 +934,174 @@
             }
             return result.freeze();
         }
+
+        @Override
+        public int compareTo(UnitId o) {
+            int diff = compareEntrySets(numUnitsToPowers.entrySet(), o.numUnitsToPowers.entrySet(), entrySetComparator);
+            if (diff != 0) return diff;
+            return compareEntrySets(denUnitsToPowers.entrySet(), o.denUnitsToPowers.entrySet(), entrySetComparator);
+        }
+
+        /**
+         * Default rules
+         * Prefixes & powers: the gender of the whole is the same as the gender of the operand. In pseudocode:
+            gender(square, meter) = gender(meter)
+            gender(kilo, meter) = gender(meter)
+
+         * Per: the gender of the whole is the gender of the numerator. If there is no numerator, then the gender of the denominator
+            gender(gram per meter) = gender(gram)
+
+         * Times: the gender of the whole is the gender of the last operand
+            gender(gram-meter) = gender(gram)
+         * @param source
+         * @param partsUsed
+
+         * @return
+         * TODO: add parameter to short-circuit the lookup if the unit is not a compound.
+         */
+        public String getGender(CLDRFile resolvedFile, Output<String> source, Multimap<UnitPathType, String> partsUsed) {
+            // will not be empty
+
+            GrammarDerivation gd = null;
+            //Values power = gd.get(GrammaticalFeature.grammaticalGender, CompoundUnitStructure.power); no data available yet
+            //Values prefix = gd.get(GrammaticalFeature.grammaticalGender, CompoundUnitStructure.prefix);
+
+
+            Map<String,Integer> determiner;
+            if (numUnitsToPowers.isEmpty()) {
+                determiner = denUnitsToPowers;
+            } else if (denUnitsToPowers.isEmpty()) {
+                determiner = numUnitsToPowers;
+            } else {
+                if (gd == null) {
+                    gd = SupplementalDataInfo.getInstance().getGrammarDerivation(resolvedFile.getLocaleID());
+                }
+                Values per = gd.get(GrammaticalFeature.grammaticalGender, CompoundUnitStructure.per);
+                boolean useFirst = per.value0.equals("0");
+                determiner = useFirst ? numUnitsToPowers // otherwise use numerator if possible
+                    : denUnitsToPowers;
+                // TODO add test that the value is 0 or 1, so that if it fails we know to upgrade this code.
+            }
+
+            Entry<String, Integer> bestMeasure;
+            if (determiner.size() == 1) {
+                bestMeasure = determiner.entrySet().iterator().next();
+            } else {
+                if (gd == null) {
+                    gd = SupplementalDataInfo.getInstance().getGrammarDerivation(resolvedFile.getLocaleID());
+                }
+                Values times = gd.get(GrammaticalFeature.grammaticalGender, CompoundUnitStructure.times);
+                boolean useFirst = times.value0.equals("0");
+                if (useFirst) {
+                    bestMeasure = determiner.entrySet().iterator().next();
+                } else {
+                    bestMeasure = null; // we know the determiner is not empty, but this makes the compiler
+                    for (Entry<String, Integer> entry : determiner.entrySet()) {
+                        bestMeasure = entry;
+                    }
+                }
+            }
+            String strippedUnit = stripPrefixInt(bestMeasure.getKey(), null);
+            String gender = UnitPathType.gender.getTrans(resolvedFile, "long", strippedUnit, null, null, null, partsUsed);
+            if (gender != null && source != null) {
+                source.value = strippedUnit;
+            }
+            return gender;
+        }
+
     }
 
+    public enum PlaceholderLocation {before, middle, after, missing}
+
+    public static String addPlaceholder(String result, String placeholderPattern, PlaceholderLocation placeholderPosition) {
+        return placeholderPattern == null ? result
+            : placeholderPosition == PlaceholderLocation.before ? placeholderPattern + result
+                : result + placeholderPattern;
+    }
+
+    /**
+     * Returns the location of the placeholder. Call placeholderMatcher.group() after calling this to get the placeholder.
+     * @param placeholderMatcher
+     * @param unitPattern
+     * @param unitPatternOut
+     * @param before
+     * @return
+     */
+    public static PlaceholderLocation extractUnit(Matcher placeholderMatcher, String unitPattern, Output<String> unitPatternOut) {
+        if (placeholderMatcher.reset(unitPattern).find()) {
+            if (placeholderMatcher.start() == 0) {
+                unitPatternOut.value = unitPattern.substring(placeholderMatcher.end());
+                return PlaceholderLocation.before;
+            } else if (placeholderMatcher.end() == unitPattern.length()) {
+                unitPatternOut.value = unitPattern.substring(0, placeholderMatcher.start());
+                return PlaceholderLocation.after;
+            } else {
+                unitPatternOut.value = unitPattern;
+                return PlaceholderLocation.middle;
+            }
+        } else {
+            unitPatternOut.value = unitPattern;
+            return PlaceholderLocation.missing;
+        }
+    }
+
+    public static String combineLowercasing(final ULocale locale, String width, String prefixPattern, String unitPattern) {
+        // catch special case, ZentiLiter
+        if (width.equals("long") && !prefixPattern.contains(" {") && !prefixPattern.contains(" {")) {
+            unitPattern = UCharacter.toLowerCase(locale, unitPattern);
+        }
+        unitPattern = MessageFormat.format(prefixPattern, unitPattern);
+        return unitPattern;
+    }
+
+    public static class EntrySetComparator<K extends Comparable<K>,V> implements Comparator<Entry<K, V>> {
+        Comparator<K> kComparator;
+        Comparator<V> vComparator;
+        public EntrySetComparator(Comparator<K> kComparator, Comparator<V> vComparator) {
+            this.kComparator = kComparator;
+            this.vComparator = vComparator;
+        }
+        @Override
+        public int compare(Entry<K, V> o1, Entry<K, V> o2) {
+            int diff = kComparator.compare(o1.getKey(), o2.getKey());
+            if (diff != 0) {
+                return diff;
+            }
+            diff = vComparator.compare(o1.getValue(), o2.getValue());
+            if (diff != 0) {
+                return diff;
+            }
+            return o1.getKey().compareTo(o2.getKey());
+        }
+    }
+
+    public static <K extends Comparable<K>, V extends Comparable<V>, T extends Entry<K, V>> int compareEntrySets(Collection<T> o1, Collection<T> o2, Comparator<T> comparator) {
+        Iterator<T> iterator1 = o1.iterator();
+        Iterator<T> iterator2 = o2.iterator();
+        while (true) {
+            if (!iterator1.hasNext()) {
+                return iterator2.hasNext() ? -1 : 0;
+            } else if (!iterator2.hasNext()) {
+                return 1;
+            }
+            T item1 = iterator1.next();
+            T item2 = iterator2.next();
+            int diff = comparator.compare(item1, item2);
+            if (diff != 0) {
+                return diff;
+            }
+        }
+    }
+
+    private ConcurrentHashMap<String, UnitId> UNIT_ID = new ConcurrentHashMap<>();
+    // TODO This is safe but should use regular cache
     public final UnitId createUnitId(String unit) {
-        return new UnitId().add(continuations, unit, true, 1).freeze();
+        UnitId result = UNIT_ID.get(unit);
+        if (result == null) {
+            result = new UnitId(UNIT_COMPARATOR).add(continuations, unit, true, 1).freeze();
+            UNIT_ID.put(unit, result);
+        }
+        return result;
     }
 
     public boolean isBaseUnit(String unit) {
@@ -710,54 +1117,78 @@
     }
 
     // TODO change to TRIE if the performance isn't good enough, or restructure with regex
-    public static final ImmutableMap<String, Rational> PREFIXES = ImmutableMap.<String, Rational>builder()
-        .put("yocto", Rational.pow10(-24))
-        .put("zepto", Rational.pow10(-21))
-        .put("atto", Rational.pow10(-18))
-        .put("femto", Rational.pow10(-15))
-        .put("pico", Rational.pow10(-12))
-        .put("nano", Rational.pow10(-9))
-        .put("micro", Rational.pow10(-6))
-        .put("milli", Rational.pow10(-3))
-        .put("centi", Rational.pow10(-2))
-        .put("deci", Rational.pow10(-1))
-        .put("deka", Rational.pow10(1))
-        .put("hecto", Rational.pow10(2))
-        .put("kilo", Rational.pow10(3))
-        .put("mega", Rational.pow10(6))
-        .put("giga", Rational.pow10(9))
-        .put("tera", Rational.pow10(12))
-        .put("peta", Rational.pow10(15))
-        .put("exa", Rational.pow10(18))
-        .put("zetta", Rational.pow10(21))
-        .put("yotta", Rational.pow10(24))        
+    public static final ImmutableMap<String, Integer> PREFIX_POWERS = ImmutableMap.<String, Integer>builder()
+        .put("yocto", -24)
+        .put("zepto", -21)
+        .put("atto", -18)
+        .put("femto", -15)
+        .put("pico", -12)
+        .put("nano", -9)
+        .put("micro", -6)
+        .put("milli", -3)
+        .put("centi", -2)
+        .put("deci", -1)
+        .put("deka", 1)
+        .put("hecto", 2)
+        .put("kilo", 3)
+        .put("mega", 6)
+        .put("giga", 9)
+        .put("tera", 12)
+        .put("peta", 15)
+        .put("exa", 18)
+        .put("zetta", 21)
+        .put("yotta", 24)
         .build();
 
+    public static final ImmutableMap<String, Rational> PREFIXES;
+    static {
+        Map<String, Rational> temp = new LinkedHashMap<>();
+        for (Entry<String, Integer> entry : PREFIX_POWERS.entrySet()) {
+            temp.put(entry.getKey(), Rational.pow10(entry.getValue()));
+        }
+        PREFIXES = ImmutableMap.copyOf(temp);
+    }
+
     static final Set<String> SKIP_PREFIX = ImmutableSet.of(
-        "millimeter-ofhg", 
+        "millimeter-ofhg",
         "kilogram"
         );
 
-    /** 
-     * If there is no prefix, return the unit and Rational.ONE.
-     * If there is a prefix return the unit (with prefix stripped) and the prefix factor 
+    /**
+     * If there is no prefix, return the unit and ONE.
+     * If there is a prefix return the unit (with prefix stripped) and the prefix factor
      * */
-    private String stripPrefix(String unit, Output<Rational> deprefix) {
-        deprefix.value = Rational.ONE;
+    private static <V> String stripPrefixCommon(String unit, Output<V> deprefix, Map<String, V> unitMap) {
         if (SKIP_PREFIX.contains(unit)) {
             return unit;
         }
 
-        for (Entry<String, Rational> entry : PREFIXES.entrySet()) {
+        for (Entry<String, V> entry : unitMap.entrySet()) {
             String prefix = entry.getKey();
             if (unit.startsWith(prefix)) {
-                deprefix.value = entry.getValue();
+                if (deprefix != null) {
+                    deprefix.value = entry.getValue();
+                }
                 return unit.substring(prefix.length());
             }
         }
         return unit;
     }
 
+    public static String stripPrefix(String unit, Output<Rational> deprefix) {
+        if (deprefix != null) {
+            deprefix.value = Rational.ONE;
+        }
+        return stripPrefixCommon(unit, deprefix, PREFIXES);
+    }
+
+    public static String stripPrefixInt(String unit, Output<Integer> deprefix) {
+        if (deprefix != null) {
+            deprefix.value = Integer.valueOf(1);
+        }
+        return stripPrefixCommon(unit, deprefix, PREFIX_POWERS);
+    }
+
     public BiMap<String, String> getBaseUnitToQuantity() {
         return (BiMap<String, String>) baseUnitToQuantity;
     }
@@ -809,7 +1240,7 @@
     }
 
     public Map<String, TargetInfo> getInternalConversionData() {
-        return sourceToTargetInfo; 
+        return sourceToTargetInfo;
     }
 
     public Multimap<String, String> getSourceToSystems() {
@@ -829,18 +1260,18 @@
     }
 
     public static final Set<String> OTHER_SYSTEM = ImmutableSet.of(
-        "g-force", "dalton", "calorie", "earth-radius", 
-        "solar-radius", "solar-radius", "astronomical-unit", "light-year", "parsec", "earth-mass", 
-        "solar-mass", "bit", "byte", "karat", "solar-luminosity", "ofhg", "atmosphere", 
+        "g-force", "dalton", "calorie", "earth-radius",
+        "solar-radius", "solar-radius", "astronomical-unit", "light-year", "parsec", "earth-mass",
+        "solar-mass", "bit", "byte", "karat", "solar-luminosity", "ofhg", "atmosphere",
         "pixel", "dot", "permillion", "permyriad", "permille", "percent", "karat", "portion",
         "minute", "hour", "day", "day-person", "week", "week-person",
         "year", "year-person", "decade", "month", "month-person", "century",
         "arc-second", "arc-minute", "degree", "radian", "revolution",
-        "electronvolt", 
+        "electronvolt",
         // quasi-metric
         "dunam", "mile-scandinavian", "carat", "cup-metric", "pint-metric"
         );
-    
+
     private void addSystems(Set<String> result, String subunit) {
         Collection<String> systems = sourceToSystems.get(subunit);
         if (!systems.isEmpty()) {
@@ -949,4 +1380,64 @@
     public Set<String> getQuantities() {
         return getBaseUnitToQuantity().inverse().keySet();
     }
+
+    public enum UnitComplexity {simple, non_simple}
+
+    private ConcurrentHashMap<String, UnitComplexity> COMPLEXITY = new ConcurrentHashMap<>();
+    // TODO This is safe but should use regular cache
+
+    public UnitComplexity getComplexity (String longOrShortId){
+        UnitComplexity result = COMPLEXITY.get(longOrShortId);
+        if (result == null) {
+            String shortId;
+            String longId = getLongId(longOrShortId);
+            if (longId == null) {
+                longId = longOrShortId;
+                shortId = SHORT_TO_LONG_ID.inverse().get(longId);
+            } else {
+                shortId = longOrShortId;
+            }
+            UnitId uid = createUnitId(shortId);
+            result = UnitComplexity.simple;
+
+            if (uid.numUnitsToPowers.size() != 1 || !uid.denUnitsToPowers.isEmpty()) {
+                result = UnitComplexity.non_simple;
+            } else {
+                Output<Rational> deprefix = new Output<>();
+                for (Entry<String, Integer> entry : uid.numUnitsToPowers.entrySet()) {
+                    final String unitPart = entry.getKey();
+                    UnitConverter.stripPrefix(unitPart, deprefix );
+                    if (!deprefix.value.equals(Rational.ONE) || !entry.getValue().equals(INTEGER_ONE)) {
+                        result = UnitComplexity.non_simple;
+                        break;
+                    }
+                }
+                if (result == UnitComplexity.simple) {
+                    for (Entry<String, Integer> entry : uid.denUnitsToPowers.entrySet()) {
+                        final String unitPart = entry.getKey();
+                        UnitConverter.stripPrefix(unitPart, deprefix);
+                        if (!deprefix.value.equals(Rational.ONE)) {
+                            result = UnitComplexity.non_simple;
+                            break;
+                        }
+                    }
+                }
+            }
+            COMPLEXITY.put(shortId, result);
+            COMPLEXITY.put(longId, result);
+        }
+        return result;
+    }
+
+    public boolean isSimple(String x) {
+        return getComplexity(x) == UnitComplexity.simple;
+    }
+
+    public String getLongId(String shortUnitId) {
+        return CldrUtility.ifNull(SHORT_TO_LONG_ID.get(shortUnitId), shortUnitId);
+    }
+
+    public String getShortId(String longUnitId) {
+        return CldrUtility.ifNull(SHORT_TO_LONG_ID.inverse().get(longUnitId), longUnitId);
+    }
 }
diff --git a/tools/java/org/unicode/cldr/util/UnitPathType.java b/tools/java/org/unicode/cldr/util/UnitPathType.java
new file mode 100644
index 0000000..c491ef1
--- /dev/null
+++ b/tools/java/org/unicode/cldr/util/UnitPathType.java
@@ -0,0 +1,155 @@
+package org.unicode.cldr.util;
+
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.Set;
+
+import org.unicode.cldr.util.GrammarInfo.GrammaticalFeature;
+
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Multimap;
+
+public enum UnitPathType {
+    // we may add features over time
+    unit("kilometer", EnumSet.of(
+        GrammarInfo.GrammaticalFeature.grammaticalNumber,
+        GrammarInfo.GrammaticalFeature.grammaticalCase),
+        null),
+    perUnit("minute", null, null),
+    times(null, null, ImmutableMultimap.<String,String>builder()
+        .put("", "newton-meter")
+        .put("", "kilowatt-hour")
+        .build()),
+    per(null, null, ImmutableMultimap.<String,String>builder()
+        .put("", "meter-per-second")
+        .put("", "mile-per-gallon")
+        .build()),
+    prefix(null, null, ImmutableMultimap.<String,String>builder()
+        .put("10p2", "hectopascal")
+        .put("10p3", "kilometer")
+        .put("10p6", "megabyte")
+        .put("10p9", "gigahertz")
+        .put("10p12", "terabyte")
+        .put("10p15", "petabyte")
+        .put("10p-1", "deciliter")
+        .put("10p-2", "centimeter")
+        .put("10p-3", "milligram")
+        .put("10p-6", "microsecond")
+        .put("10p-9", "nanosecond")
+        .put("10p-12", "picometer")
+        .build()),
+    power("power2",
+        EnumSet.of(
+            GrammarInfo.GrammaticalFeature.grammaticalNumber,
+            GrammarInfo.GrammaticalFeature.grammaticalCase,
+            GrammarInfo.GrammaticalFeature.grammaticalGender),
+        ImmutableMultimap.<String,String>builder()
+        .put("power2", "square-meter")
+        .put("power2", "square-second")
+        .put("power3", "cubic-meter")
+        .put("power3", "cubic-second")
+        .build()),
+    duration(null, null, null),
+    gender(null,null, null),
+    coordinate(null, null, null),
+    displayName(null, null, null)
+    ;
+
+    public final Set<GrammaticalFeature> features;
+    public final Set<String> sampleShortUnitType;
+    public final ImmutableMultimap<String,String> sampleComposedShortUnitIds;
+
+    private UnitPathType(String sampleType, Set<GrammarInfo.GrammaticalFeature> features, ImmutableMultimap<String,String> sampleComposedLongUnits) {
+        this.sampleShortUnitType = Collections.singleton(sampleType);
+        this.sampleComposedShortUnitIds = sampleComposedLongUnits;
+        this.features = features == null ? Collections.emptySet() : ImmutableSet.copyOf(features);
+    }
+
+    public static UnitPathType getPathType(XPathParts parts) {
+        if (!parts.getElement(2).equals("unitLength")) {
+            return null;
+        }
+        switch (parts.getElement(-1)) {
+        case "compoundUnitPattern": return "times".equals(parts.getAttributeValue(-2, "type")) ? UnitPathType.times : UnitPathType.per;
+        case "unitPrefixPattern": return UnitPathType.prefix;
+        case "compoundUnitPattern1": return UnitPathType.power;
+        case "unitPattern": return UnitPathType.unit;
+        case "perUnitPattern": return UnitPathType.perUnit;
+        case "prefix": return UnitPathType.prefix;
+        case "gender": return UnitPathType.gender;
+        case "coordinateUnitPattern": return UnitPathType.coordinate;
+        case "durationUnit": return UnitPathType.duration;
+        case "alias": return null;
+        case "displayName": return UnitPathType.displayName;
+        }
+        throw new IllegalArgumentException("PathType: " + parts);
+    }
+
+    public String getTranslationPath(LocaleStringProvider resolvedFile, String width, String shortUnitId, String pluralCategory,
+        String caseVariant, String genderVariant) {
+        UnitPathType pathType = this;
+        final String pathPrefix = "//ldml/units/unitLength[@type=\"" + width + "\"]/";
+        String longUnitId;
+        GrammarInfo grammarInfo1;
+        UnitConverter uc = CLDRConfig.getInstance().getSupplementalDataInfo().getUnitConverter();
+
+        String grammaticalAttributes;
+        switch (pathType) {
+        case times:
+            return pathPrefix + "compoundUnit[@type=\"" + "times" + "\"]/compoundUnitPattern";
+        case per:
+            return pathPrefix + "compoundUnit[@type=\"" + "per" + "\"]/compoundUnitPattern";
+        case prefix:
+            longUnitId = CLDRConfig.getInstance().getSupplementalDataInfo().getUnitConverter().getLongId(shortUnitId);
+            return pathPrefix + "compoundUnit[@type=\"" + longUnitId + "\"]/unitPrefixPattern";
+        case power:
+            longUnitId = uc.getLongId(shortUnitId);
+            grammarInfo1 = CLDRConfig.getInstance().getSupplementalDataInfo().getGrammarInfo(resolvedFile.getLocaleID());
+            grammaticalAttributes = GrammarInfo.getGrammaticalInfoAttributes(grammarInfo1, pathType, pluralCategory, genderVariant, caseVariant);
+            return pathPrefix + "compoundUnit[@type=\"" + longUnitId + "\"]/compoundUnitPattern1" + grammaticalAttributes;
+        case unit:
+            longUnitId = uc.getLongId(shortUnitId);
+            grammarInfo1 = CLDRConfig.getInstance().getSupplementalDataInfo().getGrammarInfo(resolvedFile.getLocaleID());
+            grammaticalAttributes = GrammarInfo.getGrammaticalInfoAttributes(grammarInfo1, pathType, pluralCategory, genderVariant, caseVariant);
+            return pathPrefix + "unit[@type=\""  + longUnitId + "\"]/unitPattern" + grammaticalAttributes;
+        case displayName:
+            longUnitId = uc.getLongId(shortUnitId);
+            return pathPrefix + "unit[@type=\""  + longUnitId + "\"]/displayName";
+        case perUnit:
+            longUnitId = uc.getLongId(shortUnitId);
+            return pathPrefix + "unit[@type=\"" + longUnitId + "\"]/perUnitPattern";
+        case gender:
+            if (!width.equals("long")) {
+                throw new IllegalArgumentException("illegal width for gender: ");
+            }
+            longUnitId = uc.getLongId(shortUnitId);
+            return pathPrefix + "unit[@type=\"" + uc.getLongId(shortUnitId) + "\"]/gender";
+        case coordinate:
+            return pathPrefix + "coordinateUnit/coordinateUnitPattern[@type=\"" + shortUnitId + "\"]";
+        case duration:
+            return "//ldml/units/durationUnit[@type=\"" + shortUnitId + "\"]/durationUnitPattern";
+        }
+        throw new IllegalArgumentException("PathType: " + pathType);
+    }
+
+    public  String getTrans(LocaleStringProvider resolvedFile, String width, String shortUnitId, String pluralCategory, String caseVariant, String genderVariant, Multimap<UnitPathType, String> partsUsed) {
+        UnitPathType pathType = this;
+        String path = pathType.getTranslationPath(resolvedFile, width, shortUnitId, pluralCategory, caseVariant, genderVariant);
+        String result = resolvedFile.getStringValue(path);
+        if (result == null) {
+            int debug = 0;
+        }
+
+        if (partsUsed != null) {
+            CLDRFile.Status status = new CLDRFile.Status();
+            String foundLocale = resolvedFile.getSourceLocaleID(path, status );
+            partsUsed.put(pathType,
+                (result != null ? "«" + result + "»": "∅")
+                + (foundLocale.equals(resolvedFile.getLocaleID()) ? "" : "\n\t\tactualLocale: " + foundLocale)
+                + (status.pathWhereFound.equals(path) ? "" : "\n\t\trequestPath: " + path + "\n\t\tactualPath:  " + status.pathWhereFound)
+                );
+        }
+        return result;
+    }
+}
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/util/UnitPreferences.java b/tools/java/org/unicode/cldr/util/UnitPreferences.java
index 91f228a..7b8ca8b 100644
--- a/tools/java/org/unicode/cldr/util/UnitPreferences.java
+++ b/tools/java/org/unicode/cldr/util/UnitPreferences.java
@@ -22,7 +22,7 @@
     Set<String> usages = new TreeSet<>();
 
     /**
-     * Special class encapsulating 
+     * Special class encapsulating
      * @author markdavis
      *
      */
@@ -56,6 +56,7 @@
         public String toString(String baseUnit) {
             return geq + (baseUnit == null ? "": " " + baseUnit) + ", " + unit + (skeleton.isEmpty() ? "" : ", " + skeleton);
         }
+        @Override
         public String toString() {
             return toString(null);
         }
diff --git a/tools/java/org/unicode/cldr/util/Units.java b/tools/java/org/unicode/cldr/util/Units.java
index ee6a7d8..80cc33d 100644
--- a/tools/java/org/unicode/cldr/util/Units.java
+++ b/tools/java/org/unicode/cldr/util/Units.java
@@ -1,16 +1,27 @@
 package org.unicode.cldr.util;
 
 import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
 import java.util.regex.Pattern;
 
 import org.unicode.cldr.test.ExampleGenerator;
+import org.unicode.cldr.util.StandardCodes.LstrType;
+import org.unicode.cldr.util.Validity.Status;
 
+import com.google.common.collect.BiMap;
+import com.google.common.collect.ImmutableBiMap;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.TreeMultimap;
 import com.ibm.icu.text.MessageFormat;
 import com.ibm.icu.text.UnicodeSet;
 import com.ibm.icu.text.UnicodeSetSpanner;
 
 public class Units {
-    
+
     private static final UnicodeSet WHITESPACE = new UnicodeSet("[:whitespace:]").freeze();
     public static Pattern NO_SPACE_PREFIX = Pattern.compile("\\}" + ExampleGenerator.backgroundEndSymbol + "?\\p{L}|\\p{L}" + ExampleGenerator.backgroundStartSymbol + "?\\{");
 
@@ -30,7 +41,7 @@
         }
 
         // hack to fix casing
-        if (lowercaseUnitIfNoSpaceInCompound 
+        if (lowercaseUnitIfNoSpaceInCompound
             && NO_SPACE_PREFIX.matcher(compoundPattern).find()) {
             modFormat = modFormat.replace(modUnit, modUnit.toLowerCase(Locale.ENGLISH));
         }
@@ -40,4 +51,31 @@
 
     static final UnicodeSetSpanner SPACE_SPANNER = new UnicodeSetSpanner(WHITESPACE);
 
+    public static final Map<String,String> CORE_TO_TYPE;
+    public static final Multimap<String,String> TYPE_TO_CORE;
+    public static final BiMap<String,String> LONG_TO_SHORT;
+
+    static {
+        Set<String> VALID_UNITS = Validity.getInstance().getStatusToCodes(LstrType.unit).get(Status.regular);
+
+        Map<String, String> coreToType = new TreeMap<>();
+        Multimap<String, String> typeToCore = TreeMultimap.create();
+        Map<String, String> longToShort = new TreeMap<>();
+        for (String s : VALID_UNITS) {
+            int dashPos = s.indexOf('-');
+            String unitType = s.substring(0,dashPos);
+            String coreUnit = s.substring(dashPos+1);
+            longToShort.put(s, coreUnit);
+            //coreUnit = converter.fixDenormalized(coreUnit);
+            coreToType.put(coreUnit, unitType);
+            typeToCore.put(unitType, coreUnit);
+        }
+        CORE_TO_TYPE = ImmutableMap.copyOf(coreToType);
+        TYPE_TO_CORE = ImmutableMultimap.copyOf(typeToCore);
+        LONG_TO_SHORT = ImmutableBiMap.copyOf(longToShort);
+    }
+
+    public static String getShort(String longUnit) {
+        return LONG_TO_SHORT.get(longUnit);
+    }
 }
diff --git a/tools/java/org/unicode/cldr/util/Unlocode.java b/tools/java/org/unicode/cldr/util/Unlocode.java
index d1f2df6..55cc0b1 100644
--- a/tools/java/org/unicode/cldr/util/Unlocode.java
+++ b/tools/java/org/unicode/cldr/util/Unlocode.java
@@ -20,7 +20,7 @@
 import org.unicode.cldr.tool.ToolConfig;
 import org.unicode.cldr.util.ChainedMap.M3;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.impl.Relation;
 import com.ibm.icu.text.Transform;
 import com.ibm.icu.text.Transliterator;
@@ -44,7 +44,7 @@
         }
 
         public Iso3166_2Data(Collection<String> names) {
-            this.names = Collections.unmodifiableSet(new LinkedHashSet<String>(names));
+            this.names = Collections.unmodifiableSet(new LinkedHashSet<>(names));
         }
 
         @Override
@@ -54,7 +54,7 @@
 
         @Override
         public boolean equals(Object obj) {
-            return names.equals((Iso3166_2Data) obj);
+            return names.equals(obj);
         }
 
         @Override
@@ -64,7 +64,7 @@
 
         @Override
         public Iso3166_2Data merge(Iso3166_2Data b) {
-            LinkedHashSet<String> set = new LinkedHashSet<String>(names);
+            LinkedHashSet<String> set = new LinkedHashSet<>(names);
             set.addAll(b.names);
             return new Iso3166_2Data(set);
         }
@@ -83,7 +83,7 @@
 
         public LocodeData(String locode, Collection<String> names, String subdivision, float north, float east) {
             this.locode = locode;
-            this.names = Collections.unmodifiableSet(new LinkedHashSet<String>(names));
+            this.names = Collections.unmodifiableSet(new LinkedHashSet<>(names));
             this.subdivision = subdivision;
             this.north = north;
             this.east = east;
@@ -123,7 +123,7 @@
                 && subdivision.equals(other.subdivision)
                 && north == other.north
                 && east == other.east) {
-                LinkedHashSet<String> set = new LinkedHashSet<String>(names);
+                LinkedHashSet<String> set = new LinkedHashSet<>(names);
                 set.addAll(other.names);
                 return new LocodeData(locode, set, subdivision, north, east);
             }
@@ -132,9 +132,9 @@
 
     }
 
-    static Map<String, LocodeData> locodeToData = new HashMap<String, LocodeData>();
+    static Map<String, LocodeData> locodeToData = new HashMap<>();
     static Relation<String, LocodeData> nameToLocodeData = Relation.of(new HashMap<String, Set<LocodeData>>(), HashSet.class);
-    static Map<String, Iso3166_2Data> iso3166_2Data = new HashMap<String, Iso3166_2Data>();
+    static Map<String, Iso3166_2Data> iso3166_2Data = new HashMap<>();
     static Relation<String, String> ERRORS = Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
 
     static {
@@ -294,7 +294,7 @@
                 "data/external/2013-1_UNLOCODE_CodeListPart" + file + ".csv",
                 LATIN1);
         M3<String, String, Boolean> nameToAlternate = ChainedMap.of(new TreeMap<String, Object>(), new TreeMap<String, Object>(), Boolean.class);
-        Output<String> tempOutput = new Output<String>();
+        Output<String> tempOutput = new Output<>();
 
         String oldCountryCode = null;
         while (true) {
@@ -467,19 +467,19 @@
 
     public static void main(String[] args) throws IOException {
         Relation<String, LocodeData> countryNameToCities = Relation.of(new TreeMap<String, Set<LocodeData>>(), TreeSet.class);
-        Set<String> errors = new TreeSet<String>();
+        Set<String> errors = new TreeSet<>();
         loadCitiesCapitals(countryNameToCities, errors);
         loadCitiesOver1M(countryNameToCities, errors);
         SupplementalDataInfo supp = ToolConfig.getToolInstance().getSupplementalDataInfo();
-        Set<String> missing = new TreeSet<String>(
+        Set<String> missing = new TreeSet<>(
             supp.getBcp47Keys().get("tz"));
-        Set<String> already = new TreeSet<String>();
+        Set<String> already = new TreeSet<>();
 
         for (Entry<String, LocodeData> entry : countryNameToCities.keyValueSet()) {
             String countryName = entry.getKey();
             LocodeData item = entry.getValue();
             String firstName = item.names.iterator().next();
-            LinkedHashSet<String> remainingNames = new LinkedHashSet<String>(item.names);
+            LinkedHashSet<String> remainingNames = new LinkedHashSet<>(item.names);
             remainingNames.remove(firstName);
             String lowerLocode = item.locode.toLowerCase(Locale.ENGLISH);
             String info = countryName
@@ -497,7 +497,7 @@
                 + "-->");
         }
         System.out.println();
-        System.out.println(CollectionUtilities.join(errors, "\n"));
+        System.out.println(Joiner.on("\n").join(errors));
         System.out.println();
         showLocodes("In exemplars already:", already);
         System.out.println();
@@ -513,7 +513,7 @@
         //            System.out.println((i++) + "\t" + s + "\t" + Unlocode.getIso3166_2Data(s));
         //            //if (i > 1000) break;
         //        }
-        for (String s : new TreeSet<String>(Unlocode.getAvailable())) {
+        for (String s : new TreeSet<>(Unlocode.getAvailable())) {
             if (!s.startsWith("GT")) {
                 continue;
             }
@@ -536,8 +536,8 @@
     }
 
     public static void showLocodes(String title, Set<String> already) {
-        Set<String> noData = new TreeSet<String>();
-        Set<String> noData2 = new TreeSet<String>();
+        Set<String> noData = new TreeSet<>();
+        Set<String> noData2 = new TreeSet<>();
         for (String locode : already) {
             String upperLocode = locode.toUpperCase(Locale.ENGLISH);
             String countryName = ULocale.getDisplayCountry("und-" + upperLocode.substring(0, 2), ULocale.ENGLISH);
@@ -638,14 +638,14 @@
         return i;
     }
 
-    static final Set<String> noncountries = new HashSet<String>(Arrays.asList(
+    static final Set<String> noncountries = new HashSet<>(Arrays.asList(
         "United States Virgin Islands", "Akrotiri and Dhekelia", "Easter Island", "Somaliland", "Northern Cyprus", "Nagorno-Karabakh Republic", "Abkhazia",
         "Transnistria", "South Ossetia"));
 
     static final Transform<String, String> REMOVE_ACCENTS = Transliterator.getInstance("nfd;[:mn:]remove");
 
     static void add(String countryName, String subdivision, String cityName, Relation<String, LocodeData> countryNameToCities, Set<String> errors2) {
-        String countryCode = CountryCodeConverter.getCodeFromName(countryName);
+        String countryCode = CountryCodeConverter.getCodeFromName(countryName, false);
         if (countryCode == null) {
             if (noncountries.contains(countryName)) {
                 return; // skip
@@ -665,7 +665,7 @@
         if (locodeDatas == null) {
             errors2.add("** No matching record for\t" + countryName + "\t" + countryCode + "\t" + cityName);
         } else {
-            Set<LocodeData> rem = new LinkedHashSet<LocodeData>();
+            Set<LocodeData> rem = new LinkedHashSet<>();
             for (LocodeData x : locodeDatas) {
                 if (x.locode.startsWith(countryCode)) {
                     if (x.subdivision.equals(subdivision)) {
diff --git a/tools/java/org/unicode/cldr/util/Validity.java b/tools/java/org/unicode/cldr/util/Validity.java
index 50ea63d..55901f7 100644
--- a/tools/java/org/unicode/cldr/util/Validity.java
+++ b/tools/java/org/unicode/cldr/util/Validity.java
@@ -50,13 +50,14 @@
         Map<LstrType, Map<Status, Set<String>>> data = new EnumMap<>(LstrType.class);
         Map<LstrType, Map<String, Status>> codeToStatus = new EnumMap<>(LstrType.class);
         final String basePath = validityDirectory;
+
         for (String file : new File(basePath).list()) {
             if (!file.endsWith(".xml")) {
                 continue;
             }
             LstrType type = null;
             try {
-                type = LstrType.valueOf(file.substring(0, file.length() - 4));
+                type = LstrType.fromString(file.substring(0, file.length() - 4));
             } catch (Exception e) {
                 continue;
             }
@@ -76,7 +77,7 @@
                 if (!"id".equals(parts.getElement(-1))) {
                     continue;
                 }
-                LstrType typeAttr = LstrType.valueOf(parts.getAttributeValue(-1, "type"));
+                LstrType typeAttr = LstrType.fromString(parts.getAttributeValue(-1, "type"));
                 if (typeAttr != type) {
                     throw new IllegalArgumentException("Corrupt value for " + type);
                 }
@@ -101,14 +102,18 @@
                 }
             }
         }
+        if (data.keySet().size() < 5) {
+            throw new IllegalArgumentException("Bad directory for validity files");
+        }
         typeToStatusToCodes = CldrUtility.protectCollectionX(data);
         typeToCodeToStatus = CldrUtility.protectCollectionX(codeToStatus);
     }
 
     /**
-     * 
+     *
      * @deprecated Use {@link #getStatusToCodes(LstrType)}
      */
+    @Deprecated
     public Map<LstrType, Map<Status, Set<String>>> getData() {
         return typeToStatusToCodes;
     }
diff --git a/tools/java/org/unicode/cldr/util/ValuePathStatus.java b/tools/java/org/unicode/cldr/util/ValuePathStatus.java
index e495128..58e2112 100644
--- a/tools/java/org/unicode/cldr/util/ValuePathStatus.java
+++ b/tools/java/org/unicode/cldr/util/ValuePathStatus.java
@@ -24,6 +24,7 @@
     }
 
     public static Transform<String, ValuePathStatus.MissingOK> MISSING_STATUS_TRANSFORM = new Transform<String, ValuePathStatus.MissingOK>() {
+        @Override
         public ValuePathStatus.MissingOK transform(String source) {
             return ValuePathStatus.MissingOK.valueOf(source);
         }
@@ -45,7 +46,7 @@
     }
 
     public static boolean isMissingOk(CLDRFile sourceFile, String path, boolean latin, boolean aliased) {
-        Output<String[]> arguments = new Output<String[]>();
+        Output<String[]> arguments = new Output<>();
         List<String> failures = null;
 //        if (path.startsWith("//ldml/characters/parseLenients")) {
 //            int debug = 0;
diff --git a/tools/java/org/unicode/cldr/util/VariantFolder.java b/tools/java/org/unicode/cldr/util/VariantFolder.java
index 7e4bb4e..e2a3c01 100644
--- a/tools/java/org/unicode/cldr/util/VariantFolder.java
+++ b/tools/java/org/unicode/cldr/util/VariantFolder.java
@@ -20,6 +20,7 @@
     public static SetMaker mySetMaker = new SetMaker() {
         Comparator c = new UTF16.StringComparator(true, false, 0);
         Comparator bestIsLowest = new Comparator() {
+            @Override
             public int compare(Object o1, Object o2) {
                 String s1 = o1.toString();
                 String s2 = o2.toString();
@@ -43,6 +44,7 @@
 
         };
 
+        @Override
         public Set make() {
             return new TreeSet(bestIsLowest);
         }
@@ -80,6 +82,7 @@
             }
         }
 
+        @Override
         public Set<String> getAlternates(String item, Set<String> output) {
             output.add(item);
             return equivalents.getEquivalences(item);
@@ -97,6 +100,7 @@
             }
         }
 
+        @Override
         public Set<String> getAlternates(String item, Set<String> output) {
             output.add(item);
             return equivalents.getEquivalences(item);
@@ -117,6 +121,7 @@
             }
         }
 
+        @Override
         public Set<String> getAlternates(String item, Set<String> output) {
             output.add(item);
             return equivalents.getEquivalences(item);
@@ -143,7 +148,7 @@
     public Set<String> getClosure(String source) {
         int stringLength = source.length();
         if (stringLength == 0) {
-            Set<String> result = new HashSet<String>();
+            Set<String> result = new HashSet<>();
             result.add(source);
             return result;
         }
@@ -161,7 +166,7 @@
                 int limit = start + level + 1;
                 // System.out.println(start + ", " + limit);
                 // we first add any longer alternates
-                Collection<String> current = combos[level][start] = new HashSet<String>();
+                Collection<String> current = combos[level][start] = new HashSet<>();
                 current.addAll(alternateFetcher.getAlternates(source.substring(start,
                     limit), new HashSet<String>()));
                 // then we add the cross product of shorter strings
diff --git a/tools/java/org/unicode/cldr/util/VerifyCompactNumbers.java b/tools/java/org/unicode/cldr/util/VerifyCompactNumbers.java
index 3383b45..4586aa6 100644
--- a/tools/java/org/unicode/cldr/util/VerifyCompactNumbers.java
+++ b/tools/java/org/unicode/cldr/util/VerifyCompactNumbers.java
@@ -37,7 +37,7 @@
 
     private static final CLDRConfig CLDR_CONFIG = CLDRConfig.getInstance();
     private static final String DIR = CLDRPaths.VERIFY_DIR + "numbers/";
-    
+
     final static Options myOptions = new Options();
 
     enum MyOptions {
@@ -52,7 +52,7 @@
 
     // later, look at DateTimeFormats to set up as an HTML table
 
-    public static final Set<String> USES_GROUPS_OF_4 = new HashSet<String>(Arrays.asList("ko", "ja", "zh", "zh_Hant"));
+    public static final Set<String> USES_GROUPS_OF_4 = new HashSet<>(Arrays.asList("ko", "ja", "zh", "zh_Hant"));
 
     /**
      * Produce a set of static tables from the vxml data. Only a stopgap until the above is integrated into ST.
@@ -80,7 +80,7 @@
         NumberFormat enf = NumberFormat.getIntegerInstance(ULocale.ENGLISH);
         enf.setGroupingUsed(false);
 
-        Set<String> availableLanguages = new TreeSet<String>(factory2.getAvailableLanguages());
+        Set<String> availableLanguages = new TreeSet<>(factory2.getAvailableLanguages());
         if (Pattern.matches(filter, "pt_PT")) {
             availableLanguages.add("pt_PT");
         }
@@ -133,8 +133,8 @@
     public static void showNumbers(CLDRFile cldrFile, boolean showCurrency,
         String currencyCode, Appendable out, Factory factory) {
         try {
-            Set<String> debugCreationErrors = new LinkedHashSet<String>();
-            Set<String> errors = new LinkedHashSet<String>();
+            Set<String> debugCreationErrors = new LinkedHashSet<>();
+            Set<String> errors = new LinkedHashSet<>();
             String locale = cldrFile.getLocaleID();
 
             TablePrinter tablePrinter1 = new TablePrinter()
@@ -160,12 +160,12 @@
             }
             //            tablePrinter1.addColumn("View").setHeaderCell(true).setHeaderAttributes("class='dtf-th'").setCellAttributes("class='dtf-s'");
 
-            ;
+
 
             ULocale locale2 = new ULocale(locale);
             ICUServiceBuilder builder = new ICUServiceBuilder().setCldrFile(cldrFile);
             NumberFormat nf = builder.getNumberFormat(1);
-            
+
             // nf.setMaximumFractionDigits(0);
             SupplementalDataInfo sdi = CLDR_CONFIG.getSupplementalDataInfo();
             String[] debugOriginals = null;
@@ -240,12 +240,12 @@
                 + "All of those you should be able to substitute for the numbers in the Minimal Pairs, "
                 + "with an acceptable result. "
                 + "If any would be incorrect, please "
-                + "<a target='ticket' href='https://unicode.org/cldr/trac/newticket'>file a ticket</a>.</p>"
+                + "<a target='ticket' href='" + CLDRURLS.CLDR_NEWTICKET_URL + "'>file a ticket</a>.</p>"
                 + "<p>For more details, see " +
                 "<a target='CLDR-ST-DOCS' href='http://cldr.unicode.org/index/cldr-spec/plural-rules'>Plural Rules</a>.</p>");
             ShowPlurals showPlurals = new ShowPlurals(CLDR_CONFIG.getSupplementalDataInfo());
             showPlurals.printPluralTable(cldrFile, locale, out, factory);
-            showPlurals.appendBlanksForScrolling(out);
+            ShowPlurals.appendBlanksForScrolling(out);
             showErrors(errors, out);
             showErrors(debugCreationErrors, out);
         } catch (IOException e) {
@@ -263,7 +263,7 @@
         // we want to collect a sample of at least one sample for each plural category for each
         // power of ten
         PluralInfo pluralInfo = sdi.getPlurals(locale);
-        Set<Double> samples = new TreeSet<Double>();
+        Set<Double> samples = new TreeSet<>();
         samples.add(1.1d);
         samples.add(1.5d);
         samples.add(1100d);
@@ -299,7 +299,7 @@
         // }
         // samples.addAll(samples2);
 
-        Set<Double> allSamples = new TreeSet<Double>();
+        Set<Double> allSamples = new TreeSet<>();
         for (long i = 1; i <= 100000000000000L; i *= factor) {
             for (Double sample : samples) {
                 double source = i * sample;
@@ -325,7 +325,7 @@
     private static Set<Double> collectItems(PluralInfo pluralInfo, double start, double limit,
         Set<Double> samples) {
         // TODO optimize once we have all the keywords
-        Map<String, Double> ones = new TreeMap<String, Double>();
+        Map<String, Double> ones = new TreeMap<>();
         for (double i = start; i < limit; ++i) {
             String cat = pluralInfo.getPluralRules().select(i);
             if (ones.containsKey(cat)) {
diff --git a/tools/java/org/unicode/cldr/util/VerifyZones.java b/tools/java/org/unicode/cldr/util/VerifyZones.java
index 303a688..9b4b48d 100644
--- a/tools/java/org/unicode/cldr/util/VerifyZones.java
+++ b/tools/java/org/unicode/cldr/util/VerifyZones.java
@@ -73,19 +73,19 @@
 
     private final static SupplementalDataInfo sdi = SupplementalDataInfo.getInstance();
     private final static Map<String, Map<String, String>> metazoneToRegionToZone = sdi.getMetazoneToRegionToZone();
-    private final static Set<MetazoneRow> rows = new TreeSet<MetazoneRow>();
-    private final static Set<String> goldenZones = new HashSet<String>();
-    private final static Map<String, Integer> countryToOrder = new HashMap<String, Integer>();
+    private final static Set<MetazoneRow> rows = new TreeSet<>();
+    private final static Set<String> goldenZones = new HashSet<>();
+    private final static Map<String, Integer> countryToOrder = new HashMap<>();
 
     private final static List<Format> FORMAT_LIST = Arrays.asList(Format.VVVV, Format.vvvv, Format.v, Format.zzzz,
         Format.z, Format.zzzz, Format.z);
     static {
 
         // find out which canonical zones are not in a metazone
-        Map<String, String> nameToCountry = new TreeMap<String, String>();
+        Map<String, String> nameToCountry = new TreeMap<>();
         String[] zones = TimeZone.getAvailableIDs();
-        Set<String> zoneSet = new LinkedHashSet<String>();
-        Set<String> noncanonical = new LinkedHashSet<String>();
+        Set<String> zoneSet = new LinkedHashSet<>();
+        Set<String> noncanonical = new LinkedHashSet<>();
         for (String zone : zones) {
             String countryCode = TimeZone.getRegion(zone);
             String englishTerritory = ULocale.getDisplayCountry("und-" + countryCode, ULocale.ENGLISH);
@@ -113,7 +113,7 @@
             showVennSets(metazones, metazoneToRegionToZone.keySet());
         }
 
-        Set<String> zonesInMetazones = new LinkedHashSet<String>();
+        Set<String> zonesInMetazones = new LinkedHashSet<>();
         for (String metazone : metazones) {
             //String container = PathHeader.getMetazonePageTerritory(metazone);
             Map<String, String> regionToZone = metazoneToRegionToZone.get(metazone);
@@ -130,7 +130,7 @@
         //System.out.println("Zones. A = canonical zones, B = zones in metazonesToRegionToZone");
         //showVennSets(zoneSet, zonesInMetazones);
         vennSets(zoneSet, zonesInMetazones);
-        Set<String> found = new LinkedHashSet<String>();
+        Set<String> found = new LinkedHashSet<>();
         for (String zone : zoneSet) {
             Set<MetaZoneRange> metaZoneRanges = sdi.getMetaZoneRanges(zone);
             if (metaZoneRanges == null) {
@@ -181,9 +181,9 @@
     }
 
     private static void showVennSets(Set<String> zoneSet, Set<String> zonesInMetazones) {
-        Set<String> common = new LinkedHashSet<String>();
-        Set<String> firstMinusSecond = new LinkedHashSet<String>();
-        Set<String> secondMinusFirst = new LinkedHashSet<String>();
+        Set<String> common = new LinkedHashSet<>();
+        Set<String> firstMinusSecond = new LinkedHashSet<>();
+        Set<String> secondMinusFirst = new LinkedHashSet<>();
         vennSets(zoneSet, zonesInMetazones, common, firstMinusSecond, secondMinusFirst);
         if (!common.isEmpty()) System.out.println("A & B:\t" + common.size() + "\t" + common);
         if (!firstMinusSecond.isEmpty()) System.out.println("A - B:\t" + firstMinusSecond.size() + "\t" + firstMinusSecond);
@@ -234,7 +234,7 @@
 
         Factory factory2 = Factory.make(CLDRPaths.MAIN_DIRECTORY, filter);
         CLDRFile englishCldrFile = factory2.make("en", true);
-        
+
         new File(DIR).mkdirs();
         FileCopier.copy(ShowData.class, "verify-index.html", CLDRPaths.VERIFY_DIR, "index.html");
         FileCopier.copy(ChartDelta.class, "index.css", CLDRPaths.VERIFY_DIR, "index.css");
diff --git a/tools/java/org/unicode/cldr/util/VettingViewer.java b/tools/java/org/unicode/cldr/util/VettingViewer.java
index 48f316f..7995b0c 100644
--- a/tools/java/org/unicode/cldr/util/VettingViewer.java
+++ b/tools/java/org/unicode/cldr/util/VettingViewer.java
@@ -69,7 +69,6 @@
     private static final String TEST_PATH = "//ldml/localeDisplayNames/territories/territory[@type=\"SX\"]";
     private static final double NANOSECS = 1000000000.0;
     private static final boolean TESTING = CldrUtility.getProperty("TEST", false);
-    private static final boolean SHOW_ALL = CldrUtility.getProperty("SHOW", true);
 
     public static final Pattern ALT_PROPOSED = PatternCache.get("\\[@alt=\"[^\"]*proposed");
 
@@ -332,8 +331,8 @@
     public static class DefaultErrorStatus implements ErrorChecker {
 
         private CheckCLDR checkCldr;
-        private HashMap<String, String> options = new HashMap<String, String>();
-        private ArrayList<CheckStatus> result = new ArrayList<CheckStatus>();
+        private HashMap<String, String> options = new HashMap<>();
+        private ArrayList<CheckStatus> result = new ArrayList<>();
         private CLDRFile cldrFile;
         private Factory factory;
 
@@ -344,8 +343,8 @@
         @Override
         public Status initErrorStatus(CLDRFile cldrFile) {
             this.cldrFile = cldrFile;
-            options = new HashMap<String, String>();
-            result = new ArrayList<CheckStatus>();
+            options = new HashMap<>();
+            result = new ArrayList<>();
             checkCldr = CheckCLDR.getCheckAll(factory, ".*");
             checkCldr.setCldrFileToCheck(cldrFile, options, result);
             return Status.ok;
@@ -354,8 +353,8 @@
         @Override
         public List<CheckStatus> getErrorCheckStatus(String path, String value) {
             String fullPath = cldrFile.getFullXPath(path);
-            ArrayList<CheckStatus> result2 = new ArrayList<CheckStatus>();
-            checkCldr.check(path, fullPath, value, options, result2);
+            ArrayList<CheckStatus> result2 = new ArrayList<>();
+            checkCldr.check(path, fullPath, value, new CheckCLDR.Options(options), result2);
             return result2;
         }
 
@@ -370,7 +369,7 @@
             Status result0 = Status.ok;
             StringBuilder errorMessage = new StringBuilder();
             String fullPath = cldrFile.getFullXPath(path);
-            checkCldr.check(path, fullPath, value, options, result);
+            checkCldr.check(path, fullPath, value, new CheckCLDR.Options(options), result);
             for (CheckStatus checkStatus : result) {
                 final CheckCLDR cause = checkStatus.getCause();
                 /*
@@ -519,7 +518,7 @@
      *
      * Called only by writeVettingViewerOutput
      */
-    public Relation<R2<SectionId, PageId>, WritingInfo> generateFileInfoReview(Appendable output, EnumSet<Choice> choices, String localeID, T user,
+    public Relation<R2<SectionId, PageId>, WritingInfo> generateFileInfoReview(EnumSet<Choice> choices, String localeID, T user,
         Level usersLevel, boolean quick, CLDRFile sourceFile, CLDRFile baselineFile) {
 
         // Gather the relevant paths
@@ -536,9 +535,9 @@
     }
 
     class FileInfo {
-        Counter<Choice> problemCounter = new Counter<Choice>();
-        Counter<Subtype> errorSubtypeCounter = new Counter<Subtype>();
-        Counter<Subtype> warningSubtypeCounter = new Counter<Subtype>();
+        Counter<Choice> problemCounter = new Counter<>();
+        Counter<Subtype> errorSubtypeCounter = new Counter<>();
+        Counter<Subtype> warningSubtypeCounter = new Counter<>();
         EnumSet<Choice> problems = EnumSet.noneOf(Choice.class);
 
         public void addAll(FileInfo other) {
@@ -557,7 +556,7 @@
         }
 
         /**
-         * Loop through paths for the Dashboard
+         * Loop through paths for the Dashboard or the Priority Items Summary
          *
          * @param sourceFile
          * @param baselineFile
@@ -584,7 +583,7 @@
             StringBuilder htmlMessage = new StringBuilder();
             StringBuilder statusMessage = new StringBuilder();
             EnumSet<Subtype> subtypes = EnumSet.noneOf(Subtype.class);
-            Set<String> seenSoFar = new HashSet<String>();
+            Set<String> seenSoFar = new HashSet<>();
             boolean latin = VettingViewer.isLatinScriptLocale(sourceFile);
             CLDRFile baselineFileUnresolved = (baselineFile == null) ? null : baselineFile.getUnresolved();
             for (String path : sourceFile.fullIterable()) {
@@ -639,7 +638,7 @@
                     boolean isMissing = (oldValue == null);
                     if (!SubmissionLocales.allowEvenIfLimited(localeID, path, isError, isMissing)) {
                         continue;
-                    };
+                    }
                 }
 
                 if (!onlyRecordErrors && choices.contains(Choice.changedOldValue)) {
@@ -750,7 +749,7 @@
 
         @Override
         public boolean is(String localeId) {
-            Output<LocaleCoverageType> output = new Output<LocaleCoverageType>();
+            Output<LocaleCoverageType> output = new Output<>();
             // For admin - return true if SOME organization has explicit coverage for the locale
             // TODO: Make admin pick up any locale that has a vote
             if (org.equals(Organization.surveytool)) {
@@ -766,17 +765,16 @@
                 return desiredLevel == level && output.value == StandardCodes.LocaleCoverageType.explicit;
             }
         }
-    };
+    }
 
-    public void generateSummaryHtmlErrorTables(Appendable output, EnumSet<Choice> choices,
-        Predicate<String> includeLocale, T organization) {
+    public void generateSummaryHtmlErrorTables(Appendable output, EnumSet<Choice> choices, T organization) {
+        String helpUrl = "http://cldr.unicode.org/translation/getting-started/vetting-view#TOC-Priority-Items";
         try {
-
             output
             .append("<p>The following summarizes the Priority Items across locales, " +
                 "using the default coverage levels for your organization for each locale. " +
                 "Before using, please read the instructions at " +
-                "<a target='CLDR_ST_DOCS' href='http://cldr.unicode.org/translation/vetting-summary'>Priority " +
+                "<a target='CLDR_ST_DOCS' href='" + helpUrl + "'>Priority " +
                 "Items Summary</a>.</p>\n");
 
             StringBuilder headerRow = new StringBuilder();
@@ -821,7 +819,7 @@
     private void writeSummaryTable(Appendable output, String header, Level desiredLevel,
         EnumSet<Choice> choices, T organization) throws IOException {
 
-        Map<String, String> sortedNames = new TreeMap<String, String>(Collator.getInstance());
+        Map<String, String> sortedNames = new TreeMap<>(Collator.getInstance());
 
         // Gather the relevant paths
         // Each one will be marked with the choice that it triggered.
@@ -850,7 +848,7 @@
         output.append("<h2>Level: ").append(desiredLevel.toString()).append("</h2>");
         output.append("<table class='tvs-table'>\n");
         char lastChar = ' ';
-        Map<String, FileInfo> localeNameToFileInfo = new TreeMap();
+        Map<String, FileInfo> localeNameToFileInfo = new TreeMap<>();
         FileInfo totals = new FileInfo();
 
         for (Entry<String, String> entry : sortedNames.entrySet()) {
@@ -907,7 +905,7 @@
         Set<Subtype> sortedBySize = subtypeCounterTotals.getKeysetSortedByCount(false);
 
         // header
-        writeDetailHeader(subtypeCounterTotals, sortedBySize, output);
+        writeDetailHeader(sortedBySize, output);
 
         // items
         for (Entry<String, FileInfo> entry : localeNameToFileInfo.entrySet()) {
@@ -931,7 +929,7 @@
         }
 
         // subtotals
-        writeDetailHeader(subtypeCounterTotals, sortedBySize, output);
+        writeDetailHeader(sortedBySize, output);
         output.append("<tr>").append(TH_AND_STYLES).append("<i>Total</i>").append("</th>").append(TH_AND_STYLES).append("</th>");
         for (Subtype subtype : sortedBySize) {
             long count = subtypeCounterTotals.get(subtype);
@@ -944,7 +942,7 @@
         output.append("</table>");
     }
 
-    private void writeDetailHeader(Counter<Subtype> subtypeCounterTotals, Set<Subtype> sortedBySize, Appendable output) throws IOException {
+    private void writeDetailHeader(Set<Subtype> sortedBySize, Appendable output) throws IOException {
         output.append("<tr>")
         .append(TH_AND_STYLES).append("Name").append("</th>")
         .append(TH_AND_STYLES).append("ID").append("</th>");
@@ -1015,11 +1013,11 @@
      {az_IR, az_Arab, az_Arab_IR} => az_IR, az_Arab(_IR)
      */
     public static String gatherCodes(Set<String> contents) {
-        Set<Set<String>> source = new LinkedHashSet<Set<String>>();
+        Set<Set<String>> source = new LinkedHashSet<>();
         for (String s : contents) {
-            source.add(new LinkedHashSet<String>(Arrays.asList(s.split("_"))));
+            source.add(new LinkedHashSet<>(Arrays.asList(s.split("_"))));
         }
-        Set<Set<String>> oldSource = new LinkedHashSet<Set<String>>();
+        Set<Set<String>> oldSource = new LinkedHashSet<>();
 
         do {
             // exchange source/target
@@ -1061,7 +1059,7 @@
     }
 
     private static Set<String> combine(Set<String> last, Set<String> ss) {
-        LinkedHashSet<String> result = new LinkedHashSet<String>();
+        LinkedHashSet<String> result = new LinkedHashSet<>();
         for (String s : ss) {
             if (last.contains(s)) {
                 result.add(s);
@@ -1099,7 +1097,7 @@
         String value = sourceFile.getStringValue(path);
         Status status = new Status();
         sourceFile.getSourceLocaleID(path, status);
-        boolean isAliased = path.equals(status.pathWhereFound);
+        boolean isAliased = !path.equals(status.pathWhereFound); // this was path.equals, which would be incorrect!
 
         if (value == null) {
             result = ValuePathStatus.isMissingOk(sourceFile, path, latin, isAliased) ? MissingStatus.MISSING_OK : MissingStatus.ABSENT;
@@ -1116,8 +1114,8 @@
              */
             if (localeFound.equals("root") || localeFound.equals(XMLSource.CODE_FALLBACK_ID)) {
                 result = ValuePathStatus.isMissingOk(sourceFile, path, latin, isAliased)
-                    || sourceFile.getLocaleID().equals("en") 
-                    ? MissingStatus.ROOT_OK 
+                    || sourceFile.getLocaleID().equals("en")
+                    ? MissingStatus.ROOT_OK
                         : MissingStatus.ABSENT;
             } else if (isAliased) {
                 result = MissingStatus.ALIASED;
@@ -1418,10 +1416,9 @@
      * @param localeId
      * @param user
      * @param usersLevel
-     * @param nonVettingPhase
      */
     public ArrayList<String> getErrorOnPath(EnumSet<Choice> choices, String localeID, T user,
-        Level usersLevel, boolean nonVettingPhase, String path) {
+        Level usersLevel, String path) {
 
         // Gather the relevant paths
         // each one will be marked with the choice that it triggered.
@@ -1441,7 +1438,7 @@
         EnumSet<Choice> errors = new FileInfo().getFileInfo(sourceFile, baselineFile, sorted, choices, localeID, user, usersLevel,
             false, path).problems;
 
-        ArrayList<String> out = new ArrayList<String>();
+        ArrayList<String> out = new ArrayList<>();
         for (Object error : errors.toArray()) {
             out.add(((Choice) error).buttonLabel);
         }
@@ -1528,7 +1525,7 @@
         missingCounter.clear();
 
         boolean latin = VettingViewer.isLatinScriptLocale(file);
-        CoverageLevel2 coverageLevel2 = CoverageLevel2.getInstance(file.getLocaleID());
+        CoverageLevel2 coverageLevel2 = CoverageLevel2.getInstance(SupplementalDataInfo.getInstance(), file.getLocaleID());
 
         for (String path : allPaths) {
 
@@ -1581,11 +1578,11 @@
 
     enum MyOptions {
         repeat(null, null, "Repeat indefinitely"),
-        filter(".*", ".*", "Filter files"), 
-        locale(".*", "af", "Single locale for testing"), 
+        filter(".*", ".*", "Filter files"),
+        locale(".*", "af", "Single locale for testing"),
         source(".*", CLDRPaths.MAIN_DIRECTORY + "," + CLDRPaths.ANNOTATIONS_DIRECTORY, // CldrUtility.TMP2_DIRECTORY + "/vxml/common/main"
-            "if summary, creates filtered version (eg -d main): does a find in the name, which is of the form dir/file"), 
-        verbose(null, null, "verbose debugging messages"), 
+            "if summary, creates filtered version (eg -d main): does a find in the name, which is of the form dir/file"),
+        verbose(null, null, "verbose debugging messages"),
         output(".*", CLDRPaths.GEN_DIRECTORY + "vetting/", "filter the raw files (non-summary, mostly for debugging)"),;
         // boilerplate
         final Option option;
@@ -1609,8 +1606,6 @@
         for (String s : DIRECTORIES) {
             fileDirectories[i++] = new File(s);
         }
-        final String lastMain = CLDRPaths.LAST_RELEASE_DIRECTORY;
-        //final String lastMain = CLDRPaths.ARCHIVE_DIRECTORY + "/common/main";
 
         do {
             Timer timer = new Timer();
@@ -1626,6 +1621,8 @@
 
             UsersChoice<Organization> usersChoice = new UsersChoice<Organization>() {
                 // Fake values for now
+                @Override
+                @SuppressWarnings("unused")
                 public String getWinningValueForUsersOrganization(CLDRFile cldrFile, String path, Organization user) {
                     if (path.contains("USD")) {
                         return "&dummy ‘losing’ value";
@@ -1634,6 +1631,7 @@
                 }
 
                 // Fake values for now
+                @Override
                 public VoteStatus getStatusForUsersOrganization(CLDRFile cldrFile, String path, Organization user) {
                     String usersValue = getWinningValueForUsersOrganization(cldrFile, path, user);
                     String winningValue = cldrFile.getWinningValue(path);
@@ -1656,7 +1654,7 @@
             // The Options should come from a GUI; from each you can get a long
             // description and a button label.
             // Assuming user can be identified by an int
-            VettingViewer<Organization> tableView = new VettingViewer<Organization>(supplementalDataInfo, cldrFactory,
+            VettingViewer<Organization> tableView = new VettingViewer<>(supplementalDataInfo, cldrFactory,
                 usersChoice, "Winning Proposed");
 
             // here are per-view parameters
@@ -1685,11 +1683,10 @@
         } while (repeat);
     }
 
-    public enum CodeChoice {
+    private enum CodeChoice {
         /** For the normal (locale) view of data **/
         newCode,
-        // /** @deprecated **/
-        // oldCode,
+
         /** For a summary view of data **/
         summary
     }
@@ -1752,12 +1749,9 @@
         case newCode:
             tableView.generateHtmlErrorTables(out, choiceSet, localeStringID, organization, usersLevel, false);
             break;
-            // case oldCode:
-            // tableView.generateHtmlErrorTablesOld(out, choiceSet, localeStringID, userNumericID, usersLevel, SHOW_ALL);
-            // break;
         case summary:
             //System.out.println(tableView.getName("zh_Hant_HK"));
-            tableView.generateSummaryHtmlErrorTables(out, choiceSet, null, organization);
+            tableView.generateSummaryHtmlErrorTables(out, choiceSet, organization);
             break;
         }
         out.println("</body>\n</html>\n");
diff --git a/tools/java/org/unicode/cldr/util/VoteResolver.java b/tools/java/org/unicode/cldr/util/VoteResolver.java
index 1ced88b..b3d7a42 100644
--- a/tools/java/org/unicode/cldr/util/VoteResolver.java
+++ b/tools/java/org/unicode/cldr/util/VoteResolver.java
@@ -26,7 +26,6 @@
 
 import com.google.common.base.Objects;
 import com.google.common.collect.ImmutableSet;
-import com.ibm.icu.impl.Relation;
 import com.ibm.icu.text.Collator;
 import com.ibm.icu.util.ULocale;
 
@@ -69,10 +68,11 @@
 public class VoteResolver<T> {
     private static final boolean DEBUG = false;
 
-    /*
+    /**
      * A placeholder for winningValue when it would otherwise be null.
+     * It must match NO_WINNING_VALUE in the client JavaScript code.
      */
-    private static String ERROR_NO_WINNING_VALUE = "error-no-winning-value";
+    private static String NO_WINNING_VALUE = "no-winning-value";
 
     /**
      * The status levels according to the committee, in ascending order
@@ -81,12 +81,12 @@
      * A checkmark means it’s approved and is slated to be used. A cross means it’s a missing value.
      * Green/orange check: The item has enough votes to be used in CLDR.
      * Red/orange/black X: The item does not have enough votes to be used in CLDR, by most implementations (or is completely missing).
-     * Reference: http://cldr.unicode.org/index/survey-tool/guide
-     * 
+     * Reference: http://cldr.unicode.org/translation/getting-started/guide
+     *
      * New January, 2019: When the item is inherited, i.e., winningValue is INHERITANCE_MARKER (↑↑↑),
      * then orange/red X are replaced by orange/red up-arrow. That change is made only on the client.
      * Reference: https://unicode.org/cldr/trac/ticket/11103
-     * 
+     *
      * Status.approved:    approved.png    = green check
      * Status.contributed: contributed.png = orange check
      * Status.provisional: provisional.png = orange X (or inherited_provisional.png orange up-arrow if inherited)
@@ -255,7 +255,7 @@
             admin.voteCountMenu = ImmutableSet.of(vetter.votes, admin.votes); /* Not LOCKING_VOTES; see canVoteWithCount */
             tc.voteCountMenu = ImmutableSet.of(vetter.votes, tc.votes, PERMANENT_VOTES);
         }
-    };
+    }
 
     /**
      * Internal class for voter information. It is public for testing only
@@ -264,7 +264,7 @@
         private Organization organization;
         private Level level;
         private String name;
-        private Set<String> locales = new TreeSet<String>();
+        private Set<String> locales = new TreeSet<>();
 
         public VoterInfo(Organization organization, Level level, String name, Set<String> locales) {
             this.setOrganization(organization);
@@ -282,6 +282,7 @@
         public VoterInfo() {
         }
 
+        @Override
         public String toString() {
             return "{" + getName() + ", " + getLevel() + ", " + getOrganization() + "}";
         }
@@ -359,13 +360,14 @@
         /**
          * Add, but only to bring up to the maximum value.
          */
+        @Override
         public MaxCounter<T> add(T obj, long countValue, long time) {
             long value = getCount(obj);
             if ((value <= countValue)) {
                 super.add(obj, countValue - value, time); // only add the difference!
             }
             return this;
-        };
+        }
     }
 
     /**
@@ -373,10 +375,10 @@
      */
     private static class OrganizationToValueAndVote<T> {
         private final Map<Organization, MaxCounter<T>> orgToVotes = new EnumMap<>(Organization.class);
-        private final Counter<T> totalVotes = new Counter<T>();
+        private final Counter<T> totalVotes = new Counter<>();
         private final Map<Organization, Integer> orgToMax = new EnumMap<>(Organization.class);
-        private final Counter<T> totals = new Counter<T>(true);
-        private Map<String, Long> nameTime = new LinkedHashMap<String, Long>();
+        private final Counter<T> totals = new Counter<>(true);
+        private Map<String, Long> nameTime = new LinkedHashMap<>();
         // map an organization to what it voted for.
         private final Map<Organization, T> orgToAdd = new EnumMap<>(Organization.class);
         private T baileyValue;
@@ -427,7 +429,7 @@
          * @param value
          * @param voter
          * @param withVotes optionally, vote at a non-typical voting level. May not exceed voter's maximum allowed level. null = use default level.
-         * @param date 
+         * @param date
          */
         public void add(T value, int voter, Integer withVotes, Date date) {
             final VoterInfo info = getVoterToInfo().get(voter);
@@ -447,7 +449,7 @@
          * @param value
          * @param info
          * @param votes
-         * @param date 
+         * @param date
          * @see #add(Object, int, Integer)
          */
         private void addInternal(T value, final VoterInfo info, final int votes, Date time) {
@@ -485,8 +487,8 @@
          * Return the overall vote for each organization. It is the max for each value.
          * When the organization is conflicted (the top two values have the same vote), the organization is also added
          * to disputed.
-         * 
-         * @param conflictedOrganizations if not null, to be filled in with the set of conflicted organizations.  
+         *
+         * @param conflictedOrganizations if not null, to be filled in with the set of conflicted organizations.
          */
         public Counter<T> getTotals(EnumSet<Organization> conflictedOrganizations) {
             if (conflictedOrganizations != null) {
@@ -522,6 +524,10 @@
                     }
                 }
                 // This is deprecated, but preserve it until the method is removed.
+                /*
+                 * TODO: explain the above comment, and follow through. What is deprecated (orgToAdd, or getOrgVote)?
+                 * Preserve until which method is removed (getOrgVote)?
+                 */
                 orgToAdd.put(org, value);
 
                 // We add the max vote for each of the organizations choices
@@ -576,8 +582,6 @@
         public int getOrgCount(T winningValue) {
             int orgCount = 0;
             for (Map.Entry<Organization, MaxCounter<T>> entry : orgToVotes.entrySet()) {
-//            for (Organization org : orgToVotes.keySet()) {
-//                Counter<T> counter = orgToVotes.get(org);
                 Counter<T> counter = entry.getValue();
                 long count = counter.getCount(winningValue);
                 if (count > 0) {
@@ -590,30 +594,29 @@
         public int getBestPossibleVote() {
             int total = 0;
             for (Map.Entry<Organization, Integer> entry : orgToMax.entrySet()) {
-                //    for (Organization org : orgToMax.keySet()) {
-//                total += orgToMax.get(org);
                 total += entry.getValue();
             }
             return total;
         }
 
+        @Override
         public String toString() {
             String orgToVotesString = "";
             for (Entry<Organization, MaxCounter<T>> entry : orgToVotes.entrySet()) {
-//            for (Organization org : orgToVotes.keySet()) {
-//                Counter<T> counter = orgToVotes.get(org);
                 Counter<T> counter = entry.getValue();
                 if (counter.size() != 0) {
                     if (orgToVotesString.length() != 0) {
                         orgToVotesString += ", ";
                     }
                     Organization org = entry.getKey();
-                    orgToVotesString += org + "=" + counter;
+                    orgToVotesString += org.toString() + "=" + counter.toString();
                 }
             }
             EnumSet<Organization> conflicted = EnumSet.noneOf(Organization.class);
-            return "{orgToVotes: " + orgToVotesString + ", totals: " + getTotals(conflicted) + ", conflicted: "
-                + conflicted + "}";
+            return "{orgToVotes: " + orgToVotesString
+                + ", totals: " + getTotals(conflicted)
+                + ", conflicted: " + conflicted.toString()
+                + "}";
         }
 
         /**
@@ -623,6 +626,7 @@
          * @return
          * @deprecated
          */
+        @Deprecated
         public T getOrgVote(Organization org) {
             return orgToAdd.get(org);
         }
@@ -632,14 +636,11 @@
         }
 
         public Map<T, Long> getOrgToVotes(Organization org) {
-            Map<T, Long> result = new LinkedHashMap<T, Long>();
+            Map<T, Long> result = new LinkedHashMap<>();
             MaxCounter<T> counter = orgToVotes.get(org);
             for (T item : counter) {
                 result.put(item, counter.getCount(item));
             }
-            // Skip the System.out.println here normally, it clutters the logs. 
-            // See https://unicode.org/cldr/trac/ticket/10295
-            // System.out.println("getOrgToVotes : " + org.displayName + " : " + result.toString());
             return result;
         }
     }
@@ -658,13 +659,13 @@
     private T winningValue;
     private T oValue; // optimal value; winning if better approval status than old
     private T nValue; // next to optimal value
-    private List<T> valuesWithSameVotes = new ArrayList<T>();
+    private List<T> valuesWithSameVotes = new ArrayList<>();
     private Counter<T> totals = null;
 
     private Status winningStatus;
     private EnumSet<Organization> conflictedOrganizations = EnumSet
         .noneOf(Organization.class);
-    private OrganizationToValueAndVote<T> organizationToValueAndVote = new OrganizationToValueAndVote<T>();
+    private OrganizationToValueAndVote<T> organizationToValueAndVote = new OrganizationToValueAndVote<>();
     private T trunkValue;
     private Status trunkStatus;
 
@@ -685,6 +686,7 @@
     private final Comparator<T> ucaCollator = new Comparator<T>() {
         Collator col = Collator.getInstance(ULocale.ENGLISH);
 
+        @Override
         public int compare(T o1, T o2) {
             return col.compare(String.valueOf(o1), String.valueOf(o2));
         }
@@ -701,7 +703,7 @@
      *
      * @param trunkValue the trunk value
      * @param trunkStatus the trunk status
-     * 
+     *
      * TODO: consider renaming: setTrunk to setBaseline; getTrunkValue to getBaselineValue; getTrunkStatus to getBaselineStatus
      */
     public void setTrunk(T trunkValue, Status trunkStatus) {
@@ -798,7 +800,9 @@
      * @param value
      * @param voter
      * @param withVotes override to lower the user's voting permission. May be null for default.
-     * @param date 
+     * @param date
+     *
+     * Called by getResolverInternal
      */
     public void add(T value, int voter, Integer withVotes, Date date) {
         if (resolved) {
@@ -817,7 +821,8 @@
      * @param value
      * @param voter
      * @param withVotes override to lower the user's voting permission. May be null for default.
-    
+     *
+     * Called only for TestUtilities, not used in Survey Tool.
      */
     public void add(T value, int voter, Integer withVotes) {
         if (resolved) {
@@ -829,13 +834,18 @@
     }
 
     /**
+     * Used only in add(value, voter) for making a pseudo-Date
+     */
+    private int maxcounter = 100;
+
+    /**
      * Call once for each voter for a value. If there are no voters for an item, then call add(value);
      *
      * @param value
      * @param voter
+     *
+     * Called by ConsoleCheckCLDR and TestUtilities; not used in SurveyTool.
      */
-    int maxcounter = 100;
-
     public void add(T value, int voter) {
         Date date = new Date(++maxcounter);
         add(value, voter, null, date);
@@ -846,6 +856,8 @@
      *
      * @param value
      * @param voter
+     *
+     * Called by getResolverInternal for the baseline (trunk) value; also called for ConsoleCheckCLDR.
      */
     public void add(T value) {
         if (resolved) {
@@ -854,7 +866,7 @@
         values.add(value);
     }
 
-    private Set<T> values = new TreeSet<T>(ucaCollator);
+    private Set<T> values = new TreeSet<>(ucaCollator);
 
     private final Comparator<T> votesThenUcaCollator = new Comparator<T>() {
         Collator col = Collator.getInstance(ULocale.ENGLISH);
@@ -867,6 +879,7 @@
          *
          * Return negative to favor o1, positive to favor o2.
          */
+        @Override
         public int compare(T o1, T o2) {
             long v1 = organizationToValueAndVote.totalVotes.get(o1);
             long v2 = organizationToValueAndVote.totalVotes.get(o2);
@@ -889,8 +902,8 @@
 
     /**
      * Resolve the votes. Resolution entails counting votes and setting
-     *  members for this VoteResolver, including winningStatus, winningValue,
-     *  and many others.
+     * members for this VoteResolver, including winningStatus, winningValue,
+     * and many others.
      */
     private void resolveVotes() {
         resolved = true;
@@ -902,10 +915,10 @@
         if (DEBUG) {
             System.out.println("sortedValues :" + sortedValues.toString());
         }
-        
+
         /*
          * If there are no (unconflicted) votes, return baseline (trunk) if not null,
-         * else INHERITANCE_MARKER if baileySet, else ERROR_NO_WINNING_VALUE.
+         * else INHERITANCE_MARKER if baileySet, else NO_WINNING_VALUE.
          * Avoid setting winningValue to null. VoteResolver should be fully in charge of vote resolution.
          * Note: formerly if trunkValue was null here, winningValue was set to null, such
          * as for http://localhost:8080/cldr-apps/v#/aa/Numbering_Systems/7b8ee7884f773afa
@@ -924,18 +937,20 @@
                 /*
                  * TODO: When can this still happen? See https://unicode.org/cldr/trac/ticket/11299 "Example C".
                  * Also http://localhost:8080/cldr-apps/v#/en_CA/Gregorian/
+                 * -- also http://localhost:8080/cldr-apps/v#/aa/Languages_A_D/
+                 *    xpath //ldml/localeDisplayNames/languages/language[@type="zh_Hans"][@alt="long"]
                  * See also checkDataRowConsistency in DataSection.java.
                  */
-                winningValue = (T) ERROR_NO_WINNING_VALUE;
+                winningValue = (T) NO_WINNING_VALUE;
                 winningStatus = Status.missing;
             }
-            valuesWithSameVotes.add(winningValue); // may be null
+            valuesWithSameVotes.add(winningValue);
             return;
         }
         if (values.size() == 0) {
             throw new IllegalArgumentException("No values added to resolver");
         }
-       
+
         /*
          * Copy what is in the the totals field of this VoteResolver for all the
          * values in sortedValues. This local variable voteCount may be used
@@ -963,7 +978,7 @@
          * Perform the actual resolution.
          */
         long weights[] = setBestNextAndSameVoteValues(sortedValues, voteCount);
-        
+
         oValue = winningValue;
 
         winningStatus = computeStatus(weights[0], weights[1], trunkStatus);
@@ -988,7 +1003,7 @@
      * @return the HashMap
      */
     private HashMap<T, Long> makeVoteCountMap(Set<T> sortedValues) {
-        HashMap<T, Long> map = new HashMap<T, Long>();
+        HashMap<T, Long> map = new HashMap<>();
         for (T value : sortedValues) {
             map.put(value, totals.getCount(value));
         }
@@ -1011,7 +1026,7 @@
      *
      * @param sortedValues the set of sorted values, possibly to be modified
      * @param voteCount the hash giving the vote count for each value, possibly to be modified
-     * 
+     *
      * Reference: https://unicode.org/cldr/trac/ticket/11299
      */
     private void combineInheritanceWithBaileyForVoting(Set<T> sortedValues, HashMap<T, Long> voteCount) {
@@ -1041,7 +1056,7 @@
         /*
          * Sort again, and omit skipValue
          */
-        List<T> list = new ArrayList<T>(sortedValues);
+        List<T> list = new ArrayList<>(sortedValues);
         Collator col = Collator.getInstance(ULocale.ENGLISH);
         Collections.sort(list, (v1, v2) -> {
             long c1 = (voteCount != null) ? voteCount.get(v1) : totals.getCount(v1);
@@ -1056,7 +1071,7 @@
             if (!value.equals(skipValue)) {
                 sortedValues.add(value);
             }
-        }     
+        }
     }
 
     /**
@@ -1075,7 +1090,7 @@
      *
      * @param sortedValues the set of sorted values
      * @param voteCount the hash giving the vote count for each value in sortedValues
-     * 
+     *
      * public for unit testing, see TestAnnotationVotes.java
      */
     public void adjustAnnotationVoteCounts(Set<T> sortedValues, HashMap<T, Long> voteCount) {
@@ -1086,7 +1101,7 @@
         HashMap<T, Long> compMap = makeAnnotationComponentMap(sortedValues, voteCount);
 
         // Save a copy of the "raw" vote count before adjustment, since it's needed by promoteSuperiorAnnotationSuperset.
-        HashMap<T, Long> rawVoteCount = new HashMap<T, Long>(voteCount);
+        HashMap<T, Long> rawVoteCount = new HashMap<>(voteCount);
 
         // Calculate new counts for original values, based on components.
         calculateNewCountsBasedOnAnnotationComponents(sortedValues, voteCount, compMap);
@@ -1100,14 +1115,14 @@
 
     /**
      * Make a hash that maps individual annotation components to cumulative vote counts.
-     * 
+     *
      * For example, 3 votes for "a|b" and 2 votes for "a|c" makes 5 votes for "a", 3 for "b", and 2 for "c".
-     * 
+     *
      * @param sortedValues the set of sorted values
      * @param voteCount the hash giving the vote count for each value in sortedValues
      */
     private HashMap<T, Long> makeAnnotationComponentMap(Set<T> sortedValues, HashMap<T, Long> voteCount) {
-        HashMap<T, Long> compMap = new HashMap<T, Long>();        
+        HashMap<T, Long> compMap = new HashMap<>();
         for (T value : sortedValues) {
             Long count = voteCount.get(value);
             List<T> comps = splitAnnotationIntoComponentsList(value);
@@ -1127,11 +1142,11 @@
             }
         }
         return compMap;
-    }    
+    }
 
     /**
      * Calculate new counts for original values, based on annotation components.
-     * 
+     *
      * Find the total votes for each component (e.g., "b" in "b|c"). As the "modified"
      * vote for the set, use the geometric mean of the components in the set.
      *
@@ -1164,12 +1179,12 @@
 
     /**
      * Split an annotation into a list of components.
-     * 
+     *
      * For example, split "happy | joyful" into ["happy", "joyful"].
-     * 
+     *
      * @param value the value like "happy | joyful"
      * @return the list like ["happy", "joyful"]
-     * 
+     *
      * Called by makeAnnotationComponentMap and calculateNewCountsBasedOnAnnotationComponents.
      * Short, but needs encapsulation, should be consistent with similar code in DisplayAndInputProcessor.java.
      */
@@ -1179,14 +1194,14 @@
 
     /**
      * Re-sort the set of values to match the adjusted vote counts based on annotation components.
-     * 
+     *
      * Resolve ties using ULocale.ENGLISH collation for consistency with votesThenUcaCollator.
-     * 
+     *
      * @param sortedValues the set of sorted values, maybe no longer sorted the way we want
      * @param voteCount the hash giving the adjusted vote count for each value in sortedValues
      */
     private void resortValuesBasedOnAdjustedVoteCounts(Set<T> sortedValues, HashMap<T, Long> voteCount) {
-        List<T> list = new ArrayList<T>(sortedValues);
+        List<T> list = new ArrayList<>(sortedValues);
         Collator col = Collator.getInstance(ULocale.ENGLISH);
         Collections.sort(list, (v1, v2) -> {
             long c1 = voteCount.get(v1), c2 = voteCount.get(v2);
@@ -1219,7 +1234,7 @@
      * purpose of requiring at least one non-guest vote.
      *
      * If any other "superior" supersets exist, promote to second place the one with the next most raw votes.
-     * 
+     *
      * Accomplish promotion by increasing vote counts in the voteCount hash.
      *
      * @param sortedValues the set of sorted values
@@ -1228,7 +1243,7 @@
      * @param rawVoteCount the vote count for each value in sortedValues BEFORE calculateNewCountsBasedOnAnnotationComponents;
      *             rawVoteCount is not changed by this function
      *
-     * Reference: https://unicode.org/cldr/trac/ticket/10973                 
+     * Reference: https://unicode.org/cldr/trac/ticket/10973
      */
     private void promoteSuperiorAnnotationSuperset(Set<T> sortedValues, HashMap<T, Long> voteCount, HashMap<T, Long> rawVoteCount) {
         final long requiredGap = 2;
@@ -1240,14 +1255,14 @@
             if (oldWinner == null) {
                 oldWinner = value;
                 oldWinnerRawCount = rawVoteCount.get(value);
-                oldWinnerComps = new LinkedHashSet<T>(splitAnnotationIntoComponentsList(value));
+                oldWinnerComps = new LinkedHashSet<>(splitAnnotationIntoComponentsList(value));
             } else {
-                Set<T> comps = new LinkedHashSet<T>(splitAnnotationIntoComponentsList(value));
+                Set<T> comps = new LinkedHashSet<>(splitAnnotationIntoComponentsList(value));
                 if (comps.size() <= CheckWidths.MAX_COMPONENTS_PER_ANNOTATION &&
                         comps.containsAll(oldWinnerComps) &&
                         rawVoteCount.get(value) >= oldWinnerRawCount + requiredGap) {
                     if (superiorSupersets == null) {
-                        superiorSupersets = new LinkedHashSet<T>();
+                        superiorSupersets = new LinkedHashSet<>();
                     }
                     superiorSupersets.add(value);
                 }
@@ -1275,7 +1290,7 @@
      * Given a nonempty list of sorted values, and a hash with their vote counts, set these members
      * of this VoteResolver:
      *  winningValue, nValue, valuesWithSameVotes (which is empty when this function is called).
-     * 
+     *
      * @param sortedValues the set of sorted values
      * @param voteCount the hash giving the vote count for each value
      * @return an array of two longs, the weights for the best and next-best values.
@@ -1322,7 +1337,7 @@
 
     /**
      * Compute the status for the winning value.
-     * 
+     *
      * @param weight1 the weight (vote count) for the best value
      * @param weight2 the weight (vote count) for the next-best value
      * @param oldStatus the old status (trunkStatus)
@@ -1407,6 +1422,7 @@
     /**
      * @deprecated
      */
+    @Deprecated
     public T getNextToWinningValue() {
         return getNValue();
     }
@@ -1428,7 +1444,7 @@
         if (!resolved) {
             resolveVotes();
         }
-        return new ArrayList<T>(valuesWithSameVotes);
+        return new ArrayList<>(valuesWithSameVotes);
     }
 
     public EnumSet<Organization> getConflictedOrganizations() {
@@ -1456,9 +1472,16 @@
         return organizationToValueAndVote.getNameTime();
     }
 
+    /**
+     * Get a String representation of this VoteResolver.
+     * This is sent to the client as "voteResolver.raw" and is used only for debugging.
+     *
+     * Compare SurveyAjax.JSONWriter.wrap(VoteResolver<String>) which creates the data
+     * actually used by the client.
+     */
+    @Override
     public String toString() {
         return "{"
-            + "test: {" + "randomTest }, "
             + "bailey: " + (organizationToValueAndVote.baileySet ? ("“" + organizationToValueAndVote.baileyValue + "” ") : "none ")
             + "trunk: {" + trunkValue + ", " + trunkStatus + "}, "
             + organizationToValueAndVote
@@ -1470,28 +1493,6 @@
             + "}";
     }
 
-    public static Map<String, Map<Organization, Relation<Level, Integer>>> getLocaleToVetters() {
-        Map<String, Map<Organization, Relation<Level, Integer>>> result = new TreeMap<String, Map<Organization, Relation<Level, Integer>>>();
-        for (int voter : getVoterToInfo().keySet()) {
-            VoterInfo info = getVoterToInfo().get(voter);
-            if (info.getLevel() == Level.locked) {
-                continue;
-            }
-            for (String locale : info.getLocales()) {
-                Map<Organization, Relation<Level, Integer>> orgToVoter = result.get(locale);
-                if (orgToVoter == null) {
-                    result.put(locale, orgToVoter = new TreeMap<Organization, Relation<Level, Integer>>());
-                }
-                Relation<Level, Integer> rel = orgToVoter.get(info.getOrganization());
-                if (rel == null) {
-                    orgToVoter.put(info.getOrganization(), rel = Relation.of(new TreeMap<Level, Set<Integer>>(), TreeSet.class));
-                }
-                rel.put(info.getLevel(), voter);
-            }
-        }
-        return result;
-    }
-
     private static Map<Integer, VoterInfo> getVoterToInfo() {
         synchronized (VoteResolver.class) {
             return voterToInfo;
@@ -1537,7 +1538,7 @@
 
     private static synchronized void computeMaxVotes() {
         // compute the localeToOrganizationToMaxVote
-        localeToOrganizationToMaxVote = new TreeMap<String, Map<Organization, Level>>();
+        localeToOrganizationToMaxVote = new TreeMap<>();
         for (int voter : getVoterToInfo().keySet()) {
             VoterInfo info = getVoterToInfo().get(voter);
             if (info.getLevel() == Level.tc || info.getLevel() == Level.locked) {
@@ -1548,7 +1549,7 @@
                 Map<Organization, Level> organizationToMaxVote = localeToOrganizationToMaxVote.get(locale);
                 if (organizationToMaxVote == null) {
                     localeToOrganizationToMaxVote.put(locale,
-                        organizationToMaxVote = new TreeMap<Organization, Level>());
+                        organizationToMaxVote = new TreeMap<>());
                 }
                 Level maxVote = organizationToMaxVote.get(info.getOrganization());
                 if (maxVote == null || info.getLevel().compareTo(maxVote) > 0) {
@@ -1594,13 +1595,14 @@
             all, userId, mainType, n, levelType, localeType, localeId;
             String get(Matcher matcher) {
                 return matcher.group(this.ordinal());
-            };
+            }
         }
 
         private static final boolean DEBUG_HANDLER = false;
-        Map<Integer, VoterInfo> testVoterToInfo = new TreeMap<Integer, VoterInfo>();
+        Map<Integer, VoterInfo> testVoterToInfo = new TreeMap<>();
         Matcher matcher = userPathMatcher.matcher("");
 
+        @Override
         public void handlePathValue(String path, String value) {
             if (DEBUG_HANDLER)
                 System.out.println(path + "\t" + value);
@@ -1651,8 +1653,9 @@
 
     static class XPathTableHandler extends XMLFileReader.SimpleHandler {
         Matcher matcher = Pattern.compile("id=\"([0-9]+)\"").matcher("");
-        Map<Integer, String> pathIdToPath = new HashMap<Integer, String>();
+        Map<Integer, String> pathIdToPath = new HashMap<>();
 
+        @Override
         public void handlePathValue(String path, String value) {
             // <xpathTable host="tintin.local" date="Tue Apr 29 14:34:32 PDT 2008" count="18266" >
             // <xpath
@@ -1677,14 +1680,15 @@
 
     public enum Type {
         proposal, optimal
-    };
+    }
 
     public static class CandidateInfo {
         public Status oldStatus;
         public Type surveyType;
         public Status surveyStatus;
-        public Set<Integer> voters = new TreeSet<Integer>();
+        public Set<Integer> voters = new TreeSet<>();
 
+        @Override
         public String toString() {
             StringBuilder voterString = new StringBuilder("{");
             for (int voter : voters) {
@@ -1721,8 +1725,9 @@
      * A base path has a set of candidates. Each candidate has various items of information.
      */
     static class VotesHandler extends XMLFileReader.SimpleHandler {
-        Map<Integer, Map<Integer, CandidateInfo>> basepathToInfo = new TreeMap<Integer, Map<Integer, CandidateInfo>>();
+        Map<Integer, Map<Integer, CandidateInfo>> basepathToInfo = new TreeMap<>();
 
+        @Override
         public void handlePathValue(String path, String value) {
             try {
                 XPathParts parts = XPathParts.getFrozenInstance(path);
@@ -1733,7 +1738,7 @@
                 int baseId = Integer.parseInt(parts.getAttributeValue(1, "baseXpath"));
                 Map<Integer, CandidateInfo> info = basepathToInfo.get(baseId);
                 if (info == null) {
-                    basepathToInfo.put(baseId, info = new TreeMap<Integer, CandidateInfo>());
+                    basepathToInfo.put(baseId, info = new TreeMap<>());
                 }
                 int itemId = Integer.parseInt(parts.getAttributeValue(2, "xpath"));
                 CandidateInfo candidateInfo = info.get(itemId);
@@ -1773,7 +1778,7 @@
     }
 
     public static Map<Organization, Level> getOrganizationToMaxVote(Set<Integer> voters) {
-        Map<Organization, Level> orgToMaxVoteHere = new TreeMap<Organization, Level>();
+        Map<Organization, Level> orgToMaxVoteHere = new TreeMap<>();
         for (int voter : voters) {
             VoterInfo info = getInfoForVoter(voter);
             if (info == null) {
@@ -1799,6 +1804,7 @@
             this.voter = voter;
         }
 
+        @Override
         public String toString() {
             return "Unknown voter: " + voter;
         }
@@ -1831,7 +1837,7 @@
         if (!resolved) {
             resolveVotes();
         }
-        Map<T, Long> result = new LinkedHashMap<T, Long>();
+        Map<T, Long> result = new LinkedHashMap<>();
         if (winningValue != null && !totals.containsKey(winningValue)) {
             result.put(winningValue, 0L);
         }
diff --git a/tools/java/org/unicode/cldr/util/WikiSubdivisionLanguages.java b/tools/java/org/unicode/cldr/util/WikiSubdivisionLanguages.java
index 32701c6..0a67ab4 100644
--- a/tools/java/org/unicode/cldr/util/WikiSubdivisionLanguages.java
+++ b/tools/java/org/unicode/cldr/util/WikiSubdivisionLanguages.java
@@ -343,7 +343,7 @@
             R2<List<String>, String> replacement = SUBDIVISION_ALIASES.get(type);
             if (replacement != null) {
                 String fullPath = oldFileSubdivisions.getFullXPath(path);
-                XPathParts parts2 = XPathParts.getInstance(fullPath);
+                XPathParts parts2 = XPathParts.getFrozenInstance(fullPath).cloneAsThawed();
                 for (String replacementType : replacement.get0()) {
                     parts2.setAttribute(-1, "type", replacementType);
                     toRemove.add(path);
diff --git a/tools/java/org/unicode/cldr/util/WikipediaOfficialLanguages.java b/tools/java/org/unicode/cldr/util/WikipediaOfficialLanguages.java
index 1541107..866d711 100644
--- a/tools/java/org/unicode/cldr/util/WikipediaOfficialLanguages.java
+++ b/tools/java/org/unicode/cldr/util/WikipediaOfficialLanguages.java
@@ -69,9 +69,9 @@
             //"British Antarctic Territory",
             "British Indian Ocean Territory", "British Virgin Islands", "Cayman Islands", "Falkland Islands", "Gibraltar",
             "Montserrat", "Pitcairn Islands", "Saint Helena", "Ascension Island", "Tristan da Cunha")) {
-            String region = CountryCodeConverter.getCodeFromName(s);
+            String region = CountryCodeConverter.getCodeFromName(s, false);
             if (region == null) {
-                System.out.println("Couldn't parse region: <" + s + ">");
+                System.err.println("Couldn't parse region: <" + s + ">");
             } else {
                 REPLACE_REGIONS.put("United Kingdom and overseas territories", region);
             }
@@ -79,9 +79,9 @@
         for (String s : Arrays.asList("French Guiana", "French Polynesia", "Guadeloupe", "Martinique",
             "Mayotte", "New Caledonia", "Réunion", "Saint Barthélemy", "Saint Martin", "Saint Pierre and Miquelon",
             "Wallis and Futuna")) {
-            String region = CountryCodeConverter.getCodeFromName(s);
+            String region = CountryCodeConverter.getCodeFromName(s, false);
             if (region == null) {
-                System.out.println("Couldn't parse region: <" + s + ">");
+                System.err.println("Couldn't parse region: <" + s + ">");
             } else {
                 REPLACE_REGIONS.put("France and overseas departments and territories", region);
             }
@@ -111,12 +111,12 @@
                         continue;
                     }
 
-                    String region = CountryCodeConverter.getCodeFromName(items[0]);
+                    String region = CountryCodeConverter.getCodeFromName(items[0], false);
                     if (region == null) {
-                        System.out.println(++count + " Couldn't parse region: <" + items[0] + "> in line: " + line);
+                        System.err.println(++count + " Couldn't parse region: <" + items[0] + "> in line: " + line);
                         regionSet = Collections.emptySet();
                     } else {
-                        regionSet = new HashSet<String>();
+                        regionSet = new HashSet<>();
                         regionSet.add(region);
                     }
                 } else if (line.contains("[edit]") || line.trim().isEmpty()) {
@@ -188,13 +188,13 @@
         }
         comments = comments.substring(inLen);
 
-        Set<String> result = new HashSet<String>();
+        Set<String> result = new HashSet<>();
         String[] parts = comments.split("(,?\\s+and|,|;)\\s+");
         for (String part : parts) {
             if (part.isEmpty() || part.equals("de facto")) {
                 continue;
             }
-            String region = CountryCodeConverter.getCodeFromName(part);
+            String region = CountryCodeConverter.getCodeFromName(part, false);
             if (region == null) {
                 System.err.println("* Can't convert " + region + " in " + part);
             } else {
@@ -227,11 +227,11 @@
         Set<String> locales = sc.getLocaleCoverageLocales("google"); // for now, restrict this
 
         System.out.println("Cc\tCountry\tLc\tLanguage Name\tWiki status (heuristic)\tCLDR status\t\tWiki notes");
-        Set<String> seen = new HashSet<String>();
+        Set<String> seen = new HashSet<>();
         for (String region : getRegions()) {
             //boolean regionShown = false;
             Set<String> cldrLanguagesRaw = supplementalDataInfo.getLanguagesForTerritoryWithPopulationData(region);
-            Map<String, PopulationData> cldrLanguageInfo = new HashMap<String, PopulationData>();
+            Map<String, PopulationData> cldrLanguageInfo = new HashMap<>();
             for (String s : cldrLanguagesRaw) {
                 if (s.contains("_")) {
                     PopulationData sInfo = supplementalDataInfo.getLanguageAndTerritoryPopulationData(s, region);
@@ -250,7 +250,7 @@
                 OfficialStatus cldrStatus = sInfo == null ? OfficialStatus.unknown : sInfo.getOfficialStatus();
                 if (!areCompatible(info.status, cldrStatus)) {
                     System.out.print(region + "\t" + english.getName(CLDRFile.TERRITORY_NAME, region));
-                    ;
+
                     System.out.println("\t" + info.language
                         + "\t" + english.getName(info.language)
                         + "\t" + info.status
@@ -265,7 +265,7 @@
                     OfficialStatus officialStatus = sInfo.getOfficialStatus();
                     if (OfficialStatus.unknown != officialStatus) {
                         System.out.print(region + "\t" + english.getName(CLDRFile.TERRITORY_NAME, region));
-                        ;
+
                         System.out.println("\t" + r2
                             + "\t" + english.getName(r2)
                             + "\t" + "CLDR-ONLY"
diff --git a/tools/java/org/unicode/cldr/util/With.java b/tools/java/org/unicode/cldr/util/With.java
index 1be610b..86f7b16 100644
--- a/tools/java/org/unicode/cldr/util/With.java
+++ b/tools/java/org/unicode/cldr/util/With.java
@@ -33,7 +33,7 @@
  * @param <V>
  */
 public final class With<V> implements Iterable<V>, Iterator<V> {
-    List<Iterator<V>> iterators = new ArrayList<Iterator<V>>();
+    List<Iterator<V>> iterators = new ArrayList<>();
     int current;
 
     /**
@@ -180,6 +180,27 @@
     }
 
     /**
+     * Create a string from a list of code points; the inverse of codePointArray.
+     * @param codePoints
+     * @return string
+     */
+    public static String fromCodePoint(int... codePoints) {
+        switch (codePoints.length) {
+        case 0: return "";
+        case 1: {
+            return String.valueOf(Character.toChars(codePoints[0]));
+        }
+        default: {
+            StringBuilder b = new StringBuilder();
+            for (int cp : codePoints) {
+                b.appendCodePoint(cp);
+            }
+            return b.toString();
+        }
+        }
+    }
+
+    /**
      * An alterative to With.in(CharSequence) that is better when it is likely that only a portion of the text will be
      * looked at,
      * such as when an iterator over codepoints is aborted partway.
@@ -285,7 +306,7 @@
     @SuppressWarnings("unchecked")
     public With<V> and(SimpleIterator<V>... iterators) {
         for (SimpleIterator<V> iterator : iterators) {
-            this.iterators.add(new ToIterator<V>(iterator));
+            this.iterators.add(new ToIterator<>(iterator));
         }
         return this;
     }
@@ -299,7 +320,7 @@
     public With<V> andCodePoints(CharSequence... sources) {
         for (CharSequence charSequence : sources) {
             this.iterators
-                .add((Iterator<V>) new ToIterator<CharSequence>(new CharSequenceSimpleIterator(charSequence)));
+            .add((Iterator<V>) new ToIterator<>(new CharSequenceSimpleIterator(charSequence)));
         }
         return this;
     }
@@ -327,15 +348,15 @@
     }
 
     public static <T> Iterator<T> toIterator(SimpleIterator<T> simple) {
-        return new ToIterator<T>(simple);
+        return new ToIterator<>(simple);
     }
 
     public static <T> Iterable<T> toIterable(SimpleIterator<T> simple) {
-        return new ToIterator<T>(simple);
+        return new ToIterator<>(simple);
     }
 
     public static <T> ToSimpleIterator<T> toSimpleIterator(Iterator<T> iterator) {
-        return new ToSimpleIterator<T>(iterator);
+        return new ToSimpleIterator<>(iterator);
     }
 
     private static class ToIterator<T> implements Iterator<T>, Iterable<T> {
diff --git a/tools/java/org/unicode/cldr/util/XChoiceFormat.java b/tools/java/org/unicode/cldr/util/XChoiceFormat.java
index 359114c..ea19090 100644
--- a/tools/java/org/unicode/cldr/util/XChoiceFormat.java
+++ b/tools/java/org/unicode/cldr/util/XChoiceFormat.java
@@ -66,7 +66,7 @@
                 return true; // CN
             }
         }
-    };
+    }
 
     private Condition[] conditions;
 
diff --git a/tools/java/org/unicode/cldr/util/XEquivalenceClass.java b/tools/java/org/unicode/cldr/util/XEquivalenceClass.java
index fbad432..2ad6316 100644
--- a/tools/java/org/unicode/cldr/util/XEquivalenceClass.java
+++ b/tools/java/org/unicode/cldr/util/XEquivalenceClass.java
@@ -26,7 +26,7 @@
 
     // quick test
     static public void main(String[] args) {
-        XEquivalenceClass<String, Integer> foo1 = new XEquivalenceClass<String, Integer>(1);
+        XEquivalenceClass<String, Integer> foo1 = new XEquivalenceClass<>(1);
         String[][] tests = { { "b", "a1" }, { "b", "c" }, { "a1", "c" }, { "d", "e" }, { "e", "f" }, { "c", "d" } };
         for (int i = 0; i < tests.length; ++i) {
             System.out.println("Adding: " + tests[i][0] + ", " + tests[i][1]);
@@ -149,7 +149,7 @@
     }
 
     /**
-     * 
+     *
      */
     private void addReason(T a, T b, R reason) {
         Map<T, Set<R>> obj_reasons = obj_obj_reasons.get(a);
@@ -175,7 +175,7 @@
     public Set<T> getEquivalences(T a) {
         Set<T> aPartitionSet = toPartitionSet.get(a);
         if (aPartitionSet == null) { // manufacture an equivalence
-            aPartitionSet = new HashSet<T>();
+            aPartitionSet = new HashSet<>();
             aPartitionSet.add(a);
         }
         return Collections.unmodifiableSet(aPartitionSet);
@@ -186,7 +186,7 @@
     }
 
     public Set<Set<T>> getEquivalenceSets() {
-        Set<Set<T>> result = new HashSet<Set<T>>();
+        Set<Set<T>> result = new HashSet<>();
         for (T item : toPartitionSet.keySet()) {
             Set<T> partition = toPartitionSet.get(item);
             result.add(Collections.unmodifiableSet(partition));
@@ -206,7 +206,7 @@
     }
 
     /**
-     * Gets a sample object in the equivalence set for a. 
+     * Gets a sample object in the equivalence set for a.
      *
      */
     public T getSample(T a) {
@@ -229,7 +229,7 @@
     }
 
     /**
-     * gets the set of all the samples, one from each equivalence class. 
+     * gets the set of all the samples, one from each equivalence class.
      *
      */
     public Set<T> getSamples() {
@@ -244,6 +244,7 @@
         return result;
     }
 
+    @Override
     public Iterator<T> iterator() {
         return getSamples().iterator();
     }
@@ -257,6 +258,7 @@
             this.result = result;
         }
 
+        @Override
         public String toString() {
             return reasons + (result == null ? "" : ARROW + result);
         }
@@ -284,13 +286,13 @@
         // see if they connect
         if (aPartitionSet == null || bPartitionSet == null || aPartitionSet != bPartitionSet || a.equals(b)) return null;
 
-        ArrayList<Linkage<T, R>> list = new ArrayList<Linkage<T, R>>();
+        ArrayList<Linkage<T, R>> list = new ArrayList<>();
         list.add(new Linkage(null, a));
-        ArrayList<ArrayList<Linkage<T, R>>> lists = new ArrayList<ArrayList<Linkage<T, R>>>();
+        ArrayList<ArrayList<Linkage<T, R>>> lists = new ArrayList<>();
         lists.add(list);
 
         // this will contain the results
-        Set<T> sawLastTime = new HashSet<T>();
+        Set<T> sawLastTime = new HashSet<>();
         sawLastTime.add(a);
 
         // each time, we extend each lists by one (adding multiple other lists)
@@ -327,6 +329,7 @@
     /**
      * For debugging.
      */
+    @Override
     public String toString() {
         return getEquivalenceSets().toString();
     }
diff --git a/tools/java/org/unicode/cldr/util/XEquivalenceMap.java b/tools/java/org/unicode/cldr/util/XEquivalenceMap.java
index ab32ba7..2cf861a 100644
--- a/tools/java/org/unicode/cldr/util/XEquivalenceMap.java
+++ b/tools/java/org/unicode/cldr/util/XEquivalenceMap.java
@@ -23,10 +23,10 @@
  */
 public class XEquivalenceMap<K, V, R> implements Iterable<Set<K>> {
 
-    Map<K, Row.R2<V, Set<R>>> source_target_reasons = new HashMap<K, Row.R2<V, Set<R>>>();
+    Map<K, Row.R2<V, Set<R>>> source_target_reasons = new HashMap<>();
 
     Map<V, Set<K>> target_sourceSet;
-    Map<K, Set<K>> source_Set = new HashMap<K, Set<K>>(); // not really needed: could go source-target-sourceset
+    Map<K, Set<K>> source_Set = new HashMap<>(); // not really needed: could go source-target-sourceset
 
     public XEquivalenceMap() {
         this(new HashMap<V, Set<K>>());
@@ -50,7 +50,7 @@
     public XEquivalenceMap add(K source, V target, R reason) {
         R2<V, Set<R>> target_reasons = source_target_reasons.get(source);
         if (target_reasons == null) {
-            Set<R> reasons = new HashSet<R>();
+            Set<R> reasons = new HashSet<>();
             if (reason != null) {
                 reasons.add(reason);
             }
@@ -70,7 +70,7 @@
         }
 
         Set<K> s = target_sourceSet.get(target);
-        if (s == null) target_sourceSet.put(target, s = new HashSet<K>());
+        if (s == null) target_sourceSet.put(target, s = new HashSet<>());
         s.add(source);
         source_Set.put(source, s);
         return this;
@@ -83,7 +83,7 @@
     }
 
     public boolean areEquivalent(K source1, K source2) {
-        Set<K> s = (Set) source_Set.get(source1);
+        Set<K> s = source_Set.get(source1);
         if (s == null) return false;
         return s.contains(source2);
     }
@@ -101,6 +101,7 @@
         return Collections.unmodifiableSet(s);
     }
 
+    @Override
     public Iterator<Set<K>> iterator() {
         return UnmodifiableIterator.from(target_sourceSet.values());
     }
@@ -118,7 +119,7 @@
         private Iterator<T> source;
 
         public static <T> UnmodifiableIterator<T> from(Iterator<T> source) {
-            UnmodifiableIterator<T> result = new UnmodifiableIterator<T>();
+            UnmodifiableIterator<T> result = new UnmodifiableIterator<>();
             result.source = source;
             return result;
         }
@@ -127,14 +128,17 @@
             return from(source.iterator());
         }
 
+        @Override
         public void remove() {
             throw new UnsupportedOperationException();
         }
 
+        @Override
         public boolean hasNext() {
             return source.hasNext();
         }
 
+        @Override
         public T next() {
             return source.next();
         }
diff --git a/tools/java/org/unicode/cldr/util/XListFormatter.java b/tools/java/org/unicode/cldr/util/XListFormatter.java
index a89308d..0da0719 100644
--- a/tools/java/org/unicode/cldr/util/XListFormatter.java
+++ b/tools/java/org/unicode/cldr/util/XListFormatter.java
@@ -13,21 +13,21 @@
 import com.ibm.icu.text.UTF16;
 
 public class XListFormatter {
-    
+
     public enum ListTypeLength {
-        AND_WIDE(""), 
-        AND_SHORT("[@type=\"standard-short\"]"), 
-        AND_NARROW("[@type=\"standard-narrow\"]"), 
-        OR_WIDE("[@type=\"or\"]"), 
-        OR_SHORT("[@type=\"or-short\"]"), 
-        OR_NARROW("[@type=\"or-narrow\"]"), 
-        UNIT_WIDE("[@type=\"unit\"]"), 
-        UNIT_SHORT("[@type=\"unit-short\"]"), 
+        AND_WIDE(""),
+        AND_SHORT("[@type=\"standard-short\"]"),
+        AND_NARROW("[@type=\"standard-narrow\"]"),
+        OR_WIDE("[@type=\"or\"]"),
+        OR_SHORT("[@type=\"or-short\"]"),
+        OR_NARROW("[@type=\"or-narrow\"]"),
+        UNIT_WIDE("[@type=\"unit\"]"),
+        UNIT_SHORT("[@type=\"unit-short\"]"),
         UNIT_NARROW("[@type=\"unit-narrow\"]")
         ;
 
         public static final ListTypeLength NORMAL = AND_WIDE;
-        
+
         final String typeString;
 
         static final Map<String, ListTypeLength> stringToEnum;
@@ -55,9 +55,9 @@
                 + "/listPatternPart[@type=\"{0}\"]";
         }
     }
-    
+
     private ListFormatter listFormatter;
-    
+
     public XListFormatter(CLDRFile cldrFile, ListTypeLength listTypeLength) {
         SimpleFormatter listPathFormat = SimpleFormatter.compile(listTypeLength.getPath());
         String doublePattern = cldrFile.getWinningValue(listPathFormat.format("2"));
@@ -66,7 +66,7 @@
         String endPattern = cldrFile.getWinningValue(listPathFormat.format("end"));
         listFormatter = new ListFormatter(doublePattern, startPattern, middlePattern, endPattern);
     }
-    
+
     public String format(Object... items) {
         return listFormatter.format(items);
     }
@@ -74,7 +74,7 @@
     public String format(Collection<?> items) {
         return listFormatter.format(items);
     }
-    
+
     public String formatCodePoints(String items) {
         List<String> source = new ArrayList<>();
         for (int sourceInt : CharSequences.codePoints(items)) { // TODO add utility in CharSequences
diff --git a/tools/java/org/unicode/cldr/util/XMLFileReader.java b/tools/java/org/unicode/cldr/util/XMLFileReader.java
index 0ba6688..43f3fea 100644
--- a/tools/java/org/unicode/cldr/util/XMLFileReader.java
+++ b/tools/java/org/unicode/cldr/util/XMLFileReader.java
@@ -56,22 +56,22 @@
 
     public static class SimpleHandler {
         public void handlePathValue(String path, String value) {
-        };
+        }
 
         public void handleComment(String path, String comment) {
-        };
+        }
 
         public void handleElementDecl(String name, String model) {
-        };
+        }
 
         public void handleAttributeDecl(String eName, String aName, String type, String mode, String value) {
-        };
+        }
 
         public void handleEndDtd() {
         }
 
         public void handleStartDtd(String name, String publicId, String systemId) {
-        };
+        }
     }
 
     public XMLFileReader setHandler(SimpleHandler simpleHandler) {
@@ -92,7 +92,7 @@
      */
     public XMLFileReader read(String fileName, int handlers, boolean validating) {
         try (InputStream fis0 = new FileInputStream(fileName);
-            InputStream fis = new FilterBomInputStream(fis0);
+            InputStream fis = new StripUTF8BOMInputStream(fis0);
             ) {
             return read(fileName, fis, handlers, validating);
         } catch (IOException e) {
@@ -200,52 +200,64 @@
             if (SHOW_ALL) Log.logln("startDocument");
         }
 
+        @Override
         public void characters(char[] ch, int start, int length) throws SAXException {
             if (SHOW_ALL) Log.logln("characters");
         }
 
+        @Override
         public void startElement(String namespaceURI, String localName, String qName, Attributes atts)
             throws SAXException {
             if (SHOW_ALL) Log.logln("startElement");
         }
 
+        @Override
         public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
             if (SHOW_ALL) Log.logln("endElement");
         }
 
+        @Override
         public void startDTD(String name, String publicId, String systemId) throws SAXException {
             if (SHOW_ALL) Log.logln("startDTD");
         }
 
+        @Override
         public void endDTD() throws SAXException {
             if (SHOW_ALL) Log.logln("endDTD");
         }
 
+        @Override
         public void comment(char[] ch, int start, int length) throws SAXException {
             if (SHOW_ALL) Log.logln(" comment " + new String(ch, start, length));
         }
 
+        @Override
         public void elementDecl(String name, String model) throws SAXException {
             if (SHOW_ALL) Log.logln("elementDecl");
         }
 
+        @Override
         public void attributeDecl(String eName, String aName, String type, String mode, String value)
             throws SAXException {
             if (SHOW_ALL) Log.logln("attributeDecl");
-        }        
+        }
 
+        @Override
         public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
             if (SHOW_ALL) Log.logln("ignorableWhitespace length: " + length);
         }
 
+        @Override
         public void endDocument() throws SAXException {
             if (SHOW_ALL) Log.logln("endDocument");
         }
 
+        @Override
         public void internalEntityDecl(String name, String value) throws SAXException {
             if (SHOW_ALL) Log.logln("Internal Entity\t" + name + "\t" + value);
         }
 
+        @Override
         public void externalEntityDecl(String name, String publicId, String systemId) throws SAXException {
             if (SHOW_ALL) Log.logln("Internal Entity\t" + name + "\t" + publicId + "\t" + systemId);
         }
@@ -256,11 +268,13 @@
                 + ", " + systemId);
         }
 
+        @Override
         public void processingInstruction(String target, String data)
             throws SAXException {
             if (SHOW_ALL) Log.logln("processingInstruction: " + target + ", " + data);
         }
 
+        @Override
         public void skippedEntity(String name)
             throws SAXException {
             if (SHOW_ALL) Log.logln("skippedEntity: " + name);
@@ -274,31 +288,38 @@
                 + ", " + notationName);
         }
 
+        @Override
         public void setDocumentLocator(Locator locator) {
             if (SHOW_ALL) Log.logln("setDocumentLocator Locator " + locator);
         }
 
+        @Override
         public void startPrefixMapping(String prefix, String uri) throws SAXException {
             if (SHOW_ALL) Log.logln("startPrefixMapping prefix: " + prefix +
                 ", uri: " + uri);
         }
 
+        @Override
         public void endPrefixMapping(String prefix) throws SAXException {
             if (SHOW_ALL) Log.logln("endPrefixMapping prefix: " + prefix);
         }
 
+        @Override
         public void startEntity(String name) throws SAXException {
             if (SHOW_ALL) Log.logln("startEntity name: " + name);
         }
 
+        @Override
         public void endEntity(String name) throws SAXException {
             if (SHOW_ALL) Log.logln("endEntity name: " + name);
         }
 
+        @Override
         public void startCDATA() throws SAXException {
             if (SHOW_ALL) Log.logln("startCDATA");
         }
 
+        @Override
         public void endCDATA() throws SAXException {
             if (SHOW_ALL) Log.logln("endCDATA");
         }
@@ -308,6 +329,7 @@
          *
          * @see org.xml.sax.ErrorHandler#error(org.xml.sax.SAXParseException)
          */
+        @Override
         public void error(SAXParseException exception) throws SAXException {
             if (SHOW_ALL) Log.logln("error: " + showSAX(exception));
             throw exception;
@@ -318,6 +340,7 @@
          *
          * @see org.xml.sax.ErrorHandler#fatalError(org.xml.sax.SAXParseException)
          */
+        @Override
         public void fatalError(SAXParseException exception) throws SAXException {
             if (SHOW_ALL) Log.logln("fatalError: " + showSAX(exception));
             throw exception;
@@ -328,6 +351,7 @@
          *
          * @see org.xml.sax.ErrorHandler#warning(org.xml.sax.SAXParseException)
          */
+        @Override
         public void warning(SAXParseException exception) throws SAXException {
             if (SHOW_ALL) Log.logln("warning: " + showSAX(exception));
             throw exception;
@@ -338,7 +362,7 @@
     public class MyContentHandler extends LoggingHandler {
         StringBuffer chars = new StringBuffer();
         StringBuffer commentChars = new StringBuffer();
-        Stack<String> startElements = new Stack<String>();
+        Stack<String> startElements = new Stack<>();
         StringBuffer tempPath = new StringBuffer();
         boolean lastIsStart = false;
 
@@ -350,10 +374,12 @@
             return this;
         }
 
+        @Override
         public void characters(char[] ch, int start, int length) throws SAXException {
             if (lastIsStart) chars.append(ch, start, length);
         }
 
+        @Override
         public void startElement(String namespaceURI, String localName, String qName, Attributes atts)
             throws SAXException {
             tempPath.setLength(0);
@@ -366,8 +392,9 @@
             lastIsStart = true;
         }
 
+        @Override
         public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
-            String startElement = (String) startElements.pop();
+            String startElement = startElements.pop();
             if (lastIsStart) {
                 // System.out.println(startElement + ":" + chars);
                 simpleHandler.handlePathValue(startElement, chars.toString());
@@ -376,6 +403,7 @@
             lastIsStart = false;
         }
 
+        @Override
         public void startDTD(String name, String publicId, String systemId) throws SAXException {
             if (SHOW_ALL) Log.logln("startDTD name: " + name
                 + ", publicId: " + publicId
@@ -383,22 +411,26 @@
             simpleHandler.handleStartDtd(name, publicId, systemId);
         }
 
+        @Override
         public void endDTD() throws SAXException {
             if (SHOW_ALL) Log.logln("endDTD");
             simpleHandler.handleEndDtd();
         }
 
+        @Override
         public void comment(char[] ch, int start, int length) throws SAXException {
             if (SHOW_ALL) Log.logln(" comment " + new String(ch, start, length));
             commentChars.append(ch, start, length);
-            simpleHandler.handleComment((String) startElements.peek(), commentChars.toString());
+            simpleHandler.handleComment(startElements.peek(), commentChars.toString());
             commentChars.setLength(0);
         }
 
+        @Override
         public void elementDecl(String name, String model) throws SAXException {
             simpleHandler.handleElementDecl(name, model);
         }
 
+        @Override
         public void attributeDecl(String eName, String aName, String type, String mode, String value)
             throws SAXException {
             simpleHandler.handleAttributeDecl(eName, aName, type, mode, value);
@@ -453,6 +485,7 @@
     static final class DebuggingInputStream extends InputStream {
         InputStream contents;
 
+        @Override
         public void close() throws IOException {
             contents.close();
         }
@@ -461,6 +494,7 @@
             contents = fis;
         }
 
+        @Override
         public int read() throws IOException {
             int x = contents.read();
             System.out.println(Integer.toHexString(x) + ",");
@@ -468,37 +502,40 @@
         }
     }
 
-    public static final class FilterBomInputStream extends InputStream {
-        InputStream contents;
-        boolean first = true;
-
-        public void close() throws IOException {
-            contents.close();
-        }
-
-        public FilterBomInputStream(InputStream fis) {
-            contents = fis;
-        }
-
-        public int read() throws IOException {
-            int x = contents.read();
-            if (first) {
-                first = false;
-                // 0xEF,0xBB,0xBF
-                // SKIP bom
-                if (x == 0xEF) {
-                    int y = contents.read();
-                    if (y == 0xBB) {
-                        int z = contents.read();
-                        if (z == 0xBF) {
-                            x = contents.read();
-                        }
-                    }
-                }
-            }
-            return x;
-        }
-    }
+// class StripUTF8BOMInputStream does the same thing
+//    public static final class FilterBomInputStream extends InputStream {
+//        InputStream contents;
+//        boolean first = true;
+//
+//        @Override
+//        public void close() throws IOException {
+//            contents.close();
+//        }
+//
+//        public FilterBomInputStream(InputStream fis) {
+//            contents = fis;
+//        }
+//
+//        @Override
+//        public int read() throws IOException {
+//            int x = contents.read();
+//            if (first) {
+//                first = false;
+//                // 0xEF,0xBB,0xBF
+//                // SKIP bom
+//                if (x == 0xEF) {
+//                    int y = contents.read();
+//                    if (y == 0xBB) {
+//                        int z = contents.read();
+//                        if (z == 0xBF) {
+//                            x = contents.read();
+//                        }
+//                    }
+//                }
+//            }
+//            return x;
+//        }
+//    }
 
     public static List<Pair<String, String>> loadPathValues(String filename, List<Pair<String, String>> data, boolean validating) {
         return loadPathValues(filename, data, validating, false);
@@ -537,7 +574,7 @@
 
         public PathValueListHandler(List<Pair<String, String>> data, boolean full, Function<String, String> valueFilter) {
             super();
-            this.data = data != null ? data : new ArrayList<Pair<String, String>>();
+            this.data = data != null ? data : new ArrayList<>();
             this.full = full;
             this.valueFilter = valueFilter;
         }
diff --git a/tools/java/org/unicode/cldr/util/XMLNormalizingLoader.java b/tools/java/org/unicode/cldr/util/XMLNormalizingLoader.java
new file mode 100644
index 0000000..2d169d0
--- /dev/null
+++ b/tools/java/org/unicode/cldr/util/XMLNormalizingLoader.java
@@ -0,0 +1,678 @@
+package org.unicode.cldr.util;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.unicode.cldr.util.CLDRFile.DraftStatus;
+import org.unicode.cldr.util.XMLFileReader.AllHandler;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.common.collect.ImmutableSet;
+import com.ibm.icu.impl.Utility;
+import com.ibm.icu.text.UnicodeSet;
+import com.ibm.icu.util.ICUUncheckedIOException;
+import com.ibm.icu.util.VersionInfo;
+
+/**
+ * Loading Normalized XMLSource
+ */
+public class XMLNormalizingLoader{
+
+    private static final int CACHE_LIMIT = 700;
+    private static LoadingCache<XMLSourceCacheKey, XMLSource> cache = CacheBuilder.newBuilder()
+        .maximumSize(CACHE_LIMIT)
+        .softValues()   // will garbage-collected in LRU manner in response to memory demand
+        .build(
+            new CacheLoader<XMLSourceCacheKey, XMLSource>() {
+                @Override
+                public XMLSource load(XMLSourceCacheKey key) {
+                    return makeXMLSource(key);
+                }
+            });
+
+    private static final boolean LOG_PROGRESS = false;
+    private static final boolean DEBUG = false;
+    enum SupplementalStatus {
+        NEVER_SET, IS_SUMPPLEMENTAL, NOT_SUPPLEMENTAL
+    };
+
+    private static class XMLSourceCacheKey {
+        private final String localeId;
+        private final Set<File> dirs;
+        private final DraftStatus minimalDraftStatus;
+        private final int hashCode;
+        public XMLSourceCacheKey(String localeId, List<File> dirs, DraftStatus minimalDraftStatus) {
+            this.localeId = localeId;
+            // Parameter check: the directory/file supplied must be non-null and readable.
+            if (dirs == null || dirs.isEmpty()) {
+                throw new ICUUncheckedIOException("Attempt to create a XMLSourceCacheKey with a null directory, please supply a non-null one.");
+            }
+            ImmutableSet.Builder<File> _dirs = ImmutableSet.builder();
+            for (File dir : dirs) {
+                if (!dir.canRead()) {
+                    throw new ICUUncheckedIOException("The directory specified, " + dir.getPath() + ", cannot be read");
+                }
+                _dirs.add(dir);
+            }
+            this.dirs = _dirs.build();
+            this.minimalDraftStatus = minimalDraftStatus;
+            this.hashCode = Objects.hash(this.localeId, this.dirs, this.minimalDraftStatus);
+        }
+
+        @Override
+        public int hashCode() {
+            return hashCode;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            XMLSourceCacheKey other = (XMLSourceCacheKey) obj;
+            if(hashCode != other.hashCode) {
+                return false;
+            }
+            if (!Objects.equals(dirs, other.dirs)) {
+                return false;
+            }
+            if (minimalDraftStatus != other.minimalDraftStatus) {
+                return false;
+            }
+            if (!Objects.equals(localeId, other.localeId)) {
+                return false;
+            }
+            return true;
+        }
+    }
+
+    public static XMLSource getFrozenInstance(String localeId, List<File> dirs, DraftStatus minimalDraftStatus) {
+        XMLSourceCacheKey key = new XMLSourceCacheKey(localeId, dirs, minimalDraftStatus);
+        return cache.getUnchecked(key);
+    }
+
+    private static XMLSource makeXMLSource(XMLSourceCacheKey key) {
+        XMLSource source = null;
+        if (key.dirs.size() == 1) {
+            File file = new File(key.dirs.iterator().next(), key.localeId + ".xml");
+            source = loadXMLFile(file, key.localeId, key.minimalDraftStatus);
+            source.freeze();
+            return source;
+        }
+
+        // if contains more than one file, make XMLSource from each file and then combine them to a combined XMLSource,
+        // so that can cache single file XMLSource as well as combined XMLSource
+        List<XMLSource> list = new ArrayList<>();
+        List<File> dirList = new ArrayList<>();
+        for (File dir: key.dirs) {
+            dirList.clear();
+            dirList.add(dir);
+            XMLSourceCacheKey singleKey = new XMLSourceCacheKey(key.localeId, dirList, key.minimalDraftStatus);
+            XMLSource singleSource = cache.getUnchecked(singleKey);
+            list.add(singleSource);
+        }
+
+        source = list.get(0).cloneAsThawed();
+        for (int i = 1; i < list.size(); i++) {
+            XMLSource other = list.get(i);
+            source.putAll(other, 0); // 0 --> merge_keep_mine
+            source.getXpathComments().joinAll(other.getXpathComments());
+        }
+        source.freeze();
+        return source;
+    }
+
+    public static XMLSource loadXMLFile(File f, String localeId, DraftStatus minimalDraftStatus) {
+        // use try-with-resources statement
+        try (
+            InputStream fis = new StripUTF8BOMInputStream(new FileInputStream(f));
+            InputStreamReader reader = new InputStreamReader(fis, Charset.forName("UTF-8"))
+        ) {
+            String fullFileName = f.getCanonicalPath();
+            XMLSource source = new SimpleXMLSource(localeId);
+            XMLNormalizingHandler XML_HANDLER = new XMLNormalizingHandler(source, minimalDraftStatus);
+            XMLFileReader.read(fullFileName, reader, -1, true, XML_HANDLER);
+            if (XML_HANDLER.supplementalStatus == SupplementalStatus.NEVER_SET) {
+                throw new IllegalArgumentException("root of file must be either ldml or supplementalData");
+            }
+            source.setNonInheriting(XML_HANDLER.supplementalStatus == SupplementalStatus.NOT_SUPPLEMENTAL);
+            if (XML_HANDLER.overrideCount > 0) {
+                throw new IllegalArgumentException("Internal problems: either data file has duplicate path, or" +
+                    " CLDRFile.isDistinguishing() or CLDRFile.isOrdered() need updating: "
+                    + XML_HANDLER.overrideCount
+                    + "; The exact problems are printed on the console above.");
+            }
+            return source;
+        } catch (IOException e) {
+            throw new ICUUncheckedIOException("Cannot read the file " + f, e);
+        }
+    }
+
+    private static class XMLNormalizingHandler implements AllHandler {
+        private DraftStatus minimalDraftStatus;
+        private static final boolean SHOW_START_END = false;
+        private int commentStackIndex;
+        private boolean justPopped = false;
+        private String lastChars = "";
+        private StringBuilder currentFullXPathSb = new StringBuilder("/");
+        private String comment = null;
+        private Map<String, String> attributeOrder;
+        private DtdData dtdData;
+        private XMLSource source;
+        private String lastActiveLeafNode;
+        private String lastLeafNode;
+        private SupplementalStatus supplementalStatus = SupplementalStatus.NEVER_SET;
+        private final static int MAX_DEPTH = 30; // just make deep enough to handle any CLDR file.
+        // orderedCounter, orderedString, and level logically form a single class that allows adding elements, but never removed.
+        private int[] orderedCounter = new int[MAX_DEPTH];
+        private String[] orderedString = new String[MAX_DEPTH];
+        private int level = 0;
+        private int overrideCount = 0;
+        // Types which changed from 'type' to 'choice', but not in supplemental data.
+        private static final Set<String> CHANGED_TYPES = new HashSet<>(Arrays.asList(new String[] {
+            "abbreviationFallback",
+            "default", "mapping", "measurementSystem", "preferenceOrdering" }));
+        private static final Pattern DRAFT_PATTERN = PatternCache.get("\\[@draft=\"([^\"]*)\"\\]");
+        private static final Pattern WHITESPACE_WITH_LF = PatternCache.get("\\s*\\u000a\\s*");
+        private Matcher draftMatcher = DRAFT_PATTERN.matcher("");
+        private Matcher whitespaceWithLf = WHITESPACE_WITH_LF.matcher("");
+        private static final UnicodeSet CONTROLS = new UnicodeSet("[:cc:]").freeze();
+        private static final UnicodeSet WHITESPACE = new UnicodeSet("[:whitespace:]").freeze();
+
+        XMLNormalizingHandler(XMLSource source, DraftStatus minimalDraftStatus) {
+            this.source = source;
+            this.minimalDraftStatus = minimalDraftStatus;
+        }
+
+        private String show(Attributes attributes) {
+            if (attributes == null) return "null";
+            StringBuilder result = new StringBuilder();
+            for (int i = 0; i < attributes.getLength(); ++i) {
+                String attribute = attributes.getQName(i);
+                String value = attributes.getValue(i);
+                result.append( "[@" + attribute + "=\"" + value + "\"]"); // TODO quote the value??
+            }
+            return result.toString();
+        }
+
+        private void push(String qName, Attributes attributes) {
+            Log.logln(LOG_PROGRESS, "push\t" + qName + "\t" + show(attributes));
+            ++level;
+            if (!qName.equals(orderedString[level])) {
+                orderedString[level] = qName;
+            }
+            if (lastChars.length() != 0) {
+                if (WHITESPACE.containsAll(lastChars))
+                    lastChars = "";
+                else
+                    throw new IllegalArgumentException("Must not have mixed content: " + qName + ", "
+                        + show(attributes) + ", Content: " + lastChars);
+            }
+
+            currentFullXPathSb.append("/" + qName);
+            if (dtdData.isOrdered(qName)) {
+                currentFullXPathSb.append(orderingAttribute());
+            }
+            if (attributes.getLength() > 0) {
+                attributeOrder.clear();
+                for (int i = 0; i < attributes.getLength(); ++i) {
+                    String attribute = attributes.getQName(i);
+                    String value = attributes.getValue(i);
+
+                    if (attribute.equals("cldrVersion")
+                        && (qName.equals("version"))) {
+                        ((SimpleXMLSource) source).setDtdVersionInfo(VersionInfo.getInstance(value));
+                    } else {
+                        putAndFixDeprecatedAttribute(qName, attribute, value);
+                    }
+                }
+                for (Entry<String, String> entry : attributeOrder.entrySet()) {
+                    String attribute = entry.getKey();
+                    String value = entry.getValue();
+                    String both = "[@" + attribute + "=\"" + value + "\"]"; // TODO quote the value??
+                    currentFullXPathSb.append(both);
+                }
+            }
+            if (comment != null) {
+                String currentFullXPath = currentFullXPathSb.toString();
+                if (currentFullXPath.equals("//ldml") || currentFullXPath.equals("//supplementalData")) {
+                    source.setInitialComment(comment);
+                } else {
+                    source.addComment(currentFullXPath, comment, XPathParts.Comments.CommentType.PREBLOCK);
+                }
+                comment = null;
+            }
+            justPopped = false;
+            lastActiveLeafNode = null;
+            Log.logln(LOG_PROGRESS, "currentFullXPath\t" + currentFullXPathSb.toString());
+        }
+
+
+        private String orderingAttribute() {
+            return "[@_q=\"" + (orderedCounter[level]++) + "\"]";
+        }
+
+        private void putAndFixDeprecatedAttribute(String element, String attribute, String value) {
+            if (attribute.equals("draft")) {
+                if (value.equals("true")) {
+                    value = "approved";
+                }
+                else if (value.equals("false")) {
+                    value = "unconfirmed";
+                }
+            } else if (attribute.equals("type")) {
+                if (CHANGED_TYPES.contains(element) &&  supplementalStatus!= SupplementalStatus.NOT_SUPPLEMENTAL) { // measurementSystem for example did not
+                    // change from 'type' to 'choice'.
+                    attribute = "choice";
+                }
+            }
+
+            attributeOrder.put(attribute, value);
+        }
+
+        /**
+         * Adds a parsed XPath to the CLDRFile.
+         *
+         * @param fullXPath
+         * @param value
+         */
+        private void addPath(String fullXPath, String value) {
+            String former = source.getValueAtPath(fullXPath);
+            if (former != null) {
+                String formerPath = source.getFullXPath(fullXPath);
+                if (!former.equals(value) || !fullXPath.equals(formerPath)) {
+                    if (!fullXPath.startsWith("//ldml/identity/version") && !fullXPath.startsWith("//ldml/identity/generation")) {
+                        warnOnOverride(former, formerPath);
+                    }
+                }
+            }
+            value = trimWhitespaceSpecial(value);
+            source.add(fullXPath, value);
+        }
+
+        private void pop(String qName) {
+            Log.logln(LOG_PROGRESS, "pop\t" + qName);
+            --level;
+            String currentFullXPath = currentFullXPathSb.toString();
+            if (!lastChars.isEmpty() || justPopped == false) {
+                boolean acceptItem = minimalDraftStatus == DraftStatus.unconfirmed;
+                if (!acceptItem) {
+                    if (draftMatcher.reset(currentFullXPath).find()) {
+                        DraftStatus foundStatus = DraftStatus.valueOf(draftMatcher.group(1));
+                        if (minimalDraftStatus.compareTo(foundStatus) <= 0) {
+                            // what we found is greater than or equal to our status
+                            acceptItem = true;
+                        }
+                    } else {
+                        acceptItem = true; // if not found, then the draft status is approved, so it is always ok
+                    }
+                }
+                if (acceptItem) {
+                    // Change any deprecated orientation attributes into values
+                    // for backwards compatibility.
+                    boolean skipAdd = false;
+                    if (currentFullXPath.startsWith("//ldml/layout/orientation")) {
+                        XPathParts parts = XPathParts.getFrozenInstance(currentFullXPath);
+                        String value = parts.getAttributeValue(-1, "characters");
+                        if (value != null) {
+                            addPath("//ldml/layout/orientation/characterOrder", value);
+                            skipAdd = true;
+                        }
+                        value = parts.getAttributeValue(-1, "lines");
+                        if (value != null) {
+                            addPath("//ldml/layout/orientation/lineOrder", value);
+                            skipAdd = true;
+                        }
+                    }
+                    if (!skipAdd) {
+                        addPath(currentFullXPath, lastChars);
+                    }
+                    lastLeafNode = lastActiveLeafNode = currentFullXPath;
+                }
+                lastChars = "";
+            } else {
+                Log.logln(LOG_PROGRESS && lastActiveLeafNode != null, "pop: zeroing last leafNode: "
+                    + lastActiveLeafNode);
+                lastActiveLeafNode = null;
+                if (comment != null) {
+                    source.addComment(lastLeafNode, comment, XPathParts.Comments.CommentType.POSTBLOCK);
+                    comment = null;
+                }
+            }
+            currentFullXPathSb.setLength(0);
+            currentFullXPathSb.append(stripAfter(currentFullXPath, qName));
+            justPopped = true;
+        }
+
+        /**
+         * Trim leading whitespace if there is a linefeed among them, then the same with trailing.
+         *
+         * @param source
+         * @return
+         */
+        private String trimWhitespaceSpecial(String source) {
+            if (DEBUG && CONTROLS.containsSome(source)) {
+                System.out.println("*** " + source);
+            }
+            if (!source.contains("\n")) {
+                return source;
+            }
+            source = whitespaceWithLf.reset(source).replaceAll("\n");
+            return source;
+        }
+
+        private void warnOnOverride(String former, String formerPath) {
+            String distinguishing = CLDRFile.getDistinguishingXPath(formerPath, null);
+            System.out.println("\tERROR in " + source.getLocaleID()
+                + ";\toverriding old value <" + former + "> at path " + distinguishing +
+                "\twith\t<" + lastChars + ">" +
+                CldrUtility.LINE_SEPARATOR + "\told fullpath: " + formerPath +
+                CldrUtility.LINE_SEPARATOR + "\tnew fullpath: " + currentFullXPathSb.toString());
+            overrideCount += 1;
+        }
+
+        private static String stripAfter(String input, String qName) {
+            int pos = findLastSlash(input);
+            if (qName != null) {
+                // assert input.substring(pos+1).startsWith(qName);
+                if (!input.substring(pos + 1).startsWith(qName)) {
+                    throw new IllegalArgumentException("Internal Error: should never get here.");
+                }
+            }
+            return input.substring(0, pos);
+        }
+
+        private static int findLastSlash(String input) {
+            int braceStack = 0;
+            char inQuote = 0;
+            for (int i = input.length() - 1; i >= 0; --i) {
+                char ch = input.charAt(i);
+                switch (ch) {
+                case '\'':  // treat single and double quotes in same way
+                case '"':
+                    if (inQuote == 0) {
+                        inQuote = ch;
+                    } else if (inQuote == ch) {
+                        inQuote = 0; // come out of quote
+                    }
+                    break;
+                case '/':
+                    if (inQuote == 0 && braceStack == 0) {
+                        return i;
+                    }
+                    break;
+                case '[':
+                    if (inQuote == 0) {
+                        --braceStack;
+                    }
+                    break;
+                case ']':
+                    if (inQuote == 0) {
+                        ++braceStack;
+                    }
+                    break;
+                }
+            }
+            return -1;
+        }
+
+        // SAX items we need to catch
+
+        @Override
+        public void startElement(
+            String uri,
+            String localName,
+            String qName,
+            Attributes attributes)
+            throws SAXException {
+            Log.logln(LOG_PROGRESS || SHOW_START_END, "startElement uri\t" + uri
+                + "\tlocalName " + localName
+                + "\tqName " + qName
+                + "\tattributes " + show(attributes));
+            try {
+                if (supplementalStatus == SupplementalStatus.NEVER_SET) { // set by first element
+                    attributeOrder = new TreeMap<>(
+                        // HACK for ldmlIcu
+                        dtdData.dtdType == DtdType.ldml
+                            ? CLDRFile.getAttributeOrdering()
+                            : dtdData.getAttributeComparator());
+                    supplementalStatus = source.getXMLNormalizingDtdType() == DtdType.ldml ?
+                        SupplementalStatus.IS_SUMPPLEMENTAL : SupplementalStatus.NOT_SUPPLEMENTAL;
+                }
+                push(qName, attributes);
+            } catch (RuntimeException e) {
+                e.printStackTrace();
+                throw e;
+            }
+        }
+
+        @Override
+        public void endElement(String uri, String localName, String qName)
+            throws SAXException {
+            Log.logln(LOG_PROGRESS || SHOW_START_END, "endElement uri\t" + uri + "\tlocalName " + localName
+                + "\tqName " + qName);
+            try {
+                pop(qName);
+            } catch (RuntimeException e) {
+                throw e;
+            }
+        }
+
+        @Override
+        public void characters(char[] ch, int start, int length)
+            throws SAXException {
+            try {
+                String value = new String(ch, start, length);
+                Log.logln(LOG_PROGRESS, "characters:\t" + value);
+                // we will strip leading and trailing line separators in another place.
+                // if (value.indexOf(XML_LINESEPARATOR) >= 0) {
+                // value = value.replace(XML_LINESEPARATOR, '\u0020');
+                // }
+                lastChars += value;
+                justPopped = false;
+            } catch (RuntimeException e) {
+                e.printStackTrace();
+                throw e;
+            }
+        }
+
+        @Override
+        public void startDTD(String name, String publicId, String systemId) throws SAXException {
+            Log.logln(LOG_PROGRESS, "startDTD name: " + name
+                + ", publicId: " + publicId
+                + ", systemId: " + systemId);
+            commentStackIndex++;
+            source.setXMLNormalizingDtdType(DtdType.valueOf(name));
+            dtdData = DtdData.getInstance(source.getXMLNormalizingDtdType());
+        }
+
+        @Override
+        public void endDTD() throws SAXException {
+            Log.logln(LOG_PROGRESS, "endDTD");
+            commentStackIndex--;
+        }
+
+        @Override
+        public void comment(char[] ch, int start, int length) throws SAXException {
+            final String string = new String(ch, start, length);
+            Log.logln(LOG_PROGRESS, commentStackIndex + " comment " + string);
+            try {
+                if (commentStackIndex != 0) return;
+                String comment0 = trimWhitespaceSpecial(string).trim();
+                if (lastActiveLeafNode != null) {
+                    source.addComment(lastActiveLeafNode, comment0, XPathParts.Comments.CommentType.LINE);
+                } else {
+                    comment = (comment == null ? comment0 : comment + XPathParts.NEWLINE + comment0);
+                }
+            } catch (RuntimeException e) {
+                e.printStackTrace();
+                throw e;
+            }
+        }
+
+        @Override
+        public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
+            if (LOG_PROGRESS)
+                Log.logln(LOG_PROGRESS,
+                    "ignorableWhitespace length: " + length + ": " + Utility.hex(new String(ch, start, length)));
+            for (int i = start; i < start + length; ++i) {
+                if (ch[i] == '\n') {
+                    Log.logln(LOG_PROGRESS && lastActiveLeafNode != null, "\\n: zeroing last leafNode: "
+                        + lastActiveLeafNode);
+                    lastActiveLeafNode = null;
+                    break;
+                }
+            }
+        }
+
+        @Override
+        public void startDocument() throws SAXException {
+            Log.logln(LOG_PROGRESS, "startDocument");
+            commentStackIndex = 0; // initialize
+        }
+
+        @Override
+        public void endDocument() throws SAXException {
+            Log.logln(LOG_PROGRESS, "endDocument");
+            try {
+                if (comment != null) {
+                    source.addComment(null, comment, XPathParts.Comments.CommentType.LINE);
+                }
+            } catch (RuntimeException e) {
+                e.printStackTrace();
+                throw e;
+            }
+        }
+
+        // ==== The following are just for debugging =====
+
+        @Override
+        public void elementDecl(String name, String model) throws SAXException {
+            Log.logln(LOG_PROGRESS, "Attribute\t" + name + "\t" + model);
+        }
+
+        @Override
+        public void attributeDecl(String eName, String aName, String type, String mode, String value)
+            throws SAXException {
+            Log.logln(LOG_PROGRESS, "Attribute\t" + eName + "\t" + aName + "\t" + type + "\t" + mode + "\t" + value);
+        }
+
+        @Override
+        public void internalEntityDecl(String name, String value) throws SAXException {
+            Log.logln(LOG_PROGRESS, "Internal Entity\t" + name + "\t" + value);
+        }
+
+        @Override
+        public void externalEntityDecl(String name, String publicId, String systemId) throws SAXException {
+            Log.logln(LOG_PROGRESS, "Internal Entity\t" + name + "\t" + publicId + "\t" + systemId);
+        }
+
+        @Override
+        public void processingInstruction(String target, String data)
+            throws SAXException {
+            Log.logln(LOG_PROGRESS, "processingInstruction: " + target + ", " + data);
+        }
+
+        @Override
+        public void skippedEntity(String name)
+            throws SAXException {
+            Log.logln(LOG_PROGRESS, "skippedEntity: " + name);
+        }
+
+        @Override
+        public void setDocumentLocator(Locator locator) {
+            Log.logln(LOG_PROGRESS, "setDocumentLocator Locator " + locator);
+        }
+
+        @Override
+        public void startPrefixMapping(String prefix, String uri) throws SAXException {
+            Log.logln(LOG_PROGRESS, "startPrefixMapping prefix: " + prefix +
+                ", uri: " + uri);
+        }
+
+        @Override
+        public void endPrefixMapping(String prefix) throws SAXException {
+            Log.logln(LOG_PROGRESS, "endPrefixMapping prefix: " + prefix);
+        }
+
+        @Override
+        public void startEntity(String name) throws SAXException {
+            Log.logln(LOG_PROGRESS, "startEntity name: " + name);
+        }
+
+        @Override
+        public void endEntity(String name) throws SAXException {
+            Log.logln(LOG_PROGRESS, "endEntity name: " + name);
+        }
+
+        @Override
+        public void startCDATA() throws SAXException {
+            Log.logln(LOG_PROGRESS, "startCDATA");
+        }
+
+        @Override
+        public void endCDATA() throws SAXException {
+            Log.logln(LOG_PROGRESS, "endCDATA");
+        }
+
+        /*
+         * (non-Javadoc)
+         *
+         * @see org.xml.sax.ErrorHandler#error(org.xml.sax.SAXParseException)
+         */
+        @Override
+        public void error(SAXParseException exception) throws SAXException {
+            Log.logln(LOG_PROGRESS || true, "error: " + XMLFileReader.showSAX(exception));
+            throw exception;
+        }
+
+        /*
+         * (non-Javadoc)
+         *
+         * @see org.xml.sax.ErrorHandler#fatalError(org.xml.sax.SAXParseException)
+         */
+        @Override
+        public void fatalError(SAXParseException exception) throws SAXException {
+            Log.logln(LOG_PROGRESS, "fatalError: " + XMLFileReader.showSAX(exception));
+            throw exception;
+        }
+
+        /*
+         * (non-Javadoc)
+         *
+         * @see org.xml.sax.ErrorHandler#warning(org.xml.sax.SAXParseException)
+         */
+        @Override
+        public void warning(SAXParseException exception) throws SAXException {
+            Log.logln(LOG_PROGRESS, "warning: " + XMLFileReader.showSAX(exception));
+            throw exception;
+        }
+    }
+}
diff --git a/tools/java/org/unicode/cldr/util/XMLSource.java b/tools/java/org/unicode/cldr/util/XMLSource.java
index ac9591b..579d446 100644
--- a/tools/java/org/unicode/cldr/util/XMLSource.java
+++ b/tools/java/org/unicode/cldr/util/XMLSource.java
@@ -7,6 +7,7 @@
 
 package org.unicode.cldr.util;
 
+import java.io.File;
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -25,8 +26,10 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.unicode.cldr.util.CLDRFile.DraftStatus;
 import org.unicode.cldr.util.XPathParts.Comments;
 
+import com.google.common.collect.Iterators;
 import com.ibm.icu.impl.Utility;
 import com.ibm.icu.util.Freezable;
 import com.ibm.icu.util.Output;
@@ -42,7 +45,7 @@
     public static final String ROOT_ID = "root";
     public static final boolean USE_PARTS_IN_ALIAS = false;
     private static final String TRACE_INDENT = " "; // "\t"
-    private static Map<String, String> allowDuplicates = new HashMap<String, String>();
+    private static Map<String, String> allowDuplicates = new HashMap<>();
 
     private String localeID;
     private boolean nonInheriting;
@@ -72,7 +75,7 @@
     }
 
     // Listeners are stored using weak references so that they can be garbage collected.
-    private List<WeakReference<Listener>> listeners = new ArrayList<WeakReference<Listener>>();
+    private List<WeakReference<Listener>> listeners = new ArrayList<>();
 
     public String getLocaleID() {
         return localeID;
@@ -149,6 +152,7 @@
         return parts.containsAttribute("draft");
     }
 
+    @Override
     public boolean isFrozen() {
         return locked;
     }
@@ -303,6 +307,7 @@
             return oldPath;
         }
 
+        @Override
         public String toString() {
             return
             // "oldLocaleID: " + oldLocaleID + ", " +
@@ -421,7 +426,7 @@
      * return aliasMap the new map
      */
     private TreeMap<String, String> loadAliases() {
-        TreeMap<String, String> aliasMap = new TreeMap<String, String>();
+        TreeMap<String, String> aliasMap = new TreeMap<>();
         for (String path : this) {
             if (!Alias.isAliasPath(path)) {
                 continue;
@@ -445,17 +450,17 @@
         }
         // Aliases are only ever found in root.
         Map<String, String> aliases = getAliases();
-        Map<String, List<String>> reverse = new HashMap<String, List<String>>();
+        Map<String, List<String>> reverse = new HashMap<>();
         for (Map.Entry<String, String> entry : aliases.entrySet()) {
             List<String> list = reverse.get(entry.getValue());
             if (list == null) {
-                list = new ArrayList<String>();
+                list = new ArrayList<>();
                 reverse.put(entry.getValue(), list);
             }
             list.add(entry.getKey());
         }
         // Sort map.
-        LinkedHashMap<String, List<String>> reverseAliasMap = new LinkedHashMap<String, List<String>>(new TreeMap<String, List<String>>(reverse));
+        LinkedHashMap<String, List<String>> reverseAliasMap = new LinkedHashMap<>(new TreeMap<>(reverse));
         if (cachingIsEnabled) {
             reverseAliasCache = reverseAliasMap;
         }
@@ -612,6 +617,7 @@
     /**
      * @return an iterator over the distinguished paths
      */
+    @Override
     abstract public Iterator<String> iterator();
 
     /**
@@ -620,12 +626,12 @@
      */
     public Iterator<String> iterator(String prefix) {
         if (prefix == null || prefix.length() == 0) return iterator();
-        return new com.ibm.icu.dev.util.CollectionUtilities.PrefixIterator().set(iterator(), prefix);
+        return Iterators.filter(iterator(), s -> s.startsWith(prefix));
     }
 
     public Iterator<String> iterator(Matcher pathFilter) {
         if (pathFilter == null) return iterator();
-        return new com.ibm.icu.dev.util.CollectionUtilities.RegexIterator().set(iterator(), pathFilter);
+        return Iterators.filter(iterator(), s -> pathFilter.reset(s).matches());
     }
 
     /**
@@ -647,6 +653,7 @@
     /**
      * SUBCLASSING: must be overridden
      */
+    @Override
     public XMLSource cloneAsThawed() {
         try {
             XMLSource result = (XMLSource) super.clone();
@@ -660,6 +667,7 @@
     /**
      * for debugging only
      */
+    @Override
     public String toString() {
         StringBuffer result = new StringBuffer();
         for (Iterator<String> it = iterator(); it.hasNext();) {
@@ -712,10 +720,12 @@
         private XMLSource currentSource;
         private LinkedHashMap<String, XMLSource> sources;
 
+        @Override
         public boolean isResolving() {
             return true;
         }
 
+        @Override
         public XMLSource getUnresolving() {
             return sources.get(getLocaleID());
         }
@@ -726,10 +736,11 @@
          * then the parent for //ldml/xyz/.../uvw/abc/.../def/
          * is source, and the path to search for is really: //ldml/xyz/.../uvw/path/abc/.../def/
          */
-        public static final boolean TRACE_VALUE = CldrUtility.getProperty("TRACE_VALUE", false);;
+        public static final boolean TRACE_VALUE = CldrUtility.getProperty("TRACE_VALUE", false);
 
         // Map<String,String> getValueAtDPathCache = new HashMap();
 
+        @Override
         public String getValueAtDPath(String xpath) {
             if (DEBUG_PATH != null && DEBUG_PATH.matcher(xpath).find()) {
                 System.out.println("Getting value for Path: " + xpath);
@@ -783,8 +794,9 @@
         // }
         // }
 
-        Map<String, String> getFullPathAtDPathCache = new HashMap<String, String>();
+        Map<String, String> getFullPathAtDPathCache = new HashMap<>();
 
+        @Override
         public String getFullPathAtDPath(String xpath) {
             String result = currentSource.getFullPathAtDPath(xpath);
             if (result != null) {
@@ -837,7 +849,7 @@
                 // find the differences, and add them into xpath
                 // we do this by walking through each element, adding the corresponding attribute values.
                 // we add attributes FROM THE END, in case the lengths are different!
-                XPathParts xpathParts = XPathParts.getInstance(xpath); // not frozen, for putAttributeValue
+                XPathParts xpathParts = XPathParts.getFrozenInstance(xpath).cloneAsThawed(); // not frozen, for putAttributeValue
                 XPathParts fullPathWhereFoundParts = XPathParts.getFrozenInstance(fullPathWhereFound);
                 XPathParts pathWhereFoundParts = XPathParts.getFrozenInstance(fullStatus.pathWhereFound);
                 int offset = xpathParts.size() - pathWhereFoundParts.size();
@@ -866,7 +878,7 @@
         /**
          * Return the "George Bailey" value, i.e., the value that would obtain if the value didn't exist (in the first source).
          * Often the Bailey value comes from the parent locale (such as "fr") of a sublocale (such as "fr_CA").
-         * Sometimes the Bailey value comes from an alias which may be a different path in the same locale.  
+         * Sometimes the Bailey value comes from an alias which may be a different path in the same locale.
          *
          * @param xpath the given path
          * @param pathWhereFound if not null, to be filled in with the path where found
@@ -901,7 +913,7 @@
              * Can't use the same cache for skipInheritanceMarker true and false.
              * Could use two caches, or add skipInheritanceMarker to the key (append 'T' or 'F' to xpath).
              * The situation is complicated by use of getSourceLocaleIDCache also in valueChanged.
-             * 
+             *
              * There is no caching problem with skipFirst, since that is always false here -- though
              * getBaileyValue could use a cache if there was one for skipFirst true.
              *
@@ -933,7 +945,7 @@
             return result;
         }
 
-        private transient Map<String, AliasLocation> getSourceLocaleIDCache = new WeakHashMap<String, AliasLocation>();
+        private transient Map<String, AliasLocation> getSourceLocaleIDCache = new WeakHashMap<>();
 
         /**
          * Get the source locale ID for the given path, for this ResolvingSource.
@@ -955,7 +967,7 @@
          * @param status if not null, to have status.pathWhereFound filled in
          * @param skipInheritanceMarker if true, skip sources in which value is INHERITANCE_MARKER
          * @return the localeID, as a string
-         */        
+         */
         @Override
         public String getSourceLocaleIdExtended(String distinguishedXPath, CLDRFile.Status status, boolean skipInheritanceMarker) {
             AliasLocation fullStatus = getCachedFullStatus(distinguishedXPath, skipInheritanceMarker);
@@ -989,7 +1001,7 @@
          * For other callers, we stick with skipInheritanceMarker true for now, to retain
          * the behavior before the skipInheritanceMarker parameter was added, but we should be alert for the
          * possibility that skipInheritanceMarker should be false in some other cases
-         * 
+         *
          * References: https://unicode.org/cldr/trac/ticket/11765
          *             https://unicode.org/cldr/trac/ticket/11720
          *             https://unicode.org/cldr/trac/ticket/11103
@@ -1023,7 +1035,7 @@
                         xpath.substring(possibleSubpath.length());
                 }
             }
-            
+
             // alts are special; they act like there is a root alias to the path without the alt.
             if (aliasedPath == null && xpath.contains("[@alt=")) {
                 aliasedPath = XPathParts.getPathWithoutAlt(xpath);
@@ -1062,7 +1074,7 @@
         static final boolean TRACE_FILL = CldrUtility.getProperty("TRACE_FILL", false);
         static final String DEBUG_PATH_STRING = CldrUtility.getProperty("DEBUG_PATH", null);
         static final Pattern DEBUG_PATH = DEBUG_PATH_STRING == null ? null : PatternCache.get(DEBUG_PATH_STRING);
-        static final boolean SKIP_FALLBACKID = CldrUtility.getProperty("SKIP_FALLBACKID", false);;
+        static final boolean SKIP_FALLBACKID = CldrUtility.getProperty("SKIP_FALLBACKID", false);
 
         static final int MAX_LEVEL = 40; /* Throw an error if it goes past this. */
 
@@ -1106,10 +1118,10 @@
          * @return
          */
         private Set<String> findNonAliasedPaths() {
-            HashSet<String> paths = new HashSet<String>();
+            HashSet<String> paths = new HashSet<>();
 
             // Get all XMLSources used during resolution.
-            List<XMLSource> sourceList = new ArrayList<XMLSource>(sources.values());
+            List<XMLSource> sourceList = new ArrayList<>(sources.values());
             if (!SKIP_FALLBACKID) {
                 sourceList.add(constructedItems);
             }
@@ -1131,7 +1143,7 @@
          * @return the new set of paths
          */
         private Set<String> getDirectAliases(String[] paths) {
-            HashSet<String> newPaths = new HashSet<String>();
+            HashSet<String> newPaths = new HashSet<>();
             // Keep track of the current path index: since it's sorted, we
             // never have to backtrack.
             int pathIndex = 0;
@@ -1174,6 +1186,7 @@
         /**
          * @return an iterator over all the xpaths in this XMLSource.
          */
+        @Override
         public Iterator<String> iterator() {
             return getCachedKeySet().iterator();
         }
@@ -1188,26 +1201,32 @@
             return cachedKeySet;
         }
 
+        @Override
         public void putFullPathAtDPath(String distinguishingXPath, String fullxpath) {
             throw new UnsupportedOperationException("Resolved CLDRFiles are read-only");
         }
 
+        @Override
         public void putValueAtDPath(String distinguishingXPath, String value) {
             throw new UnsupportedOperationException("Resolved CLDRFiles are read-only");
         }
 
+        @Override
         public Comments getXpathComments() {
             return currentSource.getXpathComments();
         }
 
+        @Override
         public void setXpathComments(Comments path) {
             throw new UnsupportedOperationException("Resolved CLDRFiles are read-only");
         }
 
+        @Override
         public void removeValueAtDPath(String xpath) {
             throw new UnsupportedOperationException("Resolved CLDRFiles are  read-only");
         }
 
+        @Override
         public XMLSource freeze() {
             return this; // No-op. ResolvingSource is already read-only.
         }
@@ -1248,7 +1267,7 @@
                 throw new IllegalArgumentException("Last element should be root");
             }
             currentSource = sourceList.get(0); // Convenience variable
-            sources = new LinkedHashMap<String, XMLSource>();
+            sources = new LinkedHashMap<>();
             for (XMLSource source : sourceList) {
                 sources.put(source.getLocaleID(), source);
             }
@@ -1260,6 +1279,7 @@
             }
         }
 
+        @Override
         public String getLocaleID() {
             return currentSource.getLocaleID();
         }
@@ -1427,7 +1447,7 @@
                     String value = code;
                     if (typeNo == CLDRFile.TZ_EXEMPLAR) { // skip single-zone countries
                         if (SKIP_SINGLEZONES) {
-                            String country = (String) zone_countries.get(code);
+                            String country = zone_countries.get(code);
                             Set<String> s = countries_zoneSet.get(country);
                             if (s != null && s.size() == 1) continue;
                         }
@@ -1450,16 +1470,16 @@
             // "false");
             // }
 
-            String[] extraCodes = { 
-                "ar_001", 
-                "de_AT", "de_CH", 
+            String[] extraCodes = {
+                "ar_001",
+                "de_AT", "de_CH",
                 "en_AU", "en_CA", "en_GB", "en_US", "es_419", "es_ES", "es_MX",
-                "fa_AF", "fr_CA", "fr_CH", "frc", 
-                "lou", 
-                "nds_NL", "nl_BE", 
-                "pt_BR", "pt_PT", 
-                "ro_MD", 
-                "sw_CD", 
+                "fa_AF", "fr_CA", "fr_CH", "frc",
+                "lou",
+                "nds_NL", "nl_BE",
+                "pt_BR", "pt_PT",
+                "ro_MD",
+                "sw_CD",
                 "zh_Hans", "zh_Hant"
                 };
             for (String extraCode : extraCodes) {
@@ -1469,7 +1489,9 @@
             addFallbackCode(CLDRFile.LANGUAGE_NAME, "en_GB", "en_GB", "short");
             addFallbackCode(CLDRFile.LANGUAGE_NAME, "en_US", "en_US", "short");
             addFallbackCode(CLDRFile.LANGUAGE_NAME, "az", "az", "short");
-            
+
+            addFallbackCode(CLDRFile.LANGUAGE_NAME, "ckb", "ckb", "menu");
+            addFallbackCode(CLDRFile.LANGUAGE_NAME, "ckb", "ckb", "variant");
             addFallbackCode(CLDRFile.LANGUAGE_NAME, "yue", "yue", "menu");
             addFallbackCode(CLDRFile.LANGUAGE_NAME, "zh", "zh", "menu");
             addFallbackCode(CLDRFile.LANGUAGE_NAME, "zh_Hans", "zh", "long");
@@ -1576,10 +1598,10 @@
             // clear yet how much further caching would speed this up.
 
             // Add all non-aliased paths with the specified value.
-            List<XMLSource> children = new ArrayList<XMLSource>();
-            Set<String> filteredPaths = new HashSet<String>();
+            List<XMLSource> children = new ArrayList<>();
+            Set<String> filteredPaths = new HashSet<>();
             for (XMLSource source : sources.values()) {
-                Set<String> pathsWithValue = new HashSet<String>();
+                Set<String> pathsWithValue = new HashSet<>();
                 source.getPathsWithValue(valueToMatch, pathPrefix, pathsWithValue);
                 // Don't add a path with the value if it is overridden by a child locale.
                 for (String pathWithValue : pathsWithValue) {
@@ -1592,8 +1614,8 @@
 
             // Find all paths that alias to the specified value, then filter by
             // path prefix.
-            Set<String> aliases = new HashSet<String>();
-            Set<String> oldAliases = new HashSet<String>(filteredPaths);
+            Set<String> aliases = new HashSet<>();
+            Set<String> oldAliases = new HashSet<>(filteredPaths);
             Set<String> newAliases;
             do {
                 String[] sortedPaths = new String[oldAliases.size()];
@@ -1608,11 +1630,11 @@
             String norm = null;
             for (String alias : aliases) {
                 if (alias.startsWith(pathPrefix)) {
-                    if (norm == null) {
+                    if (norm == null && valueToMatch != null) {
                         norm = SimpleXMLSource.normalize(valueToMatch);
                     }
                     String value = getValueAtDPath(alias);
-                    if (SimpleXMLSource.normalize(value).equals(norm)) {
+                    if (value != null && SimpleXMLSource.normalize(value).equals(norm)) {
                         filteredPaths.add(alias);
                     }
                 }
@@ -1666,19 +1688,16 @@
      * Adds a listener to this XML source.
      */
     public void addListener(Listener listener) {
-        listeners.add(new WeakReference<Listener>(listener));
+        listeners.add(new WeakReference<>(listener));
     }
 
     /**
-     * Notifies all listeners that a change has occurred. This method should be
-     * called by the XMLSource being updated after any change
-     * (usually in putValueAtDPath() and removeValueAtDPath()).
-     * This should only be called by XMLSource / CLDRFile
+     * Notifies all listeners that the winning value for the given path has changed.
      *
      * @param xpath
      *            the xpath where the change occurred.
      */
-    protected void notifyListeners(String xpath) {
+    public void notifyListeners(String xpath) {
         int i = 0;
         while (i < listeners.size()) {
             Listener listener = listeners.get(i).get();
@@ -1730,4 +1749,83 @@
         }
         return null;
     }
+
+    /**
+     * XMLNormalizingDtdType is set in XMLNormalizingHandler loading XML process
+     */
+    private DtdType XMLNormalizingDtdType;
+    private static final boolean LOG_PROGRESS = false;
+
+    public DtdType getXMLNormalizingDtdType() {
+        return this.XMLNormalizingDtdType;
+    }
+
+    public void setXMLNormalizingDtdType(DtdType dtdType) {
+        this.XMLNormalizingDtdType = dtdType;
+    }
+
+    /**
+     * Sets the initial comment, replacing everything that was there
+     * Use in XMLNormalizingHandler only
+     */
+    public XMLSource setInitialComment(String comment) {
+        if (locked) throw new UnsupportedOperationException("Attempt to modify locked object");
+        Log.logln(LOG_PROGRESS, "SET initial Comment: \t" + comment);
+        this.getXpathComments().setInitialComment(comment);
+        return this;
+    }
+
+    /**
+     * Use in XMLNormalizingHandler only
+     */
+    public XMLSource addComment(String xpath, String comment, Comments.CommentType type) {
+        if (locked) throw new UnsupportedOperationException("Attempt to modify locked object");
+        Log.logln(LOG_PROGRESS, "ADDING Comment: \t" + type + "\t" + xpath + " \t" + comment);
+        if (xpath == null || xpath.length() == 0) {
+            this.getXpathComments().setFinalComment(
+                CldrUtility.joinWithSeparation(this.getXpathComments().getFinalComment(), XPathParts.NEWLINE,
+                    comment));
+        } else {
+            xpath = CLDRFile.getDistinguishingXPath(xpath, null);
+            this.getXpathComments().addComment(type, xpath, comment);
+        }
+        return this;
+    }
+
+    /**
+     * Use in XMLNormalizingHandler only
+     */
+    public String getFullXPath(String xpath) {
+        if (xpath == null) {
+            throw new NullPointerException("Null distinguishing xpath");
+        }
+        String result = this.getFullPath(xpath);
+        return result != null ? result : xpath; // we can't add any non-distinguishing values if there is nothing there.
+    }
+
+    /**
+     * Add a new element to a XMLSource
+     * Use in XMLNormalizingHandler only
+     */
+    public XMLSource add(String currentFullXPath, String value) {
+        if (locked) throw new UnsupportedOperationException("Attempt to modify locked object");
+        Log.logln(LOG_PROGRESS, "ADDING: \t" + currentFullXPath + " \t" + value + "\t" + currentFullXPath);
+        try {
+            this.putValueAtPath(currentFullXPath, value);
+        } catch (RuntimeException e) {
+            throw new IllegalArgumentException("failed adding " + currentFullXPath + ",\t" + value, e);
+        }
+        return this;
+    }
+
+    /**
+     * Get frozen normalized XMLSource
+     * @param localeId
+     * @param dirs
+     * @param minimalDraftStatus
+     * @return XMLSource
+     */
+    public static XMLSource getFrozenInstance(String localeId, List<File> dirs, DraftStatus minimalDraftStatus) {
+        return XMLNormalizingLoader.getFrozenInstance(localeId, dirs, minimalDraftStatus);
+    }
 }
diff --git a/tools/java/org/unicode/cldr/util/XMLValidator.java b/tools/java/org/unicode/cldr/util/XMLValidator.java
index 9e284a0..c155ee2 100644
--- a/tools/java/org/unicode/cldr/util/XMLValidator.java
+++ b/tools/java/org/unicode/cldr/util/XMLValidator.java
@@ -90,7 +90,7 @@
             }
         })) {
             if (!quiet) System.out.println("Processing file " + s.getPath());
-            new fileParserThread(s.getCanonicalPath()).run();
+            new fileParserThread(PathUtilities.getNormalizedPathString(s)).run();
         }
     }
 
@@ -134,15 +134,7 @@
             return filename;
 
         File f = new File(filename);
-        String tmp = null;
-        try {
-            // This normally gives a better path
-            tmp = f.getCanonicalPath();
-        } catch (IOException ioe) {
-            // But this can be used as a backup, for cases
-            // where the file does not exist, etc.
-            tmp = f.getAbsolutePath();
-        }
+        String tmp = PathUtilities.getNormalizedPathString(f);
 
         // URLs must explicitly use only forward slashes
         if (File.separatorChar == '\\') {
@@ -166,6 +158,7 @@
             filename = _filename;
         }
 
+        @Override
         public void run() {
             // Force filerefs to be URI's if needed: note this is independent of any
             // other files
@@ -209,11 +202,13 @@
         // This is used to suppress validation warnings
         final String filename2 = filename;
         ErrorHandler nullHandler = new ErrorHandler() {
+            @Override
             public void warning(SAXParseException e) throws SAXException {
                 System.err.println(filename2 + ": Warning: " + e.getMessage());
 
             }
 
+            @Override
             public void error(SAXParseException e) throws SAXException {
                 int col = e.getColumnNumber();
                 System.err.println(filename2 + ":" + e.getLineNumber() + (col >= 0 ? ":" + col : "")
@@ -221,6 +216,7 @@
                     + " is not valid because " + e.getMessage());
             }
 
+            @Override
             public void fatalError(SAXParseException e) throws SAXException {
                 System.err.println(filename2 + ": ERROR ");
                 throw e;
diff --git a/tools/java/org/unicode/cldr/util/XPathParts.java b/tools/java/org/unicode/cldr/util/XPathParts.java
index db4a2ed..90d1741 100644
--- a/tools/java/org/unicode/cldr/util/XPathParts.java
+++ b/tools/java/org/unicode/cldr/util/XPathParts.java
@@ -21,6 +21,8 @@
 import java.util.TreeMap;
 import java.util.concurrent.ConcurrentHashMap;
 
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSet.Builder;
 import com.ibm.icu.impl.Utility;
@@ -35,16 +37,16 @@
  * Each Element object has an "element" string such as "ldml", "characters", or "exemplarCharacters",
  * plus attributes such as a Map from key "type" to value "auxiliary".
  */
-public final class XPathParts implements Freezable<XPathParts> {
+public final class XPathParts implements Freezable<XPathParts>, Comparable<XPathParts> {
     private static final boolean DEBUGGING = false;
 
     private volatile boolean frozen = false;
 
-    private List<Element> elements = new ArrayList<Element>();
+    private List<Element> elements = new ArrayList<>();
 
     private DtdData dtdData = null;
 
-    private static final Map<String, XPathParts> cache = new ConcurrentHashMap<String, XPathParts>();
+    private static final Map<String, XPathParts> cache = new ConcurrentHashMap<>();
 
     /**
      * Construct a new empty XPathParts object.
@@ -181,7 +183,7 @@
             LINE, PREBLOCK, POSTBLOCK
         }
 
-        private EnumMap<CommentType, Map<String, String>> comments = new EnumMap<CommentType, Map<String, String>>(
+        private EnumMap<CommentType, Map<String, String>> comments = new EnumMap<>(
             CommentType.class);
 
         public Comments() {
@@ -210,7 +212,7 @@
         }
 
         public List<String> extractCommentsWithoutBase() {
-            List<String> result = new ArrayList<String>();
+            List<String> result = new ArrayList<>();
             for (CommentType style : CommentType.values()) {
                 for (Iterator<String> it = comments.get(style).keySet().iterator(); it.hasNext();) {
                     String key = it.next();
@@ -222,11 +224,12 @@
             return result;
         }
 
+        @Override
         public Object clone() {
             try {
                 Comments result = (Comments) super.clone();
                 for (CommentType c : CommentType.values()) {
-                    result.comments.put(c, new HashMap<String, String>(comments.get(c)));
+                    result.comments.put(c, new HashMap<>(comments.get(c)));
                 }
                 return result;
             } catch (CloneNotSupportedException e) {
@@ -438,7 +441,18 @@
     }
 
     public void putAttributeValue(int elementIndex, String attribute, String value) {
-        elements.get(elementIndex >= 0 ? elementIndex : elementIndex + size()).putAttribute(attribute, value);
+        elementIndex = elementIndex >= 0 ? elementIndex : elementIndex + size();
+        Map<String, String> ea = elements.get(elementIndex).attributes;
+        if (value == null && (ea == null || !ea.containsKey(attribute))) {
+            return;
+        }
+        if (value != null && ea != null && value.equals(ea.get(attribute))) {
+            return;
+        }
+        makeElementsMutable();
+        makeElementMutable(elementIndex);
+        // make mutable may change elements.get(elementIndex), so we have to use elements.get(elementIndex) after calling
+        elements.get(elementIndex).putAttribute(attribute, value);
     }
 
     /**
@@ -461,7 +475,7 @@
         if (attributes == null) {
             return null;
         }
-        return (String) attributes.get(attributeName);
+        return attributes.get(attributeName);
     }
 
     /**
@@ -486,10 +500,34 @@
                 dtdData = null;
             }
         }
+        makeElementsMutable();
         elements.add(new Element(element));
         return this;
     }
 
+    public void makeElementsMutable() {
+        if (frozen) {
+            throw new UnsupportedOperationException("Can't modify frozen object.");
+        }
+
+        if (elements instanceof ImmutableList) {
+            elements = new ArrayList<>(elements);
+        }
+    }
+
+    public void makeElementMutable(int elementIndex) {
+        if (frozen) {
+            throw new UnsupportedOperationException("Can't modify frozen object.");
+        }
+
+        Element e = elements.get(elementIndex);
+        Map<String, String> ea = e.attributes;
+        if (ea == null || ea instanceof ImmutableMap) {
+            elements.set(elementIndex, e.cloneAsThawed());
+        }
+    }
+
+
     /**
      * Varargs version of addElement.
      *  Usage:  xpp.addElements("ldml","localeDisplayNames")
@@ -507,8 +545,7 @@
      * Add an attribute/value pair to the current last element.
      */
     public XPathParts addAttribute(String attribute, String value) {
-        Element e = elements.get(elements.size() - 1);
-        e.putAttribute(attribute, value);
+        putAttributeValue(elements.size() - 1, attribute, value);
         return this;
     }
 
@@ -517,7 +554,7 @@
     }
 
     public XPathParts removeAttribute(int elementIndex, String attributeName) {
-        elements.get(elementIndex >= 0 ? elementIndex : elementIndex + size()).putAttribute(attributeName, null);
+        putAttributeValue(elementIndex, attributeName, null);
         return this;
     }
 
@@ -526,7 +563,15 @@
     }
 
     public XPathParts removeAttributes(int elementIndex, Collection<String> attributeNames) {
-        elements.get(elementIndex >= 0 ? elementIndex : elementIndex + size()).removeAttributes(attributeNames);
+        elementIndex = elementIndex >= 0 ? elementIndex : elementIndex + size();
+        Map<String, String> ea = elements.get(elementIndex).attributes;
+        if (ea == null || attributeNames == null || attributeNames.isEmpty() || Collections.disjoint(attributeNames, ea.keySet())) {
+            return this;
+        }
+        makeElementsMutable();
+        makeElementMutable(elementIndex);
+        // make mutable may change elements.get(elementIndex), so we have to use elements.get(elementIndex) after calling
+        elements.get(elementIndex).removeAttributes(attributeNames);
         return this;
     }
 
@@ -631,6 +676,7 @@
     /**
      * boilerplate
      */
+    @Override
     public String toString() {
         return toString(elements.size());
     }
@@ -667,6 +713,7 @@
     /**
      * boilerplate
      */
+    @Override
     public boolean equals(Object other) {
         try {
             XPathParts that = (XPathParts) other;
@@ -682,9 +729,16 @@
         }
     }
 
+    @Override
+    public int compareTo(XPathParts that) {
+        return dtdData.getDtdComparator().xpathComparator(this, that);
+    }
+
+
     /**
      * boilerplate
      */
+    @Override
     public int hashCode() {
         int result = elements.size();
         for (int i = 0; i < elements.size(); ++i) {
@@ -702,8 +756,7 @@
     public static final int XPATH_STYLE = 0, XML_OPEN = 1, XML_CLOSE = 2, XML_NO_VALUE = 3;
     public static final String NEWLINE = "\n";
 
-    private final class Element implements Cloneable, Freezable<Element> {
-        private volatile boolean frozen;
+    private final class Element {
         private final String element;
         private Map<String, String> attributes; // = new TreeMap(AttributeComparator);
 
@@ -716,22 +769,15 @@
         }
 
         public Element(String element, Map<String, String> attributes) {
-            this.frozen = false;
             this.element = element.intern();  // allow fast comparison
             if (attributes == null) {
                 this.attributes = null;
             } else {
-                this.attributes = new TreeMap<String, String>(getAttributeComparator());
+                this.attributes = new TreeMap<>(getAttributeComparator());
                 this.attributes.putAll(attributes);
             }
         }
 
-        @Override
-        protected Object clone() throws CloneNotSupportedException {
-            return frozen ? this
-                : new Element(element, attributes);
-        }
-
         /**
          * Add the given attribute, value pair to this Element object; or,
          * if value is null, remove the attribute.
@@ -741,9 +787,6 @@
          */
         public void putAttribute(String attribute, String value) {
             attribute = attribute.intern(); // allow fast comparison
-            if (frozen) {
-                throw new UnsupportedOperationException("Can't modify frozen object.");
-            }
             if (value == null) {
                 if (attributes != null) {
                     attributes.remove(attribute);
@@ -753,7 +796,7 @@
                 }
             } else {
                 if (attributes == null) {
-                    attributes = new TreeMap<String, String>(getAttributeComparator());
+                    attributes = new TreeMap<>(getAttributeComparator());
                 }
                 attributes.put(attribute, value);
             }
@@ -765,9 +808,6 @@
          * @param attributeNames
          */
         private void removeAttributes(Collection<String> attributeNames) {
-            if (frozen) {
-                throw new UnsupportedOperationException("Can't modify frozen object.");
-            }
             if (attributeNames == null) {
                 return;
             }
@@ -779,6 +819,7 @@
             }
         }
 
+        @Override
         public String toString() {
             throw new IllegalArgumentException("Don't use");
         }
@@ -864,7 +905,7 @@
          * @param attribute
          * @param value
          * @return true to skip, else false
-         * 
+         *
          * Called only by writeAttributes
          *
          * Assume suppressionMap isn't null.
@@ -887,6 +928,7 @@
             return skip;
         }
 
+        @Override
         public boolean equals(Object other) {
             if (other == null) {
                 return false;
@@ -903,6 +945,7 @@
             }
         }
 
+        @Override
         public int hashCode() {
             return element.hashCode() * 37 + (attributes == null ? 0 : attributes.hashCode());
         }
@@ -920,9 +963,9 @@
 
         private Map<String, String> getAttributes() {
             if (attributes == null) {
-                return Collections.emptyMap();
+                return ImmutableMap.of();
             }
-            return Collections.unmodifiableMap(attributes);
+            return ImmutableMap.copyOf(attributes);
         }
 
         private String getAttributeValue(String attribute) {
@@ -932,22 +975,14 @@
             return attributes.get(attribute);
         }
 
-        @Override
-        public boolean isFrozen() {
-            return frozen;
-        }
-
-        @Override
-        public Element freeze() {
-            if (!frozen) {
-                attributes = attributes == null ? null
-                    : Collections.unmodifiableMap(attributes);
-                frozen = true;
+        public Element makeImmutable() {
+            if (attributes != null && !(attributes instanceof ImmutableMap)) {
+                attributes = ImmutableMap.copyOf(attributes);
             }
+
             return this;
         }
 
-        @Override
         public Element cloneAsThawed() {
             return new Element(element, attributes);
         }
@@ -975,7 +1010,7 @@
      * Get the MapComparator for this XPathParts.
      *
      * @return the MapComparator, or null
-     * 
+     *
      * Called by the Element constructor, and by putAttribute
      */
     private MapComparator<String> getAttributeComparator() {
@@ -1020,33 +1055,35 @@
         if (frozen) {
             throw new UnsupportedOperationException("Can't modify frozen Element");
         }
+        makeElementsMutable();
         elements.remove(elements.size() - 1);
         return this;
     }
 
     /**
      * Replace the elements of this XPathParts with clones of the elements of the given other XPathParts
-     *  
+     *
      * @param parts the given other XPathParts (not modified)
      * @return this XPathParts (modified)
      *
      * Called by XPathParts.replace and CldrItem.split.
      */
-    public XPathParts set(XPathParts parts) {
-        if (frozen) {
-            throw new UnsupportedOperationException("Can't modify frozen Element");
-        }
-        try {
-            dtdData = parts.dtdData;
-            elements.clear();
-            for (Element element : parts.elements) {
-                elements.add((Element) element.clone());
-            }
-            return this;
-        } catch (CloneNotSupportedException e) {
-            throw (InternalError) new InternalError().initCause(e);
-        }
-    }
+//   If this is restored, it will need to be modified.
+//    public XPathParts set(XPathParts parts) {
+//        if (frozen) {
+//            throw new UnsupportedOperationException("Can't modify frozen Element");
+//        }
+//        try {
+//            dtdData = parts.dtdData;
+//            elements.clear();
+//            for (Element element : parts.elements) {
+//                elements.add((Element) element.clone());
+//            }
+//            return this;
+//        } catch (CloneNotSupportedException e) {
+//            throw (InternalError) new InternalError().initCause(e);
+//        }
+//    }
 
     /**
      * Replace up to i with parts
@@ -1054,18 +1091,19 @@
      * @param i
      * @param parts
      */
-    public XPathParts replace(int i, XPathParts parts) {
-        if (frozen) {
-            throw new UnsupportedOperationException("Can't modify frozen Element");
-        }
-        List<Element> temp = elements;
-        elements = new ArrayList<Element>();
-        set(parts);
-        for (; i < temp.size(); ++i) {
-            elements.add(temp.get(i));
-        }
-        return this;
-    }
+//    If this is restored, it will need to be modified.
+//    public XPathParts replace(int i, XPathParts parts) {
+//        if (frozen) {
+//            throw new UnsupportedOperationException("Can't modify frozen Element");
+//        }
+//        List<Element> temp = elements;
+//        elements = new ArrayList<>();
+//        set(parts);
+//        for (; i < temp.size(); ++i) {
+//            elements.add(temp.get(i));
+//        }
+//        return this;
+//    }
 
     /**
      * Utility to write a comment.
@@ -1156,7 +1194,7 @@
      */
     public XPathParts setAttribute(String elementName, String attributeName, String attributeValue) {
         int index = findElement(elementName);
-        elements.get(index).putAttribute(attributeName, attributeValue);
+        putAttributeValue(index, attributeName, attributeValue);
         return this;
     }
 
@@ -1176,11 +1214,11 @@
                 if (pos < 0) break;
                 if (pos > 0 && attributeValue.charAt(pos - 1) == '-') --pos; // backup for "...-proposed"
                 if (pos == 0) {
-                    element.putAttribute(attribute, null);
+                    putAttributeValue(i, attribute, null);
                     break;
                 }
                 attributeValue = attributeValue.substring(0, pos); // strip it off
-                element.putAttribute(attribute, attributeValue);
+                putAttributeValue(i, attribute, attributeValue);
                 break; // there is only one alt!
             }
         }
@@ -1188,6 +1226,7 @@
     }
 
     public XPathParts setElement(int elementIndex, String newElement) {
+        makeElementsMutable();
         if (elementIndex < 0) {
             elementIndex += size();
         }
@@ -1197,6 +1236,7 @@
     }
 
     public XPathParts removeElement(int elementIndex) {
+        makeElementsMutable();
         elements.remove(elementIndex >= 0 ? elementIndex : elementIndex + size());
         return this;
     }
@@ -1211,9 +1251,9 @@
         return null;
     }
 
-    public void setAttribute(int elementIndex, String attributeName, String attributeValue) {
-        Element element = elements.get(elementIndex >= 0 ? elementIndex : elementIndex + size());
-        element.putAttribute(attributeName, attributeValue);
+    public XPathParts setAttribute(int elementIndex, String attributeName, String attributeValue) {
+        putAttributeValue(elementIndex, attributeName, attributeValue);
+        return this;
     }
 
     @Override
@@ -1227,9 +1267,9 @@
             // ensure that it can't be modified. Later we can fix all the call sites to check frozen.
             List<Element> temp = new ArrayList<>(elements.size());
             for (Element element : elements) {
-                temp.add(element.freeze());
+                temp.add(element.makeImmutable());
             }
-            elements = Collections.unmodifiableList(temp);
+            elements = ImmutableList.copyOf(temp);
             frozen = true;
         }
         return this;
@@ -1243,9 +1283,13 @@
          * Reference: https://unicode.org/cldr/trac/ticket/12007
          */
         xppClone.dtdData = this.dtdData;
-        for (Element e : this.elements) {
-            xppClone.elements.add(e.cloneAsThawed());
-        }        
+        if (!frozen) {
+            for (Element e : this.elements) {
+                xppClone.elements.add(e.cloneAsThawed());
+            }
+        } else {
+            xppClone.elements = this.elements;
+        }
         return xppClone;
     }
 
@@ -1258,10 +1302,6 @@
         return result;
     }
 
-    public static XPathParts getInstance(String path) {
-        return getFrozenInstance(path).cloneAsThawed();
-    }
-
     public DtdData getDtdData() {
         return dtdData;
     }
@@ -1287,7 +1327,7 @@
                     continue;
                 }
                 if (ueMap == null) {
-                    ueMap = new TreeMap<String, String>();
+                    ueMap = new TreeMap<>();
                 }
                 ueMap.put(k, entry.getValue());
             }
@@ -1296,15 +1336,15 @@
     }
 
     public static String getPathWithoutAlt(String xpath) {
-        XPathParts xpp = getInstance(xpath);
+        XPathParts xpp = getFrozenInstance(xpath).cloneAsThawed();
         xpp.removeAttribute("alt");
         return xpp.toString();
     }
 
     private XPathParts removeAttribute(String attribute) {
         for (int i = 0; i < elements.size(); ++i) {
-            elements.get(i).putAttribute(attribute, null);
+            putAttributeValue(i, attribute, null);
         }
-        return this; 
+        return this;
     }
 }
diff --git a/tools/java/org/unicode/cldr/util/ZoneFormats.java b/tools/java/org/unicode/cldr/util/ZoneFormats.java
index 7301c96..e41aef6 100644
--- a/tools/java/org/unicode/cldr/util/ZoneFormats.java
+++ b/tools/java/org/unicode/cldr/util/ZoneFormats.java
@@ -15,6 +15,7 @@
 
     public enum Length {
         LONG, SHORT;
+        @Override
         public String toString() {
             return name().toLowerCase(Locale.ENGLISH);
         }
diff --git a/tools/java/org/unicode/cldr/util/ZoneInflections.java b/tools/java/org/unicode/cldr/util/ZoneInflections.java
index 24de380..03e5ed2 100644
--- a/tools/java/org/unicode/cldr/util/ZoneInflections.java
+++ b/tools/java/org/unicode/cldr/util/ZoneInflections.java
@@ -54,7 +54,7 @@
     private int maxOffset;
 
     // ordered most recently first
-    List<InflectionPoint> inflectionPoints = new ArrayList<InflectionPoint>();
+    List<InflectionPoint> inflectionPoints = new ArrayList<>();
 
     public int getMaxOffset() {
         return maxOffset;
@@ -88,6 +88,7 @@
         return (int) maxSoFar;
     }
 
+    @Override
     public String toString() {
         return inflectionPoints.toString();
     }
@@ -147,7 +148,7 @@
             mostRecentDateTime.value = get(0).utcDateTime;
             return 1;
         }
-        ZoneInflections that = (ZoneInflections) other;
+        ZoneInflections that = other;
         int minLength = inflectionPoints.size();
         if (minLength < that.inflectionPoints.size())
             minLength = that.inflectionPoints.size();
@@ -177,7 +178,7 @@
     }
 
     InflectionPoint get(int i) {
-        return (InflectionPoint) inflectionPoints.get(i);
+        return inflectionPoints.get(i);
     }
 
     int size() {
@@ -186,6 +187,7 @@
 
     private transient OutputLong temp = new OutputLong(0);
 
+    @Override
     public int compareTo(ZoneInflections o) {
         return compareTo(o, temp);
     }
@@ -197,9 +199,10 @@
 
         public int offset;
 
+        @Override
         public String toString() {
             return ICUServiceBuilder.isoDateFormat(new Date(utcDateTime)) + ";"
-                + formatHours((int) offset);
+                + formatHours(offset);
         }
 
         public InflectionPoint(long utcDateTime, int offset) {
@@ -213,6 +216,7 @@
          * offset != that.offset) { return Math.max(utcDateTime, that.utcDateTime); }
          * return NONE; }
          */
+        @Override
         public int compareTo(InflectionPoint that) {
             if (utcDateTime < that.utcDateTime)
                 return -1;
@@ -245,6 +249,7 @@
             this.value = value;
         }
 
+        @Override
         public int compareTo(Object o) {
             OutputLong that = (OutputLong) o;
             return value < that.value ? -1 : value > that.value ? 1 : 0;
@@ -261,7 +266,7 @@
      * @return
      */
     public List<InflectionPoint> getInflectionPoints(long start, long end) {
-        List<InflectionPoint> results = new ArrayList<InflectionPoint>();
+        List<InflectionPoint> results = new ArrayList<>();
         for (InflectionPoint inflectionPoint : inflectionPoints) {
             if (inflectionPoint.utcDateTime <= start) {
                 results.add(new InflectionPoint(start, inflectionPoint.offset));
diff --git a/tools/java/org/unicode/cldr/util/ZoneParser.java b/tools/java/org/unicode/cldr/util/ZoneParser.java
index e087ae3..73a4f2d 100644
--- a/tools/java/org/unicode/cldr/util/ZoneParser.java
+++ b/tools/java/org/unicode/cldr/util/ZoneParser.java
@@ -66,16 +66,16 @@
      *
      */
     private void make_zone_to_country() {
-        zone_to_country = new TreeMap<String, String>(TZIDComparator);
-        country_to_zoneSet = new TreeMap<String, Set<String>>();
+        zone_to_country = new TreeMap<>(TZIDComparator);
+        country_to_zoneSet = new TreeMap<>();
         // Map aliasMap = getAliasMap();
         Map<String, List<String>> zoneData = getZoneData();
         for (String zone : zoneData.keySet()) {
-            String country = (String) zoneData.get(zone).get(2);
+            String country = zoneData.get(zone).get(2);
             zone_to_country.put(zone, country);
             Set<String> s = country_to_zoneSet.get(country);
             if (s == null)
-                country_to_zoneSet.put(country, s = new TreeSet<String>());
+                country_to_zoneSet.put(country, s = new TreeSet<>());
             s.add(zone);
         }
         /*
@@ -117,7 +117,7 @@
 
     Map<String, List<String>> zoneData;
 
-    Set<String> skippedAliases = new TreeSet<String>();
+    Set<String> skippedAliases = new TreeSet<>();
 
     /*
      * # This file contains a table with the following columns: # 1. ISO 3166
@@ -184,6 +184,7 @@
             return result;
         }
 
+        @Override
         public String toString() {
             return BoilerplateUtilities.toStringHelper(this);
         }
@@ -235,10 +236,12 @@
             throw new IllegalArgumentException();
         }
 
+        @Override
         public String toString() {
             return BoilerplateUtilities.toStringHelper(this);
         }
 
+        @Override
         public int compareTo(Object other) {
             return toString().compareTo(other.toString());
         }
@@ -336,16 +339,16 @@
      */
 
     public static class RuleLine {
-        public static Set<String> types = new TreeSet<String>();
-        public static Set<Day> days = new TreeSet<Day>();
-        static Set<Integer> saves = new TreeSet<Integer>();
+        public static Set<String> types = new TreeSet<>();
+        public static Set<Day> days = new TreeSet<>();
+        static Set<Integer> saves = new TreeSet<>();
 
         RuleLine(List<String> l) {
             fromYear = parseYear(l.get(0), 0);
             toYear = parseYear(l.get(1), fromYear);
             type = l.get(2);
             if (type.equals("-")) type = null;
-            month = 1 + findStartsWith((String) l.get(3), months, false);
+            month = 1 + findStartsWith(l.get(3), months, false);
             day = new Day(l.get(4));
             time = new Time(l.get(5));
             save = Time.parseSeconds(l.get(6), true);
@@ -355,6 +358,7 @@
             days.add(day);
         }
 
+        @Override
         public String toString() {
             return BoilerplateUtilities.toStringHelper(this);
         }
@@ -433,17 +437,17 @@
      * continuation.
      */
     public static class ZoneLine {
-        public static Set<Day> untilDays = new TreeSet<Day>();
-        public static Set<String> rulesSaves = new TreeSet<String>();
+        public static Set<Day> untilDays = new TreeSet<>();
+        public static Set<String> rulesSaves = new TreeSet<>();
 
         ZoneLine(List<String> l) {
             gmtOff = Time.parseSeconds(l.get(0), true);
-            rulesSave = (String) l.get(1);
+            rulesSave = l.get(1);
             if (rulesSave.equals("-"))
                 rulesSave = "0";
             else if (rulesSave.charAt(0) < 'A') rulesSave = "" + Time.parseSeconds(rulesSave, false);
 
-            format = (String) l.get(2);
+            format = l.get(2);
             switch (l.size()) {
             case 7:
                 untilTime = new Time(l.get(6)); // fall through
@@ -451,7 +455,7 @@
                 untilDay = new Day(l.get(5)); // fall through
                 untilDays.add(untilDay);
             case 5:
-                untilMonth = 1 + findStartsWith((String) l.get(4), months, false); // fall through
+                untilMonth = 1 + findStartsWith(l.get(4), months, false); // fall through
             case 4:
                 untilYear = parseYear(l.get(3), Integer.MAX_VALUE); // fall through
             case 3:
@@ -462,6 +466,7 @@
             rulesSaves.add(rulesSave);
         }
 
+        @Override
         public String toString() {
             return BoilerplateUtilities.toStringHelper(this);
         }
@@ -487,13 +492,13 @@
         public static final int FIELD_COUNT_UNTIL = 7; // excluding Zone, Name
     }
 
-    Map<String, List<RuleLine>> ruleID_rules = new TreeMap<String, List<RuleLine>>();
+    Map<String, List<RuleLine>> ruleID_rules = new TreeMap<>();
 
-    Map<String, List<ZoneLine>> zone_rules = new TreeMap<String, List<ZoneLine>>();
+    Map<String, List<ZoneLine>> zone_rules = new TreeMap<>();
 
-    Map<String, String> linkold_new = new TreeMap<String, String>();
+    Map<String, String> linkold_new = new TreeMap<>();
 
-    Map<String, Set<String>> linkNew_oldSet = new TreeMap<String, Set<String>>();
+    Map<String, Set<String>> linkNew_oldSet = new TreeMap<>();
 
     public class Transition {
         public long date;
@@ -543,6 +548,7 @@
     private Comparator<String> TZIDComparator = new Comparator<String>() {
         Map<String, List<String>> data = getZoneData();
 
+        @Override
         public int compare(String s1, String s2) {
             List<String> data1 = data.get(s1);
             if (data1 == null)
@@ -553,8 +559,8 @@
 
             int result;
             // country
-            String country1 = (String) data1.get(2);
-            String country2 = (String) data2.get(2);
+            String country1 = data1.get(2);
+            String country2 = data2.get(2);
 
             if ((result = country1.compareTo(country2)) != 0)
                 return result;
@@ -573,7 +579,7 @@
         }
     };
 
-    public static MapComparator<String> regionalCompare = new MapComparator<String>();
+    public static MapComparator<String> regionalCompare = new MapComparator<>();
     static {
         regionalCompare.add("America");
         regionalCompare.add("Atlantic");
@@ -590,16 +596,16 @@
 
     private static String[] TZFiles = { "africa", "antarctica", "asia",
         "australasia", "backward", "etcetera", "europe", "northamerica",
-        "pacificnew", "southamerica", "systemv" };
+        "southamerica" };
 
     private static Map<String, String> FIX_UNSTABLE_TZIDS;
 
-    private static Set<String> SKIP_LINKS = new HashSet<String>(Arrays.asList(
+    private static Set<String> SKIP_LINKS = new HashSet<>(Arrays.asList(
         new String[] {
             "America/Montreal", "America/Toronto",
             "America/Santa_Isabel", "America/Tijuana" }));
 
-    private static Set<String> PREFERRED_BASES = new HashSet<String>(Arrays.asList(new String[] { "Europe/London" }));
+    private static Set<String> PREFERRED_BASES = new HashSet<>(Arrays.asList(new String[] { "Europe/London" }));
 
     private static String[][] ADD_ZONE_ALIASES_DATA = {
         { "Etc/UCT", "Etc/UTC" },
@@ -639,6 +645,7 @@
             { "America/Argentina/Cordoba", "America/Cordoba" },
             { "America/Argentina/Jujuy", "America/Jujuy" },
             { "America/Argentina/Mendoza", "America/Mendoza" },
+            { "America/Nuuk", "America/Godthab" },
             { "America/Kentucky/Louisville", "America/Louisville" },
             { "America/Indiana/Indianapolis", "America/Indianapolis" },
             { "Africa/Asmara", "Africa/Asmera" },
@@ -671,7 +678,7 @@
             // String deg = "([+-][0-9]+)";//
             String deg = "([+-])([0-9][0-9][0-9]?)([0-9][0-9])([0-9][0-9])?";//
             Matcher m = PatternCache.get(deg + deg).matcher("");
-            zoneData = new TreeMap<String, List<String>>();
+            zoneData = new TreeMap<>();
             BufferedReader in = CldrUtility.getUTF8Data("zone.tab");
             while (true) {
                 String line = in.readLine();
@@ -711,7 +718,7 @@
             in.close();
             // add Etcs
             for (int i = -14; i <= 12; ++i) {
-                List<String> pieces = new ArrayList<String>();
+                List<String> pieces = new ArrayList<>();
                 int latitude = 0;
                 int longitude = i * 15;
                 if (longitude <= -180) {
@@ -726,7 +733,7 @@
                     pieces);
             }
             // add Unknown / UTC
-            List<String> pieces = new ArrayList<String>();
+            List<String> pieces = new ArrayList<>();
             pieces.add(new Double(0).toString()); // lat
             pieces.add(new Double(0).toString()); // long
             pieces.add(StandardCodes.NO_COUNTRY); // country
@@ -737,7 +744,7 @@
 
             // now get links
             Pattern whitespace = PatternCache.get("\\s+");
-            XEquivalenceClass<String, String> linkedItems = new XEquivalenceClass<String, String>("None");
+            XEquivalenceClass<String, String> linkedItems = new XEquivalenceClass<>("None");
             for (int i = 0; i < TZFiles.length; ++i) {
                 in = CldrUtility.getUTF8Data(TZFiles[i]);
                 String zoneID = null;
@@ -757,22 +764,22 @@
                         continue;
                     String[] items = whitespace.split(line);
                     if (zoneID != null || items[0].equals("Zone")) {
-                        List<String> l = new ArrayList<String>();
+                        List<String> l = new ArrayList<>();
                         l.addAll(Arrays.asList(items));
 
                         // Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01
                         // 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
                         if (zoneID == null) {
                             l.remove(0); // "Zone"
-                            zoneID = (String) l.get(0);
-                            String ntzid = (String) FIX_UNSTABLE_TZIDS.get(zoneID);
+                            zoneID = l.get(0);
+                            String ntzid = FIX_UNSTABLE_TZIDS.get(zoneID);
                             if (ntzid != null)
                                 zoneID = ntzid;
                             l.remove(0);
                         }
                         List<ZoneLine> zoneRules = zone_rules.get(zoneID);
                         if (zoneRules == null) {
-                            zoneRules = new ArrayList<ZoneLine>();
+                            zoneRules = new ArrayList<>();
                             zone_rules.put(zoneID, zoneRules);
                         }
 
@@ -796,10 +803,10 @@
                         String ruleID = items[1];
                         List<RuleLine> ruleList = ruleID_rules.get(ruleID);
                         if (ruleList == null) {
-                            ruleList = new ArrayList<RuleLine>();
+                            ruleList = new ArrayList<>();
                             ruleID_rules.put(ruleID, ruleList);
                         }
-                        List<String> l = new ArrayList<String>();
+                        List<String> l = new ArrayList<>();
                         l.addAll(Arrays.asList(items));
                         l.remove(0);
                         l.remove(0);
@@ -845,7 +852,7 @@
             // if any contains one, make it the primary
             // if any contains zero, problem!
             for (Set<String> equivalents : linkedItems.getEquivalenceSets()) {
-                Set<String> canonicals = new TreeSet<String>(equivalents);
+                Set<String> canonicals = new TreeSet<>(equivalents);
                 canonicals.retainAll(isCanonical);
                 if (canonicals.size() == 0)
                     throw new IllegalArgumentException("No canonicals in: " + equivalents);
@@ -856,7 +863,7 @@
                             .println("\t*Don't* put these into the same equivalence class: "
                                 + canonicals);
                     }
-                    Set<String> remainder = new TreeSet<String>(equivalents);
+                    Set<String> remainder = new TreeSet<>(equivalents);
                     remainder.removeAll(isCanonical);
                     if (remainder.size() != 0) {
                         if (DEBUG) {
@@ -871,7 +878,7 @@
                     // get the item that we want to hang all the aliases off of.
                     // normally this is the first (alphabetically) one, but
                     // it may be overridden with PREFERRED_BASES
-                    Set<String> preferredItems = new HashSet<String>(PREFERRED_BASES);
+                    Set<String> preferredItems = new HashSet<>(PREFERRED_BASES);
                     preferredItems.retainAll(canonicals);
                     if (preferredItems.size() > 0) {
                         newOne = preferredItems.iterator().next();
@@ -923,7 +930,7 @@
                 String newZone = linkold_new.get(oldZone);
                 Set<String> s = linkNew_oldSet.get(newZone);
                 if (s == null)
-                    linkNew_oldSet.put(newZone, s = new HashSet<String>());
+                    linkNew_oldSet.put(newZone, s = new HashSet<>());
                 s.add(oldZone);
             }
 
diff --git a/tools/java/org/unicode/cldr/util/data/Locales.txt b/tools/java/org/unicode/cldr/util/data/Locales.txt
index 4f82d3a..8d5c6aa 100644
--- a/tools/java/org/unicode/cldr/util/data/Locales.txt
+++ b/tools/java/org/unicode/cldr/util/data/Locales.txt
@@ -305,10 +305,15 @@
 Google	; sat ; basic ; Santali (Olck script)
 Google	; kok ; basic ; Konkani
 Google	; su ; basic ; Sundanese (script TBD)
-Google	; gn ; basic ; Guarani (Bengali script)
+# Google	; gn ; basic ; Guarani (Bengali script)
 Google	; sd_Deva ; basic ; Sindhi (Devanagari script)
 Google	; mai ; basic ; Maithili (Devanagari script)
 
+Google    ; nn ; Moderate ; Nynorsk
+Google    ; sa ; basic ; Sanskrit
+Google    ; doi ; basic ; Dogri
+#Google    ; nv ; basic ; Navajo
+
 #Google Tier TR
 Google	;	es_US	;	modern	; TR Spanish (United States)
 Google	;	es_MX	;	modern	; TR Spanish (Mexico)
@@ -445,6 +450,10 @@
 Apple	;	ug	;	basic
 Apple	;	yi	;	basic
 
+Apple    ; sa ; basic ; Sanskrit
+Apple    ; doi ; basic ; Dogri
+#Apple    ; nv ; basic ; Navajo
+
 Adobe	;	ar	;	basic
 Adobe	;	az	;	basic
 Adobe	;	be	;	moderate
@@ -636,11 +645,15 @@
 Cldr	; sat ; basic ; Santali (Olck script)
 Cldr	; kok ; basic ; Konkani
 Cldr	; su ; basic ; Sundanese (script TBD)
-Cldr	; gn ; basic ; Guarani (Bengali script)
+# Cldr	; gn ; basic ; Guarani (Bengali script)
 Cldr	; sd_Deva ; basic ; Sindhi (Devanagari script)
-Cldr	; cad ; basic ; Caddo
+# Cldr	; cad ; basic ; Caddo
 Cldr	; pcm ; basic ; Nigerian Pidgin
 
+Cldr    ; nn ; Moderate ; Nynorsk
+Cldr    ; sa ; basic ; Sanskrit
+Cldr    ; doi ; basic ; Dogri
+#Cldr    ; nv ; basic ; Navajo
 
 Bangor_Univ ;   cy   ;    modern  ; Welsh
 Bangor_Univ ;   *    ;    moderate  ; All others
@@ -811,6 +824,12 @@
 Microsoft	;	wo	;	basic
 Microsoft	;	yo	;	basic
 
+Microsoft    ; nn ; Moderate ; Nynorsk
+Microsoft    ; sa ; basic ; Sanskrit
+Microsoft    ; doi ; basic ; Dogri
+#Microsoft    ; nv ; basic ; Navajo
+
+
 Pakistan	;	ur	;	modern	;	Urdu
 Pakistan	;	*	;	modern	;	All others
 
@@ -886,3 +905,6 @@
 Facebook	;	pt_PT	;	modern
 
 Mozilla	;	en	;	modern
+
+Rodakych ; pcm ; modern ; Nigerian Pidgin
+Rodakych ; * ; moderate ; All Others
diff --git a/tools/java/org/unicode/cldr/util/data/PathDescription.txt b/tools/java/org/unicode/cldr/util/data/PathDescription.txt
index 0e4df8f..2b2ff5b 100644
--- a/tools/java/org/unicode/cldr/util/data/PathDescription.txt
+++ b/tools/java/org/unicode/cldr/util/data/PathDescription.txt
@@ -103,6 +103,8 @@
 
 ^//ldml/numbers/minimalPairs/ordinalMinimalPairs\[@ordinal="([^"]*)"] ; Minimal pairs for ordinals. For more information, please see http://cldr.org/translation/getting-started/plurals#TOC-Minimal-Pairs.
 ^//ldml/numbers/minimalPairs/pluralMinimalPairs\[@count="([^"]*)"] ; Minimal pairs for plurals (cardinals). For more information, please see http://cldr.org/translation/getting-started/plurals#TOC-Minimal-Pairs.
+^//ldml/numbers/minimalPairs/caseMinimalPairs\[@case="([^"]*)"] ; Minimal pairs for cases used in the language. For more information, please see http://cldr.unicode.org/translation/grammatical-inflection.
+^//ldml/numbers/minimalPairs/genderMinimalPairs\[@gender="([^"]*)"] ; Minimal pairs for genders. For more information, please see http://cldr.unicode.org/translation/grammatical-inflection .
 
 ^//ldml/numbers/([a-z]*)Formats(\[@numberSystem="([^"]*)"])?/\1FormatLength/\1Format\[@type="standard"]/pattern\[@type="standard"]$    ;   Special pattern used to compose {1} numbers. Note: before translating, be sure to read http://cldr.org/translation/numbers-currency/number-patterns.
 ^//ldml/numbers/currencyFormats\[@numberSystem="([^"]*)"]/currencyFormatLength/currencyFormat\[@type="accounting"]/pattern    ;   Special pattern used to compose currency values for accounting purposes. Note: before translating, be sure to read http://cldr.org/translation/numbers-currency/number-patterns.
diff --git a/tools/java/org/unicode/cldr/util/data/PathHeader.txt b/tools/java/org/unicode/cldr/util/data/PathHeader.txt
index ece6edc..5ba0133 100644
--- a/tools/java/org/unicode/cldr/util/data/PathHeader.txt
+++ b/tools/java/org/unicode/cldr/util/data/PathHeader.txt
@@ -90,6 +90,8 @@
 //ldml/dates/calendars/calendar[@type="gregorian"]/dayPeriods/dayPeriodContext[@type="%A"]/dayPeriodWidth[@type="%A"]/dayPeriod[@type="%A"]  ; DateTime ; &calendar(gregorian) ; &calField(DayPeriods:$2:$1) ; &dayPeriod($3)
 //ldml/dates/calendars/calendar[@type="%A"]/dayPeriods/dayPeriodContext[@type="%A"]/dayPeriodWidth[@type="%A"]/dayPeriod[@type="%A"]  ; Special  ; Suppress ; &calendar($1) ; &calField(DayPeriods:$3:$2)-&dayPeriod($4) ; HIDE
 
+//ldml/dates/calendars/calendar[@type="%N"]/dateFormats/dateFormatLength[@type="%A"]/dateFormat[@type="%A"]/pattern[@type="%A"][@count="%A"]       ; DateTime ; &calendar($1) ; &calField(Formats:Standard:date) ; $2-$5 ; LTR_ALWAYS
+//ldml/dates/calendars/calendar[@type="%A"]/dateFormats/dateFormatLength[@type="%A"]/dateFormat[@type="%A"]/pattern[@type="%A"][@count="%A"]       ; Special  ; Suppress ; &calendar($1) ; &calField(Formats:Standard:date)-$2 ; HIDE
 //ldml/dates/calendars/calendar[@type="%N"]/dateFormats/dateFormatLength[@type="%A"]/dateFormat[@type="%A"]/pattern[@type="%A"]       ; DateTime ; &calendar($1) ; &calField(Formats:Standard:date) ; $2 ; LTR_ALWAYS
 //ldml/dates/calendars/calendar[@type="%A"]/dateFormats/dateFormatLength[@type="%A"]/dateFormat[@type="%A"]/pattern[@type="%A"]       ; Special  ; Suppress ; &calendar($1) ; &calField(Formats:Standard:date)-$2 ; HIDE
 
@@ -107,6 +109,7 @@
 //ldml/dates/calendars/calendar[@type="chinese"]/dateTimeFormats/availableFormats/dateFormatItem[@id="(E*[Hms]%a)"]             ; DateTime ; &calendar(chinese); &calField(Formats:Flexible:time24) ; $1 ; LTR_ALWAYS
 //ldml/dates/calendars/calendar[@type="gregorian"]/dateTimeFormats/availableFormats/dateFormatItem[@id="%A"][@count="%A"]       ; DateTime ; &calendar(gregorian); &calField(Formats:Flexible:date) ; $1-$2 ; LTR_ALWAYS
 //ldml/dates/calendars/calendar[@type="%N"]/dateTimeFormats/availableFormats/dateFormatItem[@id="(?![^"]*[hHms])%A"]            ; DateTime ; &calendar($1); &calField(Formats:Flexible:date) ; $2 ; LTR_ALWAYS
+//ldml/dates/calendars/calendar[@type="%A"]/dateTimeFormats/availableFormats/dateFormatItem[@id="%A"][@count="%A"]              ; Special  ; Suppress ; &calendar($1); &calField(Formats:Flexible:date)-$2-$3 ; HIDE
 //ldml/dates/calendars/calendar[@type="%A"]/dateTimeFormats/availableFormats/dateFormatItem[@id="%A"]                           ; Special  ; Suppress ; &calendar($1); &calField(Formats:Flexible:date)-$2 ; HIDE
 
 //ldml/dates/calendars/calendar[@type="gregorian"]/dateTimeFormats/appendItems/appendItem[@request="(Timezone)"]    ; DateTime ; &calendar(gregorian) ; &calField(Formats:Flexible:Append) ; $1  ; LTR_ALWAYS
@@ -148,9 +151,6 @@
 //ldml/numbers/currencyFormats[@numberSystem="%A"]/unitPattern[@count="%A"]                             ; Numbers ; Number Formatting Patterns ; Currency Unit Patterns &numberingSystem($1) ; &count(currencies-$2) ; LTR_ALWAYS
 //ldml/numbers/miscPatterns[@numberSystem="%A"]/pattern[@type=\"%A\"]                                   ; Numbers ; Number Formatting Patterns ; Miscellaneous Patterns &numberingSystem($1) ; $2 ; LTR_ALWAYS
 
-//ldml/numbers/minimalPairs/ordinalMinimalPairs[@ordinal=\"%A\"]     ; Numbers ; Minimal Pairs ; Ordinal ; $1 ; LTR_ALWAYS
-//ldml/numbers/minimalPairs/pluralMinimalPairs[@count=\"%A\"]        ; Numbers ; Minimal Pairs ; Plural ; $1 ; LTR_ALWAYS
-
 //ldml/numbers/(currency)Formats[@numberSystem="latn"]/%EFormatLength[@type="(short)"]/%EFormat[@type="%A"]/pattern[@type="%A"][@count="%A"] ; Numbers ; Compact Decimal Formatting ; Short Currency &numberingSystem(latn); &count2($6-digits-$3-$7)
 //ldml/numbers/(currency)Formats[@numberSystem="%A"]/%EFormatLength[@type="(short)"]/%EFormat[@type="%A"]/pattern[@type="%A"][@count="%A"] ; Numbers ; Compact Decimal Formatting (Other Numbering Systems) ; Short Currency &numberingSystem($2) ; &count2($7-digits-$4-$8) ; HIDE
 //ldml/numbers/%EFormats[@numberSystem="latn"]/%EFormatLength[@type="(long)"]/%EFormat[@type="%A"]/pattern[@type="%A"][@count="%A"]  ; Numbers ; Compact Decimal Formatting ; Long Formats &numberingSystem(latn) ; &count2($6-digits-$3-$7)
@@ -160,8 +160,8 @@
 
 ### Currencies
 
-//ldml/numbers/currencies/currency[@type="%A"]/displayName$                 ; Currencies ; &continentFromCurrency($1) ; &categoryFromCurrency($1) ; &count($1-name)
 //ldml/numbers/currencies/currency[@type="%A"]/displayName[@count="%A"]     ; Currencies ; &continentFromCurrency($1) ; &categoryFromCurrency($1) ; &count($1-name-$2)
+//ldml/numbers/currencies/currency[@type="%A"]/displayName$                 ; Currencies ; &continentFromCurrency($1) ; &categoryFromCurrency($1) ; &count($1-name)
 //ldml/numbers/currencies/currency[@type="%A"]/symbol$                      ; Currencies ; &continentFromCurrency($1) ; &categoryFromCurrency($1) ; &currencySymbol($1-symbol)
 //ldml/numbers/currencies/currency[@type="%A"]/symbol[@alt="narrow"]        ; Currencies ; &continentFromCurrency($1) ; &categoryFromCurrency($1) ; &currencySymbol($1-symbol-narrow)
 //ldml/numbers/currencies/currency[@type="%A"]/symbol[@alt="variant"]        ; Currencies ; &continentFromCurrency($1) ; &categoryFromCurrency($1) ; &currencySymbol($1-symbol-variant)
@@ -175,61 +175,90 @@
 //ldml/localeDisplayNames/measurementSystemNames/measurementSystemName[@type="%A"] ; Units ; Measurement Systems ; null ; $1
 
 //ldml/units/unitLength[@type="%L"]/unit[@type="duration-%A"]/displayName                             ; Units ; Duration ; &datefield($2) ; &unitCount($1-displayName)
-//ldml/units/unitLength[@type="%L"]/unit[@type="duration-%A"]/unitPattern[@count="%A"]                ; Units ; Duration ; &datefield($2) ; &unitCount($1-$3)
+//ldml/units/unitLength[@type="%L"]/unit[@type="duration-%A"]/gender                             ; Units ; Duration ; &datefield($2) ; &unitCount($1-gender)
+//ldml/units/unitLength[@type="%L"]/unit[@type="duration-%A"]/unitPattern[@count="%A"][@case="%A"]                ; Units ; Duration ; &datefield($2) ; &unitCount($1-$3-$4)
+//ldml/units/unitLength[@type="%L"]/unit[@type="duration-%A"]/unitPattern[@count="%A"]                ; Units ; Duration ; &datefield($2) ; &unitCount($1-$3-nominative)
 //ldml/units/unitLength[@type="%L"]/unit[@type="duration-%A"]/perUnitPattern                          ; Units ; Duration ; &datefield($2) ; &unitCount($1-per)
 
 //ldml/units/unitLength[@type="%L"]/unit[@type="graphics-%A"]/displayName                               ; Units ; Graphics ; &unit(length-$2) ; &unitCount($1-displayName)
-//ldml/units/unitLength[@type="%L"]/unit[@type="graphics-%A"]/unitPattern[@count="%A"]                  ; Units ; Graphics ; &unit(length-$2) ; &unitCount($1-$3)
+//ldml/units/unitLength[@type="%L"]/unit[@type="graphics-%A"]/gender                               ; Units ; Graphics ; &unit(length-$2) ; &unitCount($1-gender)
+//ldml/units/unitLength[@type="%L"]/unit[@type="graphics-%A"]/unitPattern[@count="%A"][@case="%A"]                  ; Units ; Graphics ; &unit(length-$2) ; &unitCount($1-$3-$4)
+//ldml/units/unitLength[@type="%L"]/unit[@type="graphics-%A"]/unitPattern[@count="%A"]                  ; Units ; Graphics ; &unit(length-$2) ; &unitCount($1-$3-nominative)
 //ldml/units/unitLength[@type="%L"]/unit[@type="graphics-%A"]/perUnitPattern                            ; Units ; Graphics ; &unit(length-$2) ; &unitCount($1-per)
 
 //ldml/units/unitLength[@type="%L"]/unit[@type="length-%A"]/displayName                                 ; Units ; Length ; &unit(length-$2) ; &unitCount($1-displayName)
-//ldml/units/unitLength[@type="%L"]/unit[@type="length-%A"]/unitPattern[@count="%A"]                    ; Units ; Length ; &unit(length-$2) ; &unitCount($1-$3)
+//ldml/units/unitLength[@type="%L"]/unit[@type="length-%A"]/gender                                 ; Units ; Length ; &unit(length-$2) ; &unitCount($1-gender)
+//ldml/units/unitLength[@type="%L"]/unit[@type="length-%A"]/unitPattern[@count="%A"][@case="%A"]                    ; Units ; Length ; &unit(length-$2) ; &unitCount($1-$3-$4)
+//ldml/units/unitLength[@type="%L"]/unit[@type="length-%A"]/unitPattern[@count="%A"]                    ; Units ; Length ; &unit(length-$2) ; &unitCount($1-$3-nominative)
 //ldml/units/unitLength[@type="%L"]/unit[@type="length-%A"]/perUnitPattern                              ; Units ; Length ; &unit(length-$2) ; &unitCount($1-per)
 
 //ldml/units/unitLength[@type="%L"]/unit[@type="area-%A"]/displayName                                   ; Units ; Area ; &unit(area-$2) ; &unitCount($1-displayName)
-//ldml/units/unitLength[@type="%L"]/unit[@type="area-%A"]/unitPattern[@count="%A"]                      ; Units ; Area ; &unit(area-$2) ; &unitCount($1-$3)
+//ldml/units/unitLength[@type="%L"]/unit[@type="area-%A"]/gender                                   ; Units ; Area ; &unit(area-$2) ; &unitCount($1-gender)
+//ldml/units/unitLength[@type="%L"]/unit[@type="area-%A"]/unitPattern[@count="%A"][@case="%A"]                      ; Units ; Area ; &unit(area-$2) ; &unitCount($1-$3-$4)
+//ldml/units/unitLength[@type="%L"]/unit[@type="area-%A"]/unitPattern[@count="%A"]                      ; Units ; Area ; &unit(area-$2) ; &unitCount($1-$3-nominative)
 //ldml/units/unitLength[@type="%L"]/unit[@type="area-%A"]/perUnitPattern                                ; Units ; Area ; &unit(area-$2) ; &unitCount($1-per)
 
 //ldml/units/unitLength[@type="%L"]/unit[@type="volume-%A"]/displayName                                 ; Units ; Volume ; &unit(volume-$2) ; &unitCount($1-displayName)
-//ldml/units/unitLength[@type="%L"]/unit[@type="volume-%A"]/unitPattern[@count="%A"]                    ; Units ; Volume ; &unit(volume-$2) ; &unitCount($1-$3)
+//ldml/units/unitLength[@type="%L"]/unit[@type="volume-%A"]/gender                                 ; Units ; Volume ; &unit(volume-$2) ; &unitCount($1-gender)
+//ldml/units/unitLength[@type="%L"]/unit[@type="volume-%A"]/unitPattern[@count="%A"][@case="%A"]                    ; Units ; Volume ; &unit(volume-$2) ; &unitCount($1-$3-$4)
+//ldml/units/unitLength[@type="%L"]/unit[@type="volume-%A"]/unitPattern[@count="%A"]                    ; Units ; Volume ; &unit(volume-$2) ; &unitCount($1-$3-nominative)
 //ldml/units/unitLength[@type="%L"]/unit[@type="volume-%A"]/perUnitPattern                              ; Units ; Volume ; &unit(volume-$2) ; &unitCount($1-per)
 
 //ldml/units/unitLength[@type="%L"]/unit[@type="%V-%A"]/displayName                                     ; Units ; Speed and Acceleration ; &unit($2-$3) ; &unitCount($1-displayName)
-//ldml/units/unitLength[@type="%L"]/unit[@type="%V-%A"]/unitPattern[@count="%A"]                        ; Units ; Speed and Acceleration ; &unit($2-$3) ; &unitCount($1-$4)
+//ldml/units/unitLength[@type="%L"]/unit[@type="%V-%A"]/gender                                     ; Units ; Speed and Acceleration ; &unit($2-$3) ; &unitCount($1-gender)
+//ldml/units/unitLength[@type="%L"]/unit[@type="%V-%A"]/unitPattern[@count="%A"][@case="%A"]                        ; Units ; Speed and Acceleration ; &unit($2-$3) ; &unitCount($1-$4-$5)
+//ldml/units/unitLength[@type="%L"]/unit[@type="%V-%A"]/unitPattern[@count="%A"]                        ; Units ; Speed and Acceleration ; &unit($2-$3) ; &unitCount($1-$4-nominative)
 //ldml/units/unitLength[@type="%L"]/unit[@type="%V-%A"]/perUnitPattern                                  ; Units ; Speed and Acceleration ; &unit($2-$3) ; &unitCount($1-per)
 
 //ldml/units/unitLength[@type="%L"]/unit[@type="mass-%A"]/displayName                                   ; Units ; Mass and Weight ; &unit(mass-$2) ; &unitCount($1-displayName)
-//ldml/units/unitLength[@type="%L"]/unit[@type="mass-%A"]/unitPattern[@count="%A"]                      ; Units ; Mass and Weight ; &unit(mass-$2) ; &unitCount($1-$3)
+//ldml/units/unitLength[@type="%L"]/unit[@type="mass-%A"]/gender                                   ; Units ; Mass and Weight ; &unit(mass-$2) ; &unitCount($1-gender)
+//ldml/units/unitLength[@type="%L"]/unit[@type="mass-%A"]/unitPattern[@count="%A"][@case="%A"]                      ; Units ; Mass and Weight ; &unit(mass-$2) ; &unitCount($1-$3-$4)
+//ldml/units/unitLength[@type="%L"]/unit[@type="mass-%A"]/unitPattern[@count="%A"]                      ; Units ; Mass and Weight ; &unit(mass-$2) ; &unitCount($1-$3-nominative)
 //ldml/units/unitLength[@type="%L"]/unit[@type="mass-%A"]/perUnitPattern                                ; Units ; Mass and Weight ; &unit(mass-$2) ; &unitCount($1-per)
 
 //ldml/units/unitLength[@type="%L"]/unit[@type="%X-%A"]/displayName                                     ; Units ; Energy and Power ; &unit($2-$3) ; &unitCount($1-displayName)
-//ldml/units/unitLength[@type="%L"]/unit[@type="%X-%A"]/unitPattern[@count="%A"]                        ; Units ; Energy and Power ; &unit($2-$3) ; &unitCount($1-$4)
+//ldml/units/unitLength[@type="%L"]/unit[@type="%X-%A"]/gender                                     ; Units ; Energy and Power ; &unit($2-$3) ; &unitCount($1-gender)
+//ldml/units/unitLength[@type="%L"]/unit[@type="%X-%A"]/unitPattern[@count="%A"][@case="%A"]                        ; Units ; Energy and Power ; &unit($2-$3) ; &unitCount($1-$4-$5)
+//ldml/units/unitLength[@type="%L"]/unit[@type="%X-%A"]/unitPattern[@count="%A"]                        ; Units ; Energy and Power ; &unit($2-$3) ; &unitCount($1-$4-nominative)
 //ldml/units/unitLength[@type="%L"]/unit[@type="%X-%A"]/perUnitPattern                                  ; Units ; Energy and Power ; &unit($2-$3) ; &unitCount($1-per)
 
 //ldml/units/unitLength[@type="%L"]/unit[@type="%F-%A"]/displayName                                     ; Units ; Electrical and Frequency ; &unit($2-$3) ; &unitCount($1-displayName)
-//ldml/units/unitLength[@type="%L"]/unit[@type="%F-%A"]/unitPattern[@count="%A"]                        ; Units ; Electrical and Frequency ; &unit($2-$3) ; &unitCount($1-$4)
+//ldml/units/unitLength[@type="%L"]/unit[@type="%F-%A"]/gender                                     ; Units ; Electrical and Frequency ; &unit($2-$3) ; &unitCount($1-gender)
+//ldml/units/unitLength[@type="%L"]/unit[@type="%F-%A"]/unitPattern[@count="%A"][@case="%A"]                        ; Units ; Electrical and Frequency ; &unit($2-$3) ; &unitCount($1-$4-$5)
+//ldml/units/unitLength[@type="%L"]/unit[@type="%F-%A"]/unitPattern[@count="%A"]                        ; Units ; Electrical and Frequency ; &unit($2-$3) ; &unitCount($1-$4-nominative)
 //ldml/units/unitLength[@type="%L"]/unit[@type="%F-%A"]/perUnitPattern                                  ; Units ; Electrical and Frequency ; &unit($2-$3) ; &unitCount($1-per)
 
 //ldml/units/unitLength[@type="%L"]/unit[@type="%W-%A"]/displayName                                     ; Units ; Weather ; &unit($2-$3) ; &unitCount($1-displayName)
-//ldml/units/unitLength[@type="%L"]/unit[@type="%W-%A"]/unitPattern[@count="%A"]                        ; Units ; Weather ; &unit($2-$3) ; &unitCount($1-$4)
+//ldml/units/unitLength[@type="%L"]/unit[@type="%W-%A"]/gender                                     ; Units ; Weather ; &unit($2-$3) ; &unitCount($1-gender)
+//ldml/units/unitLength[@type="%L"]/unit[@type="%W-%A"]/unitPattern[@count="%A"][@case="%A"]                        ; Units ; Weather ; &unit($2-$3) ; &unitCount($1-$4-$5)
+//ldml/units/unitLength[@type="%L"]/unit[@type="%W-%A"]/unitPattern[@count="%A"]                        ; Units ; Weather ; &unit($2-$3) ; &unitCount($1-$4-nominative)
 //ldml/units/unitLength[@type="%L"]/unit[@type="%W-%A"]/perUnitPattern                                  ; Units ; Weather ; &unit($2-$3) ; &unitCount($1-per)
 
 //ldml/units/unitLength[@type="%L"]/unit[@type="digital-%A"]/displayName                                ; Units ; Digital ; &unit(digital-$2) ; &unitCount($1-displayName)
-//ldml/units/unitLength[@type="%L"]/unit[@type="digital-%A"]/unitPattern[@count="%A"]                   ; Units ; Digital ; &unit(digital-$2) ; &unitCount($1-$3)
+//ldml/units/unitLength[@type="%L"]/unit[@type="digital-%A"]/gender                                ; Units ; Digital ; &unit(digital-$2) ; &unitCount($1-gender)
+//ldml/units/unitLength[@type="%L"]/unit[@type="digital-%A"]/unitPattern[@count="%A"][@case="%A"]                   ; Units ; Digital ; &unit(digital-$2) ; &unitCount($1-$3-$4)
+//ldml/units/unitLength[@type="%L"]/unit[@type="digital-%A"]/unitPattern[@count="%A"]                   ; Units ; Digital ; &unit(digital-$2) ; &unitCount($1-$3-nominative)
 //ldml/units/unitLength[@type="%L"]/unit[@type="digital-%A"]/perUnitPattern                             ; Units ; Digital ; &unit(digital-$2) ; &unitCount($1-per)
 
 //ldml/units/unitLength[@type="%L"]/unit[@type="%A"]/displayName                                        ; Units ; Other Units ; &unit($2) ; &unitCount($1-displayName)
-//ldml/units/unitLength[@type="%L"]/unit[@type="%A"]/unitPattern[@count="%A"]                           ; Units ; Other Units ; &unit($2) ; &unitCount($1-$3)
+//ldml/units/unitLength[@type="%L"]/unit[@type="%A"]/gender                                        ; Units ; Other Units ; &unit($2) ; &unitCount($1-gender)
+//ldml/units/unitLength[@type="%L"]/unit[@type="%A"]/unitPattern[@count="%A"][@case="%A"]                           ; Units ; Other Units ; &unit($2) ; &unitCount($1-$3-$4)
+//ldml/units/unitLength[@type="%L"]/unit[@type="%A"]/unitPattern[@count="%A"]                           ; Units ; Other Units ; &unit($2) ; &unitCount($1-$3-nominative)
 //ldml/units/unitLength[@type="%L"]/unit[@type="%A"]/perUnitPattern                                     ; Units ; Other Units ; &unit($2) ; &unitCount($1-per)
 
 # Warning: the longer match must come first
-//ldml/units/unitLength[@type="%L"]/compoundUnit[@type="%A"]/compoundUnitPattern1[@count="%A"]          ; Units ; Compound Units ; $2 ; &unitCount($1-$3)
-//ldml/units/unitLength[@type="%L"]/compoundUnit[@type="%A"]/compoundUnitPattern1                        ; Units ; Compound Units ; $2 ; $1
+//ldml/units/unitLength[@type="%L"]/compoundUnit[@type="%A"]/compoundUnitPattern1[@count="%A"][@gender="%A"][@case="%A"]          ; Units ; Compound Units ; $2 ; &unitCount($1-$3-$5-$4)
+//ldml/units/unitLength[@type="%L"]/compoundUnit[@type="%A"]/compoundUnitPattern1[@count="%A"][@case="%A"]          ; Units ; Compound Units ; $2 ; &unitCount($1-$3-$4-dgender)
+//ldml/units/unitLength[@type="%L"]/compoundUnit[@type="%A"]/compoundUnitPattern1[@count="%A"][@gender="%A"]          ; Units ; Compound Units ; $2 ; &unitCount($1-$3-nominative-$4)
+//ldml/units/unitLength[@type="%L"]/compoundUnit[@type="%A"]/compoundUnitPattern1[@count="%A"]          ; Units ; Compound Units ; $2 ; &unitCount($1-$3-nominative-dgender)
+//ldml/units/unitLength[@type="%L"]/compoundUnit[@type="%A"]/compoundUnitPattern1                        ; Special ; Suppress ; compound-UnitPattern1-$2 ; &unitCount($1) ; HIDE
+
 //ldml/units/unitLength[@type="%L"]/compoundUnit[@type="%A"]/compoundUnitPattern                        ; Units ; Compound Units ; $2 ; $1
 //ldml/units/unitLength[@type="%L"]/compoundUnit[@type="%A"]/unitPrefixPattern							; Units ; Compound Units ; $2 ; $1
 //ldml/units/durationUnit[@type="(hms|hm|ms)"]                                                        	; Units ; Duration ; Duration Patterns ; $1
 
 //ldml/units/unitLength[@type="%L"]/coordinateUnit/displayName                                          ; Units ; Coordinates ; all ; &unitCount($1-displayName)
+//ldml/units/unitLength[@type="%L"]/coordinateUnit/gender                                               ; Units ; Coordinates ; all ; &unitCount($1-gender)
 //ldml/units/unitLength[@type="%L"]/coordinateUnit/coordinateUnitPattern[@type="%A"]                    ; Units ; Coordinates ; $2 ; &unitCount($1)
 
 ### Miscellaneous
@@ -246,9 +275,10 @@
 //ldml/localeDisplayNames/transformNames/transformName[@type="%A"]          ; Misc ; Transforms ; null ; $1
 
 
-//ldml/typographicNames/axisName[@type="%A"]	; Characters ; Typography ; Axis ; $1
-//ldml/typographicNames/styleName[@type="%A"][@subtype="%A"]	; Characters ; Typography; Style ; $1-$2
-//ldml/typographicNames/featureName[@type="%A"]			; Characters ; Typography ; Feature ; $1
+//ldml/numbers/minimalPairs/ordinalMinimalPairs[@ordinal=\"%A\"]     ; Misc ; Minimal Pairs ; Ordinal ; $1 ; LTR_ALWAYS
+//ldml/numbers/minimalPairs/pluralMinimalPairs[@count=\"%A\"]        ; Misc ; Minimal Pairs ; Plural ; $1 ; LTR_ALWAYS
+//ldml/numbers/minimalPairs/caseMinimalPairs[@case=\"%A\"]        ; Misc ; Minimal Pairs ; Case ; $1 ; LTR_ALWAYS
+//ldml/numbers/minimalPairs/genderMinimalPairs[@gender=\"%A\"]        ; Misc ; Minimal Pairs ; Gender ; $1 ; LTR_ALWAYS
 
 #Emoji, etc.
 
@@ -262,6 +292,11 @@
 //ldml/annotations/annotation[@cp="%A"][@type="tts"]	; Characters ; &major($1) ; &minor($1) ; &emoji($1 -name)
 //ldml/annotations/annotation[@cp="%A"]					; Characters ; &major($1) ; &minor($1) ; &emoji($1 –keywords)
 
+//ldml/typographicNames/axisName[@type="%A"]    ; Characters ; Typography ; Axis ; $1
+//ldml/typographicNames/styleName[@type="%A"][@subtype="%A"]    ; Characters ; Typography; Style ; $1-$2
+//ldml/typographicNames/featureName[@type="%A"]         ; Characters ; Typography ; Feature ; $1
+
+
 #OLD
 //ldml/annotations/annotation_[@cp="%A"]/_tts			; Characters ; Annotation ; $1 ; TTS ; HIDE
 
@@ -312,6 +347,8 @@
 //ldml/dates/calendars/calendar[@type="%A"]/fields/field[@type="%A"]/%E[@type="%A"]                     ; Special ; Deprecated ; $1 ; $1-$2-$3-$4 ; HIDE
 //ldml/dates/calendars/calendar[@type="%A"]/fields/field[@type="%A"]                                    ; Special ; Deprecated ; $1 ; $1-$2 ; HIDE
 
+//ldml/metadata/casingData/casingItem[@type="%A"]; Special ; Suppress ; Casing ; $1 ; HIDE
+
 # Ultimate fallback (Error)
 //ldml/%S/(.*)                                                                              ; Special ; Unknown ; $1 ; $2 ; DEPRECATED
 //ldml/(.*)                                                                                 ; Special ; Unknown ; Unknown ; $2 ; DEPRECATED
@@ -361,6 +398,7 @@
 
 //supplementalData/transforms/transform[@source="%A"][@target="%A"][@direction="%A"]/%E			; Supplemental ; Transform ; &transform($3,$1,$2) ; $4 ; HIDE
 //supplementalData/transforms/transform[@source="%A"][@target="%A"][@variant="%A"][@direction="%A"]/%E			; Supplemental ; Transform ;  &transform($4,$1,$2,$3) ; $5 ; HIDE
+//supplementalData/transforms/transform[@source="%A"][@target="%A"]			; Supplemental ; Transform ; &transform("?",$1,$2) ; ? ; HIDE
 
 //supplementalData/territoryInfo/territory[@type="%A"]/languagePopulation[@type="%A"]/_%E			; Supplemental ; LanguageInfo ; $1/$2 ; $3 ; HIDE
 //supplementalData/territoryInfo/territory[@type="%A"]/_%E			; Supplemental ; TerritoryInfo ; $1 ; $2 ; HIDE
@@ -421,10 +459,17 @@
 //supplementalData/dayPeriodRuleSet[@type="%A"]/dayPeriodRules[@locales="%A"]/dayPeriodRule[@type="%A"]/_%E			; Supplemental ; DayPeriod ; $1-$2 ; $3-$4 ; HIDE
 //supplementalData/dayPeriodRuleSet/dayPeriodRules[@locales="%A"]/dayPeriodRule[@type="%A"]/_%E			; Supplemental ; DayPeriod ; $1 ; $2-$3 ; HIDE
 
+//supplementalData/grammaticalData/grammaticalFeatures[@targets="%A"][@locales="%A"]/grammaticalCase[@scope="%A"]/_values ; Supplemental ; Grammar ; Case ; $1-$2-$3 ; HIDE
+//supplementalData/grammaticalData/grammaticalFeatures[@targets="%A"][@locales="%A"]/grammaticalDefiniteness[@scope="%A"]/_values ; Supplemental ; Grammar ; Definiteness ; $1-$2-$3 ; HIDE
+//supplementalData/grammaticalData/grammaticalFeatures[@targets="%A"][@locales="%A"]/grammaticalGender[@scope="%A"]/_values ; Supplemental ; Grammar ; Gender ; $1-$2-$3 ; HIDE
+
 //supplementalData/grammaticalData/grammaticalFeatures[@targets="%A"][@locales="%A"]/grammaticalCase/_values ; Supplemental ; Grammar ; Case ; $1-$2 ; HIDE
 //supplementalData/grammaticalData/grammaticalFeatures[@targets="%A"][@locales="%A"]/grammaticalDefiniteness/_values ; Supplemental ; Grammar ; Definiteness ; $1-$2 ; HIDE
 //supplementalData/grammaticalData/grammaticalFeatures[@targets="%A"][@locales="%A"]/grammaticalGender/_values ; Supplemental ; Grammar ; Gender ; $1-$2 ; HIDE
-//supplementalData/grammaticalData/grammaticalFeatures[@targets="%A"][@locales="%A"]/grammaticalState/_values ; Supplemental ; Grammar ; State ; $1-$2 ; HIDE
+
+//supplementalData/grammaticalData/grammaticalDerivations[@locales="%A"]/deriveCompound[@feature="%A"][@structure="%A"]/_value ; Supplemental ; Grammar ; deriveCompound ; $1-$2-$3 ; HIDE
+//supplementalData/grammaticalData/grammaticalDerivations[@locales="%A"]/deriveComponent[@feature="%A"][@structure="%A"]/_value0 ; Supplemental ; Grammar ; deriveComponent ; $1-$2-$3-arg0 ; HIDE
+//supplementalData/grammaticalData/grammaticalDerivations[@locales="%A"]/deriveComponent[@feature="%A"][@structure="%A"]/_value1 ; Supplemental ; Grammar ; deriveComponent ; $1-$2-$3-arg1 ; HIDE
 
 //supplementalData/unitPreferenceData/unitPreferences[@category="%A"][@usage="%A"]/unitPreference_[@regions="%A"][@geq="%A"]/_skeleton            ; Supplemental ; Units ; $1/$2 ; $3:$4-skeleton ; HIDE
 //supplementalData/unitPreferenceData/unitPreferences[@category="%A"][@usage="%A"]/unitPreference_[@regions="%A"]/_skeleton            ; Supplemental ; Units ; $1/$2 ; $3-skeleton ; HIDE
diff --git a/tools/java/org/unicode/cldr/util/data/Placeholders.txt b/tools/java/org/unicode/cldr/util/data/Placeholders.txt
index 98bf568..c21e628 100644
--- a/tools/java/org/unicode/cldr/util/data/Placeholders.txt
+++ b/tools/java/org/unicode/cldr/util/data/Placeholders.txt
@@ -1,10 +1,9 @@
 #Remember to quote any [ character!
 # The default is DISALLOWED for anything not in this file.
-# The default for everything in this file is REQUIRED.
-# That default is overridden if the line has as the X parameter: locale, optional, or multiple.
-#	optional: there may or may not be a placeholder.
-#	locale: there is a count= or ordinal=, so the value is subject to the locale.
-#	multiple: there may be one or more placeholders (normally only in minimalPairs)
+# The default for everything in this file is REQUIRED, meaning that the number of placeholders has to match the number in the final field.
+# That default is overridden if the line has as the X parameter: locale or multiple.
+#	locale: there is a count= or ordinal=, so the value is subject to the locale; may be zero or one.
+#	multiple: there may be zero or more placeholders (normally only in count or ordinal minimalPairs)
 
 %A = [^"]*+
 %L = (long|short|narrow)
@@ -209,7 +208,9 @@
 ^//ldml/numbers/miscPatterns\[@numberSystem="%A"]/pattern\[@type=\"%A\"] ; {0}=NUMBER 3
 
 ^//ldml/numbers/minimalPairs/ordinalMinimalPairs[@ordinal="%A"] ; multiple ; {0}=COUNT 3
-^//ldml/numbers/minimalPairs/pluralMinimalPairs[@count="%A"] 	; multiple ; {0}=COUNT 3
+^//ldml/numbers/minimalPairs/pluralMinimalPairs[@count="%A"]    ; multiple ; {0}=COUNT 3
+^//ldml/numbers/minimalPairs/caseMinimalPairs[@case="%A"]    ; {0}=CASE ‹noun phrase in this case›
+^//ldml/numbers/minimalPairs/genderMinimalPairs[@gender="%A"]    ; {0}=GENDER ‹noun phrase in this gender›
 
 # Warning: the longer match must come first
 ^//ldml/units/unitLength\[@type="%L"]/compoundUnit\[@type="%A"]/compoundUnitPattern1 ; {0}=POWER UNIT meters
diff --git a/tools/java/org/unicode/cldr/util/data/SpecialLocales.txt b/tools/java/org/unicode/cldr/util/data/SpecialLocales.txt
index f851594..d308c00 100644
--- a/tools/java/org/unicode/cldr/util/data/SpecialLocales.txt
+++ b/tools/java/org/unicode/cldr/util/data/SpecialLocales.txt
@@ -12,12 +12,14 @@
 #
 # comment is freeform text and may be presented to end users.  Use the form  " @de_CH " to refer to the locale de_CH 
 #    and "@@" to refer to the actual locale (in the case of * wildcards)
+#
+# Note: Also, see CLDRFileTransformer.java which has the algorithmic locales defined
+# such as sr_Latn, etc. Those are no longer listed here. 
+#
 
 root       ;  readonly  ; The Root locale is maintained by the CLDR-TC and may not be modified in the SurveyTool. Please file a ticket to make changes.
 en         ;  readonly  ; The English locale is maintained by the CLDR-TC and may not be modified in the SurveyTool. Please file a ticket to make changes.
 en_ZZ      ;  readonly  ; The en_ZZ locale is used for display purposes in the SurveyTool and may not be modified in the SurveyTool. Please file a ticket to make changes.
-sr_Latn*   ;  readonly  ; @sr_Latn is generated from @sr_Cyrl via transliteration, and so @@ may not be edited directly. Edit @sr_Cyrl to make changes.
-yo_BJ*     ;  readonly  ; @yo_BJ is generated from @yo via transliteration, and so @@ may not be edited directly. Edit @yo to make changes.
 
 und        ;  scratch   ; This locale is for testing purposes, it does not have any valid content.
 und_ZZ     ;  scratch   ; This locale is for testing purposes, it does not have any valid content.
diff --git a/tools/java/org/unicode/cldr/util/data/africa b/tools/java/org/unicode/cldr/util/data/africa
index 4028b0d..9f95f1b 100644
--- a/tools/java/org/unicode/cldr/util/data/africa
+++ b/tools/java/org/unicode/cldr/util/data/africa
@@ -64,7 +64,7 @@
 # Corrections are welcome.
 
 # Algeria
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Algeria	1916	only	-	Jun	14	23:00s	1:00	S
 Rule	Algeria	1916	1919	-	Oct	Sun>=1	23:00s	0	-
 Rule	Algeria	1917	only	-	Mar	24	23:00s	1:00	S
@@ -87,10 +87,9 @@
 Rule	Algeria	1978	only	-	Sep	22	 3:00	0	-
 Rule	Algeria	1980	only	-	Apr	25	 0:00	1:00	S
 Rule	Algeria	1980	only	-	Oct	31	 2:00	0	-
-# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
-# more precise 0:09:21.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Africa/Algiers	0:12:12 -	LMT	1891 Mar 15  0:01
+# See Europe/Paris for PMT-related transitions.
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
+Zone	Africa/Algiers	0:12:12 -	LMT	1891 Mar 16
 			0:09:21	-	PMT	1911 Mar 11 # Paris Mean Time
 			0:00	Algeria	WE%sT	1940 Feb 25  2:00
 			1:00	Algeria	CE%sT	1946 Oct  7
@@ -124,7 +123,7 @@
 # For now, ignore that and follow the 1911-05-26 Portuguese decree
 # (see Europe/Lisbon).
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Atlantic/Cape_Verde -1:34:04 -	LMT	1912 Jan 01  2:00u # Praia
 			-2:00	-	-02	1942 Sep
 			-2:00	1:00	-01	1945 Oct 15
@@ -135,7 +134,7 @@
 # See Africa/Lagos.
 
 # Chad
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Ndjamena	1:00:12 -	LMT	1912        # N'Djamena
 			1:00	-	WAT	1979 Oct 14
 			1:00	1:00	WAST	1980 Mar  8
@@ -151,7 +150,7 @@
 # See Africa/Lagos.
 
 # Côte d'Ivoire / Ivory Coast
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Abidjan	-0:16:08 -	LMT	1912
 			 0:00	-	GMT
 Link Africa/Abidjan Africa/Bamako	# Mali
@@ -176,7 +175,7 @@
 # Egypt was mean noon at the Great Pyramid, 2:04:30.5, but apparently this
 # did not apply to Cairo, Alexandria, or Port Said.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Egypt	1940	only	-	Jul	15	0:00	1:00	S
 Rule	Egypt	1940	only	-	Oct	 1	0:00	0	-
 Rule	Egypt	1941	only	-	Apr	15	0:00	1:00	S
@@ -356,7 +355,7 @@
 Rule	Egypt	2014	only	-	Jul	31	24:00	1:00	S
 Rule	Egypt	2014	only	-	Sep	lastThu	24:00	0	-
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Cairo	2:05:09 -	LMT	1900 Oct
 			2:00	Egypt	EE%sT
 
@@ -411,10 +410,10 @@
 # now Ghana observed different DST regimes in different years.  For
 # lack of better info, use Shanks except treat the minus sign as a
 # typo, and assume DST started in 1920 not 1936.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Ghana	1920	1942	-	Sep	 1	0:00	0:20	-
 Rule	Ghana	1920	1942	-	Dec	31	0:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Accra	-0:00:52 -	LMT	1918
 			 0:00	Ghana	GMT/+0020
 
@@ -428,13 +427,13 @@
 # evidently confusing the date of the Portuguese decree
 # (see Europe/Lisbon) with the date that it took effect.
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Bissau	-1:02:20 -	LMT	1912 Jan  1  1:00u
 			-1:00	-	-01	1975
 			 0:00	-	GMT
 
 # Kenya
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Nairobi	2:27:16	-	LMT	1928 Jul
 			3:00	-	EAT	1930
 			2:30	-	+0230	1940
@@ -469,7 +468,7 @@
 # Use the abbreviation "MMT" before 1972, as the more-accurate numeric
 # abbreviation "-004430" would be one byte over the POSIX limit.
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Monrovia	-0:43:08 -	LMT	1882
 			-0:43:08 -	MMT	1919 Mar # Monrovia Mean Time
 			-0:44:30 -	MMT	1972 Jan 7 # approximately MMT
@@ -501,7 +500,7 @@
 # From Paul Eggert (2013-10-25):
 # For now, assume they're reverting to the pre-2012 rules of permanent UT +02.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Libya	1951	only	-	Oct	14	2:00	1:00	S
 Rule	Libya	1952	only	-	Jan	 1	0:00	0	-
 Rule	Libya	1953	only	-	Oct	 9	2:00	1:00	S
@@ -519,7 +518,7 @@
 Rule	Libya	1997	only	-	Oct	 4	0:00	0	-
 Rule	Libya	2013	only	-	Mar	lastFri	1:00	1:00	S
 Rule	Libya	2013	only	-	Oct	lastFri	2:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Tripoli	0:52:44 -	LMT	1920
 			1:00	Libya	CE%sT	1959
 			2:00	-	EET	1982
@@ -624,12 +623,12 @@
 # "The trial ended on March 29, 2009, when the clocks moved back by one hour
 # at 2am (or 02:00) local time..."
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule Mauritius	1982	only	-	Oct	10	0:00	1:00	-
 Rule Mauritius	1983	only	-	Mar	21	0:00	0	-
 Rule Mauritius	2008	only	-	Oct	lastSun	2:00	1:00	-
 Rule Mauritius	2009	only	-	Mar	lastSun	2:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Indian/Mauritius	3:50:00 -	LMT	1907 # Port Louis
 			4:00 Mauritius	+04/+05
 # Agalega Is, Rodriguez
@@ -860,20 +859,45 @@
 # the week end after....  The government does not announce yet the decision
 # about this temporary change.  But it s 99% sure that it will be the case,
 # as in previous years.  An unofficial survey was done these days, showing
-# that 64% of asked peopke are ok for moving from +1 to +0 during Ramadan.
+# that 64% of asked people are ok for moving from +1 to +0 during Ramadan.
 # https://leconomiste.com/article/1035870-enquete-l-economiste-sunergia-64-des-marocains-plebiscitent-le-gmt-pendant-ramadan
+
+# From Naoufal Semlali (2019-04-16):
+# Morocco will be on GMT starting from Sunday, May 5th 2019 at 3am.
+# The switch to GMT+1 will occur on Sunday, June 9th 2019 at 2am....
+# http://fr.le360.ma/societe/voici-la-date-du-retour-a-lheure-legale-au-maroc-188222
+
+# From Semlali Naoufal (2020-04-14):
+# Following the announcement by the Moroccan government, the switch to
+# GMT time will take place on Sunday, April 19, 2020 from 3 a.m. and
+# the return to GMT+1 time will take place on Sunday, May 31, 2020 at 2 a.m....
+# https://maroc-diplomatique.net/maroc-le-retour-a-lheure-gmt-est-prevu-dimanche-prochain/
+# http://aujourdhui.ma/actualite/gmt1-retour-a-lheure-normale-dimanche-prochain-1
 #
-# From Paul Eggert (2018-11-01):
-# For now, guess that Morocco will fall back at 03:00 the last Sunday
-# before Ramadan, and spring forward at 02:00 the first Sunday after
-# Ramadan, as this has been the practice since 2012.  To implement this,
-# transition dates for 2019 through 2037 were determined by running the
-# following program under GNU Emacs 26.1.
+# From Milamber (2020-05-31)
+# In Morocco (where I live), the end of Ramadan (Arabic month) is followed by
+# the Eid al-Fitr, and concretely it's 1 or 2 day offs for the people (with
+# traditional visiting of family, big lunches/dinners, etc.).  So for this
+# year the astronomical calculations don't include the following 2 days off in
+# the calc.  These 2 days fall in a Sunday/Monday, so it's not acceptable by
+# people to have a time shift during these 2 days off.  Perhaps you can modify
+# the (predicted) rules for next years: if the end of Ramadan is a (probable)
+# Friday or Saturday (and so the 2 days off are on a weekend), the next time
+# shift will be the next weekend.
+#
+# From Paul Eggert (2020-05-31):
+# For now, guess that in the future Morocco will fall back at 03:00
+# the last Sunday before Ramadan, and spring forward at 02:00 the
+# first Sunday after two days after Ramadan.  To implement this,
+# transition dates and times for 2019 through 2087 were determined by
+# running the following program under GNU Emacs 26.3.  (This algorithm
+# also produces the correct transition dates for 2016 through 2018,
+# though the times differ due to Morocco's time zone change in 2018.)
 # (let ((islamic-year 1440))
 #   (require 'cal-islam)
-#   (while (< islamic-year 1460)
+#   (while (< islamic-year 1511)
 #     (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
-#           (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
+#           (b (+ 2 (calendar-islamic-to-absolute (list 10 1 islamic-year))))
 #           (sunday 0))
 #       (while (/= sunday (mod (setq a (1- a)) 7)))
 #       (while (/= sunday (mod b 7))
@@ -888,7 +912,7 @@
 #         (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
 #     (setq islamic-year (+ 1 islamic-year))))
 
-# RULE	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Morocco	1939	only	-	Sep	12	 0:00	1:00	-
 Rule	Morocco	1939	only	-	Nov	19	 0:00	0	-
 Rule	Morocco	1940	only	-	Feb	25	 0:00	1:00	-
@@ -933,13 +957,13 @@
 Rule	Morocco	2019	only	-	May	 5	 3:00	0	-
 Rule	Morocco	2019	only	-	Jun	 9	 2:00	1:00	-
 Rule	Morocco	2020	only	-	Apr	19	 3:00	0	-
-Rule	Morocco	2020	only	-	May	24	 2:00	1:00	-
+Rule	Morocco	2020	only	-	May	31	 2:00	1:00	-
 Rule	Morocco	2021	only	-	Apr	11	 3:00	0	-
 Rule	Morocco	2021	only	-	May	16	 2:00	1:00	-
 Rule	Morocco	2022	only	-	Mar	27	 3:00	0	-
 Rule	Morocco	2022	only	-	May	 8	 2:00	1:00	-
 Rule	Morocco	2023	only	-	Mar	19	 3:00	0	-
-Rule	Morocco	2023	only	-	Apr	23	 2:00	1:00	-
+Rule	Morocco	2023	only	-	Apr	30	 2:00	1:00	-
 Rule	Morocco	2024	only	-	Mar	10	 3:00	0	-
 Rule	Morocco	2024	only	-	Apr	14	 2:00	1:00	-
 Rule	Morocco	2025	only	-	Feb	23	 3:00	0	-
@@ -949,13 +973,13 @@
 Rule	Morocco	2027	only	-	Feb	 7	 3:00	0	-
 Rule	Morocco	2027	only	-	Mar	14	 2:00	1:00	-
 Rule	Morocco	2028	only	-	Jan	23	 3:00	0	-
-Rule	Morocco	2028	only	-	Feb	27	 2:00	1:00	-
+Rule	Morocco	2028	only	-	Mar	 5	 2:00	1:00	-
 Rule	Morocco	2029	only	-	Jan	14	 3:00	0	-
 Rule	Morocco	2029	only	-	Feb	18	 2:00	1:00	-
 Rule	Morocco	2029	only	-	Dec	30	 3:00	0	-
 Rule	Morocco	2030	only	-	Feb	10	 2:00	1:00	-
 Rule	Morocco	2030	only	-	Dec	22	 3:00	0	-
-Rule	Morocco	2031	only	-	Jan	26	 2:00	1:00	-
+Rule	Morocco	2031	only	-	Feb	 2	 2:00	1:00	-
 Rule	Morocco	2031	only	-	Dec	14	 3:00	0	-
 Rule	Morocco	2032	only	-	Jan	18	 2:00	1:00	-
 Rule	Morocco	2032	only	-	Nov	28	 3:00	0	-
@@ -965,13 +989,119 @@
 Rule	Morocco	2034	only	-	Nov	 5	 3:00	0	-
 Rule	Morocco	2034	only	-	Dec	17	 2:00	1:00	-
 Rule	Morocco	2035	only	-	Oct	28	 3:00	0	-
-Rule	Morocco	2035	only	-	Dec	 2	 2:00	1:00	-
+Rule	Morocco	2035	only	-	Dec	 9	 2:00	1:00	-
 Rule	Morocco	2036	only	-	Oct	19	 3:00	0	-
 Rule	Morocco	2036	only	-	Nov	23	 2:00	1:00	-
 Rule	Morocco	2037	only	-	Oct	 4	 3:00	0	-
 Rule	Morocco	2037	only	-	Nov	15	 2:00	1:00	-
+Rule	Morocco	2038	only	-	Sep	26	 3:00	0	-
+Rule	Morocco	2038	only	-	Nov	 7	 2:00	1:00	-
+Rule	Morocco	2039	only	-	Sep	18	 3:00	0	-
+Rule	Morocco	2039	only	-	Oct	23	 2:00	1:00	-
+Rule	Morocco	2040	only	-	Sep	 2	 3:00	0	-
+Rule	Morocco	2040	only	-	Oct	14	 2:00	1:00	-
+Rule	Morocco	2041	only	-	Aug	25	 3:00	0	-
+Rule	Morocco	2041	only	-	Sep	29	 2:00	1:00	-
+Rule	Morocco	2042	only	-	Aug	10	 3:00	0	-
+Rule	Morocco	2042	only	-	Sep	21	 2:00	1:00	-
+Rule	Morocco	2043	only	-	Aug	 2	 3:00	0	-
+Rule	Morocco	2043	only	-	Sep	13	 2:00	1:00	-
+Rule	Morocco	2044	only	-	Jul	24	 3:00	0	-
+Rule	Morocco	2044	only	-	Aug	28	 2:00	1:00	-
+Rule	Morocco	2045	only	-	Jul	 9	 3:00	0	-
+Rule	Morocco	2045	only	-	Aug	20	 2:00	1:00	-
+Rule	Morocco	2046	only	-	Jul	 1	 3:00	0	-
+Rule	Morocco	2046	only	-	Aug	12	 2:00	1:00	-
+Rule	Morocco	2047	only	-	Jun	23	 3:00	0	-
+Rule	Morocco	2047	only	-	Jul	28	 2:00	1:00	-
+Rule	Morocco	2048	only	-	Jun	 7	 3:00	0	-
+Rule	Morocco	2048	only	-	Jul	19	 2:00	1:00	-
+Rule	Morocco	2049	only	-	May	30	 3:00	0	-
+Rule	Morocco	2049	only	-	Jul	 4	 2:00	1:00	-
+Rule	Morocco	2050	only	-	May	15	 3:00	0	-
+Rule	Morocco	2050	only	-	Jun	26	 2:00	1:00	-
+Rule	Morocco	2051	only	-	May	 7	 3:00	0	-
+Rule	Morocco	2051	only	-	Jun	18	 2:00	1:00	-
+Rule	Morocco	2052	only	-	Apr	28	 3:00	0	-
+Rule	Morocco	2052	only	-	Jun	 2	 2:00	1:00	-
+Rule	Morocco	2053	only	-	Apr	13	 3:00	0	-
+Rule	Morocco	2053	only	-	May	25	 2:00	1:00	-
+Rule	Morocco	2054	only	-	Apr	 5	 3:00	0	-
+Rule	Morocco	2054	only	-	May	17	 2:00	1:00	-
+Rule	Morocco	2055	only	-	Mar	28	 3:00	0	-
+Rule	Morocco	2055	only	-	May	 2	 2:00	1:00	-
+Rule	Morocco	2056	only	-	Mar	12	 3:00	0	-
+Rule	Morocco	2056	only	-	Apr	23	 2:00	1:00	-
+Rule	Morocco	2057	only	-	Mar	 4	 3:00	0	-
+Rule	Morocco	2057	only	-	Apr	 8	 2:00	1:00	-
+Rule	Morocco	2058	only	-	Feb	17	 3:00	0	-
+Rule	Morocco	2058	only	-	Mar	31	 2:00	1:00	-
+Rule	Morocco	2059	only	-	Feb	 9	 3:00	0	-
+Rule	Morocco	2059	only	-	Mar	23	 2:00	1:00	-
+Rule	Morocco	2060	only	-	Feb	 1	 3:00	0	-
+Rule	Morocco	2060	only	-	Mar	 7	 2:00	1:00	-
+Rule	Morocco	2061	only	-	Jan	16	 3:00	0	-
+Rule	Morocco	2061	only	-	Feb	27	 2:00	1:00	-
+Rule	Morocco	2062	only	-	Jan	 8	 3:00	0	-
+Rule	Morocco	2062	only	-	Feb	19	 2:00	1:00	-
+Rule	Morocco	2062	only	-	Dec	31	 3:00	0	-
+Rule	Morocco	2063	only	-	Feb	 4	 2:00	1:00	-
+Rule	Morocco	2063	only	-	Dec	16	 3:00	0	-
+Rule	Morocco	2064	only	-	Jan	27	 2:00	1:00	-
+Rule	Morocco	2064	only	-	Dec	 7	 3:00	0	-
+Rule	Morocco	2065	only	-	Jan	11	 2:00	1:00	-
+Rule	Morocco	2065	only	-	Nov	22	 3:00	0	-
+Rule	Morocco	2066	only	-	Jan	 3	 2:00	1:00	-
+Rule	Morocco	2066	only	-	Nov	14	 3:00	0	-
+Rule	Morocco	2066	only	-	Dec	26	 2:00	1:00	-
+Rule	Morocco	2067	only	-	Nov	 6	 3:00	0	-
+Rule	Morocco	2067	only	-	Dec	11	 2:00	1:00	-
+Rule	Morocco	2068	only	-	Oct	21	 3:00	0	-
+Rule	Morocco	2068	only	-	Dec	 2	 2:00	1:00	-
+Rule	Morocco	2069	only	-	Oct	13	 3:00	0	-
+Rule	Morocco	2069	only	-	Nov	24	 2:00	1:00	-
+Rule	Morocco	2070	only	-	Oct	 5	 3:00	0	-
+Rule	Morocco	2070	only	-	Nov	 9	 2:00	1:00	-
+Rule	Morocco	2071	only	-	Sep	20	 3:00	0	-
+Rule	Morocco	2071	only	-	Nov	 1	 2:00	1:00	-
+Rule	Morocco	2072	only	-	Sep	11	 3:00	0	-
+Rule	Morocco	2072	only	-	Oct	16	 2:00	1:00	-
+Rule	Morocco	2073	only	-	Aug	27	 3:00	0	-
+Rule	Morocco	2073	only	-	Oct	 8	 2:00	1:00	-
+Rule	Morocco	2074	only	-	Aug	19	 3:00	0	-
+Rule	Morocco	2074	only	-	Sep	30	 2:00	1:00	-
+Rule	Morocco	2075	only	-	Aug	11	 3:00	0	-
+Rule	Morocco	2075	only	-	Sep	15	 2:00	1:00	-
+Rule	Morocco	2076	only	-	Jul	26	 3:00	0	-
+Rule	Morocco	2076	only	-	Sep	 6	 2:00	1:00	-
+Rule	Morocco	2077	only	-	Jul	18	 3:00	0	-
+Rule	Morocco	2077	only	-	Aug	29	 2:00	1:00	-
+Rule	Morocco	2078	only	-	Jul	10	 3:00	0	-
+Rule	Morocco	2078	only	-	Aug	14	 2:00	1:00	-
+Rule	Morocco	2079	only	-	Jun	25	 3:00	0	-
+Rule	Morocco	2079	only	-	Aug	 6	 2:00	1:00	-
+Rule	Morocco	2080	only	-	Jun	16	 3:00	0	-
+Rule	Morocco	2080	only	-	Jul	21	 2:00	1:00	-
+Rule	Morocco	2081	only	-	Jun	 1	 3:00	0	-
+Rule	Morocco	2081	only	-	Jul	13	 2:00	1:00	-
+Rule	Morocco	2082	only	-	May	24	 3:00	0	-
+Rule	Morocco	2082	only	-	Jul	 5	 2:00	1:00	-
+Rule	Morocco	2083	only	-	May	16	 3:00	0	-
+Rule	Morocco	2083	only	-	Jun	20	 2:00	1:00	-
+Rule	Morocco	2084	only	-	Apr	30	 3:00	0	-
+Rule	Morocco	2084	only	-	Jun	11	 2:00	1:00	-
+Rule	Morocco	2085	only	-	Apr	22	 3:00	0	-
+Rule	Morocco	2085	only	-	Jun	 3	 2:00	1:00	-
+Rule	Morocco	2086	only	-	Apr	14	 3:00	0	-
+Rule	Morocco	2086	only	-	May	19	 2:00	1:00	-
+Rule	Morocco	2087	only	-	Mar	30	 3:00	0	-
+Rule	Morocco	2087	only	-	May	11	 2:00	1:00	-
+# For dates after the somewhat-arbitrary cutoff of 2087, assume that
+# Morocco will no longer observe DST.  At some point this table will
+# need to be extended, though quite possibly Morocco will change the
+# rules first.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
 			 0:00	Morocco	+00/+01	1984 Mar 16
 			 1:00	-	+01	1986
@@ -1001,7 +1131,7 @@
 # https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
 # merely made it official?
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Maputo	2:10:20 -	LMT	1903 Mar
 			2:00	-	CAT
 Link Africa/Maputo Africa/Blantyre	# Malawi
@@ -1062,18 +1192,18 @@
 # Use plain "WAT" and "CAT" for the time zone abbreviations, to be compatible
 # with Namibia's neighbors.
 
-# RULE	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 # Vanguard section, for zic and other parsers that support negative DST.
 #Rule	Namibia	1994	only	-	Mar	21	0:00	-1:00	WAT
 #Rule	Namibia	1994	2017	-	Sep	Sun>=1	2:00	0	CAT
 #Rule	Namibia	1995	2017	-	Apr	Sun>=1	2:00	-1:00	WAT
-# Rearguard section, for parsers that do not support negative DST.
+# Rearguard section, for parsers lacking negative DST; see ziguard.awk.
 Rule	Namibia	1994	only	-	Mar	21	0:00	0	WAT
 Rule	Namibia	1994	2017	-	Sep	Sun>=1	2:00	1:00	CAT
 Rule	Namibia	1995	2017	-	Apr	Sun>=1	2:00	0	WAT
 # End of rearguard section.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Windhoek	1:08:24 -	LMT	1892 Feb 8
 			1:30	-	+0130	1903 Mar
 			2:00	-	SAST	1942 Sep 20  2:00
@@ -1081,7 +1211,7 @@
 			2:00	-	SAST	1990 Mar 21 # independence
 # Vanguard section, for zic and other parsers that support negative DST.
 #			2:00	Namibia	%s
-# Rearguard section, for parsers that do not support negative DST.
+# Rearguard section, for parsers lacking negative DST; see ziguard.awk.
 			2:00	-	CAT	1994 Mar 21  0:00
 # From Paul Eggert (2017-04-07):
 # The official date of the 2017 rule change was 2017-10-24.  See:
@@ -1094,7 +1224,7 @@
 # See Africa/Lagos.
 
 # Nigeria
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Lagos	0:13:36 -	LMT	1919 Sep
 			1:00	-	WAT
 Link Africa/Lagos Africa/Bangui	     # Central African Republic
@@ -1108,7 +1238,7 @@
 Link Africa/Lagos Africa/Porto-Novo  # Benin
 
 # Réunion
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Indian/Reunion	3:41:52 -	LMT	1911 Jun # Saint-Denis
 			4:00	-	+04
 #
@@ -1168,7 +1298,7 @@
 # See Africa/Abidjan.
 
 # Seychelles
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Indian/Mahe	3:41:48 -	LMT	1906 Jun # Victoria
 			4:00	-	+04
 # From Paul Eggert (2001-05-30):
@@ -1185,10 +1315,10 @@
 # See Africa/Nairobi.
 
 # South Africa
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	SA	1942	1943	-	Sep	Sun>=15	2:00	1:00	-
 Rule	SA	1943	1944	-	Mar	Sun>=15	2:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Africa/Johannesburg 1:52:00 -	LMT	1892 Feb 8
 			1:30	-	SAST	1903 Mar
 			2:00	SA	SAST
@@ -1218,19 +1348,19 @@
 # Abdalla of NTC, archived at:
 # https://mm.icann.org/pipermail/tz/2017-October/025333.html
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Sudan	1970	only	-	May	 1	0:00	1:00	S
 Rule	Sudan	1970	1985	-	Oct	15	0:00	0	-
 Rule	Sudan	1971	only	-	Apr	30	0:00	1:00	S
 Rule	Sudan	1972	1985	-	Apr	lastSun	0:00	1:00	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Khartoum	2:10:08 -	LMT	1931
 			2:00	Sudan	CA%sT	2000 Jan 15 12:00
 			3:00	-	EAT	2017 Nov  1
 			2:00	-	CAT
 
 # South Sudan
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Juba	2:06:28 -	LMT	1931
 			2:00	Sudan	CA%sT	2000 Jan 15 12:00
 			3:00	-	EAT
@@ -1306,7 +1436,7 @@
 # http://www.almadenahnews.com/newss/news.php?c=118&id=38036
 # http://www.worldtimezone.com/dst_news/dst_news_tunis02.html
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Tunisia	1939	only	-	Apr	15	23:00s	1:00	S
 Rule	Tunisia	1939	only	-	Nov	18	23:00s	0	-
 Rule	Tunisia	1940	only	-	Feb	25	23:00s	1:00	S
@@ -1333,10 +1463,8 @@
 Rule	Tunisia	2006	2008	-	Mar	lastSun	 2:00s	1:00	S
 Rule	Tunisia	2006	2008	-	Oct	lastSun	 2:00s	0	-
 
-# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
-# more precise 0:09:21.
-# Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# See Europe/Paris for PMT-related transitions.
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Tunis	0:40:44 -	LMT	1881 May 12
 			0:09:21	-	PMT	1911 Mar 11 # Paris Mean Time
 			1:00	Tunisia	CE%sT
diff --git a/tools/java/org/unicode/cldr/util/data/antarctica b/tools/java/org/unicode/cldr/util/data/antarctica
index 1dd9b00..ed750a8 100644
--- a/tools/java/org/unicode/cldr/util/data/antarctica
+++ b/tools/java/org/unicode/cldr/util/data/antarctica
@@ -13,7 +13,7 @@
 # for information.
 # Unless otherwise specified, we have no time zone information.
 
-# FORMAT is '-00' and GMTOFF is 0 for locations while uninhabited.
+# FORMAT is '-00' and STDOFF is 0 for locations while uninhabited.
 
 # Argentina - year-round bases
 # Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
@@ -70,15 +70,30 @@
 # Australian Antarctica Division informed us that Casey changed time
 # zone to UTC+11 in "the morning of 22nd October 2016".
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Antarctica/Casey	0	-	-00	1969
-			8:00	-	+08	2009 Oct 18  2:00
+# From Steffen Thorsen (2020-10-02, as corrected):
+# Based on information we have received from the Australian Antarctic
+# Division, Casey station and Macquarie Island station will move to Tasmanian
+# daylight savings time on Sunday 4 October. This will take effect from 0001
+# hrs on Sunday 4 October 2020 and will mean Casey and Macquarie Island will
+# be on the same time zone as Hobart.  Some past dates too for this 3 hour
+# time change back and forth between UTC+8 and UTC+11 for Casey:
+# - 2018 Oct  7 4:00 - 2019 Mar 17 3:00 - 2019 Oct  4 3:00 - 2020 Mar  8 3:00
+# and now - 2020 Oct  4 0:01
+
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
+Zone Antarctica/Casey	 0	-	-00	1969
+			 8:00	-	+08	2009 Oct 18  2:00
 			11:00	-	+11	2010 Mar  5  2:00
-			8:00	-	+08	2011 Oct 28  2:00
+			 8:00	-	+08	2011 Oct 28  2:00
 			11:00	-	+11	2012 Feb 21 17:00u
-			8:00	-	+08	2016 Oct 22
+			 8:00	-	+08	2016 Oct 22
 			11:00	-	+11	2018 Mar 11  4:00
-			8:00	-	+08
+			 8:00	-	+08	2018 Oct  7  4:00
+			11:00	-	+11	2019 Mar 17  3:00
+			 8:00	-	+08	2019 Oct  4  3:00
+			11:00	-	+11	2020 Mar  8  3:00
+			 8:00	-	+08	2020 Oct  4  0:01
+			11:00	-	+11
 Zone Antarctica/Davis	0	-	-00	1957 Jan 13
 			7:00	-	+07	1964 Nov
 			0	-	-00	1969 Feb
@@ -142,7 +157,7 @@
 # St Paul Island - near Amsterdam, uninhabited
 #	fishing stations operated variously 1819/1931
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Indian/Kerguelen	0	-	-00	1950 # Port-aux-Français
 			5:00	-	+05
 #
@@ -153,7 +168,7 @@
 # Another base at Port-Martin, 50km east, began operation in 1947.
 # It was destroyed by fire on 1952-01-14.
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Antarctica/DumontDUrville 0 -	-00	1947
 			10:00	-	+10	1952 Jan 14
 			0	-	-00	1956 Nov
@@ -181,7 +196,7 @@
 # Syowa station, which is the first antarctic station of Japan,
 # was established on 1957-01-29.  Since Syowa station is still the main
 # station of Japan, it's appropriate for the principal location.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Antarctica/Syowa	0	-	-00	1957 Jan 29
 			3:00	-	+03
 # See:
@@ -224,14 +239,14 @@
 # suggested by Bengt-Inge Larsson comment them out for now, and approximate
 # with only UTC and CEST.  Uncomment them when 2014b is more prevalent.
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 #Rule	Troll	2005	max	-	Mar	 1	1:00u	1:00	+01
 Rule	Troll	2005	max	-	Mar	lastSun	1:00u	2:00	+02
 #Rule	Troll	2005	max	-	Oct	lastSun	1:00u	1:00	+01
 #Rule	Troll	2004	max	-	Nov	 7	1:00u	0:00	+00
 # Remove the following line when uncommenting the above '#Rule' lines.
 Rule	Troll	2004	max	-	Oct	lastSun	1:00u	0:00	+00
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Antarctica/Troll	0	-	-00	2005 Feb 12
 			0:00	Troll	%s
 
@@ -305,7 +320,7 @@
 # From Paul Eggert (2002-10-22)
 # <http://webexhibits.org/daylightsaving/g.html> says Rothera is -03 all year.
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Antarctica/Rothera	0	-	-00	1976 Dec  1
 			-3:00	-	-03
 
diff --git a/tools/java/org/unicode/cldr/util/data/asia b/tools/java/org/unicode/cldr/util/data/asia
index 90a6d0a..dd23b10 100644
--- a/tools/java/org/unicode/cldr/util/data/asia
+++ b/tools/java/org/unicode/cldr/util/data/asia
@@ -8,7 +8,7 @@
 # tz@iana.org for general use in the future).  For more, please see
 # the file CONTRIBUTING in the tz distribution.
 
-# From Paul Eggert (2018-06-19):
+# From Paul Eggert (2019-07-11):
 #
 # Unless otherwise specified, the source for data through 1990 is:
 # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
@@ -47,13 +47,13 @@
 #	7:00 WIB	west Indonesia (Waktu Indonesia Barat)
 #	8:00 WITA	central Indonesia (Waktu Indonesia Tengah)
 #	8:00 CST	China
-#	8:00 PST  PDT*	Philippine Standard Time
+#	8:00 HKT  HKST	Hong Kong (HKWT* for Winter Time in late 1941)
+#	8:00 PST  PDT*	Philippines
 #	8:30 KST  KDT	Korea when at +0830
 #	9:00 WIT	east Indonesia (Waktu Indonesia Timur)
 #	9:00 JST  JDT	Japan
 #	9:00 KST  KDT	Korea when at +09
-#	9:30 ACST	Australian Central Standard Time
-# *I invented the abbreviation PDT; see "Philippines" below.
+# *I invented the abbreviations HKWT and PDT; see below.
 # Otherwise, these tables typically use numeric abbreviations like +03
 # and +0330 for integer hour and minute UT offsets.  Although earlier
 # editions invented alphabetic time zone abbreviations for every
@@ -70,7 +70,7 @@
 ###############################################################################
 
 # These rules are stolen from the 'europe' file.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	EUAsia	1981	max	-	Mar	lastSun	 1:00u	1:00	S
 Rule	EUAsia	1979	1995	-	Sep	lastSun	 1:00u	0	-
 Rule	EUAsia	1996	max	-	Oct	lastSun	 1:00u	0	-
@@ -84,7 +84,7 @@
 Rule RussiaAsia	1996	2010	-	Oct	lastSun	 2:00s	0	-
 
 # Afghanistan
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Kabul	4:36:48 -	LMT	1890
 			4:00	-	+04	1945
 			4:30	-	+0430
@@ -114,10 +114,10 @@
 # or
 # (brief)
 # http://www.worldtimezone.com/dst_news/dst_news_armenia03.html
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule Armenia	2011	only	-	Mar	lastSun	 2:00s	1:00	-
 Rule Armenia	2011	only	-	Oct	lastSun	 2:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Yerevan	2:58:00 -	LMT	1924 May  2
 			3:00	-	+03	1957 Mar
 			4:00 RussiaAsia +04/+05	1991 Mar 31  2:00s
@@ -140,10 +140,10 @@
 # http://vestnikkavkaza.net/news/Azerbaijani-Cabinet-of-Ministers-cancels-daylight-saving-time.html
 # http://en.apa.az/xeber_azerbaijan_abolishes_daylight_savings_ti_240862.html
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Azer	1997	2015	-	Mar	lastSun	 4:00	1:00	-
 Rule	Azer	1997	2015	-	Oct	lastSun	 5:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Baku	3:19:24 -	LMT	1924 May  2
 			3:00	-	+03	1957 Mar
 			4:00 RussiaAsia +04/+05	1991 Mar 31  2:00s
@@ -227,11 +227,11 @@
 # http://www.thedailystar.net/newDesign/latest_news.php?nid=22817
 # http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Dhaka	2009	only	-	Jun	19	23:00	1:00	-
 Rule	Dhaka	2009	only	-	Dec	31	24:00	0	-
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Dhaka	6:01:40 -	LMT	1890
 			5:53:20	-	HMT	1941 Oct    # Howrah Mean Time?
 			6:30	-	+0630	1942 May 15
@@ -241,7 +241,7 @@
 			6:00	Dhaka	+06/+07
 
 # Bhutan
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Thimphu	5:58:36 -	LMT	1947 Aug 15 # or Thimbu
 			5:30	-	+0530	1987 Oct
 			6:00	-	+06
@@ -252,13 +252,13 @@
 # We have no information as to when standard time was introduced;
 # assume it occurred in 1907, the same year as Mauritius (which
 # then contained the Chagos Archipelago).
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Indian/Chagos	4:49:40	-	LMT	1907
 			5:00	-	+05	1996
 			6:00	-	+06
 
 # Brunei
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Brunei	7:39:40 -	LMT	1926 Mar # Bandar Seri Begawan
 			7:30	-	+0730	1933
 			8:00	-	+08
@@ -273,7 +273,7 @@
 # of Greenwich."  This refers to the period before Burma's transition to +0630,
 # a transition for which Shanks is the only source.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Yangon	6:24:47 -	LMT	1880        # or Rangoon
 			6:24:47	-	RMT	1920        # Rangoon local time
 			6:30	-	+0630	1942 May
@@ -286,6 +286,27 @@
 
 # China
 
+# From Phake Nick (2020-04-15):
+# According to this news report:
+# http://news.sina.com.cn/c/2004-09-01/19524201403.shtml
+# on April 11, 1919, newspaper in Shanghai said clocks in Shanghai will spring
+# forward for an hour starting from midnight of that Saturday. The report did
+# not mention what happened in Shanghai thereafter, but it mentioned that a
+# similar trial in Tianjin which ended at October 1st as citizens are told to
+# recede the clock on September 30 from 12:00pm to 11:00pm. The trial at
+# Tianjin got terminated in 1920.
+#
+# From Paul Eggert (2020-04-15):
+# The Returns of Trade and Trade Reports, page 711, says "Daylight saving was
+# given a trial during the year, and from the 12th April to the 1st October
+# the clocks were all set one hour ahead of sun time.  Though the scheme was
+# generally esteemed a success, it was announced early in 1920 that it would
+# not be repeated."
+#
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
+Rule	Shang	1919	only	-	Apr	12	24:00	1:00	D
+Rule	Shang	1919	only	-	Sep	30	24:00	0	S
+
 # From Paul Eggert (2018-10-02):
 # The following comes from Table 1 of:
 # Li Yu. Research on the daylight saving movement in 1940s Shanghai.
@@ -294,8 +315,91 @@
 # The table lists dates only; I am guessing 00:00 and 24:00 transition times.
 # Also, the table lists the planned end of DST in 1949, but the corresponding
 # zone line cuts this off on May 28, when the Communists took power.
+
+# From Phake Nick (2020-04-15):
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# For the history of time in Shanghai between 1940-1942, the situation is
+# actually slightly more complex than the table [below]....  At the time,
+# there were three different authorities in Shanghai, including Shanghai
+# International Settlement, a settlement established by western countries with
+# its own westernized form of government, Shanghai French Concession, similar
+# to the international settlement but is controlled by French, and then the
+# rest of the city of Shanghai, which have already been controlled by Japanese
+# force through a puppet local government (Wang Jingwei regime).  It was
+# additionally complicated by the circumstances that, according to the 1940s
+# Shanghai summer time essay cited in the database, some
+# departments/businesses/people in the Shanghai city itself during that time
+# period, refused to change their clock and instead only changed their opening
+# hours.
+#
+# For example, as quoted in the article, in 1940, other than the authority
+# itself, power, tram, bus companies, cinema, department stores, and other
+# public service organizations have all decided to follow the summer time and
+# spring forward the clock.  On the other hand, the custom office refused to
+# spring forward the clock because of worry on mechanical wear to the physical
+# clock, postal office refused to spring forward because of disruption to
+# business and log-keeping, although they did changed their office hour to
+# match rest of the city.  So is travel agents, and also weather
+# observatory.  It is said both time standards had their own supporters in the
+# city at the time, those who prefer new time standard would have moved their
+# clock while those who prefer the old time standard would keep their clock
+# unchange, and there were different clocks that use different time standard
+# in the city at the time for people who use different time standard to adjust
+# their clock to their preferred time.
+#
+# a. For the 1940 May 31 spring forward, the essay claim that it was
+# coordinared between the international settlement authority and the French
+# concession authority and have gathered support from Hong Kong and Xiamen,
+# that it would spring forward an hour from May 31 "midnight", and the essay
+# claim "Hong Kong government implemented the spring forward in the same time
+# on the same date as Shanghai".
+#
+# b. For the 1940 fall back, it was said that they initially intended to do
+# so on September 30 00:59 at night, however they postponed it to October 12
+# after discussion with relevant parties. However schools restored to the
+# original schedule ten days earlier.
+#
+# c. For the 1941 spring forward, it is said to start from March 15
+# "following the previous year's method", and in addition to that the essay
+# cited an announcement in 1941 from the Wang regime which said the Special
+# City of Shanghai under Wang regime control will follow the DST rule set by
+# the Settlements, irrespective of the original DST plan announced by the Wang
+# regime for other area under its control(April 1 to September 30). (no idea
+# to situation before that announcement)
+#
+# d. For the 1941 fall back, it was said that the fall back would occurs at
+# the end of September (A newspaper headline cited by the essay, published on
+# October 1, 1941, have the headlines which said "French Concession would
+# rewind to the old clock this morning), but it ultimately didn't happen due
+# to disagreement between the international settlement authority and the
+# French concession authority, and the fall back ultimately occurred on
+# November 1.
+#
+# e. In 1941 December, Japan have officially started war with the United
+# States and the United Kingdom, and in Shanghai they have marched into the
+# international settlement, taken over its control
+#
+# f. For the 1942 spring forward, the essay said that the spring forward
+# started on January 31. It said this time the custom office and postal
+# department will also change their clocks, unlike before.
+#
+# g. The essay itself didn't cover any specific changes thereafter until the
+# end of the war, it quoted a November 1942 command from the government of the
+# Wang regime, which claim the daylight saving time applies year round during
+# the war. However, the essay ambiguously said the period is "February 1 to
+# September 30", which I don't really understand what is the meaning of such
+# period in the context of year round implementation here.. More researches
+# might be needed to show exactly what happened during that period of time.
+
+# From Phake Nick (2020-04-15):
+# According to a Japanese tour bus pamphlet in Nanjing area believed to be
+# from around year 1941: http://www.tt-museum.jp/tairiku_0280_nan1941.html ,
+# the schedule listed was in the format of Japanese time.  Which indicate some
+# use of the Japanese time (instead of syncing by DST) might have occurred in
+# the Yangtze river delta area during that period of time although the scope
+# of such use will need to be investigated to determine.
+#
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Shang	1940	only	-	Jun	 1	 0:00	1:00	D
 Rule	Shang	1940	only	-	Oct	12	24:00	0	S
 Rule	Shang	1941	only	-	Mar	15	 0:00	1:00	D
@@ -358,7 +462,7 @@
 # to begin on 17 April.
 # http://data.people.com.cn/pic/101p/1988/04/1988041201.jpg
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	PRC	1986	only	-	May	 4	 2:00	1:00	D
 Rule	PRC	1986	1991	-	Sep	Sun>=11	 2:00	0	S
 Rule	PRC	1987	1991	-	Apr	Sun>=11	 2:00	1:00	D
@@ -561,7 +665,7 @@
 # that the sort of users who prefer Asia/Urumqi now typically ignored the
 # +08 mandate back then.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 # Beijing time, used throughout China; represented by Shanghai.
 Zone	Asia/Shanghai	8:05:43	-	LMT	1901
 			8:00	Shang	C%sT	1949 May 28
@@ -572,7 +676,7 @@
 			6:00	-	+06
 
 
-# Hong Kong (Xianggang)
+# Hong Kong
 
 # Milne gives 7:36:41.7; round this.
 
@@ -582,9 +686,7 @@
 # it is not [an] observatory, but the official meteorological agency of HK,
 # and also serves as the official timing agency), there are some missing
 # and incorrect rules. Although the exact switch over time is missing, I
-# think 3:30 is correct. The official DST record for Hong Kong can be
-# obtained from
-# http://www.hko.gov.hk/gts/time/Summertime.htm
+# think 3:30 is correct.
 
 # From Phake Nick (2018-10-27):
 # According to Singaporean newspaper
@@ -652,14 +754,53 @@
 #   https://i.imgur.com/05KkvtC.png
 # * 1941-09-30, Hong Kong Daily Press, Winter Time Warning.
 #   https://i.imgur.com/dge4kFJ.png
-# Also, the Liberation day of Hong Kong after WWII which British rule
-# over the territory resumed was August 30, 1945, which I think should
-# be the termination date for the use of JST in the territory....
 
-# From Paul Eggert (2018-11-17):
+# From Paul Eggert (2019-07-11):
+# "Hong Kong winter time" is considered to be daylight saving.
+# "Hong Kong had adopted daylight saving on June 15 as a wartime measure,
+# clocks moving forward one hour until October 1, when they would be put back
+# by just half an hour for 'Hong Kong Winter time', so that daylight saving
+# operated year round." -- Low Z. The longest day: when wartime Hong Kong
+# introduced daylight saving. South China Morning Post. 2019-06-28.
+# https://www.scmp.com/magazines/post-magazine/short-reads/article/3016281/longest-day-when-wartime-hong-kong-introduced
+
+# From P Chan (2018-12-31):
+# * According to the Hong Kong Daylight-Saving Regulations, 1941, the
+#   1941 spring-forward transition was at 03:00.
+#	http://sunzi.lib.hku.hk/hkgro/view/g1941/304271.pdf
+#	http://sunzi.lib.hku.hk/hkgro/view/g1941/305516.pdf
+# * According to some articles from South China Morning Post, +08 was
+#   resumed on 1945-11-18 at 02:00.
+#	https://i.imgur.com/M2IsZ3c.png
+#	https://i.imgur.com/iOPqrVo.png
+#	https://i.imgur.com/fffcGDs.png
+# * Some newspapers ... said the 1946 spring-forward transition was on
+#   04-21 at 00:00.  The Kung Sheung Evening News 1946-04-20 (Chinese)
+#	https://i.imgur.com/ZSzent0.png
+#	https://mmis.hkpl.gov.hk///c/portal/cover?c=QF757YsWv5%2FH7zGe%2FKF%2BFLYsuqGhRBfe p.4
+#   The Kung Sheung Daily News 1946-04-21 (Chinese)
+#	https://i.imgur.com/7ecmRlcm.png
+#	https://mmis.hkpl.gov.hk///c/portal/cover?c=QF757YsWv5%2BQBGt1%2BwUj5qG2GqtwR3Wh p.4
+# * According to the Summer Time Ordinance (1946), the fallback
+#   transitions between 1946 and 1952 were at 03:30 Standard Time (+08)
+#	http://oelawhk.lib.hku.hk/archive/files/bb74b06a74d5294620a15de560ab33c6.pdf
+# * Some other laws and regulations related to DST from 1953 to 1979
+#   Summer Time Ordinance 1953
+#	https://i.imgur.com/IOlJMav.jpg
+#   Summer Time (Amendment) Ordinance 1965
+#	https://i.imgur.com/8rofeLa.jpg
+#   Interpretation and General Clauses Ordinance (1966)
+#	https://i.imgur.com/joy3msj.jpg
+#   Emergency (Summer Time) Regulation 1973 <https://i.imgur.com/OpRWrKz.jpg>
+#   Interpretation and General Clauses (Amendment) Ordinance 1977
+#	https://i.imgur.com/RaNqnc4.jpg
+#   Resolution of the Legislative Council passed on 9 May 1979
+#	https://www.legco.gov.hk/yr78-79/english/lc_sitg/hansard/h790509.pdf#page=39
+
+# From Paul Eggert (2020-04-15):
 # Here are the dates given at
-# https://www.hko.gov.hk/gts/time/Summertime.htm
-# as of 2014-06-19:
+# https://www.hko.gov.hk/en/gts/time/Summertime.htm
+# as of 2020-02-10:
 # Year        Period
 # 1941        15 Jun to 30 Sep
 # 1942        Whole year
@@ -667,7 +808,7 @@
 # 1944        Whole year
 # 1945        Whole year
 # 1946        20 Apr to 1 Dec
-# 1947        13 Apr to 30 Dec
+# 1947        13 Apr to 30 Nov
 # 1948        2 May to 31 Oct
 # 1949        3 Apr to 30 Oct
 # 1950        2 Apr to 29 Oct
@@ -704,36 +845,28 @@
 # The page does not give times of day for transitions,
 # or dates for the 1942 and 1945 transitions.
 # The Japanese occupation of Hong Kong began 1941-12-25.
-# The Japanese surrender of Hong Kong was signed 1945-09-16; see:
-# Heaver S. The days after the Pacific war ended: unsettling times
-# in Hong Kong. Post Magazine. 2016-06-13.
-# https://www.scmp.com/magazines/post-magazine/article/1852990/days-after-pacific-war-ended-unsettling-times-hong-kong
-# For lack of anything better, use start of those days as the
-# transition times.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	HK	1946	only	-	Apr	20	3:30	1:00	S
-Rule	HK	1946	only	-	Dec	1	3:30	0	-
-Rule	HK	1947	only	-	Apr	13	3:30	1:00	S
-Rule	HK	1947	only	-	Dec	30	3:30	0	-
-Rule	HK	1948	only	-	May	2	3:30	1:00	S
-Rule	HK	1948	1951	-	Oct	lastSun	3:30	0	-
-Rule	HK	1952	1953	-	Nov	Sun>=1	3:30	0	-
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
+Rule	HK	1946	only	-	Apr	21	0:00	1:00	S
+Rule	HK	1946	only	-	Dec	1	3:30s	0	-
+Rule	HK	1947	only	-	Apr	13	3:30s	1:00	S
+Rule	HK	1947	only	-	Nov	30	3:30s	0	-
+Rule	HK	1948	only	-	May	2	3:30s	1:00	S
+Rule	HK	1948	1952	-	Oct	Sun>=28	3:30s	0	-
 Rule	HK	1949	1953	-	Apr	Sun>=1	3:30	1:00	S
+Rule	HK	1953	1964	-	Oct	Sun>=31	3:30	0	-
 Rule	HK	1954	1964	-	Mar	Sun>=18	3:30	1:00	S
-Rule	HK	1954	only	-	Oct	31	3:30	0	-
-Rule	HK	1955	1964	-	Nov	Sun>=1	3:30	0	-
 Rule	HK	1965	1976	-	Apr	Sun>=16	3:30	1:00	S
 Rule	HK	1965	1976	-	Oct	Sun>=16	3:30	0	-
 Rule	HK	1973	only	-	Dec	30	3:30	1:00	S
-Rule	HK	1979	only	-	May	Sun>=8	3:30	1:00	S
-Rule	HK	1979	only	-	Oct	Sun>=16	3:30	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+Rule	HK	1979	only	-	May	13	3:30	1:00	S
+Rule	HK	1979	only	-	Oct	21	3:30	0	-
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Hong_Kong	7:36:42 -	LMT	1904 Oct 30  0:36:42
-			8:00	-	HKT	1941 Jun 15  3:30
+			8:00	-	HKT	1941 Jun 15  3:00
 			8:00	1:00	HKST	1941 Oct  1  4:00
-			8:30	-	HKT	1941 Dec 25
-			9:00	-	JST	1945 Sep 16
+			8:00	0:30	HKWT	1941 Dec 25
+			9:00	-	JST	1945 Nov 18  2:00
 			8:00	HK	HK%sT
 
 ###############################################################################
@@ -840,7 +973,7 @@
 # until 1945-09-21 at 01:00, overriding Shanks & Pottenger.
 # Likewise, use Yu-Cheng Chuang's data for DST in Taiwan.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Taiwan	1946	only	-	May	15	0:00	1:00	D
 Rule	Taiwan	1946	only	-	Oct	1	0:00	0	S
 Rule	Taiwan	1947	only	-	Apr	15	0:00	1:00	D
@@ -857,7 +990,7 @@
 Rule	Taiwan	1979	only	-	Jul	1	0:00	1:00	D
 Rule	Taiwan	1979	only	-	Oct	1	0:00	0	S
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 # Taipei or Taibei or T'ai-pei
 Zone	Asia/Taipei	8:06:00 -	LMT	1896 Jan  1
 			8:00	-	CST	1937 Oct  1
@@ -966,7 +1099,7 @@
 # The 1904 decree says that Macau changed from the meridian of
 # Fortaleza do Monte, presumably the basis for the 7:34:10 for LMT.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Macau	1942	1943	-	Apr	30	23:00	1:00	-
 Rule	Macau	1942	only	-	Nov	17	23:00	0	-
 Rule	Macau	1943	only	-	Sep	30	23:00	0	S
@@ -995,7 +1128,7 @@
 Rule	Macau	1979	only	-	May	13	03:30	1:00	D
 Rule	Macau	1979	only	-	Oct	Sun>=16	03:30	0	S
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Macau	7:34:10 -	LMT	1904 Oct 30
 			8:00	-	CST	1941 Dec 21 23:00
 			9:00	Macau	+09/+10	1945 Sep 30 24:00
@@ -1024,7 +1157,7 @@
 # Cyprus to remain united in time.  Cyprus Mail 2017-10-17.
 # https://cyprus-mail.com/2017/10/17/cyprus-remain-united-time/
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Cyprus	1975	only	-	Apr	13	0:00	1:00	S
 Rule	Cyprus	1975	only	-	Oct	12	0:00	0	-
 Rule	Cyprus	1976	only	-	May	15	0:00	1:00	S
@@ -1034,7 +1167,7 @@
 Rule	Cyprus	1978	only	-	Oct	2	0:00	0	-
 Rule	Cyprus	1979	1997	-	Sep	lastSun	0:00	0	-
 Rule	Cyprus	1981	1998	-	Mar	lastSun	0:00	1:00	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Nicosia	2:13:28 -	LMT	1921 Nov 14
 			2:00	Cyprus	EE%sT	1998 Sep
 			2:00	EUAsia	EE%sT
@@ -1083,7 +1216,7 @@
 # Byalokoz 1919 says Georgia was 2:59:11.
 # Go with Byalokoz.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Tbilisi	2:59:11 -	LMT	1880
 			2:59:11	-	TBMT	1924 May  2 # Tbilisi Mean Time
 			3:00	-	+03	1957 Mar
@@ -1120,7 +1253,7 @@
 # which will be permanent, with no seasonal adjustment, will happen at
 # midnight on Saturday, September 16.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Dili	8:22:20 -	LMT	1912 Jan  1
 			8:00	-	+08	1942 Feb 21 23:00
 			9:00	-	+09	1976 May  3
@@ -1186,7 +1319,7 @@
 # time for 1870-1941.  Shanks is our only (and dubious) source for the
 # 1941-1945 data.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Kolkata	5:53:28 -	LMT	1854 Jun 28 # Kolkata
 			5:53:20	-	HMT	1870	    # Howrah Mean Time?
 			5:21:10	-	MMT	1906 Jan  1 # Madras local time
@@ -1238,7 +1371,7 @@
 # WITA - +08 - Waktu Indonesia Tengah (Indonesia central time)
 # WIT  - +09 - Waktu Indonesia Timur (Indonesia eastern time)
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 # Java, Sumatra
 Zone Asia/Jakarta	7:07:12 -	LMT	1867 Aug 10
 # Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
@@ -1314,9 +1447,9 @@
 # I used the following code in GNU Emacs 26.1 to generate the "Rule Iran"
 # lines from 2008 through 2087.  Emacs 26.1 uses Ed Reingold's
 # cal-persia implementation of Birashk's approximation, which in the
-# 2008-2087 range disagrees with the the astronomical Persian calendar
-# for Persian years 1404 (Gregorian 2025) and 1437 (Gregorian 2058),
-# so the following code special-case those years.  See Table 15.1, page 264, of:
+# 2008-2087 range disagrees with the astronomical Persian calendar
+# for Persian years 1404 (Gregorian 2025) and 1437 (Gregorian 2058), so
+# the following code special-cases those years.  See Table 15.1, page 264, of:
 # Edward M. Reingold and Nachum Dershowitz, Calendrical Calculations:
 # The Ultimate Edition, Cambridge University Press (2018).
 # https://www.cambridge.org/fr/academic/subjects/computer-science/computing-general-interest/calendrical-calculations-ultimate-edition-4th-edition
@@ -1401,7 +1534,7 @@
 # be changed back to its previous state on the 24 hours of the
 # thirtieth day of Shahrivar.
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Iran	1978	1980	-	Mar	20	24:00	1:00	-
 Rule	Iran	1978	only	-	Oct	20	24:00	0	-
 Rule	Iran	1979	only	-	Sep	18	24:00	0	-
@@ -1510,7 +1643,7 @@
 Rule	Iran	2088	max	-	Mar	20	24:00	1:00	-
 Rule	Iran	2088	max	-	Sep	20	24:00	0	-
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Tehran	3:25:44	-	LMT	1916
 			3:25:44	-	TMT	1946     # Tehran Mean Time
 			3:30	-	+0330	1977 Nov
@@ -1543,7 +1676,7 @@
 # We have published a short article in English about the change:
 # https://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Iraq	1982	only	-	May	1	0:00	1:00	-
 Rule	Iraq	1982	1984	-	Oct	1	0:00	0	-
 Rule	Iraq	1983	only	-	Mar	31	0:00	1:00	-
@@ -1555,7 +1688,7 @@
 #
 Rule	Iraq	1991	2007	-	Apr	 1	3:00s	1:00	-
 Rule	Iraq	1991	2007	-	Oct	 1	3:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Baghdad	2:57:40	-	LMT	1890
 			2:57:36	-	BMT	1918     # Baghdad Mean Time?
 			3:00	-	+03	1982 May
@@ -1566,6 +1699,10 @@
 
 # Israel
 
+# For more info about the motivation for DST in Israel, see:
+# Barak Y. Israel's Daylight Saving Time controversy. Israel Affairs.
+# 2020-08-11. https://doi.org/10.1080/13537121.2020.1806564
+
 # From Ephraim Silverberg (2001-01-11):
 #
 # I coined "IST/IDT" circa 1988.  Until then there were three
@@ -1587,7 +1724,7 @@
 # family is from India).
 
 # From Shanks & Pottenger:
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Zion	1940	only	-	Jun	 1	0:00	1:00	D
 Rule	Zion	1942	1944	-	Nov	 1	0:00	0	S
 Rule	Zion	1943	only	-	Apr	 1	2:00	1:00	D
@@ -1622,7 +1759,7 @@
 Rule	Zion	1975	only	-	Aug	31	0:00	0	S
 
 # From Alois Treindl (2019-03-06):
-# http://www.moin.gov.il/Documents/שעון קיץ/clock-50-years-7-2014.pdf
+# http://www.moin.gov.il/Documents/שעון%20קיץ/clock-50-years-7-2014.pdf
 # From Isaac Starkman (2019-03-06):
 # Summer time was in that period in 1980 and 1984, see
 # https://www.ynet.co.il/articles/0,7340,L-3951073,00.html
@@ -1679,7 +1816,7 @@
 # (except in 2002) is three nights before Yom Kippur [Day of Atonement]
 # (the eve of the 7th of Tishrei in the lunar Hebrew calendar).
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Zion	1989	only	-	Apr	30	0:00	1:00	D
 Rule	Zion	1989	only	-	Sep	 3	0:00	0	S
 Rule	Zion	1990	only	-	Mar	25	0:00	1:00	D
@@ -1695,7 +1832,7 @@
 # Ministry of Interior, Jerusalem, Israel.  The spokeswoman can be reached by
 # calling the office directly at 972-2-6701447 or 972-2-6701448.
 
-# Rule	NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Zion	1994	only	-	Apr	 1	0:00	1:00	D
 Rule	Zion	1994	only	-	Aug	28	0:00	0	S
 Rule	Zion	1995	only	-	Mar	31	0:00	1:00	D
@@ -1715,7 +1852,7 @@
 #
 #       where YYYY is the relevant year.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Zion	1996	only	-	Mar	15	0:00	1:00	D
 Rule	Zion	1996	only	-	Sep	16	0:00	0	S
 Rule	Zion	1997	only	-	Mar	21	0:00	1:00	D
@@ -1738,7 +1875,7 @@
 #
 #	ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2000-2004.ps.gz
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Zion	2000	only	-	Apr	14	2:00	1:00	D
 Rule	Zion	2000	only	-	Oct	 6	1:00	0	S
 Rule	Zion	2001	only	-	Apr	 9	1:00	1:00	D
@@ -1760,32 +1897,15 @@
 #
 #	ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2005+beyond.ps
 
-# From Paul Eggert (2012-10-26):
-# I used Ephraim Silverberg's dst-israel.el program
-# <ftp://ftp.cs.huji.ac.il/pub/tz/software/dst-israel.el> (2005-02-20)
-# along with Ed Reingold's cal-hebrew in GNU Emacs 21.4,
-# to generate the transitions from 2005 through 2012.
-# (I replaced "lastFri" with "Fri>=26" by hand.)
-# The spring transitions all correspond to the following Rule:
-#
-# Rule	Zion	2005	2012	-	Mar	Fri>=26	2:00	1:00	D
-#
-# but older zic implementations (e.g., Solaris 8) do not support
-# "Fri>=26" to mean April 1 in years like 2005, so for now we list the
-# springtime transitions explicitly.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Zion	2005	only	-	Apr	 1	2:00	1:00	D
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
+Rule	Zion	2005	2012	-	Apr	Fri<=1	2:00	1:00	D
 Rule	Zion	2005	only	-	Oct	 9	2:00	0	S
-Rule	Zion	2006	2010	-	Mar	Fri>=26	2:00	1:00	D
 Rule	Zion	2006	only	-	Oct	 1	2:00	0	S
 Rule	Zion	2007	only	-	Sep	16	2:00	0	S
 Rule	Zion	2008	only	-	Oct	 5	2:00	0	S
 Rule	Zion	2009	only	-	Sep	27	2:00	0	S
 Rule	Zion	2010	only	-	Sep	12	2:00	0	S
-Rule	Zion	2011	only	-	Apr	 1	2:00	1:00	D
 Rule	Zion	2011	only	-	Oct	 2	2:00	0	S
-Rule	Zion	2012	only	-	Mar	Fri>=26	2:00	1:00	D
 Rule	Zion	2012	only	-	Sep	23	2:00	0	S
 
 # From Ephraim Silverberg (2013-06-27):
@@ -1797,11 +1917,11 @@
 # As of 2013, DST starts at 02:00 on the Friday before the last Sunday
 # in March.  DST ends at 02:00 on the last Sunday of October.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Zion	2013	max	-	Mar	Fri>=23	2:00	1:00	D
 Rule	Zion	2013	max	-	Oct	lastSun	2:00	0	S
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Jerusalem	2:20:54 -	LMT	1880
 			2:20:40	-	JMT	1918 # Jerusalem Mean Time?
 			2:00	Zion	I%sT
@@ -1814,6 +1934,47 @@
 
 # '9:00' and 'JST' is from Guy Harris.
 
+# From Paul Eggert (2020-01-19):
+# Starting in the 7th century, Japan generally followed an ancient Chinese
+# timekeeping system that divided night and day into six hours each,
+# with hour length depending on season.  In 1873 the government
+# started requiring the use of a Western style 24-hour clock.  See:
+# Yulia Frumer, "Making Time: Astronomical Time Measurement in Tokugawa Japan"
+# <https://www.worldcat.org/oclc/1043907065>.  As the tzdb code and
+# data support only 24-hour clocks, its tables model timestamps before
+# 1873 using Western-style local mean time.
+
+# From Hideyuki Suzuki (1998-11-09):
+# 'Tokyo' usually stands for the former location of Tokyo Astronomical
+# Observatory: 139° 44' 40.90" E (9h 18m 58.727s), 35° 39' 16.0" N.
+# This data is from 'Rika Nenpyou (Chronological Scientific Tables) 1996'
+# edited by National Astronomical Observatory of Japan....
+# JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST).
+# The law is enacted on 1886-07-07.
+
+# From Hideyuki Suzuki (1998-11-16):
+# The ordinance No. 51 (1886) established "standard time" in Japan,
+# which stands for the time on 135° E.
+# In the ordinance No. 167 (1895), "standard time" was renamed to "central
+# standard time".  And the same ordinance also established "western standard
+# time", which stands for the time on 120° E....  But "western standard
+# time" was abolished in the ordinance No. 529 (1937).  In the ordinance No.
+# 167, there is no mention regarding for what place western standard time is
+# standard....
+#
+# I wrote "ordinance" above, but I don't know how to translate.
+# In Japanese it's "chokurei", which means ordinance from emperor.
+
+# From Yu-Cheng Chuang (2013-07-12):
+# ...the Meiji Emperor announced Ordinance No. 167 of Meiji Year 28 "The clause
+# about standard time" ... The adoption began from Jan 1, 1896.
+# https://ja.wikisource.org/wiki/標準時ニ關スル件_(公布時)
+#
+# ...the Showa Emperor announced Ordinance No. 529 of Showa Year 12 ... which
+# means the whole Japan territory, including later occupations, adopt Japan
+# Central Time (UT+9). The adoption began on Oct 1, 1937.
+# https://ja.wikisource.org/wiki/明治二十八年勅令第百六十七號標準時ニ關スル件中改正ノ件
+
 # From Paul Eggert (1995-03-06):
 # Today's _Asahi Evening News_ (page 4) reports that Japan had
 # daylight saving between 1948 and 1951, but "the system was discontinued
@@ -1856,44 +2017,13 @@
 # do in any POSIX or C platform.  The "25:00" assumes zic from 2007 or later,
 # which should be safe now.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Japan	1948	only	-	May	Sat>=1	24:00	1:00	D
 Rule	Japan	1948	1951	-	Sep	Sun>=9	 1:00	0	S
 Rule	Japan	1949	only	-	Apr	Sat>=1	24:00	1:00	D
 Rule	Japan	1950	1951	-	May	Sat>=1	24:00	1:00	D
 
-# From Hideyuki Suzuki (1998-11-09):
-# 'Tokyo' usually stands for the former location of Tokyo Astronomical
-# Observatory: 139° 44' 40.90" E (9h 18m 58.727s), 35° 39' 16.0" N.
-# This data is from 'Rika Nenpyou (Chronological Scientific Tables) 1996'
-# edited by National Astronomical Observatory of Japan....
-# JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST).
-# The law is enacted on 1886-07-07.
-
-# From Hideyuki Suzuki (1998-11-16):
-# The ordinance No. 51 (1886) established "standard time" in Japan,
-# which stands for the time on 135° E.
-# In the ordinance No. 167 (1895), "standard time" was renamed to "central
-# standard time".  And the same ordinance also established "western standard
-# time", which stands for the time on 120° E....  But "western standard
-# time" was abolished in the ordinance No. 529 (1937).  In the ordinance No.
-# 167, there is no mention regarding for what place western standard time is
-# standard....
-#
-# I wrote "ordinance" above, but I don't know how to translate.
-# In Japanese it's "chokurei", which means ordinance from emperor.
-
-# From Yu-Cheng Chuang (2013-07-12):
-# ...the Meiji Emperor announced Ordinance No. 167 of Meiji Year 28 "The clause
-# about standard time" ... The adoption began from Jan 1, 1896.
-# https://ja.wikisource.org/wiki/標準時ニ關スル件_(公布時)
-#
-# ...the Showa Emperor announced Ordinance No. 529 of Showa Year 12 ... which
-# means the whole Japan territory, including later occupations, adopt Japan
-# Central Time (UT+9). The adoption began on Oct 1, 1937.
-# https://ja.wikisource.org/wiki/明治二十八年勅令第百六十七號標準時ニ關スル件中改正ノ件
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Tokyo	9:18:59	-	LMT	1887 Dec 31 15:00u
 			9:00	Japan	J%sT
 # Since 1938, all Japanese possessions have been like Asia/Tokyo,
@@ -1964,7 +2094,7 @@
 # From Paul Eggert (2013-12-11):
 # As Steffen suggested, consider the past 21-month experiment to be DST.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Jordan	1973	only	-	Jun	6	0:00	1:00	S
 Rule	Jordan	1973	1975	-	Oct	1	0:00	0	-
 Rule	Jordan	1974	1977	-	May	1	0:00	1:00	S
@@ -1996,7 +2126,7 @@
 Rule	Jordan	2013	only	-	Dec	20	0:00	0	-
 Rule	Jordan	2014	max	-	Mar	lastThu	24:00	1:00	S
 Rule	Jordan	2014	max	-	Oct	lastFri	0:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Amman	2:23:44 -	LMT	1931
 			2:00	Jordan	EE%sT
 
@@ -2037,8 +2167,8 @@
 # text.
 #
 # According to Izvestia newspaper No. 68 (23334) from 1991-03-20
-# (page 6; available at http://libinfo.org/newsr/newsr2574.djvu via
-# http://libinfo.org/index.php?id=58564) on 1991-03-31 at 2:00 during
+# -- page 6; available at http://libinfo.org/newsr/newsr2574.djvu via
+# http://libinfo.org/index.php?id=58564 -- on 1991-03-31 at 2:00 during
 # transition to "summer" time:
 # Republic of Georgia, Latvian SSR, Lithuanian SSR, SSR Moldova,
 # Estonian SSR; Komi ASSR; Kaliningrad oblast; Nenets autonomous okrug
@@ -2054,7 +2184,7 @@
 # Apparently there were last minute changes. Apparently Kazakh act No. 170
 # was one of such changes.
 #
-# https://ru.wikipedia.org/wiki/Декретное время
+# https://ru.wikipedia.org/wiki/Декретное_время
 # claims that Sovetskaya Rossiya newspaper on 1991-03-29 published that
 # Nenets autonomous okrug, Komi and Kazakhstan (excluding Uralsk oblast)
 # were to not move clocks and Uralsk oblast was to move clocks
@@ -2193,7 +2323,7 @@
 # UTC+6 to UTC+5 effective December 21st, 2018. The legal document is
 # located here: http://adilet.zan.kz/rus/docs/P1800000817 (russian language).
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 #
 # Almaty (formerly Alma-Ata), representing most locations in Kazakhstan
 # This includes KZ-AKM, KZ-ALA, KZ-ALM, KZ-AST, KZ-BAY, KZ-VOS, KZ-ZHA,
@@ -2290,12 +2420,12 @@
 # Our government cancels daylight saving time 6th of August 2005.
 # From 2005-08-12 our GMT-offset is +6, w/o any daylight saving.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Kyrgyz	1992	1996	-	Apr	Sun>=7	0:00s	1:00	-
 Rule	Kyrgyz	1992	1996	-	Sep	lastSun	0:00	0	-
 Rule	Kyrgyz	1997	2005	-	Mar	lastSun	2:30	1:00	-
 Rule	Kyrgyz	1997	2004	-	Oct	lastSun	2:30	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Bishkek	4:58:24 -	LMT	1924 May  2
 			5:00	-	+05	1930 Jun 21
 			6:00 RussiaAsia +06/+07	1991 Mar 31  2:00s
@@ -2346,7 +2476,7 @@
 # follow and continued to use GMT+9:00 for interoperability.
 
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	ROK	1948	only	-	Jun	 1	 0:00	1:00	D
 Rule	ROK	1948	only	-	Sep	12	24:00	0	S
 Rule	ROK	1949	only	-	Apr	 3	 0:00	1:00	D
@@ -2410,11 +2540,11 @@
 # The BBC reported that the transition was from 23:30 to 24:00 today.
 # https://www.bbc.com/news/world-asia-44010705
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Seoul	8:27:52	-	LMT	1908 Apr  1
 			8:30	-	KST	1912 Jan  1
 			9:00	-	JST	1945 Sep  8
-			9:00	-	KST	1954 Mar 21
+			9:00	ROK	K%sT	1954 Mar 21
 			8:30	ROK	K%sT	1961 Aug 10
 			9:00	ROK	K%sT
 Zone	Asia/Pyongyang	8:23:00 -	LMT	1908 Apr  1
@@ -2434,7 +2564,7 @@
 
 
 # Lebanon
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Lebanon	1920	only	-	Mar	28	0:00	1:00	S
 Rule	Lebanon	1920	only	-	Oct	25	0:00	0	-
 Rule	Lebanon	1921	only	-	Apr	3	0:00	1:00	S
@@ -2459,19 +2589,19 @@
 Rule	Lebanon	1993	max	-	Mar	lastSun	0:00	1:00	S
 Rule	Lebanon	1993	1998	-	Sep	lastSun	0:00	0	-
 Rule	Lebanon	1999	max	-	Oct	lastSun	0:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Beirut	2:22:00 -	LMT	1880
 			2:00	Lebanon	EE%sT
 
 # Malaysia
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	NBorneo	1935	1941	-	Sep	14	0:00	0:20	-
 Rule	NBorneo	1935	1941	-	Dec	14	0:00	0	-
 #
 # peninsular Malaysia
 # taken from Mok Ly Yng (2003-10-30)
 # http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Asia/Kuala_Lumpur	6:46:46 -	LMT	1901 Jan  1
 			6:55:25	-	SMT	1905 Jun  1 # Singapore M.T.
 			7:00	-	+07	1933 Jan  1
@@ -2485,7 +2615,7 @@
 # From Paul Eggert (2014-08-12):
 # The data entries here are mostly from Shanks & Pottenger, but the 1942, 1945
 # and 1982 transition dates are from Mok Ly Yng.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Asia/Kuching	7:21:20	-	LMT	1926 Mar
 			7:30	-	+0730	1933
 			8:00 NBorneo  +08/+0820	1942 Feb 16
@@ -2493,7 +2623,7 @@
 			8:00	-	+08
 
 # Maldives
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Indian/Maldives	4:54:00 -	LMT	1880 # Malé
 			4:54:00	-	MMT	1960 # Malé Mean Time
 			5:00	-	+05
@@ -2609,7 +2739,7 @@
 # September daylight saving time ends.  Source:
 # http://zasag.mn/news/view/8969
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Mongol	1983	1984	-	Apr	1	0:00	1:00	-
 Rule	Mongol	1983	only	-	Oct	1	0:00	0	-
 # Shanks & Pottenger and IATA SSIM say 1990s switches occurred at 00:00,
@@ -2636,7 +2766,7 @@
 Rule	Mongol	2015	2016	-	Mar	lastSat	2:00	1:00	-
 Rule	Mongol	2015	2016	-	Sep	lastSat	0:00	0	-
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 # Hovd, a.k.a. Chovd, Dund-Us, Dzhargalant, Khovd, Jirgalanta
 Zone	Asia/Hovd	6:06:36 -	LMT	1905 Aug
 			6:00	-	+06	1978
@@ -2654,7 +2784,7 @@
 			8:00	Mongol	+08/+09
 
 # Nepal
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Kathmandu	5:41:16 -	LMT	1920
 			5:30	-	+0530	1986
 			5:45	-	+0545
@@ -2797,14 +2927,14 @@
 # "People laud PM's announcement to end DST"
 # http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule Pakistan	2002	only	-	Apr	Sun>=2	0:00	1:00	S
 Rule Pakistan	2002	only	-	Oct	Sun>=2	0:00	0	-
 Rule Pakistan	2008	only	-	Jun	1	0:00	1:00	S
 Rule Pakistan	2008	2009	-	Nov	1	0:00	0	-
 Rule Pakistan	2009	only	-	Apr	15	0:00	1:00	S
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Karachi	4:28:12 -	LMT	1907
 			5:30	-	+0530	1942 Sep
 			5:30	1:00	+0630	1945 Oct 15
@@ -3072,34 +3202,34 @@
 # [T]he Palestinian cabinet decision (Mar 8th 2016) published on
 # http://www.palestinecabinet.gov.ps/WebSite/Upload/Decree/GOV_17/16032016134830.pdf
 # states that summer time will end on Oct 29th at 01:00.
-#
-# From Tim Parenti (2016-10-19):
-# Predict fall transitions on October's last Saturday at 01:00 from now on.
-# This is consistent with the 2016 transition as well as our spring
-# predictions.
-#
-# From Paul Eggert (2016-10-19):
-# It's also consistent with predictions in the following URLs today:
-# https://www.timeanddate.com/time/change/gaza-strip/gaza
-# https://www.timeanddate.com/time/change/west-bank/hebron
 
 # From Sharef Mustafa (2018-03-16):
-# Palestine summer time will start on Mar 24th 2018 by advancing the
-# clock by 60 minutes as per Palestinian cabinet decision published on
-# the official website, though the decree did not specify the exact
-# time of the time shift.
+# Palestine summer time will start on Mar 24th 2018 ...
 # http://www.palestinecabinet.gov.ps/Website/AR/NDecrees/ViewFile.ashx?ID=e7a42ab7-ee23-435a-b9c8-a4f7e81f3817
 
 # From Even Scharning (2019-03-23):
-# DST in Palestine will start on 30 March this year, not 23 March as the time
-# zone database predicted.
-# https://ramallah.news/post/123610
+# http://pnn.ps/news/401130
+# http://palweather.ps/ar/node/50136.html
 #
-# From Tim Parenti (2019-03-23):
-# Combining this with the rules observed since 2016, adjust our spring
-# transition guess to Mar Sat>=24.
+# From Sharif Mustafa (2019-03-26):
+# The Palestinian cabinet announced today that the switch to DST will
+# be on Fri Mar 29th 2019 by advancing the clock by 60 minutes.
+# http://palestinecabinet.gov.ps/Website/AR/NDecrees/ViewFile.ashx?ID=e54e9ea1-50ee-4137-84df-0d6c78da259b
+#
+# From Even Scharning (2019-04-10):
+# Our source in Palestine said it happened Friday 29 at 00:00 local time....
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# From Sharef Mustafa (2019-10-18):
+# Palestine summer time will end on midnight Oct 26th 2019 ...
+# http://www.palestinecabinet.gov.ps/website/ar/ViewDetails?ID=43948
+#
+# From Paul Eggert (2019-04-10):
+# For now, guess spring-ahead transitions are March's last Friday at 00:00.
+#
+# From Tim Parenti (2016-10-19):
+# Predict fall transitions on October's last Saturday at 01:00 from now on.
+
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule EgyptAsia	1957	only	-	May	10	0:00	1:00	S
 Rule EgyptAsia	1957	1958	-	Oct	 1	0:00	0	-
 Rule EgyptAsia	1958	only	-	May	 1	0:00	1:00	S
@@ -3128,10 +3258,11 @@
 Rule Palestine	2013	only	-	Sep	Fri>=21	0:00	0	-
 Rule Palestine	2014	2015	-	Oct	Fri>=21	0:00	0	-
 Rule Palestine	2015	only	-	Mar	lastFri	24:00	1:00	S
-Rule Palestine	2016	max	-	Mar	Sat>=24	1:00	1:00	S
+Rule Palestine	2016	2018	-	Mar	Sat>=24	1:00	1:00	S
 Rule Palestine	2016	max	-	Oct	lastSat	1:00	0	-
+Rule Palestine	2019	max	-	Mar	lastFri	0:00	1:00	S
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
 			2:00	Zion	EET/EEST 1948 May 15
 			2:00 EgyptAsia	EE%sT	1967 Jun  5
@@ -3198,14 +3329,14 @@
 # influence of the sources.  There is no current abbreviation for DST,
 # so use "PDT", the usual American style.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Phil	1936	only	-	Nov	1	0:00	1:00	D
 Rule	Phil	1937	only	-	Feb	1	0:00	0	S
 Rule	Phil	1954	only	-	Apr	12	0:00	1:00	D
 Rule	Phil	1954	only	-	Jul	1	0:00	0	S
 Rule	Phil	1978	only	-	Mar	22	0:00	1:00	D
 Rule	Phil	1978	only	-	Sep	21	0:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Manila	-15:56:00 -	LMT	1844 Dec 31
 			8:04:00 -	LMT	1899 May 11
 			8:00	Phil	P%sT	1942 May
@@ -3213,7 +3344,7 @@
 			8:00	Phil	P%sT
 
 # Qatar
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Qatar	3:26:08 -	LMT	1920     # Al Dawhah / Doha
 			4:00	-	+04	1972 Jun
 			3:00	-	+03
@@ -3261,7 +3392,7 @@
 # the country.  Presumably this is documenting airline time.  Ignore this,
 # as it's before our 1970 cutoff.
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Riyadh	3:06:52 -	LMT	1947 Mar 14
 			3:00	-	+03
 Link Asia/Riyadh Asia/Aden	# Yemen
@@ -3270,7 +3401,7 @@
 # Singapore
 # taken from Mok Ly Yng (2003-10-30)
 # http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Singapore	6:55:25 -	LMT	1901 Jan  1
 			6:55:25	-	SMT	1905 Jun  1 # Singapore M.T.
 			7:00	-	+07	1933 Jan  1
@@ -3334,7 +3465,7 @@
 # even worse.  For now, let's use a numeric abbreviation; we can
 # switch to "SLST" if it catches on.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Colombo	5:19:24 -	LMT	1880
 			5:19:32	-	MMT	1906        # Moratuwa Mean Time
 			5:30	-	+0530	1942 Jan  5
@@ -3346,7 +3477,7 @@
 			5:30	-	+0530
 
 # Syria
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Syria	1920	1923	-	Apr	Sun>=15	2:00	1:00	S
 Rule	Syria	1920	1923	-	Oct	Sun>=1	2:00	0	-
 Rule	Syria	1962	only	-	Apr	29	2:00	1:00	S
@@ -3504,13 +3635,13 @@
 Rule	Syria	2012	max	-	Mar	lastFri	0:00	1:00	S
 Rule	Syria	2009	max	-	Oct	lastFri	0:00	0	-
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Damascus	2:25:12 -	LMT	1920 # Dimashq
 			2:00	Syria	EE%sT
 
 # Tajikistan
 # From Shanks & Pottenger.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Dushanbe	4:35:12 -	LMT	1924 May  2
 			5:00	-	+05	1930 Jun 21
 			6:00 RussiaAsia +06/+07	1991 Mar 31  2:00s
@@ -3518,7 +3649,7 @@
 			5:00	-	+05
 
 # Thailand
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Bangkok	6:42:04	-	LMT	1880
 			6:42:04	-	BMT	1920 Apr # Bangkok Mean Time
 			7:00	-	+07
@@ -3527,7 +3658,7 @@
 
 # Turkmenistan
 # From Shanks & Pottenger.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Ashgabat	3:53:32 -	LMT	1924 May  2 # or Ashkhabad
 			4:00	-	+04	1930 Jun 21
 			5:00 RussiaAsia	+05/+06	1991 Mar 31  2:00
@@ -3535,14 +3666,14 @@
 			5:00	-	+05
 
 # United Arab Emirates
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Dubai	3:41:12 -	LMT	1920
 			4:00	-	+04
 Link Asia/Dubai Asia/Muscat	# Oman
 
 # Uzbekistan
 # Byalokoz 1919 says Uzbekistan was 4:27:53.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Samarkand	4:27:53 -	LMT	1924 May  2
 			4:00	-	+04	1930 Jun 21
 			5:00	-	+05	1981 Apr  1
@@ -3590,7 +3721,7 @@
 # and in South Vietnam in particular (after 1954):
 # To 07:00 on 1911-05-01.
 # To 08:00 on 1942-12-31 at 23:00.
-# To 09:00 in 1945-03-14 at 23:00.
+# To 09:00 on 1945-03-14 at 23:00.
 # To 07:00 on 1945-09-02 in Vietnam.
 # To 08:00 on 1947-04-01 in French-controlled Indochina.
 # To 07:00 on 1955-07-01 in South Vietnam.
@@ -3608,7 +3739,7 @@
 # Lê Thành Lân: "Lịch hai thế kỷ (1802-2010) và các lịch vĩnh cửu",
 # NXB Thuận Hoá, Huế, 1995.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Asia/Ho_Chi_Minh	7:06:40 -	LMT	1906 Jul  1
 			7:06:30	-	PLMT	1911 May  1 # Phù Liễn MT
 			7:00	-	+07	1942 Dec 31 23:00
diff --git a/tools/java/org/unicode/cldr/util/data/australasia b/tools/java/org/unicode/cldr/util/data/australasia
index dfe73d3..a8886ff 100644
--- a/tools/java/org/unicode/cldr/util/data/australasia
+++ b/tools/java/org/unicode/cldr/util/data/australasia
@@ -13,7 +13,7 @@
 
 # Please see the notes below for the controversy about "EST" versus "AEST" etc.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Aus	1917	only	-	Jan	 1	0:01	1:00	D
 Rule	Aus	1917	only	-	Mar	25	2:00	0	S
 Rule	Aus	1942	only	-	Jan	 1	2:00	1:00	D
@@ -25,14 +25,14 @@
 # says W Australia didn't use DST in 1943/1944.  Ignore Whitman's claim that
 # 1944/1945 was just like 1943/1944.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 # Northern Territory
 Zone Australia/Darwin	 8:43:20 -	LMT	1895 Feb
 			 9:00	-	ACST	1899 May
 			 9:30	Aus	AC%sT
 # Western Australia
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	AW	1974	only	-	Oct	lastSun	2:00s	1:00	D
 Rule	AW	1975	only	-	Mar	Sun>=1	2:00s	0	S
 Rule	AW	1983	only	-	Oct	lastSun	2:00s	1:00	D
@@ -70,7 +70,7 @@
 # applies to all of the Whitsundays.
 # http://www.australia.gov.au/about-australia/australian-story/austn-islands
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	AQ	1971	only	-	Oct	lastSun	2:00s	1:00	D
 Rule	AQ	1972	only	-	Feb	lastSun	2:00s	0	S
 Rule	AQ	1989	1991	-	Oct	lastSun	2:00s	1:00	D
@@ -86,7 +86,7 @@
 			10:00	Holiday	AE%sT
 
 # South Australia
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	AS	1971	1985	-	Oct	lastSun	2:00s	1:00	D
 Rule	AS	1986	only	-	Oct	19	2:00s	1:00	D
 Rule	AS	1987	2007	-	Oct	lastSun	2:00s	1:00	D
@@ -102,7 +102,7 @@
 Rule	AS	2007	only	-	Mar	lastSun	2:00s	0	S
 Rule	AS	2008	max	-	Apr	Sun>=1	2:00s	0	S
 Rule	AS	2008	max	-	Oct	Sun>=1	2:00s	1:00	D
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Australia/Adelaide	9:14:20 -	LMT	1895 Feb
 			9:00	-	ACST	1899 May
 			9:30	Aus	AC%sT	1971
@@ -114,7 +114,7 @@
 # http://www.bom.gov.au/climate/averages/tables/dst_times.shtml
 # says King Island didn't observe DST from WWII until late 1971.
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	AT	1967	only	-	Oct	Sun>=1	2:00s	1:00	D
 Rule	AT	1968	only	-	Mar	lastSun	2:00s	0	S
 Rule	AT	1968	1985	-	Oct	lastSun	2:00s	1:00	D
@@ -134,7 +134,7 @@
 Rule	AT	2006	only	-	Apr	Sun>=1	2:00s	0	S
 Rule	AT	2007	only	-	Mar	lastSun	2:00s	0	S
 Rule	AT	2008	max	-	Apr	Sun>=1	2:00s	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Australia/Hobart	9:49:16	-	LMT	1895 Sep
 			10:00	-	AEST	1916 Oct  1  2:00
 			10:00	1:00	AEDT	1917 Feb
@@ -147,7 +147,7 @@
 			10:00	AT	AE%sT
 
 # Victoria
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	AV	1971	1985	-	Oct	lastSun	2:00s	1:00	D
 Rule	AV	1972	only	-	Feb	lastSun	2:00s	0	S
 Rule	AV	1973	1985	-	Mar	Sun>=1	2:00s	0	S
@@ -162,13 +162,13 @@
 Rule	AV	2007	only	-	Mar	lastSun	2:00s	0	S
 Rule	AV	2008	max	-	Apr	Sun>=1	2:00s	0	S
 Rule	AV	2008	max	-	Oct	Sun>=1	2:00s	1:00	D
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Australia/Melbourne 9:39:52 -	LMT	1895 Feb
 			10:00	Aus	AE%sT	1971
 			10:00	AV	AE%sT
 
 # New South Wales
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	AN	1971	1985	-	Oct	lastSun	2:00s	1:00	D
 Rule	AN	1972	only	-	Feb	27	2:00s	0	S
 Rule	AN	1973	1981	-	Mar	Sun>=1	2:00s	0	S
@@ -185,7 +185,7 @@
 Rule	AN	2007	only	-	Mar	lastSun	2:00s	0	S
 Rule	AN	2008	max	-	Apr	Sun>=1	2:00s	0	S
 Rule	AN	2008	max	-	Oct	Sun>=1	2:00s	1:00	D
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Australia/Sydney	10:04:52 -	LMT	1895 Feb
 			10:00	Aus	AE%sT	1971
 			10:00	AN	AE%sT
@@ -197,7 +197,7 @@
 			9:30	AS	AC%sT
 
 # Lord Howe Island
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	LH	1981	1984	-	Oct	lastSun	2:00	1:00	-
 Rule	LH	1982	1985	-	Mar	Sun>=1	2:00	0	-
 Rule	LH	1985	only	-	Oct	lastSun	2:00	0:30	-
@@ -252,18 +252,19 @@
 			10:00	Aus	AE%sT	1919 Apr  1  0:00s
 			0	-	-00	1948 Mar 25
 			10:00	Aus	AE%sT	1967
-			10:00	AT	AE%sT	2010 Apr  4  3:00
-			11:00	-	+11
+			10:00	AT	AE%sT	2010
+			10:00	1:00	AEDT	2011
+			10:00	AT	AE%sT
 
 # Christmas
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Indian/Christmas	7:02:52 -	LMT	1895 Feb
 			7:00	-	+07
 
 # Cocos (Keeling) Is
 # These islands were ruled by the Ross family from about 1830 to 1978.
 # We don't know when standard time was introduced; for now, we guess 1900.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Indian/Cocos	6:27:40	-	LMT	1900
 			6:30	-	+0630
 
@@ -367,15 +368,20 @@
 # From Raymond Kumar (2018-07-13):
 # http://www.fijitimes.com/government-approves-2018-daylight-saving/
 # ... The daylight saving period will end at 3am on Sunday January 13, 2019.
-#
-# From Paul Eggert (2018-07-15):
-# For now, guess DST from 02:00 the first Sunday in November to 03:00
-# the first Sunday on or after January 13.  January transitions reportedly
-# depend on when school terms start.  Although the guess is ad hoc, it matches
-# transitions since late 2014 and seems more likely to match future
-# practice than guessing no DST.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# From Paul Eggert (2019-08-06):
+# Today Raymond Kumar reported the Government of Fiji Gazette Supplement No. 27
+# (2019-08-02) said that Fiji observes DST "commencing at 2.00 am on
+# Sunday, 10 November 2019 and ending at 3.00 am on Sunday, 12 January 2020."
+# For now, guess DST from 02:00 the second Sunday in November to 03:00
+# the first Sunday on or after January 12.  January transitions reportedly
+# depend on when school terms start.  Although the guess is ad hoc, it matches
+# transitions planned this year and seems more likely to match future practice
+# than guessing no DST.
+# From Michael Deckers (2019-08-06):
+# https://www.laws.gov.fj/LawsAsMade/downloadfile/848
+
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Fiji	1998	1999	-	Nov	Sun>=1	2:00	1:00	-
 Rule	Fiji	1999	2000	-	Feb	lastSun	3:00	0	-
 Rule	Fiji	2009	only	-	Nov	29	2:00	1:00	-
@@ -384,14 +390,15 @@
 Rule	Fiji	2011	only	-	Mar	Sun>=1	3:00	0	-
 Rule	Fiji	2012	2013	-	Jan	Sun>=18	3:00	0	-
 Rule	Fiji	2014	only	-	Jan	Sun>=18	2:00	0	-
-Rule	Fiji	2014	max	-	Nov	Sun>=1	2:00	1:00	-
-Rule	Fiji	2015	max	-	Jan	Sun>=13	3:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+Rule	Fiji	2014	2018	-	Nov	Sun>=1	2:00	1:00	-
+Rule	Fiji	2015	max	-	Jan	Sun>=12	3:00	0	-
+Rule	Fiji	2019	max	-	Nov	Sun>=8	2:00	1:00	-
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Fiji	11:55:44 -	LMT	1915 Oct 26 # Suva
 			12:00	Fiji	+12/+13
 
 # French Polynesia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Gambier	 -8:59:48 -	LMT	1912 Oct # Rikitea
 			 -9:00	-	-09
 Zone	Pacific/Marquesas -9:18:00 -	LMT	1912 Oct
@@ -403,7 +410,7 @@
 
 # Guam
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 # http://guamlegislature.com/Public_Laws_5th/PL05-025.pdf
 # http://documents.guam.gov/wp-content/uploads/E.O.-59-7-Guam-Daylight-Savings-Time-May-6-1959.pdf
 Rule	Guam	1959	only	-	Jun	27	2:00	1:00	D
@@ -434,7 +441,7 @@
 # http://documents.guam.gov/wp-content/uploads/E.O.-77-18-Guam-Standard-Time.pdf
 Rule	Guam	1977	only	-	Aug	28	2:00	0	S
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Guam	-14:21:00 -	LMT	1844 Dec 31
 			 9:39:00 -	LMT	1901        # Agana
 			10:00	-	GST	1941 Dec 10 # Guam
@@ -444,7 +451,7 @@
 Link Pacific/Guam Pacific/Saipan # N Mariana Is
 
 # Kiribati
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Tarawa	 11:32:04 -	LMT	1901 # Bairiki
 			 12:00	-	+12
 Zone Pacific/Enderbury	-11:24:20 -	LMT	1901
@@ -460,7 +467,7 @@
 # See Pacific/Guam.
 
 # Marshall Is
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Majuro	 11:24:48 -	LMT	1901
 			 11:00	-	+11	1914 Oct
 			  9:00	-	+09	1919 Feb  1
@@ -478,7 +485,7 @@
 			 12:00	-	+12
 
 # Micronesia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Chuuk	-13:52:52 -	LMT	1844 Dec 31
 			 10:07:08 -	LMT	1901
 			 10:00	-	+10	1914 Oct
@@ -506,7 +513,7 @@
 			 11:00	-	+11
 
 # Nauru
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Nauru	11:07:40 -	LMT	1921 Jan 15 # Uaobe
 			11:30	-	+1130	1942 Aug 29
 			 9:00	-	+09	1945 Sep  8
@@ -514,13 +521,13 @@
 			12:00	-	+12
 
 # New Caledonia
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	NC	1977	1978	-	Dec	Sun>=1	0:00	1:00	-
 Rule	NC	1978	1979	-	Feb	27	0:00	0	-
 Rule	NC	1996	only	-	Dec	 1	2:00s	1:00	-
 # Shanks & Pottenger say the following was at 2:00; go with IATA.
 Rule	NC	1997	only	-	Mar	 2	2:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Noumea	11:05:48 -	LMT	1912 Jan 13 # Nouméa
 			11:00	NC	+11/+12
 
@@ -529,7 +536,7 @@
 
 # New Zealand
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	NZ	1927	only	-	Nov	 6	2:00	1:00	S
 Rule	NZ	1928	only	-	Mar	 4	2:00	0	M
 Rule	NZ	1928	1933	-	Oct	Sun>=8	2:00	0:30	S
@@ -559,7 +566,7 @@
 Rule	Chatham	2007	max	-	Sep	lastSun	2:45s	1:00	-
 Rule	NZ	2008	max	-	Apr	Sun>=1	2:00s	0	S
 Rule	Chatham	2008	max	-	Apr	Sun>=1	2:45s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Auckland	11:39:04 -	LMT	1868 Nov  2
 			11:30	NZ	NZ%sT	1946 Jan  1
 			12:00	NZ	NZ%sT
@@ -581,11 +588,11 @@
 
 # Cook Is
 # From Shanks & Pottenger:
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Cook	1978	only	-	Nov	12	0:00	0:30	-
 Rule	Cook	1979	1991	-	Mar	Sun>=1	0:00	0	-
 Rule	Cook	1979	1990	-	Oct	lastSun	0:00	0:30	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Rarotonga	-10:39:04 -	LMT	1901        # Avarua
 			-10:30	-	-1030	1978 Nov 12
 			-10:00	Cook	-10/-0930
@@ -594,29 +601,30 @@
 
 
 # Niue
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Niue	-11:19:40 -	LMT	1901        # Alofi
 			-11:20	-	-1120	1951
 			-11:30	-	-1130	1978 Oct  1
 			-11:00	-	-11
 
 # Norfolk
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Norfolk	11:11:52 -	LMT	1901 # Kingston
 			11:12	-	+1112	1951
-			11:30	-	+1130	1974 Oct 27 02:00
-			11:30	1:00	+1230	1975 Mar  2 02:00
-			11:30	-	+1130	2015 Oct  4 02:00
-			11:00	-	+11
+			11:30	-	+1130	1974 Oct 27 02:00s
+			11:30	1:00	+1230	1975 Mar  2 02:00s
+			11:30	-	+1130	2015 Oct  4 02:00s
+			11:00	-	+11	2019 Jul
+			11:00	AN	+11/+12
 
 # Palau (Belau)
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Palau	-15:02:04 -	LMT	1844 Dec 31	# Koror
 			  8:57:56 -	LMT	1901
 			  9:00	-	+09
 
 # Papua New Guinea
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Port_Moresby 9:48:40 -	LMT	1880
 			9:48:32	-	PMMT	1895 # Port Moresby Mean Time
 			10:00	-	+10
@@ -646,7 +654,7 @@
 			11:00	-	+11
 
 # Pitcairn
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Pitcairn	-8:40:20 -	LMT	1901        # Adamstown
 			-8:30	-	-0830	1998 Apr 27  0:00
 			-8:00	-	-08
@@ -725,13 +733,13 @@
 # That web page currently lists transitions for 2012/3 and 2013/4.
 # Assume the pattern instituted in 2012 will continue indefinitely.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	WS	2010	only	-	Sep	lastSun	0:00	1	-
 Rule	WS	2011	only	-	Apr	Sat>=1	4:00	0	-
 Rule	WS	2011	only	-	Sep	lastSat	3:00	1	-
 Rule	WS	2012	max	-	Apr	Sun>=1	4:00	0	-
 Rule	WS	2012	max	-	Sep	lastSun	3:00	1	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Apia	 12:33:04 -	LMT	1892 Jul  5
 			-11:26:56 -	LMT	1911
 			-11:30	-	-1130	1950
@@ -740,7 +748,7 @@
 
 # Solomon Is
 # excludes Bougainville, for which see Papua New Guinea
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Guadalcanal 10:39:48 -	LMT	1912 Oct # Honiara
 			11:00	-	+11
 
@@ -763,27 +771,27 @@
 # was "11 hours slow on G.M.T."  Go with Thorsen and assume Shanks & Pottenger
 # are off by an hour starting in 1901.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Fakaofo	-11:24:56 -	LMT	1901
 			-11:00	-	-11	2011 Dec 30
 			13:00	-	+13
 
 # Tonga
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Tonga	1999	only	-	Oct	 7	2:00s	1:00	-
 Rule	Tonga	2000	only	-	Mar	19	2:00s	0	-
 Rule	Tonga	2000	2001	-	Nov	Sun>=1	2:00	1:00	-
 Rule	Tonga	2001	2002	-	Jan	lastSun	2:00	0	-
 Rule	Tonga	2016	only	-	Nov	Sun>=1	2:00	1:00	-
 Rule	Tonga	2017	only	-	Jan	Sun>=15	3:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Tongatapu	12:19:20 -	LMT	1901
 			12:20	-	+1220	1941
 			13:00	-	+13	1999
 			13:00	Tonga	+13/+14
 
 # Tuvalu
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Funafuti	11:56:52 -	LMT	1901
 			12:00	-	+12
 
@@ -844,25 +852,25 @@
 # uninhabited since World War II; was probably like Pacific/Kiritimati
 
 # Wake
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Wake	11:06:28 -	LMT	1901
 			12:00	-	+12
 
 
 # Vanuatu
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Vanuatu	1983	only	-	Sep	25	0:00	1:00	-
 Rule	Vanuatu	1984	1991	-	Mar	Sun>=23	0:00	0	-
 Rule	Vanuatu	1984	only	-	Oct	23	0:00	1:00	-
 Rule	Vanuatu	1985	1991	-	Sep	Sun>=23	0:00	1:00	-
 Rule	Vanuatu	1992	1993	-	Jan	Sun>=23	0:00	0	-
 Rule	Vanuatu	1992	only	-	Oct	Sun>=23	0:00	1:00	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Efate	11:13:16 -	LMT	1912 Jan 13 # Vila
 			11:00	Vanuatu	+11/+12
 
 # Wallis and Futuna
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 			12:00	-	+12
 
@@ -1248,6 +1256,22 @@
 # in WA or its introduction in SA had anything to do with the genesis
 # of this time zone.  My hunch is that it's been around since well
 # before 1975.  I remember seeing it noted on road maps decades ago.
+#
+# From Gilmore Davidson (2019-04-08):
+# https://www.abc.net.au/news/2019-04-08/this-remote-stretch-of-desert-has-its-own-custom-time-zone/10981000
+# ... include[s] a rough description of the geographical boundaries...
+# "The time zone exists for about 340 kilometres and takes in the tiny
+# roadhouse communities of Cocklebiddy, Madura, Eucla and Border Village."
+# ... and an indication that the zone has definitely been in existence
+# since before the 1970 cut-off of the database ...
+# From Paul Eggert (2019-05-17):
+# That ABC Esperance story by Christien de Garis also says:
+#    Although the Central Western Time Zone is not officially recognised (your
+#    phones won't automatically change), there is a sign instructing you which
+#    way to wind your clocks 45 minutes and scrawled underneath one of them in
+#    Texta is the word: 'Why'?
+#    "Good question," Mr Pike said.
+#    "I don't even know that, and it's been going for over 50 years."
 
 # From Paul Eggert (2006-12-15):
 # For lack of better info, assume the tradition dates back to the
@@ -1566,6 +1590,42 @@
 ###############################################################################
 
 
+# Bonin (Ogasawara) Islands and Marcus Island (Minami-Tori-shima)
+
+# From Wakaba (2019-01-28) via Phake Nick:
+# National Diet Library of Japan has several reports by Japanese Government
+# officers that describe the time used in islands when they visited there.
+# According to them (and other sources such as newspapers), standard time UTC
+# + 10 (JST + 1) and DST UTC + 11 (JST + 2) was used until its return to Japan
+# at 1968-06-26 00:00 JST.  The exact periods of DST are still unknown.
+# I guessed Guam, Mariana, and Bonin and Marcus districts might have
+# synchronized their DST periods, but reports imply they had their own
+# decisions, i.e. there were three or more different time zones....
+#
+# https://wiki.suikawiki.org/n/小笠原諸島の標準時
+
+# From Phake Nick (2019-02-12):
+# Because their last time change to return to Japanese time when they returned
+# to Japanese rule was right before 1970, ... per the current tz database
+# rule, the information doesn't warrant creation of a new timezone for Bonin
+# Islands itself and is thus as an anecdotal note for interest purpose only.
+# ... [The abovementioned link] described some special timekeeping phenomenon
+# regarding Marcus island, another remote island currently owned by Japanese
+# in the same administrative unit as Bonin Islands.  Many reports claim that
+# the American coastal guard on the American quarter of the island use its own
+# coastal guard time, and most sources describe the time as UTC+11, being two
+# hours faster than JST used by some Japanese personnel on the island.  Some
+# sites describe it as same as Wake Island/Guam time although it would be
+# incorrect to be same as Guam.  And then in a few Japanese governmental
+# report from 1980s (from National Institute of Information and Communications
+# Technology) regarding the construction of VLBI facility on the Marcus
+# Island, it claimed that there are three time standards being used on the
+# island at the time which include not just JST (UTC+9) or [US]CG time
+# (UTC+11) but also a JMSDF time (UTC+10) (Japan Maritime Self-Defense
+# Force).  Unfortunately there are no other sources that mentioned such time
+# and there are also no information on things like how the time was used.
+
+
 # Fiji
 
 # Howse writes (p 153) that in 1879 the British governor of Fiji
@@ -1823,12 +1883,21 @@
 # ... at 12.30 am (by legal time in New South Wales) on 4 October 2015.
 # http://www.norfolkisland.gov.nf/nia/MediaRelease/Media%20Release%20Norfolk%20Island%20Standard%20Time%20Change.pdf
 
-# From Paul Eggert (2015-09-23):
+# From Paul Eggert (2019-08-28):
 # Transitions before 2015 are from timeanddate.com, which consulted
 # the Norfolk Island Museum and the Australian Bureau of Meteorology's
 # Norfolk Island station, and found no record of Norfolk observing DST
 # other than in 1974/5.  See:
 # https://www.timeanddate.com/time/australia/norfolk-island.html
+# However, disagree with timeanddate about the 1975-03-02 transition;
+# timeanddate has 02:00 but 02:00s corresponds to what the NSW law said
+# (thanks to Michael Deckers).
+
+# Norfolk started observing Australian DST in spring 2019.
+# From Kyle Czech (2019-08-13):
+# https://www.legislation.gov.au/Details/F2018L01702
+# From Michael Deckers (2019-08-14):
+# https://www.legislation.gov.au/Details/F2019C00010
 
 # Palau
 # See commentary for Micronesia.
diff --git a/tools/java/org/unicode/cldr/util/data/backward b/tools/java/org/unicode/cldr/util/data/backward
index b4ae3cf..e13ae52 100644
--- a/tools/java/org/unicode/cldr/util/data/backward
+++ b/tools/java/org/unicode/cldr/util/data/backward
@@ -17,6 +17,7 @@
 Link	America/Argentina/Cordoba	America/Cordoba
 Link	America/Tijuana		America/Ensenada
 Link	America/Indiana/Indianapolis	America/Fort_Wayne
+Link	America/Nuuk		America/Godthab
 Link	America/Indiana/Indianapolis	America/Indianapolis
 Link	America/Argentina/Jujuy	America/Jujuy
 Link	America/Indiana/Knox	America/Knox_IN
diff --git a/tools/java/org/unicode/cldr/util/data/births/outdated.data b/tools/java/org/unicode/cldr/util/data/births/outdated.data
index bb0eee6..9231de8 100644
--- a/tools/java/org/unicode/cldr/util/data/births/outdated.data
+++ b/tools/java/org/unicode/cldr/util/data/births/outdated.data
Binary files differ
diff --git a/tools/java/org/unicode/cldr/util/data/births/outdatedEnglish.data b/tools/java/org/unicode/cldr/util/data/births/outdatedEnglish.data
index 4482857..2a9aa60 100644
--- a/tools/java/org/unicode/cldr/util/data/births/outdatedEnglish.data
+++ b/tools/java/org/unicode/cldr/util/data/births/outdatedEnglish.data
Binary files differ
diff --git a/tools/java/org/unicode/cldr/util/data/chart_messages.html b/tools/java/org/unicode/cldr/util/data/chart_messages.html
index 3e35449..a574ecc 100644
--- a/tools/java/org/unicode/cldr/util/data/chart_messages.html
+++ b/tools/java/org/unicode/cldr/util/data/chart_messages.html
@@ -122,7 +122,7 @@
 					<ul>
 						<li><b>Reporting Defects:</b> If you find errors or omissions
 							in this data, please report the information with a <a
-							target="_blank" href="http://unicode.org/cldr/trac/newticket">
+							target="_blank" href="http://cldr.unicode.org/index/bug-reports#TOC-Filing-a-Ticket">
 								bug report</a>.</li>
 						<li><b>XML Source:</b> <a
 							href="http://unicode.org/cldr/data/common/supplemental/supplementalData.xml">
@@ -185,7 +185,7 @@
 					<ul>
 						<li><b>Reporting Defects:</b> If you find errors or omissions
 							in this data, please report the information with a <a
-							target="_blank" href="http://unicode.org/cldr/trac/newticket">
+							target="_blank" href="http://cldr.unicode.org/index/bug-reports#TOC-Filing-a-Ticket">
 								bug report</a>.</li>
 						<li><b>XML Source:</b> <a
 							href="http://unicode.org/cldr/data/common/supplemental/supplementalData.xml">
@@ -249,7 +249,7 @@
 					<ul>
 						<li><b>Reporting Defects:</b> If you find errors or omissions
 							in this data, please report the information with a <a
-							target="_blank" href="http://unicode.org/cldr/trac/newticket">
+							target="_blank" href="http://cldr.unicode.org/index/bug-reports#TOC-Filing-a-Ticket">
 								bug report</a>.</li>
 						<li><b>XML Source:</b> <a
 							href="http://unicode.org/cldr/data/common/supplemental/supplementalData.xml">
@@ -272,7 +272,7 @@
 					<ul>
 						<li><b>Reporting Defects:</b> If you find errors or omissions
 							in this data, please report the information with a <a
-							target="_blank" href="http://unicode.org/cldr/trac/newticket">
+							target="_blank" href="http://cldr.unicode.org/index/bug-reports#TOC-Filing-a-Ticket">
 								bug report</a>. However, such reports should be limited to cases
 							where the information here deviates from <a
 							href="http://unstats.un.org/unsd/methods/m49/m49regin.htm">UN
@@ -294,7 +294,7 @@
 					<ul>
 						<li><b>Reporting Defects:</b> If you find errors or omissions
 							in this data, please report the information with a <a
-							target="_blank" href="http://unicode.org/cldr/trac/newticket">
+							target="_blank" href="http://cldr.unicode.org/index/bug-reports#TOC-Filing-a-Ticket">
 								bug report</a>.</li>
 						<li><b>XML Source:</b>under &lt;mapTimezones&gt; in <a
 							href="http://unicode.org/cldr/data/common/supplemental/metaZones.xml">metaZones.xml</a>
@@ -332,7 +332,7 @@
 					<ul>
 						<li><b>Reporting Defects:</b> If you find errors or omissions
 							in this data, please report the information with a <a
-							target="_blank" href="http://unicode.org/cldr/trac/newticket">
+							target="_blank" href="http://cldr.unicode.org/index/bug-reports#TOC-Filing-a-Ticket">
 								bug report</a>.</li>
 						<li><b>XML Source:</b> <a
 							href="http://unicode.org/cldr/data/common/supplemental/characters.xml">characters.xml</a>&nbsp;
@@ -353,7 +353,7 @@
 					<ul>
 						<li><b>Reporting Defects:</b> If you find errors or omissions
 							in this data, please report the information with a <a
-							target="_blank" href="http://unicode.org/cldr/trac/newticket">
+							target="_blank" href="http://cldr.unicode.org/index/bug-reports#TOC-Filing-a-Ticket">
 								bug report</a>.</li>
 						<li><b>XML Source:</b> <a
 							href="http://unicode.org/cldr/data/common/supplemental/supplementalMetadata.xml">
@@ -397,7 +397,7 @@
 					<ul>
 						<li><b>Reporting Defects:</b> If you find errors or omissions
 							in this data, please report the information with a <a
-							target="_blank" href="http://unicode.org/cldr/trac/newticket">bug
+							target="_blank" href="http://cldr.unicode.org/index/bug-reports#TOC-Filing-a-Ticket">bug
 								report</a>.</li>
 					</ul>
 				</td>
@@ -432,7 +432,7 @@
 						and following.</li>
 						<li><b>Reporting Defects:</b> When you find errors or
 							omissions in this data, please report the information with a <a
-							target="_blank" href="http://unicode.org/cldr/trac/newticket">bug
+							target="_blank" href="http://cldr.unicode.org/index/bug-reports#TOC-Filing-a-Ticket">bug
 								report</a>. But first read &quot;Reporting Defects&quot; on <a
 							href="http://cldr.unicode.org/index/cldr-spec/plural-rules" target='spec'>Plural
 								Rules</a>.</li>
diff --git a/tools/java/org/unicode/cldr/util/data/codepointToIsoCurrencyCode.tsv b/tools/java/org/unicode/cldr/util/data/codepointToIsoCurrencyCode.tsv
new file mode 100644
index 0000000..e8c3ca3
--- /dev/null
+++ b/tools/java/org/unicode/cldr/util/data/codepointToIsoCurrencyCode.tsv
@@ -0,0 +1,28 @@
+#Char	CCode	Hex	UnicodeName
+£	GBP	U+00A3	POUND SIGN
+¤	XXX	U+00A4	CURRENCY SIGN
+¥	JPY	U+00A5	YEN SIGN
+֏	AMD	U+058F	ARMENIAN DRAM SIGN
+؋	AFN	U+060B	AFGHANI SIGN
+৳	BDT	U+09F3	BENGALI RUPEE SIGN
+฿	THB	U+0E3F	THAI CURRENCY SYMBOL BAHT
+៛	KHR	U+17DB	KHMER CURRENCY SYMBOL RIEL
+₡	CRC	U+20A1	COLON SIGN
+₦	NGN	U+20A6	NAIRA SIGN
+₧	ESP	U+20A7	PESETA SIGN
+₩	KRW	U+20A9	WON SIGN
+₪	ILS	U+20AA	NEW SHEQEL SIGN
+₫	VND	U+20AB	DONG SIGN
+€	EUR	U+20AC	EURO SIGN
+₭	LAK	U+20AD	KIP SIGN
+₮	MNT	U+20AE	TUGRIK SIGN
+₱	PHP	U+20B1	PESO SIGN
+₲	PYG	U+20B2	GUARANI SIGN
+₴	UAH	U+20B4	HRYVNIA SIGN
+₸	KZT	U+20B8	TENGE SIGN
+₹	INR	U+20B9	INDIAN RUPEE SIGN
+₼	AZN	U+20BC	MANAT SIGN
+₽	RUB	U+20BD	RUBLE SIGN
+₾	GEL	U+20BE	LARI SIGN
+₵	GHS	U+20B5	CEDI SIGN
+₺	TRY	U+20BA	TURKISH LIRA SIGN
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/util/data/country_language_population_raw.txt b/tools/java/org/unicode/cldr/util/data/country_language_population_raw.txt
index 13a4893..f7877cb 100644
--- a/tools/java/org/unicode/cldr/util/data/country_language_population_raw.txt
+++ b/tools/java/org/unicode/cldr/util/data/country_language_population_raw.txt
@@ -1,4 +1,7 @@
-*	CName	CCode	CPopulation	CLiteracy	CGdp	OfficialStatus	Language	LCode	LPopulation	WritingPop	References	Notes
+#	CName	CCode	CPopulation	CLiteracy	CGdp	OfficialStatus	Language	LCode	LPopulation	WritingPop	References	Notes
+#######
+#WARNING: this file is in TSV format (for pasting from a spreadsheet); make sure you maintain tabs!
+#######
 Afghanistan	AF	"34,940,837"	28%	"69,450,000,000"	official_regional	Baluchi	bal	"233,000"			
 Afghanistan	AF	"34,940,837"	28%	"69,450,000,000"		Hazaragi	haz	5.9%			
 Afghanistan	AF	"34,940,837"	28%	"69,450,000,000"		Kazakh (Arabic)	kk_Arab	"2,000"			"http://en.wikipedia.org/wiki/Kazakh_language - the script is an assumption, needs a reference"
@@ -112,7 +115,7 @@
 Brazil	BR	"208,846,892"	90%	"3,248,000,000,000"		Guajajára	gub	"17,500"			
 Brazil	BR	"208,846,892"	90%	"3,248,000,000,000"		Italian	it	"583,000"			
 Brazil	BR	"208,846,892"	90%	"3,248,000,000,000"		Japanese	ja	"443,000"			
-Brazil	BR	"208,846,892"	90%	"3,248,000,000,000"		Kaingang	kgp	"20,900"			
+Brazil	BR	"208,846,892"	90%	"3,248,000,000,000"		Kaingang	kgp	"50,000"			http://www.portalkaingang.org/index_povo_1default.htm
 Brazil	BR	"208,846,892"	90%	"3,248,000,000,000"		Korean	ko	"43,200"			
 Brazil	BR	"208,846,892"	90%	"3,248,000,000,000"		Nheengatu	yrl	"10,900"			
 Brazil	BR	"208,846,892"	90%	"3,248,000,000,000"	official	Portuguese	pt	91%			
@@ -501,6 +504,7 @@
 India	IN	"1,296,834,042"	63%	"9,474,000,000,000"		Hadothi	hoj	"1,060,000"			
 India	IN	"1,296,834,042"	63%	"9,474,000,000,000"		Haryanvi	bgc	"15,600,000"	55%		http://en.wikipedia.org/wiki/Haryanvi http://www.indianetzone.com/7/haryanvi.htm little literature mostly folksongs; writers use std Hindi; claim of 55% literacy
 India	IN	"1,296,834,042"	63%	"9,474,000,000,000"	official	Hindi	hi	41%			"http://www.censusindia.net/ Figure for Hindi includes 2nd language users, India Census data."
+India	IN	"1,296,834,042"	63%	"9,474,000,000,000"		Hindi (Latn)	hi_Latn	0.1%			"No hard figures for this yet, so this is a placeholder figure."
 India	IN	"1,296,834,042"	63%	"9,474,000,000,000"		Ho	hoc	"1,290,000"			https://www.cia.gov/library/publications/the-world-factbook/geos/in.html
 India	IN	"1,296,834,042"	63%	"9,474,000,000,000"		Kachhi	kfr	"968,000"			
 India	IN	"1,296,834,042"	63%	"9,474,000,000,000"		Kanauji	bjj	"7,200,000"	60%		
@@ -738,7 +742,7 @@
 Malaysia	MY	"31,809,660"	93%	"933,300,000,000"		Banjar	bjn	"5,000"			
 Malaysia	MY	"31,809,660"	93%	"933,300,000,000"		Buginese	bug	"25,200"			http://www.joshuaproject.net/peopctry.php?rop3=101703&rog3=MY
 Malaysia	MY	"31,809,660"	93%	"933,300,000,000"		Central Dusun	dtp	"177,000"			
-Malaysia	MY	"31,809,660"	93%	"933,300,000,000"		Chinese (Traditional)	zh_Hant	17%			
+Malaysia	MY	"31,809,660"	93%	"933,300,000,000"		Chinese (Traditional)	zh	17%			
 Malaysia	MY	"31,809,660"	93%	"933,300,000,000"		English	en	21%			
 Malaysia	MY	"31,809,660"	93%	"933,300,000,000"		Iban	iba	"792,000"			
 Malaysia	MY	"31,809,660"	93%	"933,300,000,000"		Javanese	jv	"379,000"			
@@ -956,6 +960,7 @@
 Pakistan	PK	"207,862,518"	55%	"1,061,000,000,000"		Sindhi	sd	12%			
 Pakistan	PK	"207,862,518"	55%	"1,061,000,000,000"		Southern Hindko	hnd	"855,000"			
 Pakistan	PK	"207,862,518"	55%	"1,061,000,000,000"		Tajik (Arabic)	tg_Arab	"684,000"			
+Pakistan	PK	"207,862,518"	55%	"1,061,000,000,000"		Torwali	trw	"110,000"			
 Pakistan	PK	"207,862,518"	55%	"1,061,000,000,000"	official	Urdu	ur	95%			http://en.wikipedia.org/wiki/Languages_of_Pakistan - More than 95% of Pakistanis can speak or understand Urdu as their second or third language
 Pakistan	PK	"207,862,518"	55%	"1,061,000,000,000"		Wadiyara Koli	kxp	"239,000"			
 Pakistan	PK	"207,862,518"	55%	"1,061,000,000,000"		Western Balochi	bgn	"1,190,000"	5%		http://www.ethnologue.com/language/bgn low literacy
diff --git a/tools/java/org/unicode/cldr/util/data/dl_iso_table_a1.xml b/tools/java/org/unicode/cldr/util/data/dl_iso_table_a1.xml
index 7e6059b..20be53b 100644
--- a/tools/java/org/unicode/cldr/util/data/dl_iso_table_a1.xml
+++ b/tools/java/org/unicode/cldr/util/data/dl_iso_table_a1.xml
@@ -531,6 +531,13 @@
 			<CcyMnrUnts>2</CcyMnrUnts>
 		</CcyNtry>
 		<CcyNtry>
+			<CtryNm>ESWATINI</CtryNm>
+			<CcyNm>Lilangeni</CcyNm>
+			<Ccy>SZL</Ccy>
+			<CcyNbr>748</CcyNbr>
+			<CcyMnrUnts>2</CcyMnrUnts>
+		</CcyNtry>
+		<CcyNtry>
 			<CtryNm>ETHIOPIA</CtryNm>
 			<CcyNm>Ethiopian Birr</CcyNm>
 			<Ccy>ETB</Ccy>
@@ -986,7 +993,7 @@
 			<CcyMnrUnts>2</CcyMnrUnts>
 		</CcyNtry>
 		<CcyNtry>
-			<CtryNm>MACEDONIA (THE FORMER YUGOSLAV REPUBLIC OF)</CtryNm>
+			<CtryNm>NORTH MACEDONIA</CtryNm>
 			<CcyNm>Denar</CcyNm>
 			<Ccy>MKD</Ccy>
 			<CcyNbr>807</CcyNbr>
@@ -1589,13 +1596,6 @@
 			<CcyMnrUnts>2</CcyMnrUnts>
 		</CcyNtry>
 		<CcyNtry>
-			<CtryNm>ESWATINI</CtryNm>
-			<CcyNm>Lilangeni</CcyNm>
-			<Ccy>SZL</Ccy>
-			<CcyNbr>748</CcyNbr>
-			<CcyMnrUnts>2</CcyMnrUnts>
-		</CcyNtry>
-		<CcyNtry>
 			<CtryNm>SWEDEN</CtryNm>
 			<CcyNm>Swedish Krona</CcyNm>
 			<Ccy>SEK</Ccy>
diff --git a/tools/java/org/unicode/cldr/util/data/dl_iso_table_a3.xml b/tools/java/org/unicode/cldr/util/data/dl_iso_table_a3.xml
index fdf3db5..32f6dd7 100644
--- a/tools/java/org/unicode/cldr/util/data/dl_iso_table_a3.xml
+++ b/tools/java/org/unicode/cldr/util/data/dl_iso_table_a3.xml
@@ -1041,7 +1041,7 @@
 			<CtryNm>YUGOSLAVIA</CtryNm>
 			<CcyNm>New Yugoslavian Dinar</CcyNm>
 			<Ccy>YUD</Ccy>
-			<CcyNbr>891</CcyNbr>
+			<CcyNbr>890</CcyNbr>
 			<WthdrwlDt>1990-01</WthdrwlDt>
 		</HstrcCcyNtry>
 		<HstrcCcyNtry>
diff --git a/tools/java/org/unicode/cldr/util/data/emoji/emoji-test.txt b/tools/java/org/unicode/cldr/util/data/emoji/emoji-test.txt
index 9f8d343..d3c6d12 100644
--- a/tools/java/org/unicode/cldr/util/data/emoji/emoji-test.txt
+++ b/tools/java/org/unicode/cldr/util/data/emoji/emoji-test.txt
@@ -1,11 +1,11 @@
 # emoji-test.txt
-# Date: 2020-01-21, 13:40:25 GMT
+# Date: 2020-09-12, 22:19:50 GMT
 # © 2020 Unicode®, Inc.
 # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
 # For terms of use, see http://www.unicode.org/terms_of_use.html
 #
 # Emoji Keyboard/Display Test Data for UTS #51
-# Version: 13.0
+# Version: 13.1
 #
 # For documentation and usage, see http://www.unicode.org/reports/tr51
 #
@@ -33,2736 +33,3158 @@
 # group: Smileys & Emotion
 
 # subgroup: face-smiling
-1F600                                      ; fully-qualified     # 😀 E1.0 grinning face
-1F603                                      ; fully-qualified     # 😃 E0.6 grinning face with big eyes
-1F604                                      ; fully-qualified     # 😄 E0.6 grinning face with smiling eyes
-1F601                                      ; fully-qualified     # 😁 E0.6 beaming face with smiling eyes
-1F606                                      ; fully-qualified     # 😆 E0.6 grinning squinting face
-1F605                                      ; fully-qualified     # 😅 E0.6 grinning face with sweat
-1F923                                      ; fully-qualified     # 🤣 E3.0 rolling on the floor laughing
-1F602                                      ; fully-qualified     # 😂 E0.6 face with tears of joy
-1F642                                      ; fully-qualified     # 🙂 E1.0 slightly smiling face
-1F643                                      ; fully-qualified     # 🙃 E1.0 upside-down face
-1F609                                      ; fully-qualified     # 😉 E0.6 winking face
-1F60A                                      ; fully-qualified     # 😊 E0.6 smiling face with smiling eyes
-1F607                                      ; fully-qualified     # 😇 E1.0 smiling face with halo
+1F600                                                  ; fully-qualified     # 😀 E1.0 grinning face
+1F603                                                  ; fully-qualified     # 😃 E0.6 grinning face with big eyes
+1F604                                                  ; fully-qualified     # 😄 E0.6 grinning face with smiling eyes
+1F601                                                  ; fully-qualified     # 😁 E0.6 beaming face with smiling eyes
+1F606                                                  ; fully-qualified     # 😆 E0.6 grinning squinting face
+1F605                                                  ; fully-qualified     # 😅 E0.6 grinning face with sweat
+1F923                                                  ; fully-qualified     # 🤣 E3.0 rolling on the floor laughing
+1F602                                                  ; fully-qualified     # 😂 E0.6 face with tears of joy
+1F642                                                  ; fully-qualified     # 🙂 E1.0 slightly smiling face
+1F643                                                  ; fully-qualified     # 🙃 E1.0 upside-down face
+1F609                                                  ; fully-qualified     # 😉 E0.6 winking face
+1F60A                                                  ; fully-qualified     # 😊 E0.6 smiling face with smiling eyes
+1F607                                                  ; fully-qualified     # 😇 E1.0 smiling face with halo
 
 # subgroup: face-affection
-1F970                                      ; fully-qualified     # 🥰 E11.0 smiling face with hearts
-1F60D                                      ; fully-qualified     # 😍 E0.6 smiling face with heart-eyes
-1F929                                      ; fully-qualified     # 🤩 E5.0 star-struck
-1F618                                      ; fully-qualified     # 😘 E0.6 face blowing a kiss
-1F617                                      ; fully-qualified     # 😗 E1.0 kissing face
-263A FE0F                                  ; fully-qualified     # ☺️ E0.6 smiling face
-263A                                       ; unqualified         # ☺ E0.6 smiling face
-1F61A                                      ; fully-qualified     # 😚 E0.6 kissing face with closed eyes
-1F619                                      ; fully-qualified     # 😙 E1.0 kissing face with smiling eyes
-1F972                                      ; fully-qualified     # 🥲 E13.0 smiling face with tear
+1F970                                                  ; fully-qualified     # 🥰 E11.0 smiling face with hearts
+1F60D                                                  ; fully-qualified     # 😍 E0.6 smiling face with heart-eyes
+1F929                                                  ; fully-qualified     # 🤩 E5.0 star-struck
+1F618                                                  ; fully-qualified     # 😘 E0.6 face blowing a kiss
+1F617                                                  ; fully-qualified     # 😗 E1.0 kissing face
+263A FE0F                                              ; fully-qualified     # ☺️ E0.6 smiling face
+263A                                                   ; unqualified         # ☺ E0.6 smiling face
+1F61A                                                  ; fully-qualified     # 😚 E0.6 kissing face with closed eyes
+1F619                                                  ; fully-qualified     # 😙 E1.0 kissing face with smiling eyes
+1F972                                                  ; fully-qualified     # 🥲 E13.0 smiling face with tear
 
 # subgroup: face-tongue
-1F60B                                      ; fully-qualified     # 😋 E0.6 face savoring food
-1F61B                                      ; fully-qualified     # 😛 E1.0 face with tongue
-1F61C                                      ; fully-qualified     # 😜 E0.6 winking face with tongue
-1F92A                                      ; fully-qualified     # 🤪 E5.0 zany face
-1F61D                                      ; fully-qualified     # 😝 E0.6 squinting face with tongue
-1F911                                      ; fully-qualified     # 🤑 E1.0 money-mouth face
+1F60B                                                  ; fully-qualified     # 😋 E0.6 face savoring food
+1F61B                                                  ; fully-qualified     # 😛 E1.0 face with tongue
+1F61C                                                  ; fully-qualified     # 😜 E0.6 winking face with tongue
+1F92A                                                  ; fully-qualified     # 🤪 E5.0 zany face
+1F61D                                                  ; fully-qualified     # 😝 E0.6 squinting face with tongue
+1F911                                                  ; fully-qualified     # 🤑 E1.0 money-mouth face
 
 # subgroup: face-hand
-1F917                                      ; fully-qualified     # 🤗 E1.0 hugging face
-1F92D                                      ; fully-qualified     # 🤭 E5.0 face with hand over mouth
-1F92B                                      ; fully-qualified     # 🤫 E5.0 shushing face
-1F914                                      ; fully-qualified     # 🤔 E1.0 thinking face
+1F917                                                  ; fully-qualified     # 🤗 E1.0 hugging face
+1F92D                                                  ; fully-qualified     # 🤭 E5.0 face with hand over mouth
+1F92B                                                  ; fully-qualified     # 🤫 E5.0 shushing face
+1F914                                                  ; fully-qualified     # 🤔 E1.0 thinking face
 
 # subgroup: face-neutral-skeptical
-1F910                                      ; fully-qualified     # 🤐 E1.0 zipper-mouth face
-1F928                                      ; fully-qualified     # 🤨 E5.0 face with raised eyebrow
-1F610                                      ; fully-qualified     # 😐 E0.7 neutral face
-1F611                                      ; fully-qualified     # 😑 E1.0 expressionless face
-1F636                                      ; fully-qualified     # 😶 E1.0 face without mouth
-1F60F                                      ; fully-qualified     # 😏 E0.6 smirking face
-1F612                                      ; fully-qualified     # 😒 E0.6 unamused face
-1F644                                      ; fully-qualified     # 🙄 E1.0 face with rolling eyes
-1F62C                                      ; fully-qualified     # 😬 E1.0 grimacing face
-1F925                                      ; fully-qualified     # 🤥 E3.0 lying face
+1F910                                                  ; fully-qualified     # 🤐 E1.0 zipper-mouth face
+1F928                                                  ; fully-qualified     # 🤨 E5.0 face with raised eyebrow
+1F610                                                  ; fully-qualified     # 😐 E0.7 neutral face
+1F611                                                  ; fully-qualified     # 😑 E1.0 expressionless face
+1F636                                                  ; fully-qualified     # 😶 E1.0 face without mouth
+1F636 200D 1F32B FE0F                                  ; fully-qualified     # 😶‍🌫️ E13.1 face in clouds
+1F636 200D 1F32B                                       ; minimally-qualified # 😶‍🌫 E13.1 face in clouds
+1F60F                                                  ; fully-qualified     # 😏 E0.6 smirking face
+1F612                                                  ; fully-qualified     # 😒 E0.6 unamused face
+1F644                                                  ; fully-qualified     # 🙄 E1.0 face with rolling eyes
+1F62C                                                  ; fully-qualified     # 😬 E1.0 grimacing face
+1F62E 200D 1F4A8                                       ; fully-qualified     # 😮‍💨 E13.1 face exhaling
+1F925                                                  ; fully-qualified     # 🤥 E3.0 lying face
 
 # subgroup: face-sleepy
-1F60C                                      ; fully-qualified     # 😌 E0.6 relieved face
-1F614                                      ; fully-qualified     # 😔 E0.6 pensive face
-1F62A                                      ; fully-qualified     # 😪 E0.6 sleepy face
-1F924                                      ; fully-qualified     # 🤤 E3.0 drooling face
-1F634                                      ; fully-qualified     # 😴 E1.0 sleeping face
+1F60C                                                  ; fully-qualified     # 😌 E0.6 relieved face
+1F614                                                  ; fully-qualified     # 😔 E0.6 pensive face
+1F62A                                                  ; fully-qualified     # 😪 E0.6 sleepy face
+1F924                                                  ; fully-qualified     # 🤤 E3.0 drooling face
+1F634                                                  ; fully-qualified     # 😴 E1.0 sleeping face
 
 # subgroup: face-unwell
-1F637                                      ; fully-qualified     # 😷 E0.6 face with medical mask
-1F912                                      ; fully-qualified     # 🤒 E1.0 face with thermometer
-1F915                                      ; fully-qualified     # 🤕 E1.0 face with head-bandage
-1F922                                      ; fully-qualified     # 🤢 E3.0 nauseated face
-1F92E                                      ; fully-qualified     # 🤮 E5.0 face vomiting
-1F927                                      ; fully-qualified     # 🤧 E3.0 sneezing face
-1F975                                      ; fully-qualified     # 🥵 E11.0 hot face
-1F976                                      ; fully-qualified     # 🥶 E11.0 cold face
-1F974                                      ; fully-qualified     # 🥴 E11.0 woozy face
-1F635                                      ; fully-qualified     # 😵 E0.6 dizzy face
-1F92F                                      ; fully-qualified     # 🤯 E5.0 exploding head
+1F637                                                  ; fully-qualified     # 😷 E0.6 face with medical mask
+1F912                                                  ; fully-qualified     # 🤒 E1.0 face with thermometer
+1F915                                                  ; fully-qualified     # 🤕 E1.0 face with head-bandage
+1F922                                                  ; fully-qualified     # 🤢 E3.0 nauseated face
+1F92E                                                  ; fully-qualified     # 🤮 E5.0 face vomiting
+1F927                                                  ; fully-qualified     # 🤧 E3.0 sneezing face
+1F975                                                  ; fully-qualified     # 🥵 E11.0 hot face
+1F976                                                  ; fully-qualified     # 🥶 E11.0 cold face
+1F974                                                  ; fully-qualified     # 🥴 E11.0 woozy face
+1F635                                                  ; fully-qualified     # 😵 E0.6 knocked-out face
+1F635 200D 1F4AB                                       ; fully-qualified     # 😵‍💫 E13.1 face with spiral eyes
+1F92F                                                  ; fully-qualified     # 🤯 E5.0 exploding head
 
 # subgroup: face-hat
-1F920                                      ; fully-qualified     # 🤠 E3.0 cowboy hat face
-1F973                                      ; fully-qualified     # 🥳 E11.0 partying face
-1F978                                      ; fully-qualified     # 🥸 E13.0 disguised face
+1F920                                                  ; fully-qualified     # 🤠 E3.0 cowboy hat face
+1F973                                                  ; fully-qualified     # 🥳 E11.0 partying face
+1F978                                                  ; fully-qualified     # 🥸 E13.0 disguised face
 
 # subgroup: face-glasses
-1F60E                                      ; fully-qualified     # 😎 E1.0 smiling face with sunglasses
-1F913                                      ; fully-qualified     # 🤓 E1.0 nerd face
-1F9D0                                      ; fully-qualified     # 🧐 E5.0 face with monocle
+1F60E                                                  ; fully-qualified     # 😎 E1.0 smiling face with sunglasses
+1F913                                                  ; fully-qualified     # 🤓 E1.0 nerd face
+1F9D0                                                  ; fully-qualified     # 🧐 E5.0 face with monocle
 
 # subgroup: face-concerned
-1F615                                      ; fully-qualified     # 😕 E1.0 confused face
-1F61F                                      ; fully-qualified     # 😟 E1.0 worried face
-1F641                                      ; fully-qualified     # 🙁 E1.0 slightly frowning face
-2639 FE0F                                  ; fully-qualified     # ☹️ E0.7 frowning face
-2639                                       ; unqualified         # ☹ E0.7 frowning face
-1F62E                                      ; fully-qualified     # 😮 E1.0 face with open mouth
-1F62F                                      ; fully-qualified     # 😯 E1.0 hushed face
-1F632                                      ; fully-qualified     # 😲 E0.6 astonished face
-1F633                                      ; fully-qualified     # 😳 E0.6 flushed face
-1F97A                                      ; fully-qualified     # 🥺 E11.0 pleading face
-1F626                                      ; fully-qualified     # 😦 E1.0 frowning face with open mouth
-1F627                                      ; fully-qualified     # 😧 E1.0 anguished face
-1F628                                      ; fully-qualified     # 😨 E0.6 fearful face
-1F630                                      ; fully-qualified     # 😰 E0.6 anxious face with sweat
-1F625                                      ; fully-qualified     # 😥 E0.6 sad but relieved face
-1F622                                      ; fully-qualified     # 😢 E0.6 crying face
-1F62D                                      ; fully-qualified     # 😭 E0.6 loudly crying face
-1F631                                      ; fully-qualified     # 😱 E0.6 face screaming in fear
-1F616                                      ; fully-qualified     # 😖 E0.6 confounded face
-1F623                                      ; fully-qualified     # 😣 E0.6 persevering face
-1F61E                                      ; fully-qualified     # 😞 E0.6 disappointed face
-1F613                                      ; fully-qualified     # 😓 E0.6 downcast face with sweat
-1F629                                      ; fully-qualified     # 😩 E0.6 weary face
-1F62B                                      ; fully-qualified     # 😫 E0.6 tired face
-1F971                                      ; fully-qualified     # 🥱 E12.0 yawning face
+1F615                                                  ; fully-qualified     # 😕 E1.0 confused face
+1F61F                                                  ; fully-qualified     # 😟 E1.0 worried face
+1F641                                                  ; fully-qualified     # 🙁 E1.0 slightly frowning face
+2639 FE0F                                              ; fully-qualified     # ☹️ E0.7 frowning face
+2639                                                   ; unqualified         # ☹ E0.7 frowning face
+1F62E                                                  ; fully-qualified     # 😮 E1.0 face with open mouth
+1F62F                                                  ; fully-qualified     # 😯 E1.0 hushed face
+1F632                                                  ; fully-qualified     # 😲 E0.6 astonished face
+1F633                                                  ; fully-qualified     # 😳 E0.6 flushed face
+1F97A                                                  ; fully-qualified     # 🥺 E11.0 pleading face
+1F626                                                  ; fully-qualified     # 😦 E1.0 frowning face with open mouth
+1F627                                                  ; fully-qualified     # 😧 E1.0 anguished face
+1F628                                                  ; fully-qualified     # 😨 E0.6 fearful face
+1F630                                                  ; fully-qualified     # 😰 E0.6 anxious face with sweat
+1F625                                                  ; fully-qualified     # 😥 E0.6 sad but relieved face
+1F622                                                  ; fully-qualified     # 😢 E0.6 crying face
+1F62D                                                  ; fully-qualified     # 😭 E0.6 loudly crying face
+1F631                                                  ; fully-qualified     # 😱 E0.6 face screaming in fear
+1F616                                                  ; fully-qualified     # 😖 E0.6 confounded face
+1F623                                                  ; fully-qualified     # 😣 E0.6 persevering face
+1F61E                                                  ; fully-qualified     # 😞 E0.6 disappointed face
+1F613                                                  ; fully-qualified     # 😓 E0.6 downcast face with sweat
+1F629                                                  ; fully-qualified     # 😩 E0.6 weary face
+1F62B                                                  ; fully-qualified     # 😫 E0.6 tired face
+1F971                                                  ; fully-qualified     # 🥱 E12.0 yawning face
 
 # subgroup: face-negative
-1F624                                      ; fully-qualified     # 😤 E0.6 face with steam from nose
-1F621                                      ; fully-qualified     # 😡 E0.6 pouting face
-1F620                                      ; fully-qualified     # 😠 E0.6 angry face
-1F92C                                      ; fully-qualified     # 🤬 E5.0 face with symbols on mouth
-1F608                                      ; fully-qualified     # 😈 E1.0 smiling face with horns
-1F47F                                      ; fully-qualified     # 👿 E0.6 angry face with horns
-1F480                                      ; fully-qualified     # 💀 E0.6 skull
-2620 FE0F                                  ; fully-qualified     # ☠️ E1.0 skull and crossbones
-2620                                       ; unqualified         # ☠ E1.0 skull and crossbones
+1F624                                                  ; fully-qualified     # 😤 E0.6 face with steam from nose
+1F621                                                  ; fully-qualified     # 😡 E0.6 pouting face
+1F620                                                  ; fully-qualified     # 😠 E0.6 angry face
+1F92C                                                  ; fully-qualified     # 🤬 E5.0 face with symbols on mouth
+1F608                                                  ; fully-qualified     # 😈 E1.0 smiling face with horns
+1F47F                                                  ; fully-qualified     # 👿 E0.6 angry face with horns
+1F480                                                  ; fully-qualified     # 💀 E0.6 skull
+2620 FE0F                                              ; fully-qualified     # ☠️ E1.0 skull and crossbones
+2620                                                   ; unqualified         # ☠ E1.0 skull and crossbones
 
 # subgroup: face-costume
-1F4A9                                      ; fully-qualified     # 💩 E0.6 pile of poo
-1F921                                      ; fully-qualified     # 🤡 E3.0 clown face
-1F479                                      ; fully-qualified     # 👹 E0.6 ogre
-1F47A                                      ; fully-qualified     # 👺 E0.6 goblin
-1F47B                                      ; fully-qualified     # 👻 E0.6 ghost
-1F47D                                      ; fully-qualified     # 👽 E0.6 alien
-1F47E                                      ; fully-qualified     # 👾 E0.6 alien monster
-1F916                                      ; fully-qualified     # 🤖 E1.0 robot
+1F4A9                                                  ; fully-qualified     # 💩 E0.6 pile of poo
+1F921                                                  ; fully-qualified     # 🤡 E3.0 clown face
+1F479                                                  ; fully-qualified     # 👹 E0.6 ogre
+1F47A                                                  ; fully-qualified     # 👺 E0.6 goblin
+1F47B                                                  ; fully-qualified     # 👻 E0.6 ghost
+1F47D                                                  ; fully-qualified     # 👽 E0.6 alien
+1F47E                                                  ; fully-qualified     # 👾 E0.6 alien monster
+1F916                                                  ; fully-qualified     # 🤖 E1.0 robot
 
 # subgroup: cat-face
-1F63A                                      ; fully-qualified     # 😺 E0.6 grinning cat
-1F638                                      ; fully-qualified     # 😸 E0.6 grinning cat with smiling eyes
-1F639                                      ; fully-qualified     # 😹 E0.6 cat with tears of joy
-1F63B                                      ; fully-qualified     # 😻 E0.6 smiling cat with heart-eyes
-1F63C                                      ; fully-qualified     # 😼 E0.6 cat with wry smile
-1F63D                                      ; fully-qualified     # 😽 E0.6 kissing cat
-1F640                                      ; fully-qualified     # 🙀 E0.6 weary cat
-1F63F                                      ; fully-qualified     # 😿 E0.6 crying cat
-1F63E                                      ; fully-qualified     # 😾 E0.6 pouting cat
+1F63A                                                  ; fully-qualified     # 😺 E0.6 grinning cat
+1F638                                                  ; fully-qualified     # 😸 E0.6 grinning cat with smiling eyes
+1F639                                                  ; fully-qualified     # 😹 E0.6 cat with tears of joy
+1F63B                                                  ; fully-qualified     # 😻 E0.6 smiling cat with heart-eyes
+1F63C                                                  ; fully-qualified     # 😼 E0.6 cat with wry smile
+1F63D                                                  ; fully-qualified     # 😽 E0.6 kissing cat
+1F640                                                  ; fully-qualified     # 🙀 E0.6 weary cat
+1F63F                                                  ; fully-qualified     # 😿 E0.6 crying cat
+1F63E                                                  ; fully-qualified     # 😾 E0.6 pouting cat
 
 # subgroup: monkey-face
-1F648                                      ; fully-qualified     # 🙈 E0.6 see-no-evil monkey
-1F649                                      ; fully-qualified     # 🙉 E0.6 hear-no-evil monkey
-1F64A                                      ; fully-qualified     # 🙊 E0.6 speak-no-evil monkey
+1F648                                                  ; fully-qualified     # 🙈 E0.6 see-no-evil monkey
+1F649                                                  ; fully-qualified     # 🙉 E0.6 hear-no-evil monkey
+1F64A                                                  ; fully-qualified     # 🙊 E0.6 speak-no-evil monkey
 
 # subgroup: emotion
-1F48B                                      ; fully-qualified     # 💋 E0.6 kiss mark
-1F48C                                      ; fully-qualified     # 💌 E0.6 love letter
-1F498                                      ; fully-qualified     # 💘 E0.6 heart with arrow
-1F49D                                      ; fully-qualified     # 💝 E0.6 heart with ribbon
-1F496                                      ; fully-qualified     # 💖 E0.6 sparkling heart
-1F497                                      ; fully-qualified     # 💗 E0.6 growing heart
-1F493                                      ; fully-qualified     # 💓 E0.6 beating heart
-1F49E                                      ; fully-qualified     # 💞 E0.6 revolving hearts
-1F495                                      ; fully-qualified     # 💕 E0.6 two hearts
-1F49F                                      ; fully-qualified     # 💟 E0.6 heart decoration
-2763 FE0F                                  ; fully-qualified     # ❣️ E1.0 heart exclamation
-2763                                       ; unqualified         # ❣ E1.0 heart exclamation
-1F494                                      ; fully-qualified     # 💔 E0.6 broken heart
-2764 FE0F                                  ; fully-qualified     # ❤️ E0.6 red heart
-2764                                       ; unqualified         # ❤ E0.6 red heart
-1F9E1                                      ; fully-qualified     # 🧡 E5.0 orange heart
-1F49B                                      ; fully-qualified     # 💛 E0.6 yellow heart
-1F49A                                      ; fully-qualified     # 💚 E0.6 green heart
-1F499                                      ; fully-qualified     # 💙 E0.6 blue heart
-1F49C                                      ; fully-qualified     # 💜 E0.6 purple heart
-1F90E                                      ; fully-qualified     # 🤎 E12.0 brown heart
-1F5A4                                      ; fully-qualified     # 🖤 E3.0 black heart
-1F90D                                      ; fully-qualified     # 🤍 E12.0 white heart
-1F4AF                                      ; fully-qualified     # 💯 E0.6 hundred points
-1F4A2                                      ; fully-qualified     # 💢 E0.6 anger symbol
-1F4A5                                      ; fully-qualified     # 💥 E0.6 collision
-1F4AB                                      ; fully-qualified     # 💫 E0.6 dizzy
-1F4A6                                      ; fully-qualified     # 💦 E0.6 sweat droplets
-1F4A8                                      ; fully-qualified     # 💨 E0.6 dashing away
-1F573 FE0F                                 ; fully-qualified     # 🕳️ E0.7 hole
-1F573                                      ; unqualified         # 🕳 E0.7 hole
-1F4A3                                      ; fully-qualified     # 💣 E0.6 bomb
-1F4AC                                      ; fully-qualified     # 💬 E0.6 speech balloon
-1F441 FE0F 200D 1F5E8 FE0F                 ; fully-qualified     # 👁️‍🗨️ E2.0 eye in speech bubble
-1F441 200D 1F5E8 FE0F                      ; unqualified         # 👁‍🗨️ E2.0 eye in speech bubble
-1F441 FE0F 200D 1F5E8                      ; unqualified         # 👁️‍🗨 E2.0 eye in speech bubble
-1F441 200D 1F5E8                           ; unqualified         # 👁‍🗨 E2.0 eye in speech bubble
-1F5E8 FE0F                                 ; fully-qualified     # 🗨️ E2.0 left speech bubble
-1F5E8                                      ; unqualified         # 🗨 E2.0 left speech bubble
-1F5EF FE0F                                 ; fully-qualified     # 🗯️ E0.7 right anger bubble
-1F5EF                                      ; unqualified         # 🗯 E0.7 right anger bubble
-1F4AD                                      ; fully-qualified     # 💭 E1.0 thought balloon
-1F4A4                                      ; fully-qualified     # 💤 E0.6 zzz
+1F48B                                                  ; fully-qualified     # 💋 E0.6 kiss mark
+1F48C                                                  ; fully-qualified     # 💌 E0.6 love letter
+1F498                                                  ; fully-qualified     # 💘 E0.6 heart with arrow
+1F49D                                                  ; fully-qualified     # 💝 E0.6 heart with ribbon
+1F496                                                  ; fully-qualified     # 💖 E0.6 sparkling heart
+1F497                                                  ; fully-qualified     # 💗 E0.6 growing heart
+1F493                                                  ; fully-qualified     # 💓 E0.6 beating heart
+1F49E                                                  ; fully-qualified     # 💞 E0.6 revolving hearts
+1F495                                                  ; fully-qualified     # 💕 E0.6 two hearts
+1F49F                                                  ; fully-qualified     # 💟 E0.6 heart decoration
+2763 FE0F                                              ; fully-qualified     # ❣️ E1.0 heart exclamation
+2763                                                   ; unqualified         # ❣ E1.0 heart exclamation
+1F494                                                  ; fully-qualified     # 💔 E0.6 broken heart
+2764 FE0F 200D 1F525                                   ; fully-qualified     # ❤️‍🔥 E13.1 heart on fire
+2764 200D 1F525                                        ; unqualified         # ❤‍🔥 E13.1 heart on fire
+2764 FE0F 200D 1FA79                                   ; fully-qualified     # ❤️‍🩹 E13.1 mending heart
+2764 200D 1FA79                                        ; unqualified         # ❤‍🩹 E13.1 mending heart
+2764 FE0F                                              ; fully-qualified     # ❤️ E0.6 red heart
+2764                                                   ; unqualified         # ❤ E0.6 red heart
+1F9E1                                                  ; fully-qualified     # 🧡 E5.0 orange heart
+1F49B                                                  ; fully-qualified     # 💛 E0.6 yellow heart
+1F49A                                                  ; fully-qualified     # 💚 E0.6 green heart
+1F499                                                  ; fully-qualified     # 💙 E0.6 blue heart
+1F49C                                                  ; fully-qualified     # 💜 E0.6 purple heart
+1F90E                                                  ; fully-qualified     # 🤎 E12.0 brown heart
+1F5A4                                                  ; fully-qualified     # 🖤 E3.0 black heart
+1F90D                                                  ; fully-qualified     # 🤍 E12.0 white heart
+1F4AF                                                  ; fully-qualified     # 💯 E0.6 hundred points
+1F4A2                                                  ; fully-qualified     # 💢 E0.6 anger symbol
+1F4A5                                                  ; fully-qualified     # 💥 E0.6 collision
+1F4AB                                                  ; fully-qualified     # 💫 E0.6 dizzy
+1F4A6                                                  ; fully-qualified     # 💦 E0.6 sweat droplets
+1F4A8                                                  ; fully-qualified     # 💨 E0.6 dashing away
+1F573 FE0F                                             ; fully-qualified     # 🕳️ E0.7 hole
+1F573                                                  ; unqualified         # 🕳 E0.7 hole
+1F4A3                                                  ; fully-qualified     # 💣 E0.6 bomb
+1F4AC                                                  ; fully-qualified     # 💬 E0.6 speech balloon
+1F441 FE0F 200D 1F5E8 FE0F                             ; fully-qualified     # 👁️‍🗨️ E2.0 eye in speech bubble
+1F441 200D 1F5E8 FE0F                                  ; unqualified         # 👁‍🗨️ E2.0 eye in speech bubble
+1F441 FE0F 200D 1F5E8                                  ; unqualified         # 👁️‍🗨 E2.0 eye in speech bubble
+1F441 200D 1F5E8                                       ; unqualified         # 👁‍🗨 E2.0 eye in speech bubble
+1F5E8 FE0F                                             ; fully-qualified     # 🗨️ E2.0 left speech bubble
+1F5E8                                                  ; unqualified         # 🗨 E2.0 left speech bubble
+1F5EF FE0F                                             ; fully-qualified     # 🗯️ E0.7 right anger bubble
+1F5EF                                                  ; unqualified         # 🗯 E0.7 right anger bubble
+1F4AD                                                  ; fully-qualified     # 💭 E1.0 thought balloon
+1F4A4                                                  ; fully-qualified     # 💤 E0.6 zzz
 
-# Smileys & Emotion subtotal:		162
-# Smileys & Emotion subtotal:		162	w/o modifiers
+# Smileys & Emotion subtotal:		170
+# Smileys & Emotion subtotal:		170	w/o modifiers
 
 # group: People & Body
 
 # subgroup: hand-fingers-open
-1F44B                                      ; fully-qualified     # 👋 E0.6 waving hand
-1F44B 1F3FB                                ; fully-qualified     # 👋🏻 E1.0 waving hand: light skin tone
-1F44B 1F3FC                                ; fully-qualified     # 👋🏼 E1.0 waving hand: medium-light skin tone
-1F44B 1F3FD                                ; fully-qualified     # 👋🏽 E1.0 waving hand: medium skin tone
-1F44B 1F3FE                                ; fully-qualified     # 👋🏾 E1.0 waving hand: medium-dark skin tone
-1F44B 1F3FF                                ; fully-qualified     # 👋🏿 E1.0 waving hand: dark skin tone
-1F91A                                      ; fully-qualified     # 🤚 E3.0 raised back of hand
-1F91A 1F3FB                                ; fully-qualified     # 🤚🏻 E3.0 raised back of hand: light skin tone
-1F91A 1F3FC                                ; fully-qualified     # 🤚🏼 E3.0 raised back of hand: medium-light skin tone
-1F91A 1F3FD                                ; fully-qualified     # 🤚🏽 E3.0 raised back of hand: medium skin tone
-1F91A 1F3FE                                ; fully-qualified     # 🤚🏾 E3.0 raised back of hand: medium-dark skin tone
-1F91A 1F3FF                                ; fully-qualified     # 🤚🏿 E3.0 raised back of hand: dark skin tone
-1F590 FE0F                                 ; fully-qualified     # 🖐️ E0.7 hand with fingers splayed
-1F590                                      ; unqualified         # 🖐 E0.7 hand with fingers splayed
-1F590 1F3FB                                ; fully-qualified     # 🖐🏻 E1.0 hand with fingers splayed: light skin tone
-1F590 1F3FC                                ; fully-qualified     # 🖐🏼 E1.0 hand with fingers splayed: medium-light skin tone
-1F590 1F3FD                                ; fully-qualified     # 🖐🏽 E1.0 hand with fingers splayed: medium skin tone
-1F590 1F3FE                                ; fully-qualified     # 🖐🏾 E1.0 hand with fingers splayed: medium-dark skin tone
-1F590 1F3FF                                ; fully-qualified     # 🖐🏿 E1.0 hand with fingers splayed: dark skin tone
-270B                                       ; fully-qualified     # ✋ E0.6 raised hand
-270B 1F3FB                                 ; fully-qualified     # ✋🏻 E1.0 raised hand: light skin tone
-270B 1F3FC                                 ; fully-qualified     # ✋🏼 E1.0 raised hand: medium-light skin tone
-270B 1F3FD                                 ; fully-qualified     # ✋🏽 E1.0 raised hand: medium skin tone
-270B 1F3FE                                 ; fully-qualified     # ✋🏾 E1.0 raised hand: medium-dark skin tone
-270B 1F3FF                                 ; fully-qualified     # ✋🏿 E1.0 raised hand: dark skin tone
-1F596                                      ; fully-qualified     # 🖖 E1.0 vulcan salute
-1F596 1F3FB                                ; fully-qualified     # 🖖🏻 E1.0 vulcan salute: light skin tone
-1F596 1F3FC                                ; fully-qualified     # 🖖🏼 E1.0 vulcan salute: medium-light skin tone
-1F596 1F3FD                                ; fully-qualified     # 🖖🏽 E1.0 vulcan salute: medium skin tone
-1F596 1F3FE                                ; fully-qualified     # 🖖🏾 E1.0 vulcan salute: medium-dark skin tone
-1F596 1F3FF                                ; fully-qualified     # 🖖🏿 E1.0 vulcan salute: dark skin tone
+1F44B                                                  ; fully-qualified     # 👋 E0.6 waving hand
+1F44B 1F3FB                                            ; fully-qualified     # 👋🏻 E1.0 waving hand: light skin tone
+1F44B 1F3FC                                            ; fully-qualified     # 👋🏼 E1.0 waving hand: medium-light skin tone
+1F44B 1F3FD                                            ; fully-qualified     # 👋🏽 E1.0 waving hand: medium skin tone
+1F44B 1F3FE                                            ; fully-qualified     # 👋🏾 E1.0 waving hand: medium-dark skin tone
+1F44B 1F3FF                                            ; fully-qualified     # 👋🏿 E1.0 waving hand: dark skin tone
+1F91A                                                  ; fully-qualified     # 🤚 E3.0 raised back of hand
+1F91A 1F3FB                                            ; fully-qualified     # 🤚🏻 E3.0 raised back of hand: light skin tone
+1F91A 1F3FC                                            ; fully-qualified     # 🤚🏼 E3.0 raised back of hand: medium-light skin tone
+1F91A 1F3FD                                            ; fully-qualified     # 🤚🏽 E3.0 raised back of hand: medium skin tone
+1F91A 1F3FE                                            ; fully-qualified     # 🤚🏾 E3.0 raised back of hand: medium-dark skin tone
+1F91A 1F3FF                                            ; fully-qualified     # 🤚🏿 E3.0 raised back of hand: dark skin tone
+1F590 FE0F                                             ; fully-qualified     # 🖐️ E0.7 hand with fingers splayed
+1F590                                                  ; unqualified         # 🖐 E0.7 hand with fingers splayed
+1F590 1F3FB                                            ; fully-qualified     # 🖐🏻 E1.0 hand with fingers splayed: light skin tone
+1F590 1F3FC                                            ; fully-qualified     # 🖐🏼 E1.0 hand with fingers splayed: medium-light skin tone
+1F590 1F3FD                                            ; fully-qualified     # 🖐🏽 E1.0 hand with fingers splayed: medium skin tone
+1F590 1F3FE                                            ; fully-qualified     # 🖐🏾 E1.0 hand with fingers splayed: medium-dark skin tone
+1F590 1F3FF                                            ; fully-qualified     # 🖐🏿 E1.0 hand with fingers splayed: dark skin tone
+270B                                                   ; fully-qualified     # ✋ E0.6 raised hand
+270B 1F3FB                                             ; fully-qualified     # ✋🏻 E1.0 raised hand: light skin tone
+270B 1F3FC                                             ; fully-qualified     # ✋🏼 E1.0 raised hand: medium-light skin tone
+270B 1F3FD                                             ; fully-qualified     # ✋🏽 E1.0 raised hand: medium skin tone
+270B 1F3FE                                             ; fully-qualified     # ✋🏾 E1.0 raised hand: medium-dark skin tone
+270B 1F3FF                                             ; fully-qualified     # ✋🏿 E1.0 raised hand: dark skin tone
+1F596                                                  ; fully-qualified     # 🖖 E1.0 vulcan salute
+1F596 1F3FB                                            ; fully-qualified     # 🖖🏻 E1.0 vulcan salute: light skin tone
+1F596 1F3FC                                            ; fully-qualified     # 🖖🏼 E1.0 vulcan salute: medium-light skin tone
+1F596 1F3FD                                            ; fully-qualified     # 🖖🏽 E1.0 vulcan salute: medium skin tone
+1F596 1F3FE                                            ; fully-qualified     # 🖖🏾 E1.0 vulcan salute: medium-dark skin tone
+1F596 1F3FF                                            ; fully-qualified     # 🖖🏿 E1.0 vulcan salute: dark skin tone
 
 # subgroup: hand-fingers-partial
-1F44C                                      ; fully-qualified     # 👌 E0.6 OK hand
-1F44C 1F3FB                                ; fully-qualified     # 👌🏻 E1.0 OK hand: light skin tone
-1F44C 1F3FC                                ; fully-qualified     # 👌🏼 E1.0 OK hand: medium-light skin tone
-1F44C 1F3FD                                ; fully-qualified     # 👌🏽 E1.0 OK hand: medium skin tone
-1F44C 1F3FE                                ; fully-qualified     # 👌🏾 E1.0 OK hand: medium-dark skin tone
-1F44C 1F3FF                                ; fully-qualified     # 👌🏿 E1.0 OK hand: dark skin tone
-1F90C                                      ; fully-qualified     # 🤌 E13.0 pinched fingers
-1F90C 1F3FB                                ; fully-qualified     # 🤌🏻 E13.0 pinched fingers: light skin tone
-1F90C 1F3FC                                ; fully-qualified     # 🤌🏼 E13.0 pinched fingers: medium-light skin tone
-1F90C 1F3FD                                ; fully-qualified     # 🤌🏽 E13.0 pinched fingers: medium skin tone
-1F90C 1F3FE                                ; fully-qualified     # 🤌🏾 E13.0 pinched fingers: medium-dark skin tone
-1F90C 1F3FF                                ; fully-qualified     # 🤌🏿 E13.0 pinched fingers: dark skin tone
-1F90F                                      ; fully-qualified     # 🤏 E12.0 pinching hand
-1F90F 1F3FB                                ; fully-qualified     # 🤏🏻 E12.0 pinching hand: light skin tone
-1F90F 1F3FC                                ; fully-qualified     # 🤏🏼 E12.0 pinching hand: medium-light skin tone
-1F90F 1F3FD                                ; fully-qualified     # 🤏🏽 E12.0 pinching hand: medium skin tone
-1F90F 1F3FE                                ; fully-qualified     # 🤏🏾 E12.0 pinching hand: medium-dark skin tone
-1F90F 1F3FF                                ; fully-qualified     # 🤏🏿 E12.0 pinching hand: dark skin tone
-270C FE0F                                  ; fully-qualified     # ✌️ E0.6 victory hand
-270C                                       ; unqualified         # ✌ E0.6 victory hand
-270C 1F3FB                                 ; fully-qualified     # ✌🏻 E1.0 victory hand: light skin tone
-270C 1F3FC                                 ; fully-qualified     # ✌🏼 E1.0 victory hand: medium-light skin tone
-270C 1F3FD                                 ; fully-qualified     # ✌🏽 E1.0 victory hand: medium skin tone
-270C 1F3FE                                 ; fully-qualified     # ✌🏾 E1.0 victory hand: medium-dark skin tone
-270C 1F3FF                                 ; fully-qualified     # ✌🏿 E1.0 victory hand: dark skin tone
-1F91E                                      ; fully-qualified     # 🤞 E3.0 crossed fingers
-1F91E 1F3FB                                ; fully-qualified     # 🤞🏻 E3.0 crossed fingers: light skin tone
-1F91E 1F3FC                                ; fully-qualified     # 🤞🏼 E3.0 crossed fingers: medium-light skin tone
-1F91E 1F3FD                                ; fully-qualified     # 🤞🏽 E3.0 crossed fingers: medium skin tone
-1F91E 1F3FE                                ; fully-qualified     # 🤞🏾 E3.0 crossed fingers: medium-dark skin tone
-1F91E 1F3FF                                ; fully-qualified     # 🤞🏿 E3.0 crossed fingers: dark skin tone
-1F91F                                      ; fully-qualified     # 🤟 E5.0 love-you gesture
-1F91F 1F3FB                                ; fully-qualified     # 🤟🏻 E5.0 love-you gesture: light skin tone
-1F91F 1F3FC                                ; fully-qualified     # 🤟🏼 E5.0 love-you gesture: medium-light skin tone
-1F91F 1F3FD                                ; fully-qualified     # 🤟🏽 E5.0 love-you gesture: medium skin tone
-1F91F 1F3FE                                ; fully-qualified     # 🤟🏾 E5.0 love-you gesture: medium-dark skin tone
-1F91F 1F3FF                                ; fully-qualified     # 🤟🏿 E5.0 love-you gesture: dark skin tone
-1F918                                      ; fully-qualified     # 🤘 E1.0 sign of the horns
-1F918 1F3FB                                ; fully-qualified     # 🤘🏻 E1.0 sign of the horns: light skin tone
-1F918 1F3FC                                ; fully-qualified     # 🤘🏼 E1.0 sign of the horns: medium-light skin tone
-1F918 1F3FD                                ; fully-qualified     # 🤘🏽 E1.0 sign of the horns: medium skin tone
-1F918 1F3FE                                ; fully-qualified     # 🤘🏾 E1.0 sign of the horns: medium-dark skin tone
-1F918 1F3FF                                ; fully-qualified     # 🤘🏿 E1.0 sign of the horns: dark skin tone
-1F919                                      ; fully-qualified     # 🤙 E3.0 call me hand
-1F919 1F3FB                                ; fully-qualified     # 🤙🏻 E3.0 call me hand: light skin tone
-1F919 1F3FC                                ; fully-qualified     # 🤙🏼 E3.0 call me hand: medium-light skin tone
-1F919 1F3FD                                ; fully-qualified     # 🤙🏽 E3.0 call me hand: medium skin tone
-1F919 1F3FE                                ; fully-qualified     # 🤙🏾 E3.0 call me hand: medium-dark skin tone
-1F919 1F3FF                                ; fully-qualified     # 🤙🏿 E3.0 call me hand: dark skin tone
+1F44C                                                  ; fully-qualified     # 👌 E0.6 OK hand
+1F44C 1F3FB                                            ; fully-qualified     # 👌🏻 E1.0 OK hand: light skin tone
+1F44C 1F3FC                                            ; fully-qualified     # 👌🏼 E1.0 OK hand: medium-light skin tone
+1F44C 1F3FD                                            ; fully-qualified     # 👌🏽 E1.0 OK hand: medium skin tone
+1F44C 1F3FE                                            ; fully-qualified     # 👌🏾 E1.0 OK hand: medium-dark skin tone
+1F44C 1F3FF                                            ; fully-qualified     # 👌🏿 E1.0 OK hand: dark skin tone
+1F90C                                                  ; fully-qualified     # 🤌 E13.0 pinched fingers
+1F90C 1F3FB                                            ; fully-qualified     # 🤌🏻 E13.0 pinched fingers: light skin tone
+1F90C 1F3FC                                            ; fully-qualified     # 🤌🏼 E13.0 pinched fingers: medium-light skin tone
+1F90C 1F3FD                                            ; fully-qualified     # 🤌🏽 E13.0 pinched fingers: medium skin tone
+1F90C 1F3FE                                            ; fully-qualified     # 🤌🏾 E13.0 pinched fingers: medium-dark skin tone
+1F90C 1F3FF                                            ; fully-qualified     # 🤌🏿 E13.0 pinched fingers: dark skin tone
+1F90F                                                  ; fully-qualified     # 🤏 E12.0 pinching hand
+1F90F 1F3FB                                            ; fully-qualified     # 🤏🏻 E12.0 pinching hand: light skin tone
+1F90F 1F3FC                                            ; fully-qualified     # 🤏🏼 E12.0 pinching hand: medium-light skin tone
+1F90F 1F3FD                                            ; fully-qualified     # 🤏🏽 E12.0 pinching hand: medium skin tone
+1F90F 1F3FE                                            ; fully-qualified     # 🤏🏾 E12.0 pinching hand: medium-dark skin tone
+1F90F 1F3FF                                            ; fully-qualified     # 🤏🏿 E12.0 pinching hand: dark skin tone
+270C FE0F                                              ; fully-qualified     # ✌️ E0.6 victory hand
+270C                                                   ; unqualified         # ✌ E0.6 victory hand
+270C 1F3FB                                             ; fully-qualified     # ✌🏻 E1.0 victory hand: light skin tone
+270C 1F3FC                                             ; fully-qualified     # ✌🏼 E1.0 victory hand: medium-light skin tone
+270C 1F3FD                                             ; fully-qualified     # ✌🏽 E1.0 victory hand: medium skin tone
+270C 1F3FE                                             ; fully-qualified     # ✌🏾 E1.0 victory hand: medium-dark skin tone
+270C 1F3FF                                             ; fully-qualified     # ✌🏿 E1.0 victory hand: dark skin tone
+1F91E                                                  ; fully-qualified     # 🤞 E3.0 crossed fingers
+1F91E 1F3FB                                            ; fully-qualified     # 🤞🏻 E3.0 crossed fingers: light skin tone
+1F91E 1F3FC                                            ; fully-qualified     # 🤞🏼 E3.0 crossed fingers: medium-light skin tone
+1F91E 1F3FD                                            ; fully-qualified     # 🤞🏽 E3.0 crossed fingers: medium skin tone
+1F91E 1F3FE                                            ; fully-qualified     # 🤞🏾 E3.0 crossed fingers: medium-dark skin tone
+1F91E 1F3FF                                            ; fully-qualified     # 🤞🏿 E3.0 crossed fingers: dark skin tone
+1F91F                                                  ; fully-qualified     # 🤟 E5.0 love-you gesture
+1F91F 1F3FB                                            ; fully-qualified     # 🤟🏻 E5.0 love-you gesture: light skin tone
+1F91F 1F3FC                                            ; fully-qualified     # 🤟🏼 E5.0 love-you gesture: medium-light skin tone
+1F91F 1F3FD                                            ; fully-qualified     # 🤟🏽 E5.0 love-you gesture: medium skin tone
+1F91F 1F3FE                                            ; fully-qualified     # 🤟🏾 E5.0 love-you gesture: medium-dark skin tone
+1F91F 1F3FF                                            ; fully-qualified     # 🤟🏿 E5.0 love-you gesture: dark skin tone
+1F918                                                  ; fully-qualified     # 🤘 E1.0 sign of the horns
+1F918 1F3FB                                            ; fully-qualified     # 🤘🏻 E1.0 sign of the horns: light skin tone
+1F918 1F3FC                                            ; fully-qualified     # 🤘🏼 E1.0 sign of the horns: medium-light skin tone
+1F918 1F3FD                                            ; fully-qualified     # 🤘🏽 E1.0 sign of the horns: medium skin tone
+1F918 1F3FE                                            ; fully-qualified     # 🤘🏾 E1.0 sign of the horns: medium-dark skin tone
+1F918 1F3FF                                            ; fully-qualified     # 🤘🏿 E1.0 sign of the horns: dark skin tone
+1F919                                                  ; fully-qualified     # 🤙 E3.0 call me hand
+1F919 1F3FB                                            ; fully-qualified     # 🤙🏻 E3.0 call me hand: light skin tone
+1F919 1F3FC                                            ; fully-qualified     # 🤙🏼 E3.0 call me hand: medium-light skin tone
+1F919 1F3FD                                            ; fully-qualified     # 🤙🏽 E3.0 call me hand: medium skin tone
+1F919 1F3FE                                            ; fully-qualified     # 🤙🏾 E3.0 call me hand: medium-dark skin tone
+1F919 1F3FF                                            ; fully-qualified     # 🤙🏿 E3.0 call me hand: dark skin tone
 
 # subgroup: hand-single-finger
-1F448                                      ; fully-qualified     # 👈 E0.6 backhand index pointing left
-1F448 1F3FB                                ; fully-qualified     # 👈🏻 E1.0 backhand index pointing left: light skin tone
-1F448 1F3FC                                ; fully-qualified     # 👈🏼 E1.0 backhand index pointing left: medium-light skin tone
-1F448 1F3FD                                ; fully-qualified     # 👈🏽 E1.0 backhand index pointing left: medium skin tone
-1F448 1F3FE                                ; fully-qualified     # 👈🏾 E1.0 backhand index pointing left: medium-dark skin tone
-1F448 1F3FF                                ; fully-qualified     # 👈🏿 E1.0 backhand index pointing left: dark skin tone
-1F449                                      ; fully-qualified     # 👉 E0.6 backhand index pointing right
-1F449 1F3FB                                ; fully-qualified     # 👉🏻 E1.0 backhand index pointing right: light skin tone
-1F449 1F3FC                                ; fully-qualified     # 👉🏼 E1.0 backhand index pointing right: medium-light skin tone
-1F449 1F3FD                                ; fully-qualified     # 👉🏽 E1.0 backhand index pointing right: medium skin tone
-1F449 1F3FE                                ; fully-qualified     # 👉🏾 E1.0 backhand index pointing right: medium-dark skin tone
-1F449 1F3FF                                ; fully-qualified     # 👉🏿 E1.0 backhand index pointing right: dark skin tone
-1F446                                      ; fully-qualified     # 👆 E0.6 backhand index pointing up
-1F446 1F3FB                                ; fully-qualified     # 👆🏻 E1.0 backhand index pointing up: light skin tone
-1F446 1F3FC                                ; fully-qualified     # 👆🏼 E1.0 backhand index pointing up: medium-light skin tone
-1F446 1F3FD                                ; fully-qualified     # 👆🏽 E1.0 backhand index pointing up: medium skin tone
-1F446 1F3FE                                ; fully-qualified     # 👆🏾 E1.0 backhand index pointing up: medium-dark skin tone
-1F446 1F3FF                                ; fully-qualified     # 👆🏿 E1.0 backhand index pointing up: dark skin tone
-1F595                                      ; fully-qualified     # 🖕 E1.0 middle finger
-1F595 1F3FB                                ; fully-qualified     # 🖕🏻 E1.0 middle finger: light skin tone
-1F595 1F3FC                                ; fully-qualified     # 🖕🏼 E1.0 middle finger: medium-light skin tone
-1F595 1F3FD                                ; fully-qualified     # 🖕🏽 E1.0 middle finger: medium skin tone
-1F595 1F3FE                                ; fully-qualified     # 🖕🏾 E1.0 middle finger: medium-dark skin tone
-1F595 1F3FF                                ; fully-qualified     # 🖕🏿 E1.0 middle finger: dark skin tone
-1F447                                      ; fully-qualified     # 👇 E0.6 backhand index pointing down
-1F447 1F3FB                                ; fully-qualified     # 👇🏻 E1.0 backhand index pointing down: light skin tone
-1F447 1F3FC                                ; fully-qualified     # 👇🏼 E1.0 backhand index pointing down: medium-light skin tone
-1F447 1F3FD                                ; fully-qualified     # 👇🏽 E1.0 backhand index pointing down: medium skin tone
-1F447 1F3FE                                ; fully-qualified     # 👇🏾 E1.0 backhand index pointing down: medium-dark skin tone
-1F447 1F3FF                                ; fully-qualified     # 👇🏿 E1.0 backhand index pointing down: dark skin tone
-261D FE0F                                  ; fully-qualified     # ☝️ E0.6 index pointing up
-261D                                       ; unqualified         # ☝ E0.6 index pointing up
-261D 1F3FB                                 ; fully-qualified     # ☝🏻 E1.0 index pointing up: light skin tone
-261D 1F3FC                                 ; fully-qualified     # ☝🏼 E1.0 index pointing up: medium-light skin tone
-261D 1F3FD                                 ; fully-qualified     # ☝🏽 E1.0 index pointing up: medium skin tone
-261D 1F3FE                                 ; fully-qualified     # ☝🏾 E1.0 index pointing up: medium-dark skin tone
-261D 1F3FF                                 ; fully-qualified     # ☝🏿 E1.0 index pointing up: dark skin tone
+1F448                                                  ; fully-qualified     # 👈 E0.6 backhand index pointing left
+1F448 1F3FB                                            ; fully-qualified     # 👈🏻 E1.0 backhand index pointing left: light skin tone
+1F448 1F3FC                                            ; fully-qualified     # 👈🏼 E1.0 backhand index pointing left: medium-light skin tone
+1F448 1F3FD                                            ; fully-qualified     # 👈🏽 E1.0 backhand index pointing left: medium skin tone
+1F448 1F3FE                                            ; fully-qualified     # 👈🏾 E1.0 backhand index pointing left: medium-dark skin tone
+1F448 1F3FF                                            ; fully-qualified     # 👈🏿 E1.0 backhand index pointing left: dark skin tone
+1F449                                                  ; fully-qualified     # 👉 E0.6 backhand index pointing right
+1F449 1F3FB                                            ; fully-qualified     # 👉🏻 E1.0 backhand index pointing right: light skin tone
+1F449 1F3FC                                            ; fully-qualified     # 👉🏼 E1.0 backhand index pointing right: medium-light skin tone
+1F449 1F3FD                                            ; fully-qualified     # 👉🏽 E1.0 backhand index pointing right: medium skin tone
+1F449 1F3FE                                            ; fully-qualified     # 👉🏾 E1.0 backhand index pointing right: medium-dark skin tone
+1F449 1F3FF                                            ; fully-qualified     # 👉🏿 E1.0 backhand index pointing right: dark skin tone
+1F446                                                  ; fully-qualified     # 👆 E0.6 backhand index pointing up
+1F446 1F3FB                                            ; fully-qualified     # 👆🏻 E1.0 backhand index pointing up: light skin tone
+1F446 1F3FC                                            ; fully-qualified     # 👆🏼 E1.0 backhand index pointing up: medium-light skin tone
+1F446 1F3FD                                            ; fully-qualified     # 👆🏽 E1.0 backhand index pointing up: medium skin tone
+1F446 1F3FE                                            ; fully-qualified     # 👆🏾 E1.0 backhand index pointing up: medium-dark skin tone
+1F446 1F3FF                                            ; fully-qualified     # 👆🏿 E1.0 backhand index pointing up: dark skin tone
+1F595                                                  ; fully-qualified     # 🖕 E1.0 middle finger
+1F595 1F3FB                                            ; fully-qualified     # 🖕🏻 E1.0 middle finger: light skin tone
+1F595 1F3FC                                            ; fully-qualified     # 🖕🏼 E1.0 middle finger: medium-light skin tone
+1F595 1F3FD                                            ; fully-qualified     # 🖕🏽 E1.0 middle finger: medium skin tone
+1F595 1F3FE                                            ; fully-qualified     # 🖕🏾 E1.0 middle finger: medium-dark skin tone
+1F595 1F3FF                                            ; fully-qualified     # 🖕🏿 E1.0 middle finger: dark skin tone
+1F447                                                  ; fully-qualified     # 👇 E0.6 backhand index pointing down
+1F447 1F3FB                                            ; fully-qualified     # 👇🏻 E1.0 backhand index pointing down: light skin tone
+1F447 1F3FC                                            ; fully-qualified     # 👇🏼 E1.0 backhand index pointing down: medium-light skin tone
+1F447 1F3FD                                            ; fully-qualified     # 👇🏽 E1.0 backhand index pointing down: medium skin tone
+1F447 1F3FE                                            ; fully-qualified     # 👇🏾 E1.0 backhand index pointing down: medium-dark skin tone
+1F447 1F3FF                                            ; fully-qualified     # 👇🏿 E1.0 backhand index pointing down: dark skin tone
+261D FE0F                                              ; fully-qualified     # ☝️ E0.6 index pointing up
+261D                                                   ; unqualified         # ☝ E0.6 index pointing up
+261D 1F3FB                                             ; fully-qualified     # ☝🏻 E1.0 index pointing up: light skin tone
+261D 1F3FC                                             ; fully-qualified     # ☝🏼 E1.0 index pointing up: medium-light skin tone
+261D 1F3FD                                             ; fully-qualified     # ☝🏽 E1.0 index pointing up: medium skin tone
+261D 1F3FE                                             ; fully-qualified     # ☝🏾 E1.0 index pointing up: medium-dark skin tone
+261D 1F3FF                                             ; fully-qualified     # ☝🏿 E1.0 index pointing up: dark skin tone
 
 # subgroup: hand-fingers-closed
-1F44D                                      ; fully-qualified     # 👍 E0.6 thumbs up
-1F44D 1F3FB                                ; fully-qualified     # 👍🏻 E1.0 thumbs up: light skin tone
-1F44D 1F3FC                                ; fully-qualified     # 👍🏼 E1.0 thumbs up: medium-light skin tone
-1F44D 1F3FD                                ; fully-qualified     # 👍🏽 E1.0 thumbs up: medium skin tone
-1F44D 1F3FE                                ; fully-qualified     # 👍🏾 E1.0 thumbs up: medium-dark skin tone
-1F44D 1F3FF                                ; fully-qualified     # 👍🏿 E1.0 thumbs up: dark skin tone
-1F44E                                      ; fully-qualified     # 👎 E0.6 thumbs down
-1F44E 1F3FB                                ; fully-qualified     # 👎🏻 E1.0 thumbs down: light skin tone
-1F44E 1F3FC                                ; fully-qualified     # 👎🏼 E1.0 thumbs down: medium-light skin tone
-1F44E 1F3FD                                ; fully-qualified     # 👎🏽 E1.0 thumbs down: medium skin tone
-1F44E 1F3FE                                ; fully-qualified     # 👎🏾 E1.0 thumbs down: medium-dark skin tone
-1F44E 1F3FF                                ; fully-qualified     # 👎🏿 E1.0 thumbs down: dark skin tone
-270A                                       ; fully-qualified     # ✊ E0.6 raised fist
-270A 1F3FB                                 ; fully-qualified     # ✊🏻 E1.0 raised fist: light skin tone
-270A 1F3FC                                 ; fully-qualified     # ✊🏼 E1.0 raised fist: medium-light skin tone
-270A 1F3FD                                 ; fully-qualified     # ✊🏽 E1.0 raised fist: medium skin tone
-270A 1F3FE                                 ; fully-qualified     # ✊🏾 E1.0 raised fist: medium-dark skin tone
-270A 1F3FF                                 ; fully-qualified     # ✊🏿 E1.0 raised fist: dark skin tone
-1F44A                                      ; fully-qualified     # 👊 E0.6 oncoming fist
-1F44A 1F3FB                                ; fully-qualified     # 👊🏻 E1.0 oncoming fist: light skin tone
-1F44A 1F3FC                                ; fully-qualified     # 👊🏼 E1.0 oncoming fist: medium-light skin tone
-1F44A 1F3FD                                ; fully-qualified     # 👊🏽 E1.0 oncoming fist: medium skin tone
-1F44A 1F3FE                                ; fully-qualified     # 👊🏾 E1.0 oncoming fist: medium-dark skin tone
-1F44A 1F3FF                                ; fully-qualified     # 👊🏿 E1.0 oncoming fist: dark skin tone
-1F91B                                      ; fully-qualified     # 🤛 E3.0 left-facing fist
-1F91B 1F3FB                                ; fully-qualified     # 🤛🏻 E3.0 left-facing fist: light skin tone
-1F91B 1F3FC                                ; fully-qualified     # 🤛🏼 E3.0 left-facing fist: medium-light skin tone
-1F91B 1F3FD                                ; fully-qualified     # 🤛🏽 E3.0 left-facing fist: medium skin tone
-1F91B 1F3FE                                ; fully-qualified     # 🤛🏾 E3.0 left-facing fist: medium-dark skin tone
-1F91B 1F3FF                                ; fully-qualified     # 🤛🏿 E3.0 left-facing fist: dark skin tone
-1F91C                                      ; fully-qualified     # 🤜 E3.0 right-facing fist
-1F91C 1F3FB                                ; fully-qualified     # 🤜🏻 E3.0 right-facing fist: light skin tone
-1F91C 1F3FC                                ; fully-qualified     # 🤜🏼 E3.0 right-facing fist: medium-light skin tone
-1F91C 1F3FD                                ; fully-qualified     # 🤜🏽 E3.0 right-facing fist: medium skin tone
-1F91C 1F3FE                                ; fully-qualified     # 🤜🏾 E3.0 right-facing fist: medium-dark skin tone
-1F91C 1F3FF                                ; fully-qualified     # 🤜🏿 E3.0 right-facing fist: dark skin tone
+1F44D                                                  ; fully-qualified     # 👍 E0.6 thumbs up
+1F44D 1F3FB                                            ; fully-qualified     # 👍🏻 E1.0 thumbs up: light skin tone
+1F44D 1F3FC                                            ; fully-qualified     # 👍🏼 E1.0 thumbs up: medium-light skin tone
+1F44D 1F3FD                                            ; fully-qualified     # 👍🏽 E1.0 thumbs up: medium skin tone
+1F44D 1F3FE                                            ; fully-qualified     # 👍🏾 E1.0 thumbs up: medium-dark skin tone
+1F44D 1F3FF                                            ; fully-qualified     # 👍🏿 E1.0 thumbs up: dark skin tone
+1F44E                                                  ; fully-qualified     # 👎 E0.6 thumbs down
+1F44E 1F3FB                                            ; fully-qualified     # 👎🏻 E1.0 thumbs down: light skin tone
+1F44E 1F3FC                                            ; fully-qualified     # 👎🏼 E1.0 thumbs down: medium-light skin tone
+1F44E 1F3FD                                            ; fully-qualified     # 👎🏽 E1.0 thumbs down: medium skin tone
+1F44E 1F3FE                                            ; fully-qualified     # 👎🏾 E1.0 thumbs down: medium-dark skin tone
+1F44E 1F3FF                                            ; fully-qualified     # 👎🏿 E1.0 thumbs down: dark skin tone
+270A                                                   ; fully-qualified     # ✊ E0.6 raised fist
+270A 1F3FB                                             ; fully-qualified     # ✊🏻 E1.0 raised fist: light skin tone
+270A 1F3FC                                             ; fully-qualified     # ✊🏼 E1.0 raised fist: medium-light skin tone
+270A 1F3FD                                             ; fully-qualified     # ✊🏽 E1.0 raised fist: medium skin tone
+270A 1F3FE                                             ; fully-qualified     # ✊🏾 E1.0 raised fist: medium-dark skin tone
+270A 1F3FF                                             ; fully-qualified     # ✊🏿 E1.0 raised fist: dark skin tone
+1F44A                                                  ; fully-qualified     # 👊 E0.6 oncoming fist
+1F44A 1F3FB                                            ; fully-qualified     # 👊🏻 E1.0 oncoming fist: light skin tone
+1F44A 1F3FC                                            ; fully-qualified     # 👊🏼 E1.0 oncoming fist: medium-light skin tone
+1F44A 1F3FD                                            ; fully-qualified     # 👊🏽 E1.0 oncoming fist: medium skin tone
+1F44A 1F3FE                                            ; fully-qualified     # 👊🏾 E1.0 oncoming fist: medium-dark skin tone
+1F44A 1F3FF                                            ; fully-qualified     # 👊🏿 E1.0 oncoming fist: dark skin tone
+1F91B                                                  ; fully-qualified     # 🤛 E3.0 left-facing fist
+1F91B 1F3FB                                            ; fully-qualified     # 🤛🏻 E3.0 left-facing fist: light skin tone
+1F91B 1F3FC                                            ; fully-qualified     # 🤛🏼 E3.0 left-facing fist: medium-light skin tone
+1F91B 1F3FD                                            ; fully-qualified     # 🤛🏽 E3.0 left-facing fist: medium skin tone
+1F91B 1F3FE                                            ; fully-qualified     # 🤛🏾 E3.0 left-facing fist: medium-dark skin tone
+1F91B 1F3FF                                            ; fully-qualified     # 🤛🏿 E3.0 left-facing fist: dark skin tone
+1F91C                                                  ; fully-qualified     # 🤜 E3.0 right-facing fist
+1F91C 1F3FB                                            ; fully-qualified     # 🤜🏻 E3.0 right-facing fist: light skin tone
+1F91C 1F3FC                                            ; fully-qualified     # 🤜🏼 E3.0 right-facing fist: medium-light skin tone
+1F91C 1F3FD                                            ; fully-qualified     # 🤜🏽 E3.0 right-facing fist: medium skin tone
+1F91C 1F3FE                                            ; fully-qualified     # 🤜🏾 E3.0 right-facing fist: medium-dark skin tone
+1F91C 1F3FF                                            ; fully-qualified     # 🤜🏿 E3.0 right-facing fist: dark skin tone
 
 # subgroup: hands
-1F44F                                      ; fully-qualified     # 👏 E0.6 clapping hands
-1F44F 1F3FB                                ; fully-qualified     # 👏🏻 E1.0 clapping hands: light skin tone
-1F44F 1F3FC                                ; fully-qualified     # 👏🏼 E1.0 clapping hands: medium-light skin tone
-1F44F 1F3FD                                ; fully-qualified     # 👏🏽 E1.0 clapping hands: medium skin tone
-1F44F 1F3FE                                ; fully-qualified     # 👏🏾 E1.0 clapping hands: medium-dark skin tone
-1F44F 1F3FF                                ; fully-qualified     # 👏🏿 E1.0 clapping hands: dark skin tone
-1F64C                                      ; fully-qualified     # 🙌 E0.6 raising hands
-1F64C 1F3FB                                ; fully-qualified     # 🙌🏻 E1.0 raising hands: light skin tone
-1F64C 1F3FC                                ; fully-qualified     # 🙌🏼 E1.0 raising hands: medium-light skin tone
-1F64C 1F3FD                                ; fully-qualified     # 🙌🏽 E1.0 raising hands: medium skin tone
-1F64C 1F3FE                                ; fully-qualified     # 🙌🏾 E1.0 raising hands: medium-dark skin tone
-1F64C 1F3FF                                ; fully-qualified     # 🙌🏿 E1.0 raising hands: dark skin tone
-1F450                                      ; fully-qualified     # 👐 E0.6 open hands
-1F450 1F3FB                                ; fully-qualified     # 👐🏻 E1.0 open hands: light skin tone
-1F450 1F3FC                                ; fully-qualified     # 👐🏼 E1.0 open hands: medium-light skin tone
-1F450 1F3FD                                ; fully-qualified     # 👐🏽 E1.0 open hands: medium skin tone
-1F450 1F3FE                                ; fully-qualified     # 👐🏾 E1.0 open hands: medium-dark skin tone
-1F450 1F3FF                                ; fully-qualified     # 👐🏿 E1.0 open hands: dark skin tone
-1F932                                      ; fully-qualified     # 🤲 E5.0 palms up together
-1F932 1F3FB                                ; fully-qualified     # 🤲🏻 E5.0 palms up together: light skin tone
-1F932 1F3FC                                ; fully-qualified     # 🤲🏼 E5.0 palms up together: medium-light skin tone
-1F932 1F3FD                                ; fully-qualified     # 🤲🏽 E5.0 palms up together: medium skin tone
-1F932 1F3FE                                ; fully-qualified     # 🤲🏾 E5.0 palms up together: medium-dark skin tone
-1F932 1F3FF                                ; fully-qualified     # 🤲🏿 E5.0 palms up together: dark skin tone
-1F91D                                      ; fully-qualified     # 🤝 E3.0 handshake
-1F64F                                      ; fully-qualified     # 🙏 E0.6 folded hands
-1F64F 1F3FB                                ; fully-qualified     # 🙏🏻 E1.0 folded hands: light skin tone
-1F64F 1F3FC                                ; fully-qualified     # 🙏🏼 E1.0 folded hands: medium-light skin tone
-1F64F 1F3FD                                ; fully-qualified     # 🙏🏽 E1.0 folded hands: medium skin tone
-1F64F 1F3FE                                ; fully-qualified     # 🙏🏾 E1.0 folded hands: medium-dark skin tone
-1F64F 1F3FF                                ; fully-qualified     # 🙏🏿 E1.0 folded hands: dark skin tone
+1F44F                                                  ; fully-qualified     # 👏 E0.6 clapping hands
+1F44F 1F3FB                                            ; fully-qualified     # 👏🏻 E1.0 clapping hands: light skin tone
+1F44F 1F3FC                                            ; fully-qualified     # 👏🏼 E1.0 clapping hands: medium-light skin tone
+1F44F 1F3FD                                            ; fully-qualified     # 👏🏽 E1.0 clapping hands: medium skin tone
+1F44F 1F3FE                                            ; fully-qualified     # 👏🏾 E1.0 clapping hands: medium-dark skin tone
+1F44F 1F3FF                                            ; fully-qualified     # 👏🏿 E1.0 clapping hands: dark skin tone
+1F64C                                                  ; fully-qualified     # 🙌 E0.6 raising hands
+1F64C 1F3FB                                            ; fully-qualified     # 🙌🏻 E1.0 raising hands: light skin tone
+1F64C 1F3FC                                            ; fully-qualified     # 🙌🏼 E1.0 raising hands: medium-light skin tone
+1F64C 1F3FD                                            ; fully-qualified     # 🙌🏽 E1.0 raising hands: medium skin tone
+1F64C 1F3FE                                            ; fully-qualified     # 🙌🏾 E1.0 raising hands: medium-dark skin tone
+1F64C 1F3FF                                            ; fully-qualified     # 🙌🏿 E1.0 raising hands: dark skin tone
+1F450                                                  ; fully-qualified     # 👐 E0.6 open hands
+1F450 1F3FB                                            ; fully-qualified     # 👐🏻 E1.0 open hands: light skin tone
+1F450 1F3FC                                            ; fully-qualified     # 👐🏼 E1.0 open hands: medium-light skin tone
+1F450 1F3FD                                            ; fully-qualified     # 👐🏽 E1.0 open hands: medium skin tone
+1F450 1F3FE                                            ; fully-qualified     # 👐🏾 E1.0 open hands: medium-dark skin tone
+1F450 1F3FF                                            ; fully-qualified     # 👐🏿 E1.0 open hands: dark skin tone
+1F932                                                  ; fully-qualified     # 🤲 E5.0 palms up together
+1F932 1F3FB                                            ; fully-qualified     # 🤲🏻 E5.0 palms up together: light skin tone
+1F932 1F3FC                                            ; fully-qualified     # 🤲🏼 E5.0 palms up together: medium-light skin tone
+1F932 1F3FD                                            ; fully-qualified     # 🤲🏽 E5.0 palms up together: medium skin tone
+1F932 1F3FE                                            ; fully-qualified     # 🤲🏾 E5.0 palms up together: medium-dark skin tone
+1F932 1F3FF                                            ; fully-qualified     # 🤲🏿 E5.0 palms up together: dark skin tone
+1F91D                                                  ; fully-qualified     # 🤝 E3.0 handshake
+1F64F                                                  ; fully-qualified     # 🙏 E0.6 folded hands
+1F64F 1F3FB                                            ; fully-qualified     # 🙏🏻 E1.0 folded hands: light skin tone
+1F64F 1F3FC                                            ; fully-qualified     # 🙏🏼 E1.0 folded hands: medium-light skin tone
+1F64F 1F3FD                                            ; fully-qualified     # 🙏🏽 E1.0 folded hands: medium skin tone
+1F64F 1F3FE                                            ; fully-qualified     # 🙏🏾 E1.0 folded hands: medium-dark skin tone
+1F64F 1F3FF                                            ; fully-qualified     # 🙏🏿 E1.0 folded hands: dark skin tone
 
 # subgroup: hand-prop
-270D FE0F                                  ; fully-qualified     # ✍️ E0.7 writing hand
-270D                                       ; unqualified         # ✍ E0.7 writing hand
-270D 1F3FB                                 ; fully-qualified     # ✍🏻 E1.0 writing hand: light skin tone
-270D 1F3FC                                 ; fully-qualified     # ✍🏼 E1.0 writing hand: medium-light skin tone
-270D 1F3FD                                 ; fully-qualified     # ✍🏽 E1.0 writing hand: medium skin tone
-270D 1F3FE                                 ; fully-qualified     # ✍🏾 E1.0 writing hand: medium-dark skin tone
-270D 1F3FF                                 ; fully-qualified     # ✍🏿 E1.0 writing hand: dark skin tone
-1F485                                      ; fully-qualified     # 💅 E0.6 nail polish
-1F485 1F3FB                                ; fully-qualified     # 💅🏻 E1.0 nail polish: light skin tone
-1F485 1F3FC                                ; fully-qualified     # 💅🏼 E1.0 nail polish: medium-light skin tone
-1F485 1F3FD                                ; fully-qualified     # 💅🏽 E1.0 nail polish: medium skin tone
-1F485 1F3FE                                ; fully-qualified     # 💅🏾 E1.0 nail polish: medium-dark skin tone
-1F485 1F3FF                                ; fully-qualified     # 💅🏿 E1.0 nail polish: dark skin tone
-1F933                                      ; fully-qualified     # 🤳 E3.0 selfie
-1F933 1F3FB                                ; fully-qualified     # 🤳🏻 E3.0 selfie: light skin tone
-1F933 1F3FC                                ; fully-qualified     # 🤳🏼 E3.0 selfie: medium-light skin tone
-1F933 1F3FD                                ; fully-qualified     # 🤳🏽 E3.0 selfie: medium skin tone
-1F933 1F3FE                                ; fully-qualified     # 🤳🏾 E3.0 selfie: medium-dark skin tone
-1F933 1F3FF                                ; fully-qualified     # 🤳🏿 E3.0 selfie: dark skin tone
+270D FE0F                                              ; fully-qualified     # ✍️ E0.7 writing hand
+270D                                                   ; unqualified         # ✍ E0.7 writing hand
+270D 1F3FB                                             ; fully-qualified     # ✍🏻 E1.0 writing hand: light skin tone
+270D 1F3FC                                             ; fully-qualified     # ✍🏼 E1.0 writing hand: medium-light skin tone
+270D 1F3FD                                             ; fully-qualified     # ✍🏽 E1.0 writing hand: medium skin tone
+270D 1F3FE                                             ; fully-qualified     # ✍🏾 E1.0 writing hand: medium-dark skin tone
+270D 1F3FF                                             ; fully-qualified     # ✍🏿 E1.0 writing hand: dark skin tone
+1F485                                                  ; fully-qualified     # 💅 E0.6 nail polish
+1F485 1F3FB                                            ; fully-qualified     # 💅🏻 E1.0 nail polish: light skin tone
+1F485 1F3FC                                            ; fully-qualified     # 💅🏼 E1.0 nail polish: medium-light skin tone
+1F485 1F3FD                                            ; fully-qualified     # 💅🏽 E1.0 nail polish: medium skin tone
+1F485 1F3FE                                            ; fully-qualified     # 💅🏾 E1.0 nail polish: medium-dark skin tone
+1F485 1F3FF                                            ; fully-qualified     # 💅🏿 E1.0 nail polish: dark skin tone
+1F933                                                  ; fully-qualified     # 🤳 E3.0 selfie
+1F933 1F3FB                                            ; fully-qualified     # 🤳🏻 E3.0 selfie: light skin tone
+1F933 1F3FC                                            ; fully-qualified     # 🤳🏼 E3.0 selfie: medium-light skin tone
+1F933 1F3FD                                            ; fully-qualified     # 🤳🏽 E3.0 selfie: medium skin tone
+1F933 1F3FE                                            ; fully-qualified     # 🤳🏾 E3.0 selfie: medium-dark skin tone
+1F933 1F3FF                                            ; fully-qualified     # 🤳🏿 E3.0 selfie: dark skin tone
 
 # subgroup: body-parts
-1F4AA                                      ; fully-qualified     # 💪 E0.6 flexed biceps
-1F4AA 1F3FB                                ; fully-qualified     # 💪🏻 E1.0 flexed biceps: light skin tone
-1F4AA 1F3FC                                ; fully-qualified     # 💪🏼 E1.0 flexed biceps: medium-light skin tone
-1F4AA 1F3FD                                ; fully-qualified     # 💪🏽 E1.0 flexed biceps: medium skin tone
-1F4AA 1F3FE                                ; fully-qualified     # 💪🏾 E1.0 flexed biceps: medium-dark skin tone
-1F4AA 1F3FF                                ; fully-qualified     # 💪🏿 E1.0 flexed biceps: dark skin tone
-1F9BE                                      ; fully-qualified     # 🦾 E12.0 mechanical arm
-1F9BF                                      ; fully-qualified     # 🦿 E12.0 mechanical leg
-1F9B5                                      ; fully-qualified     # 🦵 E11.0 leg
-1F9B5 1F3FB                                ; fully-qualified     # 🦵🏻 E11.0 leg: light skin tone
-1F9B5 1F3FC                                ; fully-qualified     # 🦵🏼 E11.0 leg: medium-light skin tone
-1F9B5 1F3FD                                ; fully-qualified     # 🦵🏽 E11.0 leg: medium skin tone
-1F9B5 1F3FE                                ; fully-qualified     # 🦵🏾 E11.0 leg: medium-dark skin tone
-1F9B5 1F3FF                                ; fully-qualified     # 🦵🏿 E11.0 leg: dark skin tone
-1F9B6                                      ; fully-qualified     # 🦶 E11.0 foot
-1F9B6 1F3FB                                ; fully-qualified     # 🦶🏻 E11.0 foot: light skin tone
-1F9B6 1F3FC                                ; fully-qualified     # 🦶🏼 E11.0 foot: medium-light skin tone
-1F9B6 1F3FD                                ; fully-qualified     # 🦶🏽 E11.0 foot: medium skin tone
-1F9B6 1F3FE                                ; fully-qualified     # 🦶🏾 E11.0 foot: medium-dark skin tone
-1F9B6 1F3FF                                ; fully-qualified     # 🦶🏿 E11.0 foot: dark skin tone
-1F442                                      ; fully-qualified     # 👂 E0.6 ear
-1F442 1F3FB                                ; fully-qualified     # 👂🏻 E1.0 ear: light skin tone
-1F442 1F3FC                                ; fully-qualified     # 👂🏼 E1.0 ear: medium-light skin tone
-1F442 1F3FD                                ; fully-qualified     # 👂🏽 E1.0 ear: medium skin tone
-1F442 1F3FE                                ; fully-qualified     # 👂🏾 E1.0 ear: medium-dark skin tone
-1F442 1F3FF                                ; fully-qualified     # 👂🏿 E1.0 ear: dark skin tone
-1F9BB                                      ; fully-qualified     # 🦻 E12.0 ear with hearing aid
-1F9BB 1F3FB                                ; fully-qualified     # 🦻🏻 E12.0 ear with hearing aid: light skin tone
-1F9BB 1F3FC                                ; fully-qualified     # 🦻🏼 E12.0 ear with hearing aid: medium-light skin tone
-1F9BB 1F3FD                                ; fully-qualified     # 🦻🏽 E12.0 ear with hearing aid: medium skin tone
-1F9BB 1F3FE                                ; fully-qualified     # 🦻🏾 E12.0 ear with hearing aid: medium-dark skin tone
-1F9BB 1F3FF                                ; fully-qualified     # 🦻🏿 E12.0 ear with hearing aid: dark skin tone
-1F443                                      ; fully-qualified     # 👃 E0.6 nose
-1F443 1F3FB                                ; fully-qualified     # 👃🏻 E1.0 nose: light skin tone
-1F443 1F3FC                                ; fully-qualified     # 👃🏼 E1.0 nose: medium-light skin tone
-1F443 1F3FD                                ; fully-qualified     # 👃🏽 E1.0 nose: medium skin tone
-1F443 1F3FE                                ; fully-qualified     # 👃🏾 E1.0 nose: medium-dark skin tone
-1F443 1F3FF                                ; fully-qualified     # 👃🏿 E1.0 nose: dark skin tone
-1F9E0                                      ; fully-qualified     # 🧠 E5.0 brain
-1FAC0                                      ; fully-qualified     # 🫀 E13.0 anatomical heart
-1FAC1                                      ; fully-qualified     # 🫁 E13.0 lungs
-1F9B7                                      ; fully-qualified     # 🦷 E11.0 tooth
-1F9B4                                      ; fully-qualified     # 🦴 E11.0 bone
-1F440                                      ; fully-qualified     # 👀 E0.6 eyes
-1F441 FE0F                                 ; fully-qualified     # 👁️ E0.7 eye
-1F441                                      ; unqualified         # 👁 E0.7 eye
-1F445                                      ; fully-qualified     # 👅 E0.6 tongue
-1F444                                      ; fully-qualified     # 👄 E0.6 mouth
+1F4AA                                                  ; fully-qualified     # 💪 E0.6 flexed biceps
+1F4AA 1F3FB                                            ; fully-qualified     # 💪🏻 E1.0 flexed biceps: light skin tone
+1F4AA 1F3FC                                            ; fully-qualified     # 💪🏼 E1.0 flexed biceps: medium-light skin tone
+1F4AA 1F3FD                                            ; fully-qualified     # 💪🏽 E1.0 flexed biceps: medium skin tone
+1F4AA 1F3FE                                            ; fully-qualified     # 💪🏾 E1.0 flexed biceps: medium-dark skin tone
+1F4AA 1F3FF                                            ; fully-qualified     # 💪🏿 E1.0 flexed biceps: dark skin tone
+1F9BE                                                  ; fully-qualified     # 🦾 E12.0 mechanical arm
+1F9BF                                                  ; fully-qualified     # 🦿 E12.0 mechanical leg
+1F9B5                                                  ; fully-qualified     # 🦵 E11.0 leg
+1F9B5 1F3FB                                            ; fully-qualified     # 🦵🏻 E11.0 leg: light skin tone
+1F9B5 1F3FC                                            ; fully-qualified     # 🦵🏼 E11.0 leg: medium-light skin tone
+1F9B5 1F3FD                                            ; fully-qualified     # 🦵🏽 E11.0 leg: medium skin tone
+1F9B5 1F3FE                                            ; fully-qualified     # 🦵🏾 E11.0 leg: medium-dark skin tone
+1F9B5 1F3FF                                            ; fully-qualified     # 🦵🏿 E11.0 leg: dark skin tone
+1F9B6                                                  ; fully-qualified     # 🦶 E11.0 foot
+1F9B6 1F3FB                                            ; fully-qualified     # 🦶🏻 E11.0 foot: light skin tone
+1F9B6 1F3FC                                            ; fully-qualified     # 🦶🏼 E11.0 foot: medium-light skin tone
+1F9B6 1F3FD                                            ; fully-qualified     # 🦶🏽 E11.0 foot: medium skin tone
+1F9B6 1F3FE                                            ; fully-qualified     # 🦶🏾 E11.0 foot: medium-dark skin tone
+1F9B6 1F3FF                                            ; fully-qualified     # 🦶🏿 E11.0 foot: dark skin tone
+1F442                                                  ; fully-qualified     # 👂 E0.6 ear
+1F442 1F3FB                                            ; fully-qualified     # 👂🏻 E1.0 ear: light skin tone
+1F442 1F3FC                                            ; fully-qualified     # 👂🏼 E1.0 ear: medium-light skin tone
+1F442 1F3FD                                            ; fully-qualified     # 👂🏽 E1.0 ear: medium skin tone
+1F442 1F3FE                                            ; fully-qualified     # 👂🏾 E1.0 ear: medium-dark skin tone
+1F442 1F3FF                                            ; fully-qualified     # 👂🏿 E1.0 ear: dark skin tone
+1F9BB                                                  ; fully-qualified     # 🦻 E12.0 ear with hearing aid
+1F9BB 1F3FB                                            ; fully-qualified     # 🦻🏻 E12.0 ear with hearing aid: light skin tone
+1F9BB 1F3FC                                            ; fully-qualified     # 🦻🏼 E12.0 ear with hearing aid: medium-light skin tone
+1F9BB 1F3FD                                            ; fully-qualified     # 🦻🏽 E12.0 ear with hearing aid: medium skin tone
+1F9BB 1F3FE                                            ; fully-qualified     # 🦻🏾 E12.0 ear with hearing aid: medium-dark skin tone
+1F9BB 1F3FF                                            ; fully-qualified     # 🦻🏿 E12.0 ear with hearing aid: dark skin tone
+1F443                                                  ; fully-qualified     # 👃 E0.6 nose
+1F443 1F3FB                                            ; fully-qualified     # 👃🏻 E1.0 nose: light skin tone
+1F443 1F3FC                                            ; fully-qualified     # 👃🏼 E1.0 nose: medium-light skin tone
+1F443 1F3FD                                            ; fully-qualified     # 👃🏽 E1.0 nose: medium skin tone
+1F443 1F3FE                                            ; fully-qualified     # 👃🏾 E1.0 nose: medium-dark skin tone
+1F443 1F3FF                                            ; fully-qualified     # 👃🏿 E1.0 nose: dark skin tone
+1F9E0                                                  ; fully-qualified     # 🧠 E5.0 brain
+1FAC0                                                  ; fully-qualified     # 🫀 E13.0 anatomical heart
+1FAC1                                                  ; fully-qualified     # 🫁 E13.0 lungs
+1F9B7                                                  ; fully-qualified     # 🦷 E11.0 tooth
+1F9B4                                                  ; fully-qualified     # 🦴 E11.0 bone
+1F440                                                  ; fully-qualified     # 👀 E0.6 eyes
+1F441 FE0F                                             ; fully-qualified     # 👁️ E0.7 eye
+1F441                                                  ; unqualified         # 👁 E0.7 eye
+1F445                                                  ; fully-qualified     # 👅 E0.6 tongue
+1F444                                                  ; fully-qualified     # 👄 E0.6 mouth
 
 # subgroup: person
-1F476                                      ; fully-qualified     # 👶 E0.6 baby
-1F476 1F3FB                                ; fully-qualified     # 👶🏻 E1.0 baby: light skin tone
-1F476 1F3FC                                ; fully-qualified     # 👶🏼 E1.0 baby: medium-light skin tone
-1F476 1F3FD                                ; fully-qualified     # 👶🏽 E1.0 baby: medium skin tone
-1F476 1F3FE                                ; fully-qualified     # 👶🏾 E1.0 baby: medium-dark skin tone
-1F476 1F3FF                                ; fully-qualified     # 👶🏿 E1.0 baby: dark skin tone
-1F9D2                                      ; fully-qualified     # 🧒 E5.0 child
-1F9D2 1F3FB                                ; fully-qualified     # 🧒🏻 E5.0 child: light skin tone
-1F9D2 1F3FC                                ; fully-qualified     # 🧒🏼 E5.0 child: medium-light skin tone
-1F9D2 1F3FD                                ; fully-qualified     # 🧒🏽 E5.0 child: medium skin tone
-1F9D2 1F3FE                                ; fully-qualified     # 🧒🏾 E5.0 child: medium-dark skin tone
-1F9D2 1F3FF                                ; fully-qualified     # 🧒🏿 E5.0 child: dark skin tone
-1F466                                      ; fully-qualified     # 👦 E0.6 boy
-1F466 1F3FB                                ; fully-qualified     # 👦🏻 E1.0 boy: light skin tone
-1F466 1F3FC                                ; fully-qualified     # 👦🏼 E1.0 boy: medium-light skin tone
-1F466 1F3FD                                ; fully-qualified     # 👦🏽 E1.0 boy: medium skin tone
-1F466 1F3FE                                ; fully-qualified     # 👦🏾 E1.0 boy: medium-dark skin tone
-1F466 1F3FF                                ; fully-qualified     # 👦🏿 E1.0 boy: dark skin tone
-1F467                                      ; fully-qualified     # 👧 E0.6 girl
-1F467 1F3FB                                ; fully-qualified     # 👧🏻 E1.0 girl: light skin tone
-1F467 1F3FC                                ; fully-qualified     # 👧🏼 E1.0 girl: medium-light skin tone
-1F467 1F3FD                                ; fully-qualified     # 👧🏽 E1.0 girl: medium skin tone
-1F467 1F3FE                                ; fully-qualified     # 👧🏾 E1.0 girl: medium-dark skin tone
-1F467 1F3FF                                ; fully-qualified     # 👧🏿 E1.0 girl: dark skin tone
-1F9D1                                      ; fully-qualified     # 🧑 E5.0 person
-1F9D1 1F3FB                                ; fully-qualified     # 🧑🏻 E5.0 person: light skin tone
-1F9D1 1F3FC                                ; fully-qualified     # 🧑🏼 E5.0 person: medium-light skin tone
-1F9D1 1F3FD                                ; fully-qualified     # 🧑🏽 E5.0 person: medium skin tone
-1F9D1 1F3FE                                ; fully-qualified     # 🧑🏾 E5.0 person: medium-dark skin tone
-1F9D1 1F3FF                                ; fully-qualified     # 🧑🏿 E5.0 person: dark skin tone
-1F471                                      ; fully-qualified     # 👱 E0.6 person: blond hair
-1F471 1F3FB                                ; fully-qualified     # 👱🏻 E1.0 person: light skin tone, blond hair
-1F471 1F3FC                                ; fully-qualified     # 👱🏼 E1.0 person: medium-light skin tone, blond hair
-1F471 1F3FD                                ; fully-qualified     # 👱🏽 E1.0 person: medium skin tone, blond hair
-1F471 1F3FE                                ; fully-qualified     # 👱🏾 E1.0 person: medium-dark skin tone, blond hair
-1F471 1F3FF                                ; fully-qualified     # 👱🏿 E1.0 person: dark skin tone, blond hair
-1F468                                      ; fully-qualified     # 👨 E0.6 man
-1F468 1F3FB                                ; fully-qualified     # 👨🏻 E1.0 man: light skin tone
-1F468 1F3FC                                ; fully-qualified     # 👨🏼 E1.0 man: medium-light skin tone
-1F468 1F3FD                                ; fully-qualified     # 👨🏽 E1.0 man: medium skin tone
-1F468 1F3FE                                ; fully-qualified     # 👨🏾 E1.0 man: medium-dark skin tone
-1F468 1F3FF                                ; fully-qualified     # 👨🏿 E1.0 man: dark skin tone
-1F9D4                                      ; fully-qualified     # 🧔 E5.0 man: beard
-1F9D4 1F3FB                                ; fully-qualified     # 🧔🏻 E5.0 man: light skin tone, beard
-1F9D4 1F3FC                                ; fully-qualified     # 🧔🏼 E5.0 man: medium-light skin tone, beard
-1F9D4 1F3FD                                ; fully-qualified     # 🧔🏽 E5.0 man: medium skin tone, beard
-1F9D4 1F3FE                                ; fully-qualified     # 🧔🏾 E5.0 man: medium-dark skin tone, beard
-1F9D4 1F3FF                                ; fully-qualified     # 🧔🏿 E5.0 man: dark skin tone, beard
-1F468 200D 1F9B0                           ; fully-qualified     # 👨‍🦰 E11.0 man: red hair
-1F468 1F3FB 200D 1F9B0                     ; fully-qualified     # 👨🏻‍🦰 E11.0 man: light skin tone, red hair
-1F468 1F3FC 200D 1F9B0                     ; fully-qualified     # 👨🏼‍🦰 E11.0 man: medium-light skin tone, red hair
-1F468 1F3FD 200D 1F9B0                     ; fully-qualified     # 👨🏽‍🦰 E11.0 man: medium skin tone, red hair
-1F468 1F3FE 200D 1F9B0                     ; fully-qualified     # 👨🏾‍🦰 E11.0 man: medium-dark skin tone, red hair
-1F468 1F3FF 200D 1F9B0                     ; fully-qualified     # 👨🏿‍🦰 E11.0 man: dark skin tone, red hair
-1F468 200D 1F9B1                           ; fully-qualified     # 👨‍🦱 E11.0 man: curly hair
-1F468 1F3FB 200D 1F9B1                     ; fully-qualified     # 👨🏻‍🦱 E11.0 man: light skin tone, curly hair
-1F468 1F3FC 200D 1F9B1                     ; fully-qualified     # 👨🏼‍🦱 E11.0 man: medium-light skin tone, curly hair
-1F468 1F3FD 200D 1F9B1                     ; fully-qualified     # 👨🏽‍🦱 E11.0 man: medium skin tone, curly hair
-1F468 1F3FE 200D 1F9B1                     ; fully-qualified     # 👨🏾‍🦱 E11.0 man: medium-dark skin tone, curly hair
-1F468 1F3FF 200D 1F9B1                     ; fully-qualified     # 👨🏿‍🦱 E11.0 man: dark skin tone, curly hair
-1F468 200D 1F9B3                           ; fully-qualified     # 👨‍🦳 E11.0 man: white hair
-1F468 1F3FB 200D 1F9B3                     ; fully-qualified     # 👨🏻‍🦳 E11.0 man: light skin tone, white hair
-1F468 1F3FC 200D 1F9B3                     ; fully-qualified     # 👨🏼‍🦳 E11.0 man: medium-light skin tone, white hair
-1F468 1F3FD 200D 1F9B3                     ; fully-qualified     # 👨🏽‍🦳 E11.0 man: medium skin tone, white hair
-1F468 1F3FE 200D 1F9B3                     ; fully-qualified     # 👨🏾‍🦳 E11.0 man: medium-dark skin tone, white hair
-1F468 1F3FF 200D 1F9B3                     ; fully-qualified     # 👨🏿‍🦳 E11.0 man: dark skin tone, white hair
-1F468 200D 1F9B2                           ; fully-qualified     # 👨‍🦲 E11.0 man: bald
-1F468 1F3FB 200D 1F9B2                     ; fully-qualified     # 👨🏻‍🦲 E11.0 man: light skin tone, bald
-1F468 1F3FC 200D 1F9B2                     ; fully-qualified     # 👨🏼‍🦲 E11.0 man: medium-light skin tone, bald
-1F468 1F3FD 200D 1F9B2                     ; fully-qualified     # 👨🏽‍🦲 E11.0 man: medium skin tone, bald
-1F468 1F3FE 200D 1F9B2                     ; fully-qualified     # 👨🏾‍🦲 E11.0 man: medium-dark skin tone, bald
-1F468 1F3FF 200D 1F9B2                     ; fully-qualified     # 👨🏿‍🦲 E11.0 man: dark skin tone, bald
-1F469                                      ; fully-qualified     # 👩 E0.6 woman
-1F469 1F3FB                                ; fully-qualified     # 👩🏻 E1.0 woman: light skin tone
-1F469 1F3FC                                ; fully-qualified     # 👩🏼 E1.0 woman: medium-light skin tone
-1F469 1F3FD                                ; fully-qualified     # 👩🏽 E1.0 woman: medium skin tone
-1F469 1F3FE                                ; fully-qualified     # 👩🏾 E1.0 woman: medium-dark skin tone
-1F469 1F3FF                                ; fully-qualified     # 👩🏿 E1.0 woman: dark skin tone
-1F469 200D 1F9B0                           ; fully-qualified     # 👩‍🦰 E11.0 woman: red hair
-1F469 1F3FB 200D 1F9B0                     ; fully-qualified     # 👩🏻‍🦰 E11.0 woman: light skin tone, red hair
-1F469 1F3FC 200D 1F9B0                     ; fully-qualified     # 👩🏼‍🦰 E11.0 woman: medium-light skin tone, red hair
-1F469 1F3FD 200D 1F9B0                     ; fully-qualified     # 👩🏽‍🦰 E11.0 woman: medium skin tone, red hair
-1F469 1F3FE 200D 1F9B0                     ; fully-qualified     # 👩🏾‍🦰 E11.0 woman: medium-dark skin tone, red hair
-1F469 1F3FF 200D 1F9B0                     ; fully-qualified     # 👩🏿‍🦰 E11.0 woman: dark skin tone, red hair
-1F9D1 200D 1F9B0                           ; fully-qualified     # 🧑‍🦰 E12.1 person: red hair
-1F9D1 1F3FB 200D 1F9B0                     ; fully-qualified     # 🧑🏻‍🦰 E12.1 person: light skin tone, red hair
-1F9D1 1F3FC 200D 1F9B0                     ; fully-qualified     # 🧑🏼‍🦰 E12.1 person: medium-light skin tone, red hair
-1F9D1 1F3FD 200D 1F9B0                     ; fully-qualified     # 🧑🏽‍🦰 E12.1 person: medium skin tone, red hair
-1F9D1 1F3FE 200D 1F9B0                     ; fully-qualified     # 🧑🏾‍🦰 E12.1 person: medium-dark skin tone, red hair
-1F9D1 1F3FF 200D 1F9B0                     ; fully-qualified     # 🧑🏿‍🦰 E12.1 person: dark skin tone, red hair
-1F469 200D 1F9B1                           ; fully-qualified     # 👩‍🦱 E11.0 woman: curly hair
-1F469 1F3FB 200D 1F9B1                     ; fully-qualified     # 👩🏻‍🦱 E11.0 woman: light skin tone, curly hair
-1F469 1F3FC 200D 1F9B1                     ; fully-qualified     # 👩🏼‍🦱 E11.0 woman: medium-light skin tone, curly hair
-1F469 1F3FD 200D 1F9B1                     ; fully-qualified     # 👩🏽‍🦱 E11.0 woman: medium skin tone, curly hair
-1F469 1F3FE 200D 1F9B1                     ; fully-qualified     # 👩🏾‍🦱 E11.0 woman: medium-dark skin tone, curly hair
-1F469 1F3FF 200D 1F9B1                     ; fully-qualified     # 👩🏿‍🦱 E11.0 woman: dark skin tone, curly hair
-1F9D1 200D 1F9B1                           ; fully-qualified     # 🧑‍🦱 E12.1 person: curly hair
-1F9D1 1F3FB 200D 1F9B1                     ; fully-qualified     # 🧑🏻‍🦱 E12.1 person: light skin tone, curly hair
-1F9D1 1F3FC 200D 1F9B1                     ; fully-qualified     # 🧑🏼‍🦱 E12.1 person: medium-light skin tone, curly hair
-1F9D1 1F3FD 200D 1F9B1                     ; fully-qualified     # 🧑🏽‍🦱 E12.1 person: medium skin tone, curly hair
-1F9D1 1F3FE 200D 1F9B1                     ; fully-qualified     # 🧑🏾‍🦱 E12.1 person: medium-dark skin tone, curly hair
-1F9D1 1F3FF 200D 1F9B1                     ; fully-qualified     # 🧑🏿‍🦱 E12.1 person: dark skin tone, curly hair
-1F469 200D 1F9B3                           ; fully-qualified     # 👩‍🦳 E11.0 woman: white hair
-1F469 1F3FB 200D 1F9B3                     ; fully-qualified     # 👩🏻‍🦳 E11.0 woman: light skin tone, white hair
-1F469 1F3FC 200D 1F9B3                     ; fully-qualified     # 👩🏼‍🦳 E11.0 woman: medium-light skin tone, white hair
-1F469 1F3FD 200D 1F9B3                     ; fully-qualified     # 👩🏽‍🦳 E11.0 woman: medium skin tone, white hair
-1F469 1F3FE 200D 1F9B3                     ; fully-qualified     # 👩🏾‍🦳 E11.0 woman: medium-dark skin tone, white hair
-1F469 1F3FF 200D 1F9B3                     ; fully-qualified     # 👩🏿‍🦳 E11.0 woman: dark skin tone, white hair
-1F9D1 200D 1F9B3                           ; fully-qualified     # 🧑‍🦳 E12.1 person: white hair
-1F9D1 1F3FB 200D 1F9B3                     ; fully-qualified     # 🧑🏻‍🦳 E12.1 person: light skin tone, white hair
-1F9D1 1F3FC 200D 1F9B3                     ; fully-qualified     # 🧑🏼‍🦳 E12.1 person: medium-light skin tone, white hair
-1F9D1 1F3FD 200D 1F9B3                     ; fully-qualified     # 🧑🏽‍🦳 E12.1 person: medium skin tone, white hair
-1F9D1 1F3FE 200D 1F9B3                     ; fully-qualified     # 🧑🏾‍🦳 E12.1 person: medium-dark skin tone, white hair
-1F9D1 1F3FF 200D 1F9B3                     ; fully-qualified     # 🧑🏿‍🦳 E12.1 person: dark skin tone, white hair
-1F469 200D 1F9B2                           ; fully-qualified     # 👩‍🦲 E11.0 woman: bald
-1F469 1F3FB 200D 1F9B2                     ; fully-qualified     # 👩🏻‍🦲 E11.0 woman: light skin tone, bald
-1F469 1F3FC 200D 1F9B2                     ; fully-qualified     # 👩🏼‍🦲 E11.0 woman: medium-light skin tone, bald
-1F469 1F3FD 200D 1F9B2                     ; fully-qualified     # 👩🏽‍🦲 E11.0 woman: medium skin tone, bald
-1F469 1F3FE 200D 1F9B2                     ; fully-qualified     # 👩🏾‍🦲 E11.0 woman: medium-dark skin tone, bald
-1F469 1F3FF 200D 1F9B2                     ; fully-qualified     # 👩🏿‍🦲 E11.0 woman: dark skin tone, bald
-1F9D1 200D 1F9B2                           ; fully-qualified     # 🧑‍🦲 E12.1 person: bald
-1F9D1 1F3FB 200D 1F9B2                     ; fully-qualified     # 🧑🏻‍🦲 E12.1 person: light skin tone, bald
-1F9D1 1F3FC 200D 1F9B2                     ; fully-qualified     # 🧑🏼‍🦲 E12.1 person: medium-light skin tone, bald
-1F9D1 1F3FD 200D 1F9B2                     ; fully-qualified     # 🧑🏽‍🦲 E12.1 person: medium skin tone, bald
-1F9D1 1F3FE 200D 1F9B2                     ; fully-qualified     # 🧑🏾‍🦲 E12.1 person: medium-dark skin tone, bald
-1F9D1 1F3FF 200D 1F9B2                     ; fully-qualified     # 🧑🏿‍🦲 E12.1 person: dark skin tone, bald
-1F471 200D 2640 FE0F                       ; fully-qualified     # 👱‍♀️ E4.0 woman: blond hair
-1F471 200D 2640                            ; minimally-qualified # 👱‍♀ E4.0 woman: blond hair
-1F471 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 👱🏻‍♀️ E4.0 woman: light skin tone, blond hair
-1F471 1F3FB 200D 2640                      ; minimally-qualified # 👱🏻‍♀ E4.0 woman: light skin tone, blond hair
-1F471 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 👱🏼‍♀️ E4.0 woman: medium-light skin tone, blond hair
-1F471 1F3FC 200D 2640                      ; minimally-qualified # 👱🏼‍♀ E4.0 woman: medium-light skin tone, blond hair
-1F471 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 👱🏽‍♀️ E4.0 woman: medium skin tone, blond hair
-1F471 1F3FD 200D 2640                      ; minimally-qualified # 👱🏽‍♀ E4.0 woman: medium skin tone, blond hair
-1F471 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 👱🏾‍♀️ E4.0 woman: medium-dark skin tone, blond hair
-1F471 1F3FE 200D 2640                      ; minimally-qualified # 👱🏾‍♀ E4.0 woman: medium-dark skin tone, blond hair
-1F471 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 👱🏿‍♀️ E4.0 woman: dark skin tone, blond hair
-1F471 1F3FF 200D 2640                      ; minimally-qualified # 👱🏿‍♀ E4.0 woman: dark skin tone, blond hair
-1F471 200D 2642 FE0F                       ; fully-qualified     # 👱‍♂️ E4.0 man: blond hair
-1F471 200D 2642                            ; minimally-qualified # 👱‍♂ E4.0 man: blond hair
-1F471 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 👱🏻‍♂️ E4.0 man: light skin tone, blond hair
-1F471 1F3FB 200D 2642                      ; minimally-qualified # 👱🏻‍♂ E4.0 man: light skin tone, blond hair
-1F471 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 👱🏼‍♂️ E4.0 man: medium-light skin tone, blond hair
-1F471 1F3FC 200D 2642                      ; minimally-qualified # 👱🏼‍♂ E4.0 man: medium-light skin tone, blond hair
-1F471 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 👱🏽‍♂️ E4.0 man: medium skin tone, blond hair
-1F471 1F3FD 200D 2642                      ; minimally-qualified # 👱🏽‍♂ E4.0 man: medium skin tone, blond hair
-1F471 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 👱🏾‍♂️ E4.0 man: medium-dark skin tone, blond hair
-1F471 1F3FE 200D 2642                      ; minimally-qualified # 👱🏾‍♂ E4.0 man: medium-dark skin tone, blond hair
-1F471 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 👱🏿‍♂️ E4.0 man: dark skin tone, blond hair
-1F471 1F3FF 200D 2642                      ; minimally-qualified # 👱🏿‍♂ E4.0 man: dark skin tone, blond hair
-1F9D3                                      ; fully-qualified     # 🧓 E5.0 older person
-1F9D3 1F3FB                                ; fully-qualified     # 🧓🏻 E5.0 older person: light skin tone
-1F9D3 1F3FC                                ; fully-qualified     # 🧓🏼 E5.0 older person: medium-light skin tone
-1F9D3 1F3FD                                ; fully-qualified     # 🧓🏽 E5.0 older person: medium skin tone
-1F9D3 1F3FE                                ; fully-qualified     # 🧓🏾 E5.0 older person: medium-dark skin tone
-1F9D3 1F3FF                                ; fully-qualified     # 🧓🏿 E5.0 older person: dark skin tone
-1F474                                      ; fully-qualified     # 👴 E0.6 old man
-1F474 1F3FB                                ; fully-qualified     # 👴🏻 E1.0 old man: light skin tone
-1F474 1F3FC                                ; fully-qualified     # 👴🏼 E1.0 old man: medium-light skin tone
-1F474 1F3FD                                ; fully-qualified     # 👴🏽 E1.0 old man: medium skin tone
-1F474 1F3FE                                ; fully-qualified     # 👴🏾 E1.0 old man: medium-dark skin tone
-1F474 1F3FF                                ; fully-qualified     # 👴🏿 E1.0 old man: dark skin tone
-1F475                                      ; fully-qualified     # 👵 E0.6 old woman
-1F475 1F3FB                                ; fully-qualified     # 👵🏻 E1.0 old woman: light skin tone
-1F475 1F3FC                                ; fully-qualified     # 👵🏼 E1.0 old woman: medium-light skin tone
-1F475 1F3FD                                ; fully-qualified     # 👵🏽 E1.0 old woman: medium skin tone
-1F475 1F3FE                                ; fully-qualified     # 👵🏾 E1.0 old woman: medium-dark skin tone
-1F475 1F3FF                                ; fully-qualified     # 👵🏿 E1.0 old woman: dark skin tone
+1F476                                                  ; fully-qualified     # 👶 E0.6 baby
+1F476 1F3FB                                            ; fully-qualified     # 👶🏻 E1.0 baby: light skin tone
+1F476 1F3FC                                            ; fully-qualified     # 👶🏼 E1.0 baby: medium-light skin tone
+1F476 1F3FD                                            ; fully-qualified     # 👶🏽 E1.0 baby: medium skin tone
+1F476 1F3FE                                            ; fully-qualified     # 👶🏾 E1.0 baby: medium-dark skin tone
+1F476 1F3FF                                            ; fully-qualified     # 👶🏿 E1.0 baby: dark skin tone
+1F9D2                                                  ; fully-qualified     # 🧒 E5.0 child
+1F9D2 1F3FB                                            ; fully-qualified     # 🧒🏻 E5.0 child: light skin tone
+1F9D2 1F3FC                                            ; fully-qualified     # 🧒🏼 E5.0 child: medium-light skin tone
+1F9D2 1F3FD                                            ; fully-qualified     # 🧒🏽 E5.0 child: medium skin tone
+1F9D2 1F3FE                                            ; fully-qualified     # 🧒🏾 E5.0 child: medium-dark skin tone
+1F9D2 1F3FF                                            ; fully-qualified     # 🧒🏿 E5.0 child: dark skin tone
+1F466                                                  ; fully-qualified     # 👦 E0.6 boy
+1F466 1F3FB                                            ; fully-qualified     # 👦🏻 E1.0 boy: light skin tone
+1F466 1F3FC                                            ; fully-qualified     # 👦🏼 E1.0 boy: medium-light skin tone
+1F466 1F3FD                                            ; fully-qualified     # 👦🏽 E1.0 boy: medium skin tone
+1F466 1F3FE                                            ; fully-qualified     # 👦🏾 E1.0 boy: medium-dark skin tone
+1F466 1F3FF                                            ; fully-qualified     # 👦🏿 E1.0 boy: dark skin tone
+1F467                                                  ; fully-qualified     # 👧 E0.6 girl
+1F467 1F3FB                                            ; fully-qualified     # 👧🏻 E1.0 girl: light skin tone
+1F467 1F3FC                                            ; fully-qualified     # 👧🏼 E1.0 girl: medium-light skin tone
+1F467 1F3FD                                            ; fully-qualified     # 👧🏽 E1.0 girl: medium skin tone
+1F467 1F3FE                                            ; fully-qualified     # 👧🏾 E1.0 girl: medium-dark skin tone
+1F467 1F3FF                                            ; fully-qualified     # 👧🏿 E1.0 girl: dark skin tone
+1F9D1                                                  ; fully-qualified     # 🧑 E5.0 person
+1F9D1 1F3FB                                            ; fully-qualified     # 🧑🏻 E5.0 person: light skin tone
+1F9D1 1F3FC                                            ; fully-qualified     # 🧑🏼 E5.0 person: medium-light skin tone
+1F9D1 1F3FD                                            ; fully-qualified     # 🧑🏽 E5.0 person: medium skin tone
+1F9D1 1F3FE                                            ; fully-qualified     # 🧑🏾 E5.0 person: medium-dark skin tone
+1F9D1 1F3FF                                            ; fully-qualified     # 🧑🏿 E5.0 person: dark skin tone
+1F471                                                  ; fully-qualified     # 👱 E0.6 person: blond hair
+1F471 1F3FB                                            ; fully-qualified     # 👱🏻 E1.0 person: light skin tone, blond hair
+1F471 1F3FC                                            ; fully-qualified     # 👱🏼 E1.0 person: medium-light skin tone, blond hair
+1F471 1F3FD                                            ; fully-qualified     # 👱🏽 E1.0 person: medium skin tone, blond hair
+1F471 1F3FE                                            ; fully-qualified     # 👱🏾 E1.0 person: medium-dark skin tone, blond hair
+1F471 1F3FF                                            ; fully-qualified     # 👱🏿 E1.0 person: dark skin tone, blond hair
+1F468                                                  ; fully-qualified     # 👨 E0.6 man
+1F468 1F3FB                                            ; fully-qualified     # 👨🏻 E1.0 man: light skin tone
+1F468 1F3FC                                            ; fully-qualified     # 👨🏼 E1.0 man: medium-light skin tone
+1F468 1F3FD                                            ; fully-qualified     # 👨🏽 E1.0 man: medium skin tone
+1F468 1F3FE                                            ; fully-qualified     # 👨🏾 E1.0 man: medium-dark skin tone
+1F468 1F3FF                                            ; fully-qualified     # 👨🏿 E1.0 man: dark skin tone
+1F9D4                                                  ; fully-qualified     # 🧔 E5.0 person: beard
+1F9D4 1F3FB                                            ; fully-qualified     # 🧔🏻 E5.0 person: light skin tone, beard
+1F9D4 1F3FC                                            ; fully-qualified     # 🧔🏼 E5.0 person: medium-light skin tone, beard
+1F9D4 1F3FD                                            ; fully-qualified     # 🧔🏽 E5.0 person: medium skin tone, beard
+1F9D4 1F3FE                                            ; fully-qualified     # 🧔🏾 E5.0 person: medium-dark skin tone, beard
+1F9D4 1F3FF                                            ; fully-qualified     # 🧔🏿 E5.0 person: dark skin tone, beard
+1F9D4 200D 2642 FE0F                                   ; fully-qualified     # 🧔‍♂️ E13.1 man: beard
+1F9D4 200D 2642                                        ; minimally-qualified # 🧔‍♂ E13.1 man: beard
+1F9D4 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🧔🏻‍♂️ E13.1 man: light skin tone, beard
+1F9D4 1F3FB 200D 2642                                  ; minimally-qualified # 🧔🏻‍♂ E13.1 man: light skin tone, beard
+1F9D4 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🧔🏼‍♂️ E13.1 man: medium-light skin tone, beard
+1F9D4 1F3FC 200D 2642                                  ; minimally-qualified # 🧔🏼‍♂ E13.1 man: medium-light skin tone, beard
+1F9D4 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🧔🏽‍♂️ E13.1 man: medium skin tone, beard
+1F9D4 1F3FD 200D 2642                                  ; minimally-qualified # 🧔🏽‍♂ E13.1 man: medium skin tone, beard
+1F9D4 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🧔🏾‍♂️ E13.1 man: medium-dark skin tone, beard
+1F9D4 1F3FE 200D 2642                                  ; minimally-qualified # 🧔🏾‍♂ E13.1 man: medium-dark skin tone, beard
+1F9D4 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🧔🏿‍♂️ E13.1 man: dark skin tone, beard
+1F9D4 1F3FF 200D 2642                                  ; minimally-qualified # 🧔🏿‍♂ E13.1 man: dark skin tone, beard
+1F9D4 200D 2640 FE0F                                   ; fully-qualified     # 🧔‍♀️ E13.1 woman: beard
+1F9D4 200D 2640                                        ; minimally-qualified # 🧔‍♀ E13.1 woman: beard
+1F9D4 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🧔🏻‍♀️ E13.1 woman: light skin tone, beard
+1F9D4 1F3FB 200D 2640                                  ; minimally-qualified # 🧔🏻‍♀ E13.1 woman: light skin tone, beard
+1F9D4 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🧔🏼‍♀️ E13.1 woman: medium-light skin tone, beard
+1F9D4 1F3FC 200D 2640                                  ; minimally-qualified # 🧔🏼‍♀ E13.1 woman: medium-light skin tone, beard
+1F9D4 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🧔🏽‍♀️ E13.1 woman: medium skin tone, beard
+1F9D4 1F3FD 200D 2640                                  ; minimally-qualified # 🧔🏽‍♀ E13.1 woman: medium skin tone, beard
+1F9D4 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🧔🏾‍♀️ E13.1 woman: medium-dark skin tone, beard
+1F9D4 1F3FE 200D 2640                                  ; minimally-qualified # 🧔🏾‍♀ E13.1 woman: medium-dark skin tone, beard
+1F9D4 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🧔🏿‍♀️ E13.1 woman: dark skin tone, beard
+1F9D4 1F3FF 200D 2640                                  ; minimally-qualified # 🧔🏿‍♀ E13.1 woman: dark skin tone, beard
+1F468 200D 1F9B0                                       ; fully-qualified     # 👨‍🦰 E11.0 man: red hair
+1F468 1F3FB 200D 1F9B0                                 ; fully-qualified     # 👨🏻‍🦰 E11.0 man: light skin tone, red hair
+1F468 1F3FC 200D 1F9B0                                 ; fully-qualified     # 👨🏼‍🦰 E11.0 man: medium-light skin tone, red hair
+1F468 1F3FD 200D 1F9B0                                 ; fully-qualified     # 👨🏽‍🦰 E11.0 man: medium skin tone, red hair
+1F468 1F3FE 200D 1F9B0                                 ; fully-qualified     # 👨🏾‍🦰 E11.0 man: medium-dark skin tone, red hair
+1F468 1F3FF 200D 1F9B0                                 ; fully-qualified     # 👨🏿‍🦰 E11.0 man: dark skin tone, red hair
+1F468 200D 1F9B1                                       ; fully-qualified     # 👨‍🦱 E11.0 man: curly hair
+1F468 1F3FB 200D 1F9B1                                 ; fully-qualified     # 👨🏻‍🦱 E11.0 man: light skin tone, curly hair
+1F468 1F3FC 200D 1F9B1                                 ; fully-qualified     # 👨🏼‍🦱 E11.0 man: medium-light skin tone, curly hair
+1F468 1F3FD 200D 1F9B1                                 ; fully-qualified     # 👨🏽‍🦱 E11.0 man: medium skin tone, curly hair
+1F468 1F3FE 200D 1F9B1                                 ; fully-qualified     # 👨🏾‍🦱 E11.0 man: medium-dark skin tone, curly hair
+1F468 1F3FF 200D 1F9B1                                 ; fully-qualified     # 👨🏿‍🦱 E11.0 man: dark skin tone, curly hair
+1F468 200D 1F9B3                                       ; fully-qualified     # 👨‍🦳 E11.0 man: white hair
+1F468 1F3FB 200D 1F9B3                                 ; fully-qualified     # 👨🏻‍🦳 E11.0 man: light skin tone, white hair
+1F468 1F3FC 200D 1F9B3                                 ; fully-qualified     # 👨🏼‍🦳 E11.0 man: medium-light skin tone, white hair
+1F468 1F3FD 200D 1F9B3                                 ; fully-qualified     # 👨🏽‍🦳 E11.0 man: medium skin tone, white hair
+1F468 1F3FE 200D 1F9B3                                 ; fully-qualified     # 👨🏾‍🦳 E11.0 man: medium-dark skin tone, white hair
+1F468 1F3FF 200D 1F9B3                                 ; fully-qualified     # 👨🏿‍🦳 E11.0 man: dark skin tone, white hair
+1F468 200D 1F9B2                                       ; fully-qualified     # 👨‍🦲 E11.0 man: bald
+1F468 1F3FB 200D 1F9B2                                 ; fully-qualified     # 👨🏻‍🦲 E11.0 man: light skin tone, bald
+1F468 1F3FC 200D 1F9B2                                 ; fully-qualified     # 👨🏼‍🦲 E11.0 man: medium-light skin tone, bald
+1F468 1F3FD 200D 1F9B2                                 ; fully-qualified     # 👨🏽‍🦲 E11.0 man: medium skin tone, bald
+1F468 1F3FE 200D 1F9B2                                 ; fully-qualified     # 👨🏾‍🦲 E11.0 man: medium-dark skin tone, bald
+1F468 1F3FF 200D 1F9B2                                 ; fully-qualified     # 👨🏿‍🦲 E11.0 man: dark skin tone, bald
+1F469                                                  ; fully-qualified     # 👩 E0.6 woman
+1F469 1F3FB                                            ; fully-qualified     # 👩🏻 E1.0 woman: light skin tone
+1F469 1F3FC                                            ; fully-qualified     # 👩🏼 E1.0 woman: medium-light skin tone
+1F469 1F3FD                                            ; fully-qualified     # 👩🏽 E1.0 woman: medium skin tone
+1F469 1F3FE                                            ; fully-qualified     # 👩🏾 E1.0 woman: medium-dark skin tone
+1F469 1F3FF                                            ; fully-qualified     # 👩🏿 E1.0 woman: dark skin tone
+1F469 200D 1F9B0                                       ; fully-qualified     # 👩‍🦰 E11.0 woman: red hair
+1F469 1F3FB 200D 1F9B0                                 ; fully-qualified     # 👩🏻‍🦰 E11.0 woman: light skin tone, red hair
+1F469 1F3FC 200D 1F9B0                                 ; fully-qualified     # 👩🏼‍🦰 E11.0 woman: medium-light skin tone, red hair
+1F469 1F3FD 200D 1F9B0                                 ; fully-qualified     # 👩🏽‍🦰 E11.0 woman: medium skin tone, red hair
+1F469 1F3FE 200D 1F9B0                                 ; fully-qualified     # 👩🏾‍🦰 E11.0 woman: medium-dark skin tone, red hair
+1F469 1F3FF 200D 1F9B0                                 ; fully-qualified     # 👩🏿‍🦰 E11.0 woman: dark skin tone, red hair
+1F9D1 200D 1F9B0                                       ; fully-qualified     # 🧑‍🦰 E12.1 person: red hair
+1F9D1 1F3FB 200D 1F9B0                                 ; fully-qualified     # 🧑🏻‍🦰 E12.1 person: light skin tone, red hair
+1F9D1 1F3FC 200D 1F9B0                                 ; fully-qualified     # 🧑🏼‍🦰 E12.1 person: medium-light skin tone, red hair
+1F9D1 1F3FD 200D 1F9B0                                 ; fully-qualified     # 🧑🏽‍🦰 E12.1 person: medium skin tone, red hair
+1F9D1 1F3FE 200D 1F9B0                                 ; fully-qualified     # 🧑🏾‍🦰 E12.1 person: medium-dark skin tone, red hair
+1F9D1 1F3FF 200D 1F9B0                                 ; fully-qualified     # 🧑🏿‍🦰 E12.1 person: dark skin tone, red hair
+1F469 200D 1F9B1                                       ; fully-qualified     # 👩‍🦱 E11.0 woman: curly hair
+1F469 1F3FB 200D 1F9B1                                 ; fully-qualified     # 👩🏻‍🦱 E11.0 woman: light skin tone, curly hair
+1F469 1F3FC 200D 1F9B1                                 ; fully-qualified     # 👩🏼‍🦱 E11.0 woman: medium-light skin tone, curly hair
+1F469 1F3FD 200D 1F9B1                                 ; fully-qualified     # 👩🏽‍🦱 E11.0 woman: medium skin tone, curly hair
+1F469 1F3FE 200D 1F9B1                                 ; fully-qualified     # 👩🏾‍🦱 E11.0 woman: medium-dark skin tone, curly hair
+1F469 1F3FF 200D 1F9B1                                 ; fully-qualified     # 👩🏿‍🦱 E11.0 woman: dark skin tone, curly hair
+1F9D1 200D 1F9B1                                       ; fully-qualified     # 🧑‍🦱 E12.1 person: curly hair
+1F9D1 1F3FB 200D 1F9B1                                 ; fully-qualified     # 🧑🏻‍🦱 E12.1 person: light skin tone, curly hair
+1F9D1 1F3FC 200D 1F9B1                                 ; fully-qualified     # 🧑🏼‍🦱 E12.1 person: medium-light skin tone, curly hair
+1F9D1 1F3FD 200D 1F9B1                                 ; fully-qualified     # 🧑🏽‍🦱 E12.1 person: medium skin tone, curly hair
+1F9D1 1F3FE 200D 1F9B1                                 ; fully-qualified     # 🧑🏾‍🦱 E12.1 person: medium-dark skin tone, curly hair
+1F9D1 1F3FF 200D 1F9B1                                 ; fully-qualified     # 🧑🏿‍🦱 E12.1 person: dark skin tone, curly hair
+1F469 200D 1F9B3                                       ; fully-qualified     # 👩‍🦳 E11.0 woman: white hair
+1F469 1F3FB 200D 1F9B3                                 ; fully-qualified     # 👩🏻‍🦳 E11.0 woman: light skin tone, white hair
+1F469 1F3FC 200D 1F9B3                                 ; fully-qualified     # 👩🏼‍🦳 E11.0 woman: medium-light skin tone, white hair
+1F469 1F3FD 200D 1F9B3                                 ; fully-qualified     # 👩🏽‍🦳 E11.0 woman: medium skin tone, white hair
+1F469 1F3FE 200D 1F9B3                                 ; fully-qualified     # 👩🏾‍🦳 E11.0 woman: medium-dark skin tone, white hair
+1F469 1F3FF 200D 1F9B3                                 ; fully-qualified     # 👩🏿‍🦳 E11.0 woman: dark skin tone, white hair
+1F9D1 200D 1F9B3                                       ; fully-qualified     # 🧑‍🦳 E12.1 person: white hair
+1F9D1 1F3FB 200D 1F9B3                                 ; fully-qualified     # 🧑🏻‍🦳 E12.1 person: light skin tone, white hair
+1F9D1 1F3FC 200D 1F9B3                                 ; fully-qualified     # 🧑🏼‍🦳 E12.1 person: medium-light skin tone, white hair
+1F9D1 1F3FD 200D 1F9B3                                 ; fully-qualified     # 🧑🏽‍🦳 E12.1 person: medium skin tone, white hair
+1F9D1 1F3FE 200D 1F9B3                                 ; fully-qualified     # 🧑🏾‍🦳 E12.1 person: medium-dark skin tone, white hair
+1F9D1 1F3FF 200D 1F9B3                                 ; fully-qualified     # 🧑🏿‍🦳 E12.1 person: dark skin tone, white hair
+1F469 200D 1F9B2                                       ; fully-qualified     # 👩‍🦲 E11.0 woman: bald
+1F469 1F3FB 200D 1F9B2                                 ; fully-qualified     # 👩🏻‍🦲 E11.0 woman: light skin tone, bald
+1F469 1F3FC 200D 1F9B2                                 ; fully-qualified     # 👩🏼‍🦲 E11.0 woman: medium-light skin tone, bald
+1F469 1F3FD 200D 1F9B2                                 ; fully-qualified     # 👩🏽‍🦲 E11.0 woman: medium skin tone, bald
+1F469 1F3FE 200D 1F9B2                                 ; fully-qualified     # 👩🏾‍🦲 E11.0 woman: medium-dark skin tone, bald
+1F469 1F3FF 200D 1F9B2                                 ; fully-qualified     # 👩🏿‍🦲 E11.0 woman: dark skin tone, bald
+1F9D1 200D 1F9B2                                       ; fully-qualified     # 🧑‍🦲 E12.1 person: bald
+1F9D1 1F3FB 200D 1F9B2                                 ; fully-qualified     # 🧑🏻‍🦲 E12.1 person: light skin tone, bald
+1F9D1 1F3FC 200D 1F9B2                                 ; fully-qualified     # 🧑🏼‍🦲 E12.1 person: medium-light skin tone, bald
+1F9D1 1F3FD 200D 1F9B2                                 ; fully-qualified     # 🧑🏽‍🦲 E12.1 person: medium skin tone, bald
+1F9D1 1F3FE 200D 1F9B2                                 ; fully-qualified     # 🧑🏾‍🦲 E12.1 person: medium-dark skin tone, bald
+1F9D1 1F3FF 200D 1F9B2                                 ; fully-qualified     # 🧑🏿‍🦲 E12.1 person: dark skin tone, bald
+1F471 200D 2640 FE0F                                   ; fully-qualified     # 👱‍♀️ E4.0 woman: blond hair
+1F471 200D 2640                                        ; minimally-qualified # 👱‍♀ E4.0 woman: blond hair
+1F471 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 👱🏻‍♀️ E4.0 woman: light skin tone, blond hair
+1F471 1F3FB 200D 2640                                  ; minimally-qualified # 👱🏻‍♀ E4.0 woman: light skin tone, blond hair
+1F471 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 👱🏼‍♀️ E4.0 woman: medium-light skin tone, blond hair
+1F471 1F3FC 200D 2640                                  ; minimally-qualified # 👱🏼‍♀ E4.0 woman: medium-light skin tone, blond hair
+1F471 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 👱🏽‍♀️ E4.0 woman: medium skin tone, blond hair
+1F471 1F3FD 200D 2640                                  ; minimally-qualified # 👱🏽‍♀ E4.0 woman: medium skin tone, blond hair
+1F471 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 👱🏾‍♀️ E4.0 woman: medium-dark skin tone, blond hair
+1F471 1F3FE 200D 2640                                  ; minimally-qualified # 👱🏾‍♀ E4.0 woman: medium-dark skin tone, blond hair
+1F471 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 👱🏿‍♀️ E4.0 woman: dark skin tone, blond hair
+1F471 1F3FF 200D 2640                                  ; minimally-qualified # 👱🏿‍♀ E4.0 woman: dark skin tone, blond hair
+1F471 200D 2642 FE0F                                   ; fully-qualified     # 👱‍♂️ E4.0 man: blond hair
+1F471 200D 2642                                        ; minimally-qualified # 👱‍♂ E4.0 man: blond hair
+1F471 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 👱🏻‍♂️ E4.0 man: light skin tone, blond hair
+1F471 1F3FB 200D 2642                                  ; minimally-qualified # 👱🏻‍♂ E4.0 man: light skin tone, blond hair
+1F471 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 👱🏼‍♂️ E4.0 man: medium-light skin tone, blond hair
+1F471 1F3FC 200D 2642                                  ; minimally-qualified # 👱🏼‍♂ E4.0 man: medium-light skin tone, blond hair
+1F471 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 👱🏽‍♂️ E4.0 man: medium skin tone, blond hair
+1F471 1F3FD 200D 2642                                  ; minimally-qualified # 👱🏽‍♂ E4.0 man: medium skin tone, blond hair
+1F471 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 👱🏾‍♂️ E4.0 man: medium-dark skin tone, blond hair
+1F471 1F3FE 200D 2642                                  ; minimally-qualified # 👱🏾‍♂ E4.0 man: medium-dark skin tone, blond hair
+1F471 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 👱🏿‍♂️ E4.0 man: dark skin tone, blond hair
+1F471 1F3FF 200D 2642                                  ; minimally-qualified # 👱🏿‍♂ E4.0 man: dark skin tone, blond hair
+1F9D3                                                  ; fully-qualified     # 🧓 E5.0 older person
+1F9D3 1F3FB                                            ; fully-qualified     # 🧓🏻 E5.0 older person: light skin tone
+1F9D3 1F3FC                                            ; fully-qualified     # 🧓🏼 E5.0 older person: medium-light skin tone
+1F9D3 1F3FD                                            ; fully-qualified     # 🧓🏽 E5.0 older person: medium skin tone
+1F9D3 1F3FE                                            ; fully-qualified     # 🧓🏾 E5.0 older person: medium-dark skin tone
+1F9D3 1F3FF                                            ; fully-qualified     # 🧓🏿 E5.0 older person: dark skin tone
+1F474                                                  ; fully-qualified     # 👴 E0.6 old man
+1F474 1F3FB                                            ; fully-qualified     # 👴🏻 E1.0 old man: light skin tone
+1F474 1F3FC                                            ; fully-qualified     # 👴🏼 E1.0 old man: medium-light skin tone
+1F474 1F3FD                                            ; fully-qualified     # 👴🏽 E1.0 old man: medium skin tone
+1F474 1F3FE                                            ; fully-qualified     # 👴🏾 E1.0 old man: medium-dark skin tone
+1F474 1F3FF                                            ; fully-qualified     # 👴🏿 E1.0 old man: dark skin tone
+1F475                                                  ; fully-qualified     # 👵 E0.6 old woman
+1F475 1F3FB                                            ; fully-qualified     # 👵🏻 E1.0 old woman: light skin tone
+1F475 1F3FC                                            ; fully-qualified     # 👵🏼 E1.0 old woman: medium-light skin tone
+1F475 1F3FD                                            ; fully-qualified     # 👵🏽 E1.0 old woman: medium skin tone
+1F475 1F3FE                                            ; fully-qualified     # 👵🏾 E1.0 old woman: medium-dark skin tone
+1F475 1F3FF                                            ; fully-qualified     # 👵🏿 E1.0 old woman: dark skin tone
 
 # subgroup: person-gesture
-1F64D                                      ; fully-qualified     # 🙍 E0.6 person frowning
-1F64D 1F3FB                                ; fully-qualified     # 🙍🏻 E1.0 person frowning: light skin tone
-1F64D 1F3FC                                ; fully-qualified     # 🙍🏼 E1.0 person frowning: medium-light skin tone
-1F64D 1F3FD                                ; fully-qualified     # 🙍🏽 E1.0 person frowning: medium skin tone
-1F64D 1F3FE                                ; fully-qualified     # 🙍🏾 E1.0 person frowning: medium-dark skin tone
-1F64D 1F3FF                                ; fully-qualified     # 🙍🏿 E1.0 person frowning: dark skin tone
-1F64D 200D 2642 FE0F                       ; fully-qualified     # 🙍‍♂️ E4.0 man frowning
-1F64D 200D 2642                            ; minimally-qualified # 🙍‍♂ E4.0 man frowning
-1F64D 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🙍🏻‍♂️ E4.0 man frowning: light skin tone
-1F64D 1F3FB 200D 2642                      ; minimally-qualified # 🙍🏻‍♂ E4.0 man frowning: light skin tone
-1F64D 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🙍🏼‍♂️ E4.0 man frowning: medium-light skin tone
-1F64D 1F3FC 200D 2642                      ; minimally-qualified # 🙍🏼‍♂ E4.0 man frowning: medium-light skin tone
-1F64D 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🙍🏽‍♂️ E4.0 man frowning: medium skin tone
-1F64D 1F3FD 200D 2642                      ; minimally-qualified # 🙍🏽‍♂ E4.0 man frowning: medium skin tone
-1F64D 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🙍🏾‍♂️ E4.0 man frowning: medium-dark skin tone
-1F64D 1F3FE 200D 2642                      ; minimally-qualified # 🙍🏾‍♂ E4.0 man frowning: medium-dark skin tone
-1F64D 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🙍🏿‍♂️ E4.0 man frowning: dark skin tone
-1F64D 1F3FF 200D 2642                      ; minimally-qualified # 🙍🏿‍♂ E4.0 man frowning: dark skin tone
-1F64D 200D 2640 FE0F                       ; fully-qualified     # 🙍‍♀️ E4.0 woman frowning
-1F64D 200D 2640                            ; minimally-qualified # 🙍‍♀ E4.0 woman frowning
-1F64D 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🙍🏻‍♀️ E4.0 woman frowning: light skin tone
-1F64D 1F3FB 200D 2640                      ; minimally-qualified # 🙍🏻‍♀ E4.0 woman frowning: light skin tone
-1F64D 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🙍🏼‍♀️ E4.0 woman frowning: medium-light skin tone
-1F64D 1F3FC 200D 2640                      ; minimally-qualified # 🙍🏼‍♀ E4.0 woman frowning: medium-light skin tone
-1F64D 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🙍🏽‍♀️ E4.0 woman frowning: medium skin tone
-1F64D 1F3FD 200D 2640                      ; minimally-qualified # 🙍🏽‍♀ E4.0 woman frowning: medium skin tone
-1F64D 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🙍🏾‍♀️ E4.0 woman frowning: medium-dark skin tone
-1F64D 1F3FE 200D 2640                      ; minimally-qualified # 🙍🏾‍♀ E4.0 woman frowning: medium-dark skin tone
-1F64D 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🙍🏿‍♀️ E4.0 woman frowning: dark skin tone
-1F64D 1F3FF 200D 2640                      ; minimally-qualified # 🙍🏿‍♀ E4.0 woman frowning: dark skin tone
-1F64E                                      ; fully-qualified     # 🙎 E0.6 person pouting
-1F64E 1F3FB                                ; fully-qualified     # 🙎🏻 E1.0 person pouting: light skin tone
-1F64E 1F3FC                                ; fully-qualified     # 🙎🏼 E1.0 person pouting: medium-light skin tone
-1F64E 1F3FD                                ; fully-qualified     # 🙎🏽 E1.0 person pouting: medium skin tone
-1F64E 1F3FE                                ; fully-qualified     # 🙎🏾 E1.0 person pouting: medium-dark skin tone
-1F64E 1F3FF                                ; fully-qualified     # 🙎🏿 E1.0 person pouting: dark skin tone
-1F64E 200D 2642 FE0F                       ; fully-qualified     # 🙎‍♂️ E4.0 man pouting
-1F64E 200D 2642                            ; minimally-qualified # 🙎‍♂ E4.0 man pouting
-1F64E 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🙎🏻‍♂️ E4.0 man pouting: light skin tone
-1F64E 1F3FB 200D 2642                      ; minimally-qualified # 🙎🏻‍♂ E4.0 man pouting: light skin tone
-1F64E 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🙎🏼‍♂️ E4.0 man pouting: medium-light skin tone
-1F64E 1F3FC 200D 2642                      ; minimally-qualified # 🙎🏼‍♂ E4.0 man pouting: medium-light skin tone
-1F64E 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🙎🏽‍♂️ E4.0 man pouting: medium skin tone
-1F64E 1F3FD 200D 2642                      ; minimally-qualified # 🙎🏽‍♂ E4.0 man pouting: medium skin tone
-1F64E 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🙎🏾‍♂️ E4.0 man pouting: medium-dark skin tone
-1F64E 1F3FE 200D 2642                      ; minimally-qualified # 🙎🏾‍♂ E4.0 man pouting: medium-dark skin tone
-1F64E 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🙎🏿‍♂️ E4.0 man pouting: dark skin tone
-1F64E 1F3FF 200D 2642                      ; minimally-qualified # 🙎🏿‍♂ E4.0 man pouting: dark skin tone
-1F64E 200D 2640 FE0F                       ; fully-qualified     # 🙎‍♀️ E4.0 woman pouting
-1F64E 200D 2640                            ; minimally-qualified # 🙎‍♀ E4.0 woman pouting
-1F64E 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🙎🏻‍♀️ E4.0 woman pouting: light skin tone
-1F64E 1F3FB 200D 2640                      ; minimally-qualified # 🙎🏻‍♀ E4.0 woman pouting: light skin tone
-1F64E 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🙎🏼‍♀️ E4.0 woman pouting: medium-light skin tone
-1F64E 1F3FC 200D 2640                      ; minimally-qualified # 🙎🏼‍♀ E4.0 woman pouting: medium-light skin tone
-1F64E 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🙎🏽‍♀️ E4.0 woman pouting: medium skin tone
-1F64E 1F3FD 200D 2640                      ; minimally-qualified # 🙎🏽‍♀ E4.0 woman pouting: medium skin tone
-1F64E 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🙎🏾‍♀️ E4.0 woman pouting: medium-dark skin tone
-1F64E 1F3FE 200D 2640                      ; minimally-qualified # 🙎🏾‍♀ E4.0 woman pouting: medium-dark skin tone
-1F64E 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🙎🏿‍♀️ E4.0 woman pouting: dark skin tone
-1F64E 1F3FF 200D 2640                      ; minimally-qualified # 🙎🏿‍♀ E4.0 woman pouting: dark skin tone
-1F645                                      ; fully-qualified     # 🙅 E0.6 person gesturing NO
-1F645 1F3FB                                ; fully-qualified     # 🙅🏻 E1.0 person gesturing NO: light skin tone
-1F645 1F3FC                                ; fully-qualified     # 🙅🏼 E1.0 person gesturing NO: medium-light skin tone
-1F645 1F3FD                                ; fully-qualified     # 🙅🏽 E1.0 person gesturing NO: medium skin tone
-1F645 1F3FE                                ; fully-qualified     # 🙅🏾 E1.0 person gesturing NO: medium-dark skin tone
-1F645 1F3FF                                ; fully-qualified     # 🙅🏿 E1.0 person gesturing NO: dark skin tone
-1F645 200D 2642 FE0F                       ; fully-qualified     # 🙅‍♂️ E4.0 man gesturing NO
-1F645 200D 2642                            ; minimally-qualified # 🙅‍♂ E4.0 man gesturing NO
-1F645 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🙅🏻‍♂️ E4.0 man gesturing NO: light skin tone
-1F645 1F3FB 200D 2642                      ; minimally-qualified # 🙅🏻‍♂ E4.0 man gesturing NO: light skin tone
-1F645 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🙅🏼‍♂️ E4.0 man gesturing NO: medium-light skin tone
-1F645 1F3FC 200D 2642                      ; minimally-qualified # 🙅🏼‍♂ E4.0 man gesturing NO: medium-light skin tone
-1F645 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🙅🏽‍♂️ E4.0 man gesturing NO: medium skin tone
-1F645 1F3FD 200D 2642                      ; minimally-qualified # 🙅🏽‍♂ E4.0 man gesturing NO: medium skin tone
-1F645 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🙅🏾‍♂️ E4.0 man gesturing NO: medium-dark skin tone
-1F645 1F3FE 200D 2642                      ; minimally-qualified # 🙅🏾‍♂ E4.0 man gesturing NO: medium-dark skin tone
-1F645 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🙅🏿‍♂️ E4.0 man gesturing NO: dark skin tone
-1F645 1F3FF 200D 2642                      ; minimally-qualified # 🙅🏿‍♂ E4.0 man gesturing NO: dark skin tone
-1F645 200D 2640 FE0F                       ; fully-qualified     # 🙅‍♀️ E4.0 woman gesturing NO
-1F645 200D 2640                            ; minimally-qualified # 🙅‍♀ E4.0 woman gesturing NO
-1F645 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🙅🏻‍♀️ E4.0 woman gesturing NO: light skin tone
-1F645 1F3FB 200D 2640                      ; minimally-qualified # 🙅🏻‍♀ E4.0 woman gesturing NO: light skin tone
-1F645 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🙅🏼‍♀️ E4.0 woman gesturing NO: medium-light skin tone
-1F645 1F3FC 200D 2640                      ; minimally-qualified # 🙅🏼‍♀ E4.0 woman gesturing NO: medium-light skin tone
-1F645 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🙅🏽‍♀️ E4.0 woman gesturing NO: medium skin tone
-1F645 1F3FD 200D 2640                      ; minimally-qualified # 🙅🏽‍♀ E4.0 woman gesturing NO: medium skin tone
-1F645 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🙅🏾‍♀️ E4.0 woman gesturing NO: medium-dark skin tone
-1F645 1F3FE 200D 2640                      ; minimally-qualified # 🙅🏾‍♀ E4.0 woman gesturing NO: medium-dark skin tone
-1F645 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🙅🏿‍♀️ E4.0 woman gesturing NO: dark skin tone
-1F645 1F3FF 200D 2640                      ; minimally-qualified # 🙅🏿‍♀ E4.0 woman gesturing NO: dark skin tone
-1F646                                      ; fully-qualified     # 🙆 E0.6 person gesturing OK
-1F646 1F3FB                                ; fully-qualified     # 🙆🏻 E1.0 person gesturing OK: light skin tone
-1F646 1F3FC                                ; fully-qualified     # 🙆🏼 E1.0 person gesturing OK: medium-light skin tone
-1F646 1F3FD                                ; fully-qualified     # 🙆🏽 E1.0 person gesturing OK: medium skin tone
-1F646 1F3FE                                ; fully-qualified     # 🙆🏾 E1.0 person gesturing OK: medium-dark skin tone
-1F646 1F3FF                                ; fully-qualified     # 🙆🏿 E1.0 person gesturing OK: dark skin tone
-1F646 200D 2642 FE0F                       ; fully-qualified     # 🙆‍♂️ E4.0 man gesturing OK
-1F646 200D 2642                            ; minimally-qualified # 🙆‍♂ E4.0 man gesturing OK
-1F646 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🙆🏻‍♂️ E4.0 man gesturing OK: light skin tone
-1F646 1F3FB 200D 2642                      ; minimally-qualified # 🙆🏻‍♂ E4.0 man gesturing OK: light skin tone
-1F646 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🙆🏼‍♂️ E4.0 man gesturing OK: medium-light skin tone
-1F646 1F3FC 200D 2642                      ; minimally-qualified # 🙆🏼‍♂ E4.0 man gesturing OK: medium-light skin tone
-1F646 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🙆🏽‍♂️ E4.0 man gesturing OK: medium skin tone
-1F646 1F3FD 200D 2642                      ; minimally-qualified # 🙆🏽‍♂ E4.0 man gesturing OK: medium skin tone
-1F646 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🙆🏾‍♂️ E4.0 man gesturing OK: medium-dark skin tone
-1F646 1F3FE 200D 2642                      ; minimally-qualified # 🙆🏾‍♂ E4.0 man gesturing OK: medium-dark skin tone
-1F646 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🙆🏿‍♂️ E4.0 man gesturing OK: dark skin tone
-1F646 1F3FF 200D 2642                      ; minimally-qualified # 🙆🏿‍♂ E4.0 man gesturing OK: dark skin tone
-1F646 200D 2640 FE0F                       ; fully-qualified     # 🙆‍♀️ E4.0 woman gesturing OK
-1F646 200D 2640                            ; minimally-qualified # 🙆‍♀ E4.0 woman gesturing OK
-1F646 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🙆🏻‍♀️ E4.0 woman gesturing OK: light skin tone
-1F646 1F3FB 200D 2640                      ; minimally-qualified # 🙆🏻‍♀ E4.0 woman gesturing OK: light skin tone
-1F646 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🙆🏼‍♀️ E4.0 woman gesturing OK: medium-light skin tone
-1F646 1F3FC 200D 2640                      ; minimally-qualified # 🙆🏼‍♀ E4.0 woman gesturing OK: medium-light skin tone
-1F646 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🙆🏽‍♀️ E4.0 woman gesturing OK: medium skin tone
-1F646 1F3FD 200D 2640                      ; minimally-qualified # 🙆🏽‍♀ E4.0 woman gesturing OK: medium skin tone
-1F646 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🙆🏾‍♀️ E4.0 woman gesturing OK: medium-dark skin tone
-1F646 1F3FE 200D 2640                      ; minimally-qualified # 🙆🏾‍♀ E4.0 woman gesturing OK: medium-dark skin tone
-1F646 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🙆🏿‍♀️ E4.0 woman gesturing OK: dark skin tone
-1F646 1F3FF 200D 2640                      ; minimally-qualified # 🙆🏿‍♀ E4.0 woman gesturing OK: dark skin tone
-1F481                                      ; fully-qualified     # 💁 E0.6 person tipping hand
-1F481 1F3FB                                ; fully-qualified     # 💁🏻 E1.0 person tipping hand: light skin tone
-1F481 1F3FC                                ; fully-qualified     # 💁🏼 E1.0 person tipping hand: medium-light skin tone
-1F481 1F3FD                                ; fully-qualified     # 💁🏽 E1.0 person tipping hand: medium skin tone
-1F481 1F3FE                                ; fully-qualified     # 💁🏾 E1.0 person tipping hand: medium-dark skin tone
-1F481 1F3FF                                ; fully-qualified     # 💁🏿 E1.0 person tipping hand: dark skin tone
-1F481 200D 2642 FE0F                       ; fully-qualified     # 💁‍♂️ E4.0 man tipping hand
-1F481 200D 2642                            ; minimally-qualified # 💁‍♂ E4.0 man tipping hand
-1F481 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 💁🏻‍♂️ E4.0 man tipping hand: light skin tone
-1F481 1F3FB 200D 2642                      ; minimally-qualified # 💁🏻‍♂ E4.0 man tipping hand: light skin tone
-1F481 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 💁🏼‍♂️ E4.0 man tipping hand: medium-light skin tone
-1F481 1F3FC 200D 2642                      ; minimally-qualified # 💁🏼‍♂ E4.0 man tipping hand: medium-light skin tone
-1F481 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 💁🏽‍♂️ E4.0 man tipping hand: medium skin tone
-1F481 1F3FD 200D 2642                      ; minimally-qualified # 💁🏽‍♂ E4.0 man tipping hand: medium skin tone
-1F481 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 💁🏾‍♂️ E4.0 man tipping hand: medium-dark skin tone
-1F481 1F3FE 200D 2642                      ; minimally-qualified # 💁🏾‍♂ E4.0 man tipping hand: medium-dark skin tone
-1F481 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 💁🏿‍♂️ E4.0 man tipping hand: dark skin tone
-1F481 1F3FF 200D 2642                      ; minimally-qualified # 💁🏿‍♂ E4.0 man tipping hand: dark skin tone
-1F481 200D 2640 FE0F                       ; fully-qualified     # 💁‍♀️ E4.0 woman tipping hand
-1F481 200D 2640                            ; minimally-qualified # 💁‍♀ E4.0 woman tipping hand
-1F481 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 💁🏻‍♀️ E4.0 woman tipping hand: light skin tone
-1F481 1F3FB 200D 2640                      ; minimally-qualified # 💁🏻‍♀ E4.0 woman tipping hand: light skin tone
-1F481 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 💁🏼‍♀️ E4.0 woman tipping hand: medium-light skin tone
-1F481 1F3FC 200D 2640                      ; minimally-qualified # 💁🏼‍♀ E4.0 woman tipping hand: medium-light skin tone
-1F481 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 💁🏽‍♀️ E4.0 woman tipping hand: medium skin tone
-1F481 1F3FD 200D 2640                      ; minimally-qualified # 💁🏽‍♀ E4.0 woman tipping hand: medium skin tone
-1F481 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 💁🏾‍♀️ E4.0 woman tipping hand: medium-dark skin tone
-1F481 1F3FE 200D 2640                      ; minimally-qualified # 💁🏾‍♀ E4.0 woman tipping hand: medium-dark skin tone
-1F481 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 💁🏿‍♀️ E4.0 woman tipping hand: dark skin tone
-1F481 1F3FF 200D 2640                      ; minimally-qualified # 💁🏿‍♀ E4.0 woman tipping hand: dark skin tone
-1F64B                                      ; fully-qualified     # 🙋 E0.6 person raising hand
-1F64B 1F3FB                                ; fully-qualified     # 🙋🏻 E1.0 person raising hand: light skin tone
-1F64B 1F3FC                                ; fully-qualified     # 🙋🏼 E1.0 person raising hand: medium-light skin tone
-1F64B 1F3FD                                ; fully-qualified     # 🙋🏽 E1.0 person raising hand: medium skin tone
-1F64B 1F3FE                                ; fully-qualified     # 🙋🏾 E1.0 person raising hand: medium-dark skin tone
-1F64B 1F3FF                                ; fully-qualified     # 🙋🏿 E1.0 person raising hand: dark skin tone
-1F64B 200D 2642 FE0F                       ; fully-qualified     # 🙋‍♂️ E4.0 man raising hand
-1F64B 200D 2642                            ; minimally-qualified # 🙋‍♂ E4.0 man raising hand
-1F64B 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🙋🏻‍♂️ E4.0 man raising hand: light skin tone
-1F64B 1F3FB 200D 2642                      ; minimally-qualified # 🙋🏻‍♂ E4.0 man raising hand: light skin tone
-1F64B 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🙋🏼‍♂️ E4.0 man raising hand: medium-light skin tone
-1F64B 1F3FC 200D 2642                      ; minimally-qualified # 🙋🏼‍♂ E4.0 man raising hand: medium-light skin tone
-1F64B 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🙋🏽‍♂️ E4.0 man raising hand: medium skin tone
-1F64B 1F3FD 200D 2642                      ; minimally-qualified # 🙋🏽‍♂ E4.0 man raising hand: medium skin tone
-1F64B 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🙋🏾‍♂️ E4.0 man raising hand: medium-dark skin tone
-1F64B 1F3FE 200D 2642                      ; minimally-qualified # 🙋🏾‍♂ E4.0 man raising hand: medium-dark skin tone
-1F64B 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🙋🏿‍♂️ E4.0 man raising hand: dark skin tone
-1F64B 1F3FF 200D 2642                      ; minimally-qualified # 🙋🏿‍♂ E4.0 man raising hand: dark skin tone
-1F64B 200D 2640 FE0F                       ; fully-qualified     # 🙋‍♀️ E4.0 woman raising hand
-1F64B 200D 2640                            ; minimally-qualified # 🙋‍♀ E4.0 woman raising hand
-1F64B 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🙋🏻‍♀️ E4.0 woman raising hand: light skin tone
-1F64B 1F3FB 200D 2640                      ; minimally-qualified # 🙋🏻‍♀ E4.0 woman raising hand: light skin tone
-1F64B 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🙋🏼‍♀️ E4.0 woman raising hand: medium-light skin tone
-1F64B 1F3FC 200D 2640                      ; minimally-qualified # 🙋🏼‍♀ E4.0 woman raising hand: medium-light skin tone
-1F64B 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🙋🏽‍♀️ E4.0 woman raising hand: medium skin tone
-1F64B 1F3FD 200D 2640                      ; minimally-qualified # 🙋🏽‍♀ E4.0 woman raising hand: medium skin tone
-1F64B 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🙋🏾‍♀️ E4.0 woman raising hand: medium-dark skin tone
-1F64B 1F3FE 200D 2640                      ; minimally-qualified # 🙋🏾‍♀ E4.0 woman raising hand: medium-dark skin tone
-1F64B 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🙋🏿‍♀️ E4.0 woman raising hand: dark skin tone
-1F64B 1F3FF 200D 2640                      ; minimally-qualified # 🙋🏿‍♀ E4.0 woman raising hand: dark skin tone
-1F9CF                                      ; fully-qualified     # 🧏 E12.0 deaf person
-1F9CF 1F3FB                                ; fully-qualified     # 🧏🏻 E12.0 deaf person: light skin tone
-1F9CF 1F3FC                                ; fully-qualified     # 🧏🏼 E12.0 deaf person: medium-light skin tone
-1F9CF 1F3FD                                ; fully-qualified     # 🧏🏽 E12.0 deaf person: medium skin tone
-1F9CF 1F3FE                                ; fully-qualified     # 🧏🏾 E12.0 deaf person: medium-dark skin tone
-1F9CF 1F3FF                                ; fully-qualified     # 🧏🏿 E12.0 deaf person: dark skin tone
-1F9CF 200D 2642 FE0F                       ; fully-qualified     # 🧏‍♂️ E12.0 deaf man
-1F9CF 200D 2642                            ; minimally-qualified # 🧏‍♂ E12.0 deaf man
-1F9CF 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🧏🏻‍♂️ E12.0 deaf man: light skin tone
-1F9CF 1F3FB 200D 2642                      ; minimally-qualified # 🧏🏻‍♂ E12.0 deaf man: light skin tone
-1F9CF 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🧏🏼‍♂️ E12.0 deaf man: medium-light skin tone
-1F9CF 1F3FC 200D 2642                      ; minimally-qualified # 🧏🏼‍♂ E12.0 deaf man: medium-light skin tone
-1F9CF 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🧏🏽‍♂️ E12.0 deaf man: medium skin tone
-1F9CF 1F3FD 200D 2642                      ; minimally-qualified # 🧏🏽‍♂ E12.0 deaf man: medium skin tone
-1F9CF 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🧏🏾‍♂️ E12.0 deaf man: medium-dark skin tone
-1F9CF 1F3FE 200D 2642                      ; minimally-qualified # 🧏🏾‍♂ E12.0 deaf man: medium-dark skin tone
-1F9CF 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🧏🏿‍♂️ E12.0 deaf man: dark skin tone
-1F9CF 1F3FF 200D 2642                      ; minimally-qualified # 🧏🏿‍♂ E12.0 deaf man: dark skin tone
-1F9CF 200D 2640 FE0F                       ; fully-qualified     # 🧏‍♀️ E12.0 deaf woman
-1F9CF 200D 2640                            ; minimally-qualified # 🧏‍♀ E12.0 deaf woman
-1F9CF 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🧏🏻‍♀️ E12.0 deaf woman: light skin tone
-1F9CF 1F3FB 200D 2640                      ; minimally-qualified # 🧏🏻‍♀ E12.0 deaf woman: light skin tone
-1F9CF 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🧏🏼‍♀️ E12.0 deaf woman: medium-light skin tone
-1F9CF 1F3FC 200D 2640                      ; minimally-qualified # 🧏🏼‍♀ E12.0 deaf woman: medium-light skin tone
-1F9CF 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🧏🏽‍♀️ E12.0 deaf woman: medium skin tone
-1F9CF 1F3FD 200D 2640                      ; minimally-qualified # 🧏🏽‍♀ E12.0 deaf woman: medium skin tone
-1F9CF 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🧏🏾‍♀️ E12.0 deaf woman: medium-dark skin tone
-1F9CF 1F3FE 200D 2640                      ; minimally-qualified # 🧏🏾‍♀ E12.0 deaf woman: medium-dark skin tone
-1F9CF 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🧏🏿‍♀️ E12.0 deaf woman: dark skin tone
-1F9CF 1F3FF 200D 2640                      ; minimally-qualified # 🧏🏿‍♀ E12.0 deaf woman: dark skin tone
-1F647                                      ; fully-qualified     # 🙇 E0.6 person bowing
-1F647 1F3FB                                ; fully-qualified     # 🙇🏻 E1.0 person bowing: light skin tone
-1F647 1F3FC                                ; fully-qualified     # 🙇🏼 E1.0 person bowing: medium-light skin tone
-1F647 1F3FD                                ; fully-qualified     # 🙇🏽 E1.0 person bowing: medium skin tone
-1F647 1F3FE                                ; fully-qualified     # 🙇🏾 E1.0 person bowing: medium-dark skin tone
-1F647 1F3FF                                ; fully-qualified     # 🙇🏿 E1.0 person bowing: dark skin tone
-1F647 200D 2642 FE0F                       ; fully-qualified     # 🙇‍♂️ E4.0 man bowing
-1F647 200D 2642                            ; minimally-qualified # 🙇‍♂ E4.0 man bowing
-1F647 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🙇🏻‍♂️ E4.0 man bowing: light skin tone
-1F647 1F3FB 200D 2642                      ; minimally-qualified # 🙇🏻‍♂ E4.0 man bowing: light skin tone
-1F647 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🙇🏼‍♂️ E4.0 man bowing: medium-light skin tone
-1F647 1F3FC 200D 2642                      ; minimally-qualified # 🙇🏼‍♂ E4.0 man bowing: medium-light skin tone
-1F647 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🙇🏽‍♂️ E4.0 man bowing: medium skin tone
-1F647 1F3FD 200D 2642                      ; minimally-qualified # 🙇🏽‍♂ E4.0 man bowing: medium skin tone
-1F647 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🙇🏾‍♂️ E4.0 man bowing: medium-dark skin tone
-1F647 1F3FE 200D 2642                      ; minimally-qualified # 🙇🏾‍♂ E4.0 man bowing: medium-dark skin tone
-1F647 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🙇🏿‍♂️ E4.0 man bowing: dark skin tone
-1F647 1F3FF 200D 2642                      ; minimally-qualified # 🙇🏿‍♂ E4.0 man bowing: dark skin tone
-1F647 200D 2640 FE0F                       ; fully-qualified     # 🙇‍♀️ E4.0 woman bowing
-1F647 200D 2640                            ; minimally-qualified # 🙇‍♀ E4.0 woman bowing
-1F647 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🙇🏻‍♀️ E4.0 woman bowing: light skin tone
-1F647 1F3FB 200D 2640                      ; minimally-qualified # 🙇🏻‍♀ E4.0 woman bowing: light skin tone
-1F647 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🙇🏼‍♀️ E4.0 woman bowing: medium-light skin tone
-1F647 1F3FC 200D 2640                      ; minimally-qualified # 🙇🏼‍♀ E4.0 woman bowing: medium-light skin tone
-1F647 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🙇🏽‍♀️ E4.0 woman bowing: medium skin tone
-1F647 1F3FD 200D 2640                      ; minimally-qualified # 🙇🏽‍♀ E4.0 woman bowing: medium skin tone
-1F647 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🙇🏾‍♀️ E4.0 woman bowing: medium-dark skin tone
-1F647 1F3FE 200D 2640                      ; minimally-qualified # 🙇🏾‍♀ E4.0 woman bowing: medium-dark skin tone
-1F647 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🙇🏿‍♀️ E4.0 woman bowing: dark skin tone
-1F647 1F3FF 200D 2640                      ; minimally-qualified # 🙇🏿‍♀ E4.0 woman bowing: dark skin tone
-1F926                                      ; fully-qualified     # 🤦 E3.0 person facepalming
-1F926 1F3FB                                ; fully-qualified     # 🤦🏻 E3.0 person facepalming: light skin tone
-1F926 1F3FC                                ; fully-qualified     # 🤦🏼 E3.0 person facepalming: medium-light skin tone
-1F926 1F3FD                                ; fully-qualified     # 🤦🏽 E3.0 person facepalming: medium skin tone
-1F926 1F3FE                                ; fully-qualified     # 🤦🏾 E3.0 person facepalming: medium-dark skin tone
-1F926 1F3FF                                ; fully-qualified     # 🤦🏿 E3.0 person facepalming: dark skin tone
-1F926 200D 2642 FE0F                       ; fully-qualified     # 🤦‍♂️ E4.0 man facepalming
-1F926 200D 2642                            ; minimally-qualified # 🤦‍♂ E4.0 man facepalming
-1F926 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🤦🏻‍♂️ E4.0 man facepalming: light skin tone
-1F926 1F3FB 200D 2642                      ; minimally-qualified # 🤦🏻‍♂ E4.0 man facepalming: light skin tone
-1F926 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🤦🏼‍♂️ E4.0 man facepalming: medium-light skin tone
-1F926 1F3FC 200D 2642                      ; minimally-qualified # 🤦🏼‍♂ E4.0 man facepalming: medium-light skin tone
-1F926 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🤦🏽‍♂️ E4.0 man facepalming: medium skin tone
-1F926 1F3FD 200D 2642                      ; minimally-qualified # 🤦🏽‍♂ E4.0 man facepalming: medium skin tone
-1F926 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🤦🏾‍♂️ E4.0 man facepalming: medium-dark skin tone
-1F926 1F3FE 200D 2642                      ; minimally-qualified # 🤦🏾‍♂ E4.0 man facepalming: medium-dark skin tone
-1F926 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🤦🏿‍♂️ E4.0 man facepalming: dark skin tone
-1F926 1F3FF 200D 2642                      ; minimally-qualified # 🤦🏿‍♂ E4.0 man facepalming: dark skin tone
-1F926 200D 2640 FE0F                       ; fully-qualified     # 🤦‍♀️ E4.0 woman facepalming
-1F926 200D 2640                            ; minimally-qualified # 🤦‍♀ E4.0 woman facepalming
-1F926 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🤦🏻‍♀️ E4.0 woman facepalming: light skin tone
-1F926 1F3FB 200D 2640                      ; minimally-qualified # 🤦🏻‍♀ E4.0 woman facepalming: light skin tone
-1F926 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🤦🏼‍♀️ E4.0 woman facepalming: medium-light skin tone
-1F926 1F3FC 200D 2640                      ; minimally-qualified # 🤦🏼‍♀ E4.0 woman facepalming: medium-light skin tone
-1F926 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🤦🏽‍♀️ E4.0 woman facepalming: medium skin tone
-1F926 1F3FD 200D 2640                      ; minimally-qualified # 🤦🏽‍♀ E4.0 woman facepalming: medium skin tone
-1F926 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🤦🏾‍♀️ E4.0 woman facepalming: medium-dark skin tone
-1F926 1F3FE 200D 2640                      ; minimally-qualified # 🤦🏾‍♀ E4.0 woman facepalming: medium-dark skin tone
-1F926 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🤦🏿‍♀️ E4.0 woman facepalming: dark skin tone
-1F926 1F3FF 200D 2640                      ; minimally-qualified # 🤦🏿‍♀ E4.0 woman facepalming: dark skin tone
-1F937                                      ; fully-qualified     # 🤷 E3.0 person shrugging
-1F937 1F3FB                                ; fully-qualified     # 🤷🏻 E3.0 person shrugging: light skin tone
-1F937 1F3FC                                ; fully-qualified     # 🤷🏼 E3.0 person shrugging: medium-light skin tone
-1F937 1F3FD                                ; fully-qualified     # 🤷🏽 E3.0 person shrugging: medium skin tone
-1F937 1F3FE                                ; fully-qualified     # 🤷🏾 E3.0 person shrugging: medium-dark skin tone
-1F937 1F3FF                                ; fully-qualified     # 🤷🏿 E3.0 person shrugging: dark skin tone
-1F937 200D 2642 FE0F                       ; fully-qualified     # 🤷‍♂️ E4.0 man shrugging
-1F937 200D 2642                            ; minimally-qualified # 🤷‍♂ E4.0 man shrugging
-1F937 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🤷🏻‍♂️ E4.0 man shrugging: light skin tone
-1F937 1F3FB 200D 2642                      ; minimally-qualified # 🤷🏻‍♂ E4.0 man shrugging: light skin tone
-1F937 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🤷🏼‍♂️ E4.0 man shrugging: medium-light skin tone
-1F937 1F3FC 200D 2642                      ; minimally-qualified # 🤷🏼‍♂ E4.0 man shrugging: medium-light skin tone
-1F937 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🤷🏽‍♂️ E4.0 man shrugging: medium skin tone
-1F937 1F3FD 200D 2642                      ; minimally-qualified # 🤷🏽‍♂ E4.0 man shrugging: medium skin tone
-1F937 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🤷🏾‍♂️ E4.0 man shrugging: medium-dark skin tone
-1F937 1F3FE 200D 2642                      ; minimally-qualified # 🤷🏾‍♂ E4.0 man shrugging: medium-dark skin tone
-1F937 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🤷🏿‍♂️ E4.0 man shrugging: dark skin tone
-1F937 1F3FF 200D 2642                      ; minimally-qualified # 🤷🏿‍♂ E4.0 man shrugging: dark skin tone
-1F937 200D 2640 FE0F                       ; fully-qualified     # 🤷‍♀️ E4.0 woman shrugging
-1F937 200D 2640                            ; minimally-qualified # 🤷‍♀ E4.0 woman shrugging
-1F937 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🤷🏻‍♀️ E4.0 woman shrugging: light skin tone
-1F937 1F3FB 200D 2640                      ; minimally-qualified # 🤷🏻‍♀ E4.0 woman shrugging: light skin tone
-1F937 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🤷🏼‍♀️ E4.0 woman shrugging: medium-light skin tone
-1F937 1F3FC 200D 2640                      ; minimally-qualified # 🤷🏼‍♀ E4.0 woman shrugging: medium-light skin tone
-1F937 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🤷🏽‍♀️ E4.0 woman shrugging: medium skin tone
-1F937 1F3FD 200D 2640                      ; minimally-qualified # 🤷🏽‍♀ E4.0 woman shrugging: medium skin tone
-1F937 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🤷🏾‍♀️ E4.0 woman shrugging: medium-dark skin tone
-1F937 1F3FE 200D 2640                      ; minimally-qualified # 🤷🏾‍♀ E4.0 woman shrugging: medium-dark skin tone
-1F937 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🤷🏿‍♀️ E4.0 woman shrugging: dark skin tone
-1F937 1F3FF 200D 2640                      ; minimally-qualified # 🤷🏿‍♀ E4.0 woman shrugging: dark skin tone
+1F64D                                                  ; fully-qualified     # 🙍 E0.6 person frowning
+1F64D 1F3FB                                            ; fully-qualified     # 🙍🏻 E1.0 person frowning: light skin tone
+1F64D 1F3FC                                            ; fully-qualified     # 🙍🏼 E1.0 person frowning: medium-light skin tone
+1F64D 1F3FD                                            ; fully-qualified     # 🙍🏽 E1.0 person frowning: medium skin tone
+1F64D 1F3FE                                            ; fully-qualified     # 🙍🏾 E1.0 person frowning: medium-dark skin tone
+1F64D 1F3FF                                            ; fully-qualified     # 🙍🏿 E1.0 person frowning: dark skin tone
+1F64D 200D 2642 FE0F                                   ; fully-qualified     # 🙍‍♂️ E4.0 man frowning
+1F64D 200D 2642                                        ; minimally-qualified # 🙍‍♂ E4.0 man frowning
+1F64D 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🙍🏻‍♂️ E4.0 man frowning: light skin tone
+1F64D 1F3FB 200D 2642                                  ; minimally-qualified # 🙍🏻‍♂ E4.0 man frowning: light skin tone
+1F64D 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🙍🏼‍♂️ E4.0 man frowning: medium-light skin tone
+1F64D 1F3FC 200D 2642                                  ; minimally-qualified # 🙍🏼‍♂ E4.0 man frowning: medium-light skin tone
+1F64D 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🙍🏽‍♂️ E4.0 man frowning: medium skin tone
+1F64D 1F3FD 200D 2642                                  ; minimally-qualified # 🙍🏽‍♂ E4.0 man frowning: medium skin tone
+1F64D 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🙍🏾‍♂️ E4.0 man frowning: medium-dark skin tone
+1F64D 1F3FE 200D 2642                                  ; minimally-qualified # 🙍🏾‍♂ E4.0 man frowning: medium-dark skin tone
+1F64D 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🙍🏿‍♂️ E4.0 man frowning: dark skin tone
+1F64D 1F3FF 200D 2642                                  ; minimally-qualified # 🙍🏿‍♂ E4.0 man frowning: dark skin tone
+1F64D 200D 2640 FE0F                                   ; fully-qualified     # 🙍‍♀️ E4.0 woman frowning
+1F64D 200D 2640                                        ; minimally-qualified # 🙍‍♀ E4.0 woman frowning
+1F64D 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🙍🏻‍♀️ E4.0 woman frowning: light skin tone
+1F64D 1F3FB 200D 2640                                  ; minimally-qualified # 🙍🏻‍♀ E4.0 woman frowning: light skin tone
+1F64D 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🙍🏼‍♀️ E4.0 woman frowning: medium-light skin tone
+1F64D 1F3FC 200D 2640                                  ; minimally-qualified # 🙍🏼‍♀ E4.0 woman frowning: medium-light skin tone
+1F64D 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🙍🏽‍♀️ E4.0 woman frowning: medium skin tone
+1F64D 1F3FD 200D 2640                                  ; minimally-qualified # 🙍🏽‍♀ E4.0 woman frowning: medium skin tone
+1F64D 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🙍🏾‍♀️ E4.0 woman frowning: medium-dark skin tone
+1F64D 1F3FE 200D 2640                                  ; minimally-qualified # 🙍🏾‍♀ E4.0 woman frowning: medium-dark skin tone
+1F64D 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🙍🏿‍♀️ E4.0 woman frowning: dark skin tone
+1F64D 1F3FF 200D 2640                                  ; minimally-qualified # 🙍🏿‍♀ E4.0 woman frowning: dark skin tone
+1F64E                                                  ; fully-qualified     # 🙎 E0.6 person pouting
+1F64E 1F3FB                                            ; fully-qualified     # 🙎🏻 E1.0 person pouting: light skin tone
+1F64E 1F3FC                                            ; fully-qualified     # 🙎🏼 E1.0 person pouting: medium-light skin tone
+1F64E 1F3FD                                            ; fully-qualified     # 🙎🏽 E1.0 person pouting: medium skin tone
+1F64E 1F3FE                                            ; fully-qualified     # 🙎🏾 E1.0 person pouting: medium-dark skin tone
+1F64E 1F3FF                                            ; fully-qualified     # 🙎🏿 E1.0 person pouting: dark skin tone
+1F64E 200D 2642 FE0F                                   ; fully-qualified     # 🙎‍♂️ E4.0 man pouting
+1F64E 200D 2642                                        ; minimally-qualified # 🙎‍♂ E4.0 man pouting
+1F64E 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🙎🏻‍♂️ E4.0 man pouting: light skin tone
+1F64E 1F3FB 200D 2642                                  ; minimally-qualified # 🙎🏻‍♂ E4.0 man pouting: light skin tone
+1F64E 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🙎🏼‍♂️ E4.0 man pouting: medium-light skin tone
+1F64E 1F3FC 200D 2642                                  ; minimally-qualified # 🙎🏼‍♂ E4.0 man pouting: medium-light skin tone
+1F64E 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🙎🏽‍♂️ E4.0 man pouting: medium skin tone
+1F64E 1F3FD 200D 2642                                  ; minimally-qualified # 🙎🏽‍♂ E4.0 man pouting: medium skin tone
+1F64E 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🙎🏾‍♂️ E4.0 man pouting: medium-dark skin tone
+1F64E 1F3FE 200D 2642                                  ; minimally-qualified # 🙎🏾‍♂ E4.0 man pouting: medium-dark skin tone
+1F64E 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🙎🏿‍♂️ E4.0 man pouting: dark skin tone
+1F64E 1F3FF 200D 2642                                  ; minimally-qualified # 🙎🏿‍♂ E4.0 man pouting: dark skin tone
+1F64E 200D 2640 FE0F                                   ; fully-qualified     # 🙎‍♀️ E4.0 woman pouting
+1F64E 200D 2640                                        ; minimally-qualified # 🙎‍♀ E4.0 woman pouting
+1F64E 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🙎🏻‍♀️ E4.0 woman pouting: light skin tone
+1F64E 1F3FB 200D 2640                                  ; minimally-qualified # 🙎🏻‍♀ E4.0 woman pouting: light skin tone
+1F64E 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🙎🏼‍♀️ E4.0 woman pouting: medium-light skin tone
+1F64E 1F3FC 200D 2640                                  ; minimally-qualified # 🙎🏼‍♀ E4.0 woman pouting: medium-light skin tone
+1F64E 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🙎🏽‍♀️ E4.0 woman pouting: medium skin tone
+1F64E 1F3FD 200D 2640                                  ; minimally-qualified # 🙎🏽‍♀ E4.0 woman pouting: medium skin tone
+1F64E 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🙎🏾‍♀️ E4.0 woman pouting: medium-dark skin tone
+1F64E 1F3FE 200D 2640                                  ; minimally-qualified # 🙎🏾‍♀ E4.0 woman pouting: medium-dark skin tone
+1F64E 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🙎🏿‍♀️ E4.0 woman pouting: dark skin tone
+1F64E 1F3FF 200D 2640                                  ; minimally-qualified # 🙎🏿‍♀ E4.0 woman pouting: dark skin tone
+1F645                                                  ; fully-qualified     # 🙅 E0.6 person gesturing NO
+1F645 1F3FB                                            ; fully-qualified     # 🙅🏻 E1.0 person gesturing NO: light skin tone
+1F645 1F3FC                                            ; fully-qualified     # 🙅🏼 E1.0 person gesturing NO: medium-light skin tone
+1F645 1F3FD                                            ; fully-qualified     # 🙅🏽 E1.0 person gesturing NO: medium skin tone
+1F645 1F3FE                                            ; fully-qualified     # 🙅🏾 E1.0 person gesturing NO: medium-dark skin tone
+1F645 1F3FF                                            ; fully-qualified     # 🙅🏿 E1.0 person gesturing NO: dark skin tone
+1F645 200D 2642 FE0F                                   ; fully-qualified     # 🙅‍♂️ E4.0 man gesturing NO
+1F645 200D 2642                                        ; minimally-qualified # 🙅‍♂ E4.0 man gesturing NO
+1F645 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🙅🏻‍♂️ E4.0 man gesturing NO: light skin tone
+1F645 1F3FB 200D 2642                                  ; minimally-qualified # 🙅🏻‍♂ E4.0 man gesturing NO: light skin tone
+1F645 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🙅🏼‍♂️ E4.0 man gesturing NO: medium-light skin tone
+1F645 1F3FC 200D 2642                                  ; minimally-qualified # 🙅🏼‍♂ E4.0 man gesturing NO: medium-light skin tone
+1F645 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🙅🏽‍♂️ E4.0 man gesturing NO: medium skin tone
+1F645 1F3FD 200D 2642                                  ; minimally-qualified # 🙅🏽‍♂ E4.0 man gesturing NO: medium skin tone
+1F645 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🙅🏾‍♂️ E4.0 man gesturing NO: medium-dark skin tone
+1F645 1F3FE 200D 2642                                  ; minimally-qualified # 🙅🏾‍♂ E4.0 man gesturing NO: medium-dark skin tone
+1F645 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🙅🏿‍♂️ E4.0 man gesturing NO: dark skin tone
+1F645 1F3FF 200D 2642                                  ; minimally-qualified # 🙅🏿‍♂ E4.0 man gesturing NO: dark skin tone
+1F645 200D 2640 FE0F                                   ; fully-qualified     # 🙅‍♀️ E4.0 woman gesturing NO
+1F645 200D 2640                                        ; minimally-qualified # 🙅‍♀ E4.0 woman gesturing NO
+1F645 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🙅🏻‍♀️ E4.0 woman gesturing NO: light skin tone
+1F645 1F3FB 200D 2640                                  ; minimally-qualified # 🙅🏻‍♀ E4.0 woman gesturing NO: light skin tone
+1F645 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🙅🏼‍♀️ E4.0 woman gesturing NO: medium-light skin tone
+1F645 1F3FC 200D 2640                                  ; minimally-qualified # 🙅🏼‍♀ E4.0 woman gesturing NO: medium-light skin tone
+1F645 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🙅🏽‍♀️ E4.0 woman gesturing NO: medium skin tone
+1F645 1F3FD 200D 2640                                  ; minimally-qualified # 🙅🏽‍♀ E4.0 woman gesturing NO: medium skin tone
+1F645 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🙅🏾‍♀️ E4.0 woman gesturing NO: medium-dark skin tone
+1F645 1F3FE 200D 2640                                  ; minimally-qualified # 🙅🏾‍♀ E4.0 woman gesturing NO: medium-dark skin tone
+1F645 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🙅🏿‍♀️ E4.0 woman gesturing NO: dark skin tone
+1F645 1F3FF 200D 2640                                  ; minimally-qualified # 🙅🏿‍♀ E4.0 woman gesturing NO: dark skin tone
+1F646                                                  ; fully-qualified     # 🙆 E0.6 person gesturing OK
+1F646 1F3FB                                            ; fully-qualified     # 🙆🏻 E1.0 person gesturing OK: light skin tone
+1F646 1F3FC                                            ; fully-qualified     # 🙆🏼 E1.0 person gesturing OK: medium-light skin tone
+1F646 1F3FD                                            ; fully-qualified     # 🙆🏽 E1.0 person gesturing OK: medium skin tone
+1F646 1F3FE                                            ; fully-qualified     # 🙆🏾 E1.0 person gesturing OK: medium-dark skin tone
+1F646 1F3FF                                            ; fully-qualified     # 🙆🏿 E1.0 person gesturing OK: dark skin tone
+1F646 200D 2642 FE0F                                   ; fully-qualified     # 🙆‍♂️ E4.0 man gesturing OK
+1F646 200D 2642                                        ; minimally-qualified # 🙆‍♂ E4.0 man gesturing OK
+1F646 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🙆🏻‍♂️ E4.0 man gesturing OK: light skin tone
+1F646 1F3FB 200D 2642                                  ; minimally-qualified # 🙆🏻‍♂ E4.0 man gesturing OK: light skin tone
+1F646 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🙆🏼‍♂️ E4.0 man gesturing OK: medium-light skin tone
+1F646 1F3FC 200D 2642                                  ; minimally-qualified # 🙆🏼‍♂ E4.0 man gesturing OK: medium-light skin tone
+1F646 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🙆🏽‍♂️ E4.0 man gesturing OK: medium skin tone
+1F646 1F3FD 200D 2642                                  ; minimally-qualified # 🙆🏽‍♂ E4.0 man gesturing OK: medium skin tone
+1F646 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🙆🏾‍♂️ E4.0 man gesturing OK: medium-dark skin tone
+1F646 1F3FE 200D 2642                                  ; minimally-qualified # 🙆🏾‍♂ E4.0 man gesturing OK: medium-dark skin tone
+1F646 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🙆🏿‍♂️ E4.0 man gesturing OK: dark skin tone
+1F646 1F3FF 200D 2642                                  ; minimally-qualified # 🙆🏿‍♂ E4.0 man gesturing OK: dark skin tone
+1F646 200D 2640 FE0F                                   ; fully-qualified     # 🙆‍♀️ E4.0 woman gesturing OK
+1F646 200D 2640                                        ; minimally-qualified # 🙆‍♀ E4.0 woman gesturing OK
+1F646 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🙆🏻‍♀️ E4.0 woman gesturing OK: light skin tone
+1F646 1F3FB 200D 2640                                  ; minimally-qualified # 🙆🏻‍♀ E4.0 woman gesturing OK: light skin tone
+1F646 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🙆🏼‍♀️ E4.0 woman gesturing OK: medium-light skin tone
+1F646 1F3FC 200D 2640                                  ; minimally-qualified # 🙆🏼‍♀ E4.0 woman gesturing OK: medium-light skin tone
+1F646 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🙆🏽‍♀️ E4.0 woman gesturing OK: medium skin tone
+1F646 1F3FD 200D 2640                                  ; minimally-qualified # 🙆🏽‍♀ E4.0 woman gesturing OK: medium skin tone
+1F646 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🙆🏾‍♀️ E4.0 woman gesturing OK: medium-dark skin tone
+1F646 1F3FE 200D 2640                                  ; minimally-qualified # 🙆🏾‍♀ E4.0 woman gesturing OK: medium-dark skin tone
+1F646 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🙆🏿‍♀️ E4.0 woman gesturing OK: dark skin tone
+1F646 1F3FF 200D 2640                                  ; minimally-qualified # 🙆🏿‍♀ E4.0 woman gesturing OK: dark skin tone
+1F481                                                  ; fully-qualified     # 💁 E0.6 person tipping hand
+1F481 1F3FB                                            ; fully-qualified     # 💁🏻 E1.0 person tipping hand: light skin tone
+1F481 1F3FC                                            ; fully-qualified     # 💁🏼 E1.0 person tipping hand: medium-light skin tone
+1F481 1F3FD                                            ; fully-qualified     # 💁🏽 E1.0 person tipping hand: medium skin tone
+1F481 1F3FE                                            ; fully-qualified     # 💁🏾 E1.0 person tipping hand: medium-dark skin tone
+1F481 1F3FF                                            ; fully-qualified     # 💁🏿 E1.0 person tipping hand: dark skin tone
+1F481 200D 2642 FE0F                                   ; fully-qualified     # 💁‍♂️ E4.0 man tipping hand
+1F481 200D 2642                                        ; minimally-qualified # 💁‍♂ E4.0 man tipping hand
+1F481 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 💁🏻‍♂️ E4.0 man tipping hand: light skin tone
+1F481 1F3FB 200D 2642                                  ; minimally-qualified # 💁🏻‍♂ E4.0 man tipping hand: light skin tone
+1F481 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 💁🏼‍♂️ E4.0 man tipping hand: medium-light skin tone
+1F481 1F3FC 200D 2642                                  ; minimally-qualified # 💁🏼‍♂ E4.0 man tipping hand: medium-light skin tone
+1F481 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 💁🏽‍♂️ E4.0 man tipping hand: medium skin tone
+1F481 1F3FD 200D 2642                                  ; minimally-qualified # 💁🏽‍♂ E4.0 man tipping hand: medium skin tone
+1F481 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 💁🏾‍♂️ E4.0 man tipping hand: medium-dark skin tone
+1F481 1F3FE 200D 2642                                  ; minimally-qualified # 💁🏾‍♂ E4.0 man tipping hand: medium-dark skin tone
+1F481 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 💁🏿‍♂️ E4.0 man tipping hand: dark skin tone
+1F481 1F3FF 200D 2642                                  ; minimally-qualified # 💁🏿‍♂ E4.0 man tipping hand: dark skin tone
+1F481 200D 2640 FE0F                                   ; fully-qualified     # 💁‍♀️ E4.0 woman tipping hand
+1F481 200D 2640                                        ; minimally-qualified # 💁‍♀ E4.0 woman tipping hand
+1F481 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 💁🏻‍♀️ E4.0 woman tipping hand: light skin tone
+1F481 1F3FB 200D 2640                                  ; minimally-qualified # 💁🏻‍♀ E4.0 woman tipping hand: light skin tone
+1F481 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 💁🏼‍♀️ E4.0 woman tipping hand: medium-light skin tone
+1F481 1F3FC 200D 2640                                  ; minimally-qualified # 💁🏼‍♀ E4.0 woman tipping hand: medium-light skin tone
+1F481 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 💁🏽‍♀️ E4.0 woman tipping hand: medium skin tone
+1F481 1F3FD 200D 2640                                  ; minimally-qualified # 💁🏽‍♀ E4.0 woman tipping hand: medium skin tone
+1F481 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 💁🏾‍♀️ E4.0 woman tipping hand: medium-dark skin tone
+1F481 1F3FE 200D 2640                                  ; minimally-qualified # 💁🏾‍♀ E4.0 woman tipping hand: medium-dark skin tone
+1F481 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 💁🏿‍♀️ E4.0 woman tipping hand: dark skin tone
+1F481 1F3FF 200D 2640                                  ; minimally-qualified # 💁🏿‍♀ E4.0 woman tipping hand: dark skin tone
+1F64B                                                  ; fully-qualified     # 🙋 E0.6 person raising hand
+1F64B 1F3FB                                            ; fully-qualified     # 🙋🏻 E1.0 person raising hand: light skin tone
+1F64B 1F3FC                                            ; fully-qualified     # 🙋🏼 E1.0 person raising hand: medium-light skin tone
+1F64B 1F3FD                                            ; fully-qualified     # 🙋🏽 E1.0 person raising hand: medium skin tone
+1F64B 1F3FE                                            ; fully-qualified     # 🙋🏾 E1.0 person raising hand: medium-dark skin tone
+1F64B 1F3FF                                            ; fully-qualified     # 🙋🏿 E1.0 person raising hand: dark skin tone
+1F64B 200D 2642 FE0F                                   ; fully-qualified     # 🙋‍♂️ E4.0 man raising hand
+1F64B 200D 2642                                        ; minimally-qualified # 🙋‍♂ E4.0 man raising hand
+1F64B 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🙋🏻‍♂️ E4.0 man raising hand: light skin tone
+1F64B 1F3FB 200D 2642                                  ; minimally-qualified # 🙋🏻‍♂ E4.0 man raising hand: light skin tone
+1F64B 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🙋🏼‍♂️ E4.0 man raising hand: medium-light skin tone
+1F64B 1F3FC 200D 2642                                  ; minimally-qualified # 🙋🏼‍♂ E4.0 man raising hand: medium-light skin tone
+1F64B 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🙋🏽‍♂️ E4.0 man raising hand: medium skin tone
+1F64B 1F3FD 200D 2642                                  ; minimally-qualified # 🙋🏽‍♂ E4.0 man raising hand: medium skin tone
+1F64B 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🙋🏾‍♂️ E4.0 man raising hand: medium-dark skin tone
+1F64B 1F3FE 200D 2642                                  ; minimally-qualified # 🙋🏾‍♂ E4.0 man raising hand: medium-dark skin tone
+1F64B 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🙋🏿‍♂️ E4.0 man raising hand: dark skin tone
+1F64B 1F3FF 200D 2642                                  ; minimally-qualified # 🙋🏿‍♂ E4.0 man raising hand: dark skin tone
+1F64B 200D 2640 FE0F                                   ; fully-qualified     # 🙋‍♀️ E4.0 woman raising hand
+1F64B 200D 2640                                        ; minimally-qualified # 🙋‍♀ E4.0 woman raising hand
+1F64B 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🙋🏻‍♀️ E4.0 woman raising hand: light skin tone
+1F64B 1F3FB 200D 2640                                  ; minimally-qualified # 🙋🏻‍♀ E4.0 woman raising hand: light skin tone
+1F64B 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🙋🏼‍♀️ E4.0 woman raising hand: medium-light skin tone
+1F64B 1F3FC 200D 2640                                  ; minimally-qualified # 🙋🏼‍♀ E4.0 woman raising hand: medium-light skin tone
+1F64B 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🙋🏽‍♀️ E4.0 woman raising hand: medium skin tone
+1F64B 1F3FD 200D 2640                                  ; minimally-qualified # 🙋🏽‍♀ E4.0 woman raising hand: medium skin tone
+1F64B 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🙋🏾‍♀️ E4.0 woman raising hand: medium-dark skin tone
+1F64B 1F3FE 200D 2640                                  ; minimally-qualified # 🙋🏾‍♀ E4.0 woman raising hand: medium-dark skin tone
+1F64B 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🙋🏿‍♀️ E4.0 woman raising hand: dark skin tone
+1F64B 1F3FF 200D 2640                                  ; minimally-qualified # 🙋🏿‍♀ E4.0 woman raising hand: dark skin tone
+1F9CF                                                  ; fully-qualified     # 🧏 E12.0 deaf person
+1F9CF 1F3FB                                            ; fully-qualified     # 🧏🏻 E12.0 deaf person: light skin tone
+1F9CF 1F3FC                                            ; fully-qualified     # 🧏🏼 E12.0 deaf person: medium-light skin tone
+1F9CF 1F3FD                                            ; fully-qualified     # 🧏🏽 E12.0 deaf person: medium skin tone
+1F9CF 1F3FE                                            ; fully-qualified     # 🧏🏾 E12.0 deaf person: medium-dark skin tone
+1F9CF 1F3FF                                            ; fully-qualified     # 🧏🏿 E12.0 deaf person: dark skin tone
+1F9CF 200D 2642 FE0F                                   ; fully-qualified     # 🧏‍♂️ E12.0 deaf man
+1F9CF 200D 2642                                        ; minimally-qualified # 🧏‍♂ E12.0 deaf man
+1F9CF 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🧏🏻‍♂️ E12.0 deaf man: light skin tone
+1F9CF 1F3FB 200D 2642                                  ; minimally-qualified # 🧏🏻‍♂ E12.0 deaf man: light skin tone
+1F9CF 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🧏🏼‍♂️ E12.0 deaf man: medium-light skin tone
+1F9CF 1F3FC 200D 2642                                  ; minimally-qualified # 🧏🏼‍♂ E12.0 deaf man: medium-light skin tone
+1F9CF 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🧏🏽‍♂️ E12.0 deaf man: medium skin tone
+1F9CF 1F3FD 200D 2642                                  ; minimally-qualified # 🧏🏽‍♂ E12.0 deaf man: medium skin tone
+1F9CF 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🧏🏾‍♂️ E12.0 deaf man: medium-dark skin tone
+1F9CF 1F3FE 200D 2642                                  ; minimally-qualified # 🧏🏾‍♂ E12.0 deaf man: medium-dark skin tone
+1F9CF 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🧏🏿‍♂️ E12.0 deaf man: dark skin tone
+1F9CF 1F3FF 200D 2642                                  ; minimally-qualified # 🧏🏿‍♂ E12.0 deaf man: dark skin tone
+1F9CF 200D 2640 FE0F                                   ; fully-qualified     # 🧏‍♀️ E12.0 deaf woman
+1F9CF 200D 2640                                        ; minimally-qualified # 🧏‍♀ E12.0 deaf woman
+1F9CF 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🧏🏻‍♀️ E12.0 deaf woman: light skin tone
+1F9CF 1F3FB 200D 2640                                  ; minimally-qualified # 🧏🏻‍♀ E12.0 deaf woman: light skin tone
+1F9CF 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🧏🏼‍♀️ E12.0 deaf woman: medium-light skin tone
+1F9CF 1F3FC 200D 2640                                  ; minimally-qualified # 🧏🏼‍♀ E12.0 deaf woman: medium-light skin tone
+1F9CF 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🧏🏽‍♀️ E12.0 deaf woman: medium skin tone
+1F9CF 1F3FD 200D 2640                                  ; minimally-qualified # 🧏🏽‍♀ E12.0 deaf woman: medium skin tone
+1F9CF 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🧏🏾‍♀️ E12.0 deaf woman: medium-dark skin tone
+1F9CF 1F3FE 200D 2640                                  ; minimally-qualified # 🧏🏾‍♀ E12.0 deaf woman: medium-dark skin tone
+1F9CF 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🧏🏿‍♀️ E12.0 deaf woman: dark skin tone
+1F9CF 1F3FF 200D 2640                                  ; minimally-qualified # 🧏🏿‍♀ E12.0 deaf woman: dark skin tone
+1F647                                                  ; fully-qualified     # 🙇 E0.6 person bowing
+1F647 1F3FB                                            ; fully-qualified     # 🙇🏻 E1.0 person bowing: light skin tone
+1F647 1F3FC                                            ; fully-qualified     # 🙇🏼 E1.0 person bowing: medium-light skin tone
+1F647 1F3FD                                            ; fully-qualified     # 🙇🏽 E1.0 person bowing: medium skin tone
+1F647 1F3FE                                            ; fully-qualified     # 🙇🏾 E1.0 person bowing: medium-dark skin tone
+1F647 1F3FF                                            ; fully-qualified     # 🙇🏿 E1.0 person bowing: dark skin tone
+1F647 200D 2642 FE0F                                   ; fully-qualified     # 🙇‍♂️ E4.0 man bowing
+1F647 200D 2642                                        ; minimally-qualified # 🙇‍♂ E4.0 man bowing
+1F647 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🙇🏻‍♂️ E4.0 man bowing: light skin tone
+1F647 1F3FB 200D 2642                                  ; minimally-qualified # 🙇🏻‍♂ E4.0 man bowing: light skin tone
+1F647 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🙇🏼‍♂️ E4.0 man bowing: medium-light skin tone
+1F647 1F3FC 200D 2642                                  ; minimally-qualified # 🙇🏼‍♂ E4.0 man bowing: medium-light skin tone
+1F647 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🙇🏽‍♂️ E4.0 man bowing: medium skin tone
+1F647 1F3FD 200D 2642                                  ; minimally-qualified # 🙇🏽‍♂ E4.0 man bowing: medium skin tone
+1F647 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🙇🏾‍♂️ E4.0 man bowing: medium-dark skin tone
+1F647 1F3FE 200D 2642                                  ; minimally-qualified # 🙇🏾‍♂ E4.0 man bowing: medium-dark skin tone
+1F647 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🙇🏿‍♂️ E4.0 man bowing: dark skin tone
+1F647 1F3FF 200D 2642                                  ; minimally-qualified # 🙇🏿‍♂ E4.0 man bowing: dark skin tone
+1F647 200D 2640 FE0F                                   ; fully-qualified     # 🙇‍♀️ E4.0 woman bowing
+1F647 200D 2640                                        ; minimally-qualified # 🙇‍♀ E4.0 woman bowing
+1F647 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🙇🏻‍♀️ E4.0 woman bowing: light skin tone
+1F647 1F3FB 200D 2640                                  ; minimally-qualified # 🙇🏻‍♀ E4.0 woman bowing: light skin tone
+1F647 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🙇🏼‍♀️ E4.0 woman bowing: medium-light skin tone
+1F647 1F3FC 200D 2640                                  ; minimally-qualified # 🙇🏼‍♀ E4.0 woman bowing: medium-light skin tone
+1F647 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🙇🏽‍♀️ E4.0 woman bowing: medium skin tone
+1F647 1F3FD 200D 2640                                  ; minimally-qualified # 🙇🏽‍♀ E4.0 woman bowing: medium skin tone
+1F647 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🙇🏾‍♀️ E4.0 woman bowing: medium-dark skin tone
+1F647 1F3FE 200D 2640                                  ; minimally-qualified # 🙇🏾‍♀ E4.0 woman bowing: medium-dark skin tone
+1F647 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🙇🏿‍♀️ E4.0 woman bowing: dark skin tone
+1F647 1F3FF 200D 2640                                  ; minimally-qualified # 🙇🏿‍♀ E4.0 woman bowing: dark skin tone
+1F926                                                  ; fully-qualified     # 🤦 E3.0 person facepalming
+1F926 1F3FB                                            ; fully-qualified     # 🤦🏻 E3.0 person facepalming: light skin tone
+1F926 1F3FC                                            ; fully-qualified     # 🤦🏼 E3.0 person facepalming: medium-light skin tone
+1F926 1F3FD                                            ; fully-qualified     # 🤦🏽 E3.0 person facepalming: medium skin tone
+1F926 1F3FE                                            ; fully-qualified     # 🤦🏾 E3.0 person facepalming: medium-dark skin tone
+1F926 1F3FF                                            ; fully-qualified     # 🤦🏿 E3.0 person facepalming: dark skin tone
+1F926 200D 2642 FE0F                                   ; fully-qualified     # 🤦‍♂️ E4.0 man facepalming
+1F926 200D 2642                                        ; minimally-qualified # 🤦‍♂ E4.0 man facepalming
+1F926 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🤦🏻‍♂️ E4.0 man facepalming: light skin tone
+1F926 1F3FB 200D 2642                                  ; minimally-qualified # 🤦🏻‍♂ E4.0 man facepalming: light skin tone
+1F926 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🤦🏼‍♂️ E4.0 man facepalming: medium-light skin tone
+1F926 1F3FC 200D 2642                                  ; minimally-qualified # 🤦🏼‍♂ E4.0 man facepalming: medium-light skin tone
+1F926 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🤦🏽‍♂️ E4.0 man facepalming: medium skin tone
+1F926 1F3FD 200D 2642                                  ; minimally-qualified # 🤦🏽‍♂ E4.0 man facepalming: medium skin tone
+1F926 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🤦🏾‍♂️ E4.0 man facepalming: medium-dark skin tone
+1F926 1F3FE 200D 2642                                  ; minimally-qualified # 🤦🏾‍♂ E4.0 man facepalming: medium-dark skin tone
+1F926 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🤦🏿‍♂️ E4.0 man facepalming: dark skin tone
+1F926 1F3FF 200D 2642                                  ; minimally-qualified # 🤦🏿‍♂ E4.0 man facepalming: dark skin tone
+1F926 200D 2640 FE0F                                   ; fully-qualified     # 🤦‍♀️ E4.0 woman facepalming
+1F926 200D 2640                                        ; minimally-qualified # 🤦‍♀ E4.0 woman facepalming
+1F926 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🤦🏻‍♀️ E4.0 woman facepalming: light skin tone
+1F926 1F3FB 200D 2640                                  ; minimally-qualified # 🤦🏻‍♀ E4.0 woman facepalming: light skin tone
+1F926 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🤦🏼‍♀️ E4.0 woman facepalming: medium-light skin tone
+1F926 1F3FC 200D 2640                                  ; minimally-qualified # 🤦🏼‍♀ E4.0 woman facepalming: medium-light skin tone
+1F926 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🤦🏽‍♀️ E4.0 woman facepalming: medium skin tone
+1F926 1F3FD 200D 2640                                  ; minimally-qualified # 🤦🏽‍♀ E4.0 woman facepalming: medium skin tone
+1F926 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🤦🏾‍♀️ E4.0 woman facepalming: medium-dark skin tone
+1F926 1F3FE 200D 2640                                  ; minimally-qualified # 🤦🏾‍♀ E4.0 woman facepalming: medium-dark skin tone
+1F926 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🤦🏿‍♀️ E4.0 woman facepalming: dark skin tone
+1F926 1F3FF 200D 2640                                  ; minimally-qualified # 🤦🏿‍♀ E4.0 woman facepalming: dark skin tone
+1F937                                                  ; fully-qualified     # 🤷 E3.0 person shrugging
+1F937 1F3FB                                            ; fully-qualified     # 🤷🏻 E3.0 person shrugging: light skin tone
+1F937 1F3FC                                            ; fully-qualified     # 🤷🏼 E3.0 person shrugging: medium-light skin tone
+1F937 1F3FD                                            ; fully-qualified     # 🤷🏽 E3.0 person shrugging: medium skin tone
+1F937 1F3FE                                            ; fully-qualified     # 🤷🏾 E3.0 person shrugging: medium-dark skin tone
+1F937 1F3FF                                            ; fully-qualified     # 🤷🏿 E3.0 person shrugging: dark skin tone
+1F937 200D 2642 FE0F                                   ; fully-qualified     # 🤷‍♂️ E4.0 man shrugging
+1F937 200D 2642                                        ; minimally-qualified # 🤷‍♂ E4.0 man shrugging
+1F937 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🤷🏻‍♂️ E4.0 man shrugging: light skin tone
+1F937 1F3FB 200D 2642                                  ; minimally-qualified # 🤷🏻‍♂ E4.0 man shrugging: light skin tone
+1F937 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🤷🏼‍♂️ E4.0 man shrugging: medium-light skin tone
+1F937 1F3FC 200D 2642                                  ; minimally-qualified # 🤷🏼‍♂ E4.0 man shrugging: medium-light skin tone
+1F937 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🤷🏽‍♂️ E4.0 man shrugging: medium skin tone
+1F937 1F3FD 200D 2642                                  ; minimally-qualified # 🤷🏽‍♂ E4.0 man shrugging: medium skin tone
+1F937 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🤷🏾‍♂️ E4.0 man shrugging: medium-dark skin tone
+1F937 1F3FE 200D 2642                                  ; minimally-qualified # 🤷🏾‍♂ E4.0 man shrugging: medium-dark skin tone
+1F937 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🤷🏿‍♂️ E4.0 man shrugging: dark skin tone
+1F937 1F3FF 200D 2642                                  ; minimally-qualified # 🤷🏿‍♂ E4.0 man shrugging: dark skin tone
+1F937 200D 2640 FE0F                                   ; fully-qualified     # 🤷‍♀️ E4.0 woman shrugging
+1F937 200D 2640                                        ; minimally-qualified # 🤷‍♀ E4.0 woman shrugging
+1F937 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🤷🏻‍♀️ E4.0 woman shrugging: light skin tone
+1F937 1F3FB 200D 2640                                  ; minimally-qualified # 🤷🏻‍♀ E4.0 woman shrugging: light skin tone
+1F937 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🤷🏼‍♀️ E4.0 woman shrugging: medium-light skin tone
+1F937 1F3FC 200D 2640                                  ; minimally-qualified # 🤷🏼‍♀ E4.0 woman shrugging: medium-light skin tone
+1F937 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🤷🏽‍♀️ E4.0 woman shrugging: medium skin tone
+1F937 1F3FD 200D 2640                                  ; minimally-qualified # 🤷🏽‍♀ E4.0 woman shrugging: medium skin tone
+1F937 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🤷🏾‍♀️ E4.0 woman shrugging: medium-dark skin tone
+1F937 1F3FE 200D 2640                                  ; minimally-qualified # 🤷🏾‍♀ E4.0 woman shrugging: medium-dark skin tone
+1F937 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🤷🏿‍♀️ E4.0 woman shrugging: dark skin tone
+1F937 1F3FF 200D 2640                                  ; minimally-qualified # 🤷🏿‍♀ E4.0 woman shrugging: dark skin tone
 
 # subgroup: person-role
-1F9D1 200D 2695 FE0F                       ; fully-qualified     # 🧑‍⚕️ E12.1 health worker
-1F9D1 200D 2695                            ; minimally-qualified # 🧑‍⚕ E12.1 health worker
-1F9D1 1F3FB 200D 2695 FE0F                 ; fully-qualified     # 🧑🏻‍⚕️ E12.1 health worker: light skin tone
-1F9D1 1F3FB 200D 2695                      ; minimally-qualified # 🧑🏻‍⚕ E12.1 health worker: light skin tone
-1F9D1 1F3FC 200D 2695 FE0F                 ; fully-qualified     # 🧑🏼‍⚕️ E12.1 health worker: medium-light skin tone
-1F9D1 1F3FC 200D 2695                      ; minimally-qualified # 🧑🏼‍⚕ E12.1 health worker: medium-light skin tone
-1F9D1 1F3FD 200D 2695 FE0F                 ; fully-qualified     # 🧑🏽‍⚕️ E12.1 health worker: medium skin tone
-1F9D1 1F3FD 200D 2695                      ; minimally-qualified # 🧑🏽‍⚕ E12.1 health worker: medium skin tone
-1F9D1 1F3FE 200D 2695 FE0F                 ; fully-qualified     # 🧑🏾‍⚕️ E12.1 health worker: medium-dark skin tone
-1F9D1 1F3FE 200D 2695                      ; minimally-qualified # 🧑🏾‍⚕ E12.1 health worker: medium-dark skin tone
-1F9D1 1F3FF 200D 2695 FE0F                 ; fully-qualified     # 🧑🏿‍⚕️ E12.1 health worker: dark skin tone
-1F9D1 1F3FF 200D 2695                      ; minimally-qualified # 🧑🏿‍⚕ E12.1 health worker: dark skin tone
-1F468 200D 2695 FE0F                       ; fully-qualified     # 👨‍⚕️ E4.0 man health worker
-1F468 200D 2695                            ; minimally-qualified # 👨‍⚕ E4.0 man health worker
-1F468 1F3FB 200D 2695 FE0F                 ; fully-qualified     # 👨🏻‍⚕️ E4.0 man health worker: light skin tone
-1F468 1F3FB 200D 2695                      ; minimally-qualified # 👨🏻‍⚕ E4.0 man health worker: light skin tone
-1F468 1F3FC 200D 2695 FE0F                 ; fully-qualified     # 👨🏼‍⚕️ E4.0 man health worker: medium-light skin tone
-1F468 1F3FC 200D 2695                      ; minimally-qualified # 👨🏼‍⚕ E4.0 man health worker: medium-light skin tone
-1F468 1F3FD 200D 2695 FE0F                 ; fully-qualified     # 👨🏽‍⚕️ E4.0 man health worker: medium skin tone
-1F468 1F3FD 200D 2695                      ; minimally-qualified # 👨🏽‍⚕ E4.0 man health worker: medium skin tone
-1F468 1F3FE 200D 2695 FE0F                 ; fully-qualified     # 👨🏾‍⚕️ E4.0 man health worker: medium-dark skin tone
-1F468 1F3FE 200D 2695                      ; minimally-qualified # 👨🏾‍⚕ E4.0 man health worker: medium-dark skin tone
-1F468 1F3FF 200D 2695 FE0F                 ; fully-qualified     # 👨🏿‍⚕️ E4.0 man health worker: dark skin tone
-1F468 1F3FF 200D 2695                      ; minimally-qualified # 👨🏿‍⚕ E4.0 man health worker: dark skin tone
-1F469 200D 2695 FE0F                       ; fully-qualified     # 👩‍⚕️ E4.0 woman health worker
-1F469 200D 2695                            ; minimally-qualified # 👩‍⚕ E4.0 woman health worker
-1F469 1F3FB 200D 2695 FE0F                 ; fully-qualified     # 👩🏻‍⚕️ E4.0 woman health worker: light skin tone
-1F469 1F3FB 200D 2695                      ; minimally-qualified # 👩🏻‍⚕ E4.0 woman health worker: light skin tone
-1F469 1F3FC 200D 2695 FE0F                 ; fully-qualified     # 👩🏼‍⚕️ E4.0 woman health worker: medium-light skin tone
-1F469 1F3FC 200D 2695                      ; minimally-qualified # 👩🏼‍⚕ E4.0 woman health worker: medium-light skin tone
-1F469 1F3FD 200D 2695 FE0F                 ; fully-qualified     # 👩🏽‍⚕️ E4.0 woman health worker: medium skin tone
-1F469 1F3FD 200D 2695                      ; minimally-qualified # 👩🏽‍⚕ E4.0 woman health worker: medium skin tone
-1F469 1F3FE 200D 2695 FE0F                 ; fully-qualified     # 👩🏾‍⚕️ E4.0 woman health worker: medium-dark skin tone
-1F469 1F3FE 200D 2695                      ; minimally-qualified # 👩🏾‍⚕ E4.0 woman health worker: medium-dark skin tone
-1F469 1F3FF 200D 2695 FE0F                 ; fully-qualified     # 👩🏿‍⚕️ E4.0 woman health worker: dark skin tone
-1F469 1F3FF 200D 2695                      ; minimally-qualified # 👩🏿‍⚕ E4.0 woman health worker: dark skin tone
-1F9D1 200D 1F393                           ; fully-qualified     # 🧑‍🎓 E12.1 student
-1F9D1 1F3FB 200D 1F393                     ; fully-qualified     # 🧑🏻‍🎓 E12.1 student: light skin tone
-1F9D1 1F3FC 200D 1F393                     ; fully-qualified     # 🧑🏼‍🎓 E12.1 student: medium-light skin tone
-1F9D1 1F3FD 200D 1F393                     ; fully-qualified     # 🧑🏽‍🎓 E12.1 student: medium skin tone
-1F9D1 1F3FE 200D 1F393                     ; fully-qualified     # 🧑🏾‍🎓 E12.1 student: medium-dark skin tone
-1F9D1 1F3FF 200D 1F393                     ; fully-qualified     # 🧑🏿‍🎓 E12.1 student: dark skin tone
-1F468 200D 1F393                           ; fully-qualified     # 👨‍🎓 E4.0 man student
-1F468 1F3FB 200D 1F393                     ; fully-qualified     # 👨🏻‍🎓 E4.0 man student: light skin tone
-1F468 1F3FC 200D 1F393                     ; fully-qualified     # 👨🏼‍🎓 E4.0 man student: medium-light skin tone
-1F468 1F3FD 200D 1F393                     ; fully-qualified     # 👨🏽‍🎓 E4.0 man student: medium skin tone
-1F468 1F3FE 200D 1F393                     ; fully-qualified     # 👨🏾‍🎓 E4.0 man student: medium-dark skin tone
-1F468 1F3FF 200D 1F393                     ; fully-qualified     # 👨🏿‍🎓 E4.0 man student: dark skin tone
-1F469 200D 1F393                           ; fully-qualified     # 👩‍🎓 E4.0 woman student
-1F469 1F3FB 200D 1F393                     ; fully-qualified     # 👩🏻‍🎓 E4.0 woman student: light skin tone
-1F469 1F3FC 200D 1F393                     ; fully-qualified     # 👩🏼‍🎓 E4.0 woman student: medium-light skin tone
-1F469 1F3FD 200D 1F393                     ; fully-qualified     # 👩🏽‍🎓 E4.0 woman student: medium skin tone
-1F469 1F3FE 200D 1F393                     ; fully-qualified     # 👩🏾‍🎓 E4.0 woman student: medium-dark skin tone
-1F469 1F3FF 200D 1F393                     ; fully-qualified     # 👩🏿‍🎓 E4.0 woman student: dark skin tone
-1F9D1 200D 1F3EB                           ; fully-qualified     # 🧑‍🏫 E12.1 teacher
-1F9D1 1F3FB 200D 1F3EB                     ; fully-qualified     # 🧑🏻‍🏫 E12.1 teacher: light skin tone
-1F9D1 1F3FC 200D 1F3EB                     ; fully-qualified     # 🧑🏼‍🏫 E12.1 teacher: medium-light skin tone
-1F9D1 1F3FD 200D 1F3EB                     ; fully-qualified     # 🧑🏽‍🏫 E12.1 teacher: medium skin tone
-1F9D1 1F3FE 200D 1F3EB                     ; fully-qualified     # 🧑🏾‍🏫 E12.1 teacher: medium-dark skin tone
-1F9D1 1F3FF 200D 1F3EB                     ; fully-qualified     # 🧑🏿‍🏫 E12.1 teacher: dark skin tone
-1F468 200D 1F3EB                           ; fully-qualified     # 👨‍🏫 E4.0 man teacher
-1F468 1F3FB 200D 1F3EB                     ; fully-qualified     # 👨🏻‍🏫 E4.0 man teacher: light skin tone
-1F468 1F3FC 200D 1F3EB                     ; fully-qualified     # 👨🏼‍🏫 E4.0 man teacher: medium-light skin tone
-1F468 1F3FD 200D 1F3EB                     ; fully-qualified     # 👨🏽‍🏫 E4.0 man teacher: medium skin tone
-1F468 1F3FE 200D 1F3EB                     ; fully-qualified     # 👨🏾‍🏫 E4.0 man teacher: medium-dark skin tone
-1F468 1F3FF 200D 1F3EB                     ; fully-qualified     # 👨🏿‍🏫 E4.0 man teacher: dark skin tone
-1F469 200D 1F3EB                           ; fully-qualified     # 👩‍🏫 E4.0 woman teacher
-1F469 1F3FB 200D 1F3EB                     ; fully-qualified     # 👩🏻‍🏫 E4.0 woman teacher: light skin tone
-1F469 1F3FC 200D 1F3EB                     ; fully-qualified     # 👩🏼‍🏫 E4.0 woman teacher: medium-light skin tone
-1F469 1F3FD 200D 1F3EB                     ; fully-qualified     # 👩🏽‍🏫 E4.0 woman teacher: medium skin tone
-1F469 1F3FE 200D 1F3EB                     ; fully-qualified     # 👩🏾‍🏫 E4.0 woman teacher: medium-dark skin tone
-1F469 1F3FF 200D 1F3EB                     ; fully-qualified     # 👩🏿‍🏫 E4.0 woman teacher: dark skin tone
-1F9D1 200D 2696 FE0F                       ; fully-qualified     # 🧑‍⚖️ E12.1 judge
-1F9D1 200D 2696                            ; minimally-qualified # 🧑‍⚖ E12.1 judge
-1F9D1 1F3FB 200D 2696 FE0F                 ; fully-qualified     # 🧑🏻‍⚖️ E12.1 judge: light skin tone
-1F9D1 1F3FB 200D 2696                      ; minimally-qualified # 🧑🏻‍⚖ E12.1 judge: light skin tone
-1F9D1 1F3FC 200D 2696 FE0F                 ; fully-qualified     # 🧑🏼‍⚖️ E12.1 judge: medium-light skin tone
-1F9D1 1F3FC 200D 2696                      ; minimally-qualified # 🧑🏼‍⚖ E12.1 judge: medium-light skin tone
-1F9D1 1F3FD 200D 2696 FE0F                 ; fully-qualified     # 🧑🏽‍⚖️ E12.1 judge: medium skin tone
-1F9D1 1F3FD 200D 2696                      ; minimally-qualified # 🧑🏽‍⚖ E12.1 judge: medium skin tone
-1F9D1 1F3FE 200D 2696 FE0F                 ; fully-qualified     # 🧑🏾‍⚖️ E12.1 judge: medium-dark skin tone
-1F9D1 1F3FE 200D 2696                      ; minimally-qualified # 🧑🏾‍⚖ E12.1 judge: medium-dark skin tone
-1F9D1 1F3FF 200D 2696 FE0F                 ; fully-qualified     # 🧑🏿‍⚖️ E12.1 judge: dark skin tone
-1F9D1 1F3FF 200D 2696                      ; minimally-qualified # 🧑🏿‍⚖ E12.1 judge: dark skin tone
-1F468 200D 2696 FE0F                       ; fully-qualified     # 👨‍⚖️ E4.0 man judge
-1F468 200D 2696                            ; minimally-qualified # 👨‍⚖ E4.0 man judge
-1F468 1F3FB 200D 2696 FE0F                 ; fully-qualified     # 👨🏻‍⚖️ E4.0 man judge: light skin tone
-1F468 1F3FB 200D 2696                      ; minimally-qualified # 👨🏻‍⚖ E4.0 man judge: light skin tone
-1F468 1F3FC 200D 2696 FE0F                 ; fully-qualified     # 👨🏼‍⚖️ E4.0 man judge: medium-light skin tone
-1F468 1F3FC 200D 2696                      ; minimally-qualified # 👨🏼‍⚖ E4.0 man judge: medium-light skin tone
-1F468 1F3FD 200D 2696 FE0F                 ; fully-qualified     # 👨🏽‍⚖️ E4.0 man judge: medium skin tone
-1F468 1F3FD 200D 2696                      ; minimally-qualified # 👨🏽‍⚖ E4.0 man judge: medium skin tone
-1F468 1F3FE 200D 2696 FE0F                 ; fully-qualified     # 👨🏾‍⚖️ E4.0 man judge: medium-dark skin tone
-1F468 1F3FE 200D 2696                      ; minimally-qualified # 👨🏾‍⚖ E4.0 man judge: medium-dark skin tone
-1F468 1F3FF 200D 2696 FE0F                 ; fully-qualified     # 👨🏿‍⚖️ E4.0 man judge: dark skin tone
-1F468 1F3FF 200D 2696                      ; minimally-qualified # 👨🏿‍⚖ E4.0 man judge: dark skin tone
-1F469 200D 2696 FE0F                       ; fully-qualified     # 👩‍⚖️ E4.0 woman judge
-1F469 200D 2696                            ; minimally-qualified # 👩‍⚖ E4.0 woman judge
-1F469 1F3FB 200D 2696 FE0F                 ; fully-qualified     # 👩🏻‍⚖️ E4.0 woman judge: light skin tone
-1F469 1F3FB 200D 2696                      ; minimally-qualified # 👩🏻‍⚖ E4.0 woman judge: light skin tone
-1F469 1F3FC 200D 2696 FE0F                 ; fully-qualified     # 👩🏼‍⚖️ E4.0 woman judge: medium-light skin tone
-1F469 1F3FC 200D 2696                      ; minimally-qualified # 👩🏼‍⚖ E4.0 woman judge: medium-light skin tone
-1F469 1F3FD 200D 2696 FE0F                 ; fully-qualified     # 👩🏽‍⚖️ E4.0 woman judge: medium skin tone
-1F469 1F3FD 200D 2696                      ; minimally-qualified # 👩🏽‍⚖ E4.0 woman judge: medium skin tone
-1F469 1F3FE 200D 2696 FE0F                 ; fully-qualified     # 👩🏾‍⚖️ E4.0 woman judge: medium-dark skin tone
-1F469 1F3FE 200D 2696                      ; minimally-qualified # 👩🏾‍⚖ E4.0 woman judge: medium-dark skin tone
-1F469 1F3FF 200D 2696 FE0F                 ; fully-qualified     # 👩🏿‍⚖️ E4.0 woman judge: dark skin tone
-1F469 1F3FF 200D 2696                      ; minimally-qualified # 👩🏿‍⚖ E4.0 woman judge: dark skin tone
-1F9D1 200D 1F33E                           ; fully-qualified     # 🧑‍🌾 E12.1 farmer
-1F9D1 1F3FB 200D 1F33E                     ; fully-qualified     # 🧑🏻‍🌾 E12.1 farmer: light skin tone
-1F9D1 1F3FC 200D 1F33E                     ; fully-qualified     # 🧑🏼‍🌾 E12.1 farmer: medium-light skin tone
-1F9D1 1F3FD 200D 1F33E                     ; fully-qualified     # 🧑🏽‍🌾 E12.1 farmer: medium skin tone
-1F9D1 1F3FE 200D 1F33E                     ; fully-qualified     # 🧑🏾‍🌾 E12.1 farmer: medium-dark skin tone
-1F9D1 1F3FF 200D 1F33E                     ; fully-qualified     # 🧑🏿‍🌾 E12.1 farmer: dark skin tone
-1F468 200D 1F33E                           ; fully-qualified     # 👨‍🌾 E4.0 man farmer
-1F468 1F3FB 200D 1F33E                     ; fully-qualified     # 👨🏻‍🌾 E4.0 man farmer: light skin tone
-1F468 1F3FC 200D 1F33E                     ; fully-qualified     # 👨🏼‍🌾 E4.0 man farmer: medium-light skin tone
-1F468 1F3FD 200D 1F33E                     ; fully-qualified     # 👨🏽‍🌾 E4.0 man farmer: medium skin tone
-1F468 1F3FE 200D 1F33E                     ; fully-qualified     # 👨🏾‍🌾 E4.0 man farmer: medium-dark skin tone
-1F468 1F3FF 200D 1F33E                     ; fully-qualified     # 👨🏿‍🌾 E4.0 man farmer: dark skin tone
-1F469 200D 1F33E                           ; fully-qualified     # 👩‍🌾 E4.0 woman farmer
-1F469 1F3FB 200D 1F33E                     ; fully-qualified     # 👩🏻‍🌾 E4.0 woman farmer: light skin tone
-1F469 1F3FC 200D 1F33E                     ; fully-qualified     # 👩🏼‍🌾 E4.0 woman farmer: medium-light skin tone
-1F469 1F3FD 200D 1F33E                     ; fully-qualified     # 👩🏽‍🌾 E4.0 woman farmer: medium skin tone
-1F469 1F3FE 200D 1F33E                     ; fully-qualified     # 👩🏾‍🌾 E4.0 woman farmer: medium-dark skin tone
-1F469 1F3FF 200D 1F33E                     ; fully-qualified     # 👩🏿‍🌾 E4.0 woman farmer: dark skin tone
-1F9D1 200D 1F373                           ; fully-qualified     # 🧑‍🍳 E12.1 cook
-1F9D1 1F3FB 200D 1F373                     ; fully-qualified     # 🧑🏻‍🍳 E12.1 cook: light skin tone
-1F9D1 1F3FC 200D 1F373                     ; fully-qualified     # 🧑🏼‍🍳 E12.1 cook: medium-light skin tone
-1F9D1 1F3FD 200D 1F373                     ; fully-qualified     # 🧑🏽‍🍳 E12.1 cook: medium skin tone
-1F9D1 1F3FE 200D 1F373                     ; fully-qualified     # 🧑🏾‍🍳 E12.1 cook: medium-dark skin tone
-1F9D1 1F3FF 200D 1F373                     ; fully-qualified     # 🧑🏿‍🍳 E12.1 cook: dark skin tone
-1F468 200D 1F373                           ; fully-qualified     # 👨‍🍳 E4.0 man cook
-1F468 1F3FB 200D 1F373                     ; fully-qualified     # 👨🏻‍🍳 E4.0 man cook: light skin tone
-1F468 1F3FC 200D 1F373                     ; fully-qualified     # 👨🏼‍🍳 E4.0 man cook: medium-light skin tone
-1F468 1F3FD 200D 1F373                     ; fully-qualified     # 👨🏽‍🍳 E4.0 man cook: medium skin tone
-1F468 1F3FE 200D 1F373                     ; fully-qualified     # 👨🏾‍🍳 E4.0 man cook: medium-dark skin tone
-1F468 1F3FF 200D 1F373                     ; fully-qualified     # 👨🏿‍🍳 E4.0 man cook: dark skin tone
-1F469 200D 1F373                           ; fully-qualified     # 👩‍🍳 E4.0 woman cook
-1F469 1F3FB 200D 1F373                     ; fully-qualified     # 👩🏻‍🍳 E4.0 woman cook: light skin tone
-1F469 1F3FC 200D 1F373                     ; fully-qualified     # 👩🏼‍🍳 E4.0 woman cook: medium-light skin tone
-1F469 1F3FD 200D 1F373                     ; fully-qualified     # 👩🏽‍🍳 E4.0 woman cook: medium skin tone
-1F469 1F3FE 200D 1F373                     ; fully-qualified     # 👩🏾‍🍳 E4.0 woman cook: medium-dark skin tone
-1F469 1F3FF 200D 1F373                     ; fully-qualified     # 👩🏿‍🍳 E4.0 woman cook: dark skin tone
-1F9D1 200D 1F527                           ; fully-qualified     # 🧑‍🔧 E12.1 mechanic
-1F9D1 1F3FB 200D 1F527                     ; fully-qualified     # 🧑🏻‍🔧 E12.1 mechanic: light skin tone
-1F9D1 1F3FC 200D 1F527                     ; fully-qualified     # 🧑🏼‍🔧 E12.1 mechanic: medium-light skin tone
-1F9D1 1F3FD 200D 1F527                     ; fully-qualified     # 🧑🏽‍🔧 E12.1 mechanic: medium skin tone
-1F9D1 1F3FE 200D 1F527                     ; fully-qualified     # 🧑🏾‍🔧 E12.1 mechanic: medium-dark skin tone
-1F9D1 1F3FF 200D 1F527                     ; fully-qualified     # 🧑🏿‍🔧 E12.1 mechanic: dark skin tone
-1F468 200D 1F527                           ; fully-qualified     # 👨‍🔧 E4.0 man mechanic
-1F468 1F3FB 200D 1F527                     ; fully-qualified     # 👨🏻‍🔧 E4.0 man mechanic: light skin tone
-1F468 1F3FC 200D 1F527                     ; fully-qualified     # 👨🏼‍🔧 E4.0 man mechanic: medium-light skin tone
-1F468 1F3FD 200D 1F527                     ; fully-qualified     # 👨🏽‍🔧 E4.0 man mechanic: medium skin tone
-1F468 1F3FE 200D 1F527                     ; fully-qualified     # 👨🏾‍🔧 E4.0 man mechanic: medium-dark skin tone
-1F468 1F3FF 200D 1F527                     ; fully-qualified     # 👨🏿‍🔧 E4.0 man mechanic: dark skin tone
-1F469 200D 1F527                           ; fully-qualified     # 👩‍🔧 E4.0 woman mechanic
-1F469 1F3FB 200D 1F527                     ; fully-qualified     # 👩🏻‍🔧 E4.0 woman mechanic: light skin tone
-1F469 1F3FC 200D 1F527                     ; fully-qualified     # 👩🏼‍🔧 E4.0 woman mechanic: medium-light skin tone
-1F469 1F3FD 200D 1F527                     ; fully-qualified     # 👩🏽‍🔧 E4.0 woman mechanic: medium skin tone
-1F469 1F3FE 200D 1F527                     ; fully-qualified     # 👩🏾‍🔧 E4.0 woman mechanic: medium-dark skin tone
-1F469 1F3FF 200D 1F527                     ; fully-qualified     # 👩🏿‍🔧 E4.0 woman mechanic: dark skin tone
-1F9D1 200D 1F3ED                           ; fully-qualified     # 🧑‍🏭 E12.1 factory worker
-1F9D1 1F3FB 200D 1F3ED                     ; fully-qualified     # 🧑🏻‍🏭 E12.1 factory worker: light skin tone
-1F9D1 1F3FC 200D 1F3ED                     ; fully-qualified     # 🧑🏼‍🏭 E12.1 factory worker: medium-light skin tone
-1F9D1 1F3FD 200D 1F3ED                     ; fully-qualified     # 🧑🏽‍🏭 E12.1 factory worker: medium skin tone
-1F9D1 1F3FE 200D 1F3ED                     ; fully-qualified     # 🧑🏾‍🏭 E12.1 factory worker: medium-dark skin tone
-1F9D1 1F3FF 200D 1F3ED                     ; fully-qualified     # 🧑🏿‍🏭 E12.1 factory worker: dark skin tone
-1F468 200D 1F3ED                           ; fully-qualified     # 👨‍🏭 E4.0 man factory worker
-1F468 1F3FB 200D 1F3ED                     ; fully-qualified     # 👨🏻‍🏭 E4.0 man factory worker: light skin tone
-1F468 1F3FC 200D 1F3ED                     ; fully-qualified     # 👨🏼‍🏭 E4.0 man factory worker: medium-light skin tone
-1F468 1F3FD 200D 1F3ED                     ; fully-qualified     # 👨🏽‍🏭 E4.0 man factory worker: medium skin tone
-1F468 1F3FE 200D 1F3ED                     ; fully-qualified     # 👨🏾‍🏭 E4.0 man factory worker: medium-dark skin tone
-1F468 1F3FF 200D 1F3ED                     ; fully-qualified     # 👨🏿‍🏭 E4.0 man factory worker: dark skin tone
-1F469 200D 1F3ED                           ; fully-qualified     # 👩‍🏭 E4.0 woman factory worker
-1F469 1F3FB 200D 1F3ED                     ; fully-qualified     # 👩🏻‍🏭 E4.0 woman factory worker: light skin tone
-1F469 1F3FC 200D 1F3ED                     ; fully-qualified     # 👩🏼‍🏭 E4.0 woman factory worker: medium-light skin tone
-1F469 1F3FD 200D 1F3ED                     ; fully-qualified     # 👩🏽‍🏭 E4.0 woman factory worker: medium skin tone
-1F469 1F3FE 200D 1F3ED                     ; fully-qualified     # 👩🏾‍🏭 E4.0 woman factory worker: medium-dark skin tone
-1F469 1F3FF 200D 1F3ED                     ; fully-qualified     # 👩🏿‍🏭 E4.0 woman factory worker: dark skin tone
-1F9D1 200D 1F4BC                           ; fully-qualified     # 🧑‍💼 E12.1 office worker
-1F9D1 1F3FB 200D 1F4BC                     ; fully-qualified     # 🧑🏻‍💼 E12.1 office worker: light skin tone
-1F9D1 1F3FC 200D 1F4BC                     ; fully-qualified     # 🧑🏼‍💼 E12.1 office worker: medium-light skin tone
-1F9D1 1F3FD 200D 1F4BC                     ; fully-qualified     # 🧑🏽‍💼 E12.1 office worker: medium skin tone
-1F9D1 1F3FE 200D 1F4BC                     ; fully-qualified     # 🧑🏾‍💼 E12.1 office worker: medium-dark skin tone
-1F9D1 1F3FF 200D 1F4BC                     ; fully-qualified     # 🧑🏿‍💼 E12.1 office worker: dark skin tone
-1F468 200D 1F4BC                           ; fully-qualified     # 👨‍💼 E4.0 man office worker
-1F468 1F3FB 200D 1F4BC                     ; fully-qualified     # 👨🏻‍💼 E4.0 man office worker: light skin tone
-1F468 1F3FC 200D 1F4BC                     ; fully-qualified     # 👨🏼‍💼 E4.0 man office worker: medium-light skin tone
-1F468 1F3FD 200D 1F4BC                     ; fully-qualified     # 👨🏽‍💼 E4.0 man office worker: medium skin tone
-1F468 1F3FE 200D 1F4BC                     ; fully-qualified     # 👨🏾‍💼 E4.0 man office worker: medium-dark skin tone
-1F468 1F3FF 200D 1F4BC                     ; fully-qualified     # 👨🏿‍💼 E4.0 man office worker: dark skin tone
-1F469 200D 1F4BC                           ; fully-qualified     # 👩‍💼 E4.0 woman office worker
-1F469 1F3FB 200D 1F4BC                     ; fully-qualified     # 👩🏻‍💼 E4.0 woman office worker: light skin tone
-1F469 1F3FC 200D 1F4BC                     ; fully-qualified     # 👩🏼‍💼 E4.0 woman office worker: medium-light skin tone
-1F469 1F3FD 200D 1F4BC                     ; fully-qualified     # 👩🏽‍💼 E4.0 woman office worker: medium skin tone
-1F469 1F3FE 200D 1F4BC                     ; fully-qualified     # 👩🏾‍💼 E4.0 woman office worker: medium-dark skin tone
-1F469 1F3FF 200D 1F4BC                     ; fully-qualified     # 👩🏿‍💼 E4.0 woman office worker: dark skin tone
-1F9D1 200D 1F52C                           ; fully-qualified     # 🧑‍🔬 E12.1 scientist
-1F9D1 1F3FB 200D 1F52C                     ; fully-qualified     # 🧑🏻‍🔬 E12.1 scientist: light skin tone
-1F9D1 1F3FC 200D 1F52C                     ; fully-qualified     # 🧑🏼‍🔬 E12.1 scientist: medium-light skin tone
-1F9D1 1F3FD 200D 1F52C                     ; fully-qualified     # 🧑🏽‍🔬 E12.1 scientist: medium skin tone
-1F9D1 1F3FE 200D 1F52C                     ; fully-qualified     # 🧑🏾‍🔬 E12.1 scientist: medium-dark skin tone
-1F9D1 1F3FF 200D 1F52C                     ; fully-qualified     # 🧑🏿‍🔬 E12.1 scientist: dark skin tone
-1F468 200D 1F52C                           ; fully-qualified     # 👨‍🔬 E4.0 man scientist
-1F468 1F3FB 200D 1F52C                     ; fully-qualified     # 👨🏻‍🔬 E4.0 man scientist: light skin tone
-1F468 1F3FC 200D 1F52C                     ; fully-qualified     # 👨🏼‍🔬 E4.0 man scientist: medium-light skin tone
-1F468 1F3FD 200D 1F52C                     ; fully-qualified     # 👨🏽‍🔬 E4.0 man scientist: medium skin tone
-1F468 1F3FE 200D 1F52C                     ; fully-qualified     # 👨🏾‍🔬 E4.0 man scientist: medium-dark skin tone
-1F468 1F3FF 200D 1F52C                     ; fully-qualified     # 👨🏿‍🔬 E4.0 man scientist: dark skin tone
-1F469 200D 1F52C                           ; fully-qualified     # 👩‍🔬 E4.0 woman scientist
-1F469 1F3FB 200D 1F52C                     ; fully-qualified     # 👩🏻‍🔬 E4.0 woman scientist: light skin tone
-1F469 1F3FC 200D 1F52C                     ; fully-qualified     # 👩🏼‍🔬 E4.0 woman scientist: medium-light skin tone
-1F469 1F3FD 200D 1F52C                     ; fully-qualified     # 👩🏽‍🔬 E4.0 woman scientist: medium skin tone
-1F469 1F3FE 200D 1F52C                     ; fully-qualified     # 👩🏾‍🔬 E4.0 woman scientist: medium-dark skin tone
-1F469 1F3FF 200D 1F52C                     ; fully-qualified     # 👩🏿‍🔬 E4.0 woman scientist: dark skin tone
-1F9D1 200D 1F4BB                           ; fully-qualified     # 🧑‍💻 E12.1 technologist
-1F9D1 1F3FB 200D 1F4BB                     ; fully-qualified     # 🧑🏻‍💻 E12.1 technologist: light skin tone
-1F9D1 1F3FC 200D 1F4BB                     ; fully-qualified     # 🧑🏼‍💻 E12.1 technologist: medium-light skin tone
-1F9D1 1F3FD 200D 1F4BB                     ; fully-qualified     # 🧑🏽‍💻 E12.1 technologist: medium skin tone
-1F9D1 1F3FE 200D 1F4BB                     ; fully-qualified     # 🧑🏾‍💻 E12.1 technologist: medium-dark skin tone
-1F9D1 1F3FF 200D 1F4BB                     ; fully-qualified     # 🧑🏿‍💻 E12.1 technologist: dark skin tone
-1F468 200D 1F4BB                           ; fully-qualified     # 👨‍💻 E4.0 man technologist
-1F468 1F3FB 200D 1F4BB                     ; fully-qualified     # 👨🏻‍💻 E4.0 man technologist: light skin tone
-1F468 1F3FC 200D 1F4BB                     ; fully-qualified     # 👨🏼‍💻 E4.0 man technologist: medium-light skin tone
-1F468 1F3FD 200D 1F4BB                     ; fully-qualified     # 👨🏽‍💻 E4.0 man technologist: medium skin tone
-1F468 1F3FE 200D 1F4BB                     ; fully-qualified     # 👨🏾‍💻 E4.0 man technologist: medium-dark skin tone
-1F468 1F3FF 200D 1F4BB                     ; fully-qualified     # 👨🏿‍💻 E4.0 man technologist: dark skin tone
-1F469 200D 1F4BB                           ; fully-qualified     # 👩‍💻 E4.0 woman technologist
-1F469 1F3FB 200D 1F4BB                     ; fully-qualified     # 👩🏻‍💻 E4.0 woman technologist: light skin tone
-1F469 1F3FC 200D 1F4BB                     ; fully-qualified     # 👩🏼‍💻 E4.0 woman technologist: medium-light skin tone
-1F469 1F3FD 200D 1F4BB                     ; fully-qualified     # 👩🏽‍💻 E4.0 woman technologist: medium skin tone
-1F469 1F3FE 200D 1F4BB                     ; fully-qualified     # 👩🏾‍💻 E4.0 woman technologist: medium-dark skin tone
-1F469 1F3FF 200D 1F4BB                     ; fully-qualified     # 👩🏿‍💻 E4.0 woman technologist: dark skin tone
-1F9D1 200D 1F3A4                           ; fully-qualified     # 🧑‍🎤 E12.1 singer
-1F9D1 1F3FB 200D 1F3A4                     ; fully-qualified     # 🧑🏻‍🎤 E12.1 singer: light skin tone
-1F9D1 1F3FC 200D 1F3A4                     ; fully-qualified     # 🧑🏼‍🎤 E12.1 singer: medium-light skin tone
-1F9D1 1F3FD 200D 1F3A4                     ; fully-qualified     # 🧑🏽‍🎤 E12.1 singer: medium skin tone
-1F9D1 1F3FE 200D 1F3A4                     ; fully-qualified     # 🧑🏾‍🎤 E12.1 singer: medium-dark skin tone
-1F9D1 1F3FF 200D 1F3A4                     ; fully-qualified     # 🧑🏿‍🎤 E12.1 singer: dark skin tone
-1F468 200D 1F3A4                           ; fully-qualified     # 👨‍🎤 E4.0 man singer
-1F468 1F3FB 200D 1F3A4                     ; fully-qualified     # 👨🏻‍🎤 E4.0 man singer: light skin tone
-1F468 1F3FC 200D 1F3A4                     ; fully-qualified     # 👨🏼‍🎤 E4.0 man singer: medium-light skin tone
-1F468 1F3FD 200D 1F3A4                     ; fully-qualified     # 👨🏽‍🎤 E4.0 man singer: medium skin tone
-1F468 1F3FE 200D 1F3A4                     ; fully-qualified     # 👨🏾‍🎤 E4.0 man singer: medium-dark skin tone
-1F468 1F3FF 200D 1F3A4                     ; fully-qualified     # 👨🏿‍🎤 E4.0 man singer: dark skin tone
-1F469 200D 1F3A4                           ; fully-qualified     # 👩‍🎤 E4.0 woman singer
-1F469 1F3FB 200D 1F3A4                     ; fully-qualified     # 👩🏻‍🎤 E4.0 woman singer: light skin tone
-1F469 1F3FC 200D 1F3A4                     ; fully-qualified     # 👩🏼‍🎤 E4.0 woman singer: medium-light skin tone
-1F469 1F3FD 200D 1F3A4                     ; fully-qualified     # 👩🏽‍🎤 E4.0 woman singer: medium skin tone
-1F469 1F3FE 200D 1F3A4                     ; fully-qualified     # 👩🏾‍🎤 E4.0 woman singer: medium-dark skin tone
-1F469 1F3FF 200D 1F3A4                     ; fully-qualified     # 👩🏿‍🎤 E4.0 woman singer: dark skin tone
-1F9D1 200D 1F3A8                           ; fully-qualified     # 🧑‍🎨 E12.1 artist
-1F9D1 1F3FB 200D 1F3A8                     ; fully-qualified     # 🧑🏻‍🎨 E12.1 artist: light skin tone
-1F9D1 1F3FC 200D 1F3A8                     ; fully-qualified     # 🧑🏼‍🎨 E12.1 artist: medium-light skin tone
-1F9D1 1F3FD 200D 1F3A8                     ; fully-qualified     # 🧑🏽‍🎨 E12.1 artist: medium skin tone
-1F9D1 1F3FE 200D 1F3A8                     ; fully-qualified     # 🧑🏾‍🎨 E12.1 artist: medium-dark skin tone
-1F9D1 1F3FF 200D 1F3A8                     ; fully-qualified     # 🧑🏿‍🎨 E12.1 artist: dark skin tone
-1F468 200D 1F3A8                           ; fully-qualified     # 👨‍🎨 E4.0 man artist
-1F468 1F3FB 200D 1F3A8                     ; fully-qualified     # 👨🏻‍🎨 E4.0 man artist: light skin tone
-1F468 1F3FC 200D 1F3A8                     ; fully-qualified     # 👨🏼‍🎨 E4.0 man artist: medium-light skin tone
-1F468 1F3FD 200D 1F3A8                     ; fully-qualified     # 👨🏽‍🎨 E4.0 man artist: medium skin tone
-1F468 1F3FE 200D 1F3A8                     ; fully-qualified     # 👨🏾‍🎨 E4.0 man artist: medium-dark skin tone
-1F468 1F3FF 200D 1F3A8                     ; fully-qualified     # 👨🏿‍🎨 E4.0 man artist: dark skin tone
-1F469 200D 1F3A8                           ; fully-qualified     # 👩‍🎨 E4.0 woman artist
-1F469 1F3FB 200D 1F3A8                     ; fully-qualified     # 👩🏻‍🎨 E4.0 woman artist: light skin tone
-1F469 1F3FC 200D 1F3A8                     ; fully-qualified     # 👩🏼‍🎨 E4.0 woman artist: medium-light skin tone
-1F469 1F3FD 200D 1F3A8                     ; fully-qualified     # 👩🏽‍🎨 E4.0 woman artist: medium skin tone
-1F469 1F3FE 200D 1F3A8                     ; fully-qualified     # 👩🏾‍🎨 E4.0 woman artist: medium-dark skin tone
-1F469 1F3FF 200D 1F3A8                     ; fully-qualified     # 👩🏿‍🎨 E4.0 woman artist: dark skin tone
-1F9D1 200D 2708 FE0F                       ; fully-qualified     # 🧑‍✈️ E12.1 pilot
-1F9D1 200D 2708                            ; minimally-qualified # 🧑‍✈ E12.1 pilot
-1F9D1 1F3FB 200D 2708 FE0F                 ; fully-qualified     # 🧑🏻‍✈️ E12.1 pilot: light skin tone
-1F9D1 1F3FB 200D 2708                      ; minimally-qualified # 🧑🏻‍✈ E12.1 pilot: light skin tone
-1F9D1 1F3FC 200D 2708 FE0F                 ; fully-qualified     # 🧑🏼‍✈️ E12.1 pilot: medium-light skin tone
-1F9D1 1F3FC 200D 2708                      ; minimally-qualified # 🧑🏼‍✈ E12.1 pilot: medium-light skin tone
-1F9D1 1F3FD 200D 2708 FE0F                 ; fully-qualified     # 🧑🏽‍✈️ E12.1 pilot: medium skin tone
-1F9D1 1F3FD 200D 2708                      ; minimally-qualified # 🧑🏽‍✈ E12.1 pilot: medium skin tone
-1F9D1 1F3FE 200D 2708 FE0F                 ; fully-qualified     # 🧑🏾‍✈️ E12.1 pilot: medium-dark skin tone
-1F9D1 1F3FE 200D 2708                      ; minimally-qualified # 🧑🏾‍✈ E12.1 pilot: medium-dark skin tone
-1F9D1 1F3FF 200D 2708 FE0F                 ; fully-qualified     # 🧑🏿‍✈️ E12.1 pilot: dark skin tone
-1F9D1 1F3FF 200D 2708                      ; minimally-qualified # 🧑🏿‍✈ E12.1 pilot: dark skin tone
-1F468 200D 2708 FE0F                       ; fully-qualified     # 👨‍✈️ E4.0 man pilot
-1F468 200D 2708                            ; minimally-qualified # 👨‍✈ E4.0 man pilot
-1F468 1F3FB 200D 2708 FE0F                 ; fully-qualified     # 👨🏻‍✈️ E4.0 man pilot: light skin tone
-1F468 1F3FB 200D 2708                      ; minimally-qualified # 👨🏻‍✈ E4.0 man pilot: light skin tone
-1F468 1F3FC 200D 2708 FE0F                 ; fully-qualified     # 👨🏼‍✈️ E4.0 man pilot: medium-light skin tone
-1F468 1F3FC 200D 2708                      ; minimally-qualified # 👨🏼‍✈ E4.0 man pilot: medium-light skin tone
-1F468 1F3FD 200D 2708 FE0F                 ; fully-qualified     # 👨🏽‍✈️ E4.0 man pilot: medium skin tone
-1F468 1F3FD 200D 2708                      ; minimally-qualified # 👨🏽‍✈ E4.0 man pilot: medium skin tone
-1F468 1F3FE 200D 2708 FE0F                 ; fully-qualified     # 👨🏾‍✈️ E4.0 man pilot: medium-dark skin tone
-1F468 1F3FE 200D 2708                      ; minimally-qualified # 👨🏾‍✈ E4.0 man pilot: medium-dark skin tone
-1F468 1F3FF 200D 2708 FE0F                 ; fully-qualified     # 👨🏿‍✈️ E4.0 man pilot: dark skin tone
-1F468 1F3FF 200D 2708                      ; minimally-qualified # 👨🏿‍✈ E4.0 man pilot: dark skin tone
-1F469 200D 2708 FE0F                       ; fully-qualified     # 👩‍✈️ E4.0 woman pilot
-1F469 200D 2708                            ; minimally-qualified # 👩‍✈ E4.0 woman pilot
-1F469 1F3FB 200D 2708 FE0F                 ; fully-qualified     # 👩🏻‍✈️ E4.0 woman pilot: light skin tone
-1F469 1F3FB 200D 2708                      ; minimally-qualified # 👩🏻‍✈ E4.0 woman pilot: light skin tone
-1F469 1F3FC 200D 2708 FE0F                 ; fully-qualified     # 👩🏼‍✈️ E4.0 woman pilot: medium-light skin tone
-1F469 1F3FC 200D 2708                      ; minimally-qualified # 👩🏼‍✈ E4.0 woman pilot: medium-light skin tone
-1F469 1F3FD 200D 2708 FE0F                 ; fully-qualified     # 👩🏽‍✈️ E4.0 woman pilot: medium skin tone
-1F469 1F3FD 200D 2708                      ; minimally-qualified # 👩🏽‍✈ E4.0 woman pilot: medium skin tone
-1F469 1F3FE 200D 2708 FE0F                 ; fully-qualified     # 👩🏾‍✈️ E4.0 woman pilot: medium-dark skin tone
-1F469 1F3FE 200D 2708                      ; minimally-qualified # 👩🏾‍✈ E4.0 woman pilot: medium-dark skin tone
-1F469 1F3FF 200D 2708 FE0F                 ; fully-qualified     # 👩🏿‍✈️ E4.0 woman pilot: dark skin tone
-1F469 1F3FF 200D 2708                      ; minimally-qualified # 👩🏿‍✈ E4.0 woman pilot: dark skin tone
-1F9D1 200D 1F680                           ; fully-qualified     # 🧑‍🚀 E12.1 astronaut
-1F9D1 1F3FB 200D 1F680                     ; fully-qualified     # 🧑🏻‍🚀 E12.1 astronaut: light skin tone
-1F9D1 1F3FC 200D 1F680                     ; fully-qualified     # 🧑🏼‍🚀 E12.1 astronaut: medium-light skin tone
-1F9D1 1F3FD 200D 1F680                     ; fully-qualified     # 🧑🏽‍🚀 E12.1 astronaut: medium skin tone
-1F9D1 1F3FE 200D 1F680                     ; fully-qualified     # 🧑🏾‍🚀 E12.1 astronaut: medium-dark skin tone
-1F9D1 1F3FF 200D 1F680                     ; fully-qualified     # 🧑🏿‍🚀 E12.1 astronaut: dark skin tone
-1F468 200D 1F680                           ; fully-qualified     # 👨‍🚀 E4.0 man astronaut
-1F468 1F3FB 200D 1F680                     ; fully-qualified     # 👨🏻‍🚀 E4.0 man astronaut: light skin tone
-1F468 1F3FC 200D 1F680                     ; fully-qualified     # 👨🏼‍🚀 E4.0 man astronaut: medium-light skin tone
-1F468 1F3FD 200D 1F680                     ; fully-qualified     # 👨🏽‍🚀 E4.0 man astronaut: medium skin tone
-1F468 1F3FE 200D 1F680                     ; fully-qualified     # 👨🏾‍🚀 E4.0 man astronaut: medium-dark skin tone
-1F468 1F3FF 200D 1F680                     ; fully-qualified     # 👨🏿‍🚀 E4.0 man astronaut: dark skin tone
-1F469 200D 1F680                           ; fully-qualified     # 👩‍🚀 E4.0 woman astronaut
-1F469 1F3FB 200D 1F680                     ; fully-qualified     # 👩🏻‍🚀 E4.0 woman astronaut: light skin tone
-1F469 1F3FC 200D 1F680                     ; fully-qualified     # 👩🏼‍🚀 E4.0 woman astronaut: medium-light skin tone
-1F469 1F3FD 200D 1F680                     ; fully-qualified     # 👩🏽‍🚀 E4.0 woman astronaut: medium skin tone
-1F469 1F3FE 200D 1F680                     ; fully-qualified     # 👩🏾‍🚀 E4.0 woman astronaut: medium-dark skin tone
-1F469 1F3FF 200D 1F680                     ; fully-qualified     # 👩🏿‍🚀 E4.0 woman astronaut: dark skin tone
-1F9D1 200D 1F692                           ; fully-qualified     # 🧑‍🚒 E12.1 firefighter
-1F9D1 1F3FB 200D 1F692                     ; fully-qualified     # 🧑🏻‍🚒 E12.1 firefighter: light skin tone
-1F9D1 1F3FC 200D 1F692                     ; fully-qualified     # 🧑🏼‍🚒 E12.1 firefighter: medium-light skin tone
-1F9D1 1F3FD 200D 1F692                     ; fully-qualified     # 🧑🏽‍🚒 E12.1 firefighter: medium skin tone
-1F9D1 1F3FE 200D 1F692                     ; fully-qualified     # 🧑🏾‍🚒 E12.1 firefighter: medium-dark skin tone
-1F9D1 1F3FF 200D 1F692                     ; fully-qualified     # 🧑🏿‍🚒 E12.1 firefighter: dark skin tone
-1F468 200D 1F692                           ; fully-qualified     # 👨‍🚒 E4.0 man firefighter
-1F468 1F3FB 200D 1F692                     ; fully-qualified     # 👨🏻‍🚒 E4.0 man firefighter: light skin tone
-1F468 1F3FC 200D 1F692                     ; fully-qualified     # 👨🏼‍🚒 E4.0 man firefighter: medium-light skin tone
-1F468 1F3FD 200D 1F692                     ; fully-qualified     # 👨🏽‍🚒 E4.0 man firefighter: medium skin tone
-1F468 1F3FE 200D 1F692                     ; fully-qualified     # 👨🏾‍🚒 E4.0 man firefighter: medium-dark skin tone
-1F468 1F3FF 200D 1F692                     ; fully-qualified     # 👨🏿‍🚒 E4.0 man firefighter: dark skin tone
-1F469 200D 1F692                           ; fully-qualified     # 👩‍🚒 E4.0 woman firefighter
-1F469 1F3FB 200D 1F692                     ; fully-qualified     # 👩🏻‍🚒 E4.0 woman firefighter: light skin tone
-1F469 1F3FC 200D 1F692                     ; fully-qualified     # 👩🏼‍🚒 E4.0 woman firefighter: medium-light skin tone
-1F469 1F3FD 200D 1F692                     ; fully-qualified     # 👩🏽‍🚒 E4.0 woman firefighter: medium skin tone
-1F469 1F3FE 200D 1F692                     ; fully-qualified     # 👩🏾‍🚒 E4.0 woman firefighter: medium-dark skin tone
-1F469 1F3FF 200D 1F692                     ; fully-qualified     # 👩🏿‍🚒 E4.0 woman firefighter: dark skin tone
-1F46E                                      ; fully-qualified     # 👮 E0.6 police officer
-1F46E 1F3FB                                ; fully-qualified     # 👮🏻 E1.0 police officer: light skin tone
-1F46E 1F3FC                                ; fully-qualified     # 👮🏼 E1.0 police officer: medium-light skin tone
-1F46E 1F3FD                                ; fully-qualified     # 👮🏽 E1.0 police officer: medium skin tone
-1F46E 1F3FE                                ; fully-qualified     # 👮🏾 E1.0 police officer: medium-dark skin tone
-1F46E 1F3FF                                ; fully-qualified     # 👮🏿 E1.0 police officer: dark skin tone
-1F46E 200D 2642 FE0F                       ; fully-qualified     # 👮‍♂️ E4.0 man police officer
-1F46E 200D 2642                            ; minimally-qualified # 👮‍♂ E4.0 man police officer
-1F46E 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 👮🏻‍♂️ E4.0 man police officer: light skin tone
-1F46E 1F3FB 200D 2642                      ; minimally-qualified # 👮🏻‍♂ E4.0 man police officer: light skin tone
-1F46E 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 👮🏼‍♂️ E4.0 man police officer: medium-light skin tone
-1F46E 1F3FC 200D 2642                      ; minimally-qualified # 👮🏼‍♂ E4.0 man police officer: medium-light skin tone
-1F46E 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 👮🏽‍♂️ E4.0 man police officer: medium skin tone
-1F46E 1F3FD 200D 2642                      ; minimally-qualified # 👮🏽‍♂ E4.0 man police officer: medium skin tone
-1F46E 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 👮🏾‍♂️ E4.0 man police officer: medium-dark skin tone
-1F46E 1F3FE 200D 2642                      ; minimally-qualified # 👮🏾‍♂ E4.0 man police officer: medium-dark skin tone
-1F46E 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 👮🏿‍♂️ E4.0 man police officer: dark skin tone
-1F46E 1F3FF 200D 2642                      ; minimally-qualified # 👮🏿‍♂ E4.0 man police officer: dark skin tone
-1F46E 200D 2640 FE0F                       ; fully-qualified     # 👮‍♀️ E4.0 woman police officer
-1F46E 200D 2640                            ; minimally-qualified # 👮‍♀ E4.0 woman police officer
-1F46E 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 👮🏻‍♀️ E4.0 woman police officer: light skin tone
-1F46E 1F3FB 200D 2640                      ; minimally-qualified # 👮🏻‍♀ E4.0 woman police officer: light skin tone
-1F46E 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 👮🏼‍♀️ E4.0 woman police officer: medium-light skin tone
-1F46E 1F3FC 200D 2640                      ; minimally-qualified # 👮🏼‍♀ E4.0 woman police officer: medium-light skin tone
-1F46E 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 👮🏽‍♀️ E4.0 woman police officer: medium skin tone
-1F46E 1F3FD 200D 2640                      ; minimally-qualified # 👮🏽‍♀ E4.0 woman police officer: medium skin tone
-1F46E 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 👮🏾‍♀️ E4.0 woman police officer: medium-dark skin tone
-1F46E 1F3FE 200D 2640                      ; minimally-qualified # 👮🏾‍♀ E4.0 woman police officer: medium-dark skin tone
-1F46E 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 👮🏿‍♀️ E4.0 woman police officer: dark skin tone
-1F46E 1F3FF 200D 2640                      ; minimally-qualified # 👮🏿‍♀ E4.0 woman police officer: dark skin tone
-1F575 FE0F                                 ; fully-qualified     # 🕵️ E0.7 detective
-1F575                                      ; unqualified         # 🕵 E0.7 detective
-1F575 1F3FB                                ; fully-qualified     # 🕵🏻 E2.0 detective: light skin tone
-1F575 1F3FC                                ; fully-qualified     # 🕵🏼 E2.0 detective: medium-light skin tone
-1F575 1F3FD                                ; fully-qualified     # 🕵🏽 E2.0 detective: medium skin tone
-1F575 1F3FE                                ; fully-qualified     # 🕵🏾 E2.0 detective: medium-dark skin tone
-1F575 1F3FF                                ; fully-qualified     # 🕵🏿 E2.0 detective: dark skin tone
-1F575 FE0F 200D 2642 FE0F                  ; fully-qualified     # 🕵️‍♂️ E4.0 man detective
-1F575 200D 2642 FE0F                       ; unqualified         # 🕵‍♂️ E4.0 man detective
-1F575 FE0F 200D 2642                       ; unqualified         # 🕵️‍♂ E4.0 man detective
-1F575 200D 2642                            ; unqualified         # 🕵‍♂ E4.0 man detective
-1F575 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🕵🏻‍♂️ E4.0 man detective: light skin tone
-1F575 1F3FB 200D 2642                      ; minimally-qualified # 🕵🏻‍♂ E4.0 man detective: light skin tone
-1F575 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🕵🏼‍♂️ E4.0 man detective: medium-light skin tone
-1F575 1F3FC 200D 2642                      ; minimally-qualified # 🕵🏼‍♂ E4.0 man detective: medium-light skin tone
-1F575 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🕵🏽‍♂️ E4.0 man detective: medium skin tone
-1F575 1F3FD 200D 2642                      ; minimally-qualified # 🕵🏽‍♂ E4.0 man detective: medium skin tone
-1F575 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🕵🏾‍♂️ E4.0 man detective: medium-dark skin tone
-1F575 1F3FE 200D 2642                      ; minimally-qualified # 🕵🏾‍♂ E4.0 man detective: medium-dark skin tone
-1F575 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🕵🏿‍♂️ E4.0 man detective: dark skin tone
-1F575 1F3FF 200D 2642                      ; minimally-qualified # 🕵🏿‍♂ E4.0 man detective: dark skin tone
-1F575 FE0F 200D 2640 FE0F                  ; fully-qualified     # 🕵️‍♀️ E4.0 woman detective
-1F575 200D 2640 FE0F                       ; unqualified         # 🕵‍♀️ E4.0 woman detective
-1F575 FE0F 200D 2640                       ; unqualified         # 🕵️‍♀ E4.0 woman detective
-1F575 200D 2640                            ; unqualified         # 🕵‍♀ E4.0 woman detective
-1F575 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🕵🏻‍♀️ E4.0 woman detective: light skin tone
-1F575 1F3FB 200D 2640                      ; minimally-qualified # 🕵🏻‍♀ E4.0 woman detective: light skin tone
-1F575 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🕵🏼‍♀️ E4.0 woman detective: medium-light skin tone
-1F575 1F3FC 200D 2640                      ; minimally-qualified # 🕵🏼‍♀ E4.0 woman detective: medium-light skin tone
-1F575 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🕵🏽‍♀️ E4.0 woman detective: medium skin tone
-1F575 1F3FD 200D 2640                      ; minimally-qualified # 🕵🏽‍♀ E4.0 woman detective: medium skin tone
-1F575 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🕵🏾‍♀️ E4.0 woman detective: medium-dark skin tone
-1F575 1F3FE 200D 2640                      ; minimally-qualified # 🕵🏾‍♀ E4.0 woman detective: medium-dark skin tone
-1F575 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🕵🏿‍♀️ E4.0 woman detective: dark skin tone
-1F575 1F3FF 200D 2640                      ; minimally-qualified # 🕵🏿‍♀ E4.0 woman detective: dark skin tone
-1F482                                      ; fully-qualified     # 💂 E0.6 guard
-1F482 1F3FB                                ; fully-qualified     # 💂🏻 E1.0 guard: light skin tone
-1F482 1F3FC                                ; fully-qualified     # 💂🏼 E1.0 guard: medium-light skin tone
-1F482 1F3FD                                ; fully-qualified     # 💂🏽 E1.0 guard: medium skin tone
-1F482 1F3FE                                ; fully-qualified     # 💂🏾 E1.0 guard: medium-dark skin tone
-1F482 1F3FF                                ; fully-qualified     # 💂🏿 E1.0 guard: dark skin tone
-1F482 200D 2642 FE0F                       ; fully-qualified     # 💂‍♂️ E4.0 man guard
-1F482 200D 2642                            ; minimally-qualified # 💂‍♂ E4.0 man guard
-1F482 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 💂🏻‍♂️ E4.0 man guard: light skin tone
-1F482 1F3FB 200D 2642                      ; minimally-qualified # 💂🏻‍♂ E4.0 man guard: light skin tone
-1F482 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 💂🏼‍♂️ E4.0 man guard: medium-light skin tone
-1F482 1F3FC 200D 2642                      ; minimally-qualified # 💂🏼‍♂ E4.0 man guard: medium-light skin tone
-1F482 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 💂🏽‍♂️ E4.0 man guard: medium skin tone
-1F482 1F3FD 200D 2642                      ; minimally-qualified # 💂🏽‍♂ E4.0 man guard: medium skin tone
-1F482 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 💂🏾‍♂️ E4.0 man guard: medium-dark skin tone
-1F482 1F3FE 200D 2642                      ; minimally-qualified # 💂🏾‍♂ E4.0 man guard: medium-dark skin tone
-1F482 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 💂🏿‍♂️ E4.0 man guard: dark skin tone
-1F482 1F3FF 200D 2642                      ; minimally-qualified # 💂🏿‍♂ E4.0 man guard: dark skin tone
-1F482 200D 2640 FE0F                       ; fully-qualified     # 💂‍♀️ E4.0 woman guard
-1F482 200D 2640                            ; minimally-qualified # 💂‍♀ E4.0 woman guard
-1F482 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 💂🏻‍♀️ E4.0 woman guard: light skin tone
-1F482 1F3FB 200D 2640                      ; minimally-qualified # 💂🏻‍♀ E4.0 woman guard: light skin tone
-1F482 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 💂🏼‍♀️ E4.0 woman guard: medium-light skin tone
-1F482 1F3FC 200D 2640                      ; minimally-qualified # 💂🏼‍♀ E4.0 woman guard: medium-light skin tone
-1F482 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 💂🏽‍♀️ E4.0 woman guard: medium skin tone
-1F482 1F3FD 200D 2640                      ; minimally-qualified # 💂🏽‍♀ E4.0 woman guard: medium skin tone
-1F482 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 💂🏾‍♀️ E4.0 woman guard: medium-dark skin tone
-1F482 1F3FE 200D 2640                      ; minimally-qualified # 💂🏾‍♀ E4.0 woman guard: medium-dark skin tone
-1F482 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 💂🏿‍♀️ E4.0 woman guard: dark skin tone
-1F482 1F3FF 200D 2640                      ; minimally-qualified # 💂🏿‍♀ E4.0 woman guard: dark skin tone
-1F977                                      ; fully-qualified     # 🥷 E13.0 ninja
-1F977 1F3FB                                ; fully-qualified     # 🥷🏻 E13.0 ninja: light skin tone
-1F977 1F3FC                                ; fully-qualified     # 🥷🏼 E13.0 ninja: medium-light skin tone
-1F977 1F3FD                                ; fully-qualified     # 🥷🏽 E13.0 ninja: medium skin tone
-1F977 1F3FE                                ; fully-qualified     # 🥷🏾 E13.0 ninja: medium-dark skin tone
-1F977 1F3FF                                ; fully-qualified     # 🥷🏿 E13.0 ninja: dark skin tone
-1F477                                      ; fully-qualified     # 👷 E0.6 construction worker
-1F477 1F3FB                                ; fully-qualified     # 👷🏻 E1.0 construction worker: light skin tone
-1F477 1F3FC                                ; fully-qualified     # 👷🏼 E1.0 construction worker: medium-light skin tone
-1F477 1F3FD                                ; fully-qualified     # 👷🏽 E1.0 construction worker: medium skin tone
-1F477 1F3FE                                ; fully-qualified     # 👷🏾 E1.0 construction worker: medium-dark skin tone
-1F477 1F3FF                                ; fully-qualified     # 👷🏿 E1.0 construction worker: dark skin tone
-1F477 200D 2642 FE0F                       ; fully-qualified     # 👷‍♂️ E4.0 man construction worker
-1F477 200D 2642                            ; minimally-qualified # 👷‍♂ E4.0 man construction worker
-1F477 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 👷🏻‍♂️ E4.0 man construction worker: light skin tone
-1F477 1F3FB 200D 2642                      ; minimally-qualified # 👷🏻‍♂ E4.0 man construction worker: light skin tone
-1F477 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 👷🏼‍♂️ E4.0 man construction worker: medium-light skin tone
-1F477 1F3FC 200D 2642                      ; minimally-qualified # 👷🏼‍♂ E4.0 man construction worker: medium-light skin tone
-1F477 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 👷🏽‍♂️ E4.0 man construction worker: medium skin tone
-1F477 1F3FD 200D 2642                      ; minimally-qualified # 👷🏽‍♂ E4.0 man construction worker: medium skin tone
-1F477 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 👷🏾‍♂️ E4.0 man construction worker: medium-dark skin tone
-1F477 1F3FE 200D 2642                      ; minimally-qualified # 👷🏾‍♂ E4.0 man construction worker: medium-dark skin tone
-1F477 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 👷🏿‍♂️ E4.0 man construction worker: dark skin tone
-1F477 1F3FF 200D 2642                      ; minimally-qualified # 👷🏿‍♂ E4.0 man construction worker: dark skin tone
-1F477 200D 2640 FE0F                       ; fully-qualified     # 👷‍♀️ E4.0 woman construction worker
-1F477 200D 2640                            ; minimally-qualified # 👷‍♀ E4.0 woman construction worker
-1F477 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 👷🏻‍♀️ E4.0 woman construction worker: light skin tone
-1F477 1F3FB 200D 2640                      ; minimally-qualified # 👷🏻‍♀ E4.0 woman construction worker: light skin tone
-1F477 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 👷🏼‍♀️ E4.0 woman construction worker: medium-light skin tone
-1F477 1F3FC 200D 2640                      ; minimally-qualified # 👷🏼‍♀ E4.0 woman construction worker: medium-light skin tone
-1F477 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 👷🏽‍♀️ E4.0 woman construction worker: medium skin tone
-1F477 1F3FD 200D 2640                      ; minimally-qualified # 👷🏽‍♀ E4.0 woman construction worker: medium skin tone
-1F477 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 👷🏾‍♀️ E4.0 woman construction worker: medium-dark skin tone
-1F477 1F3FE 200D 2640                      ; minimally-qualified # 👷🏾‍♀ E4.0 woman construction worker: medium-dark skin tone
-1F477 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 👷🏿‍♀️ E4.0 woman construction worker: dark skin tone
-1F477 1F3FF 200D 2640                      ; minimally-qualified # 👷🏿‍♀ E4.0 woman construction worker: dark skin tone
-1F934                                      ; fully-qualified     # 🤴 E3.0 prince
-1F934 1F3FB                                ; fully-qualified     # 🤴🏻 E3.0 prince: light skin tone
-1F934 1F3FC                                ; fully-qualified     # 🤴🏼 E3.0 prince: medium-light skin tone
-1F934 1F3FD                                ; fully-qualified     # 🤴🏽 E3.0 prince: medium skin tone
-1F934 1F3FE                                ; fully-qualified     # 🤴🏾 E3.0 prince: medium-dark skin tone
-1F934 1F3FF                                ; fully-qualified     # 🤴🏿 E3.0 prince: dark skin tone
-1F478                                      ; fully-qualified     # 👸 E0.6 princess
-1F478 1F3FB                                ; fully-qualified     # 👸🏻 E1.0 princess: light skin tone
-1F478 1F3FC                                ; fully-qualified     # 👸🏼 E1.0 princess: medium-light skin tone
-1F478 1F3FD                                ; fully-qualified     # 👸🏽 E1.0 princess: medium skin tone
-1F478 1F3FE                                ; fully-qualified     # 👸🏾 E1.0 princess: medium-dark skin tone
-1F478 1F3FF                                ; fully-qualified     # 👸🏿 E1.0 princess: dark skin tone
-1F473                                      ; fully-qualified     # 👳 E0.6 person wearing turban
-1F473 1F3FB                                ; fully-qualified     # 👳🏻 E1.0 person wearing turban: light skin tone
-1F473 1F3FC                                ; fully-qualified     # 👳🏼 E1.0 person wearing turban: medium-light skin tone
-1F473 1F3FD                                ; fully-qualified     # 👳🏽 E1.0 person wearing turban: medium skin tone
-1F473 1F3FE                                ; fully-qualified     # 👳🏾 E1.0 person wearing turban: medium-dark skin tone
-1F473 1F3FF                                ; fully-qualified     # 👳🏿 E1.0 person wearing turban: dark skin tone
-1F473 200D 2642 FE0F                       ; fully-qualified     # 👳‍♂️ E4.0 man wearing turban
-1F473 200D 2642                            ; minimally-qualified # 👳‍♂ E4.0 man wearing turban
-1F473 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 👳🏻‍♂️ E4.0 man wearing turban: light skin tone
-1F473 1F3FB 200D 2642                      ; minimally-qualified # 👳🏻‍♂ E4.0 man wearing turban: light skin tone
-1F473 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 👳🏼‍♂️ E4.0 man wearing turban: medium-light skin tone
-1F473 1F3FC 200D 2642                      ; minimally-qualified # 👳🏼‍♂ E4.0 man wearing turban: medium-light skin tone
-1F473 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 👳🏽‍♂️ E4.0 man wearing turban: medium skin tone
-1F473 1F3FD 200D 2642                      ; minimally-qualified # 👳🏽‍♂ E4.0 man wearing turban: medium skin tone
-1F473 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 👳🏾‍♂️ E4.0 man wearing turban: medium-dark skin tone
-1F473 1F3FE 200D 2642                      ; minimally-qualified # 👳🏾‍♂ E4.0 man wearing turban: medium-dark skin tone
-1F473 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 👳🏿‍♂️ E4.0 man wearing turban: dark skin tone
-1F473 1F3FF 200D 2642                      ; minimally-qualified # 👳🏿‍♂ E4.0 man wearing turban: dark skin tone
-1F473 200D 2640 FE0F                       ; fully-qualified     # 👳‍♀️ E4.0 woman wearing turban
-1F473 200D 2640                            ; minimally-qualified # 👳‍♀ E4.0 woman wearing turban
-1F473 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 👳🏻‍♀️ E4.0 woman wearing turban: light skin tone
-1F473 1F3FB 200D 2640                      ; minimally-qualified # 👳🏻‍♀ E4.0 woman wearing turban: light skin tone
-1F473 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 👳🏼‍♀️ E4.0 woman wearing turban: medium-light skin tone
-1F473 1F3FC 200D 2640                      ; minimally-qualified # 👳🏼‍♀ E4.0 woman wearing turban: medium-light skin tone
-1F473 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 👳🏽‍♀️ E4.0 woman wearing turban: medium skin tone
-1F473 1F3FD 200D 2640                      ; minimally-qualified # 👳🏽‍♀ E4.0 woman wearing turban: medium skin tone
-1F473 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 👳🏾‍♀️ E4.0 woman wearing turban: medium-dark skin tone
-1F473 1F3FE 200D 2640                      ; minimally-qualified # 👳🏾‍♀ E4.0 woman wearing turban: medium-dark skin tone
-1F473 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 👳🏿‍♀️ E4.0 woman wearing turban: dark skin tone
-1F473 1F3FF 200D 2640                      ; minimally-qualified # 👳🏿‍♀ E4.0 woman wearing turban: dark skin tone
-1F472                                      ; fully-qualified     # 👲 E0.6 person with skullcap
-1F472 1F3FB                                ; fully-qualified     # 👲🏻 E1.0 person with skullcap: light skin tone
-1F472 1F3FC                                ; fully-qualified     # 👲🏼 E1.0 person with skullcap: medium-light skin tone
-1F472 1F3FD                                ; fully-qualified     # 👲🏽 E1.0 person with skullcap: medium skin tone
-1F472 1F3FE                                ; fully-qualified     # 👲🏾 E1.0 person with skullcap: medium-dark skin tone
-1F472 1F3FF                                ; fully-qualified     # 👲🏿 E1.0 person with skullcap: dark skin tone
-1F9D5                                      ; fully-qualified     # 🧕 E5.0 woman with headscarf
-1F9D5 1F3FB                                ; fully-qualified     # 🧕🏻 E5.0 woman with headscarf: light skin tone
-1F9D5 1F3FC                                ; fully-qualified     # 🧕🏼 E5.0 woman with headscarf: medium-light skin tone
-1F9D5 1F3FD                                ; fully-qualified     # 🧕🏽 E5.0 woman with headscarf: medium skin tone
-1F9D5 1F3FE                                ; fully-qualified     # 🧕🏾 E5.0 woman with headscarf: medium-dark skin tone
-1F9D5 1F3FF                                ; fully-qualified     # 🧕🏿 E5.0 woman with headscarf: dark skin tone
-1F935                                      ; fully-qualified     # 🤵 E3.0 person in tuxedo
-1F935 1F3FB                                ; fully-qualified     # 🤵🏻 E3.0 person in tuxedo: light skin tone
-1F935 1F3FC                                ; fully-qualified     # 🤵🏼 E3.0 person in tuxedo: medium-light skin tone
-1F935 1F3FD                                ; fully-qualified     # 🤵🏽 E3.0 person in tuxedo: medium skin tone
-1F935 1F3FE                                ; fully-qualified     # 🤵🏾 E3.0 person in tuxedo: medium-dark skin tone
-1F935 1F3FF                                ; fully-qualified     # 🤵🏿 E3.0 person in tuxedo: dark skin tone
-1F935 200D 2642 FE0F                       ; fully-qualified     # 🤵‍♂️ E13.0 man in tuxedo
-1F935 200D 2642                            ; minimally-qualified # 🤵‍♂ E13.0 man in tuxedo
-1F935 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🤵🏻‍♂️ E13.0 man in tuxedo: light skin tone
-1F935 1F3FB 200D 2642                      ; minimally-qualified # 🤵🏻‍♂ E13.0 man in tuxedo: light skin tone
-1F935 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🤵🏼‍♂️ E13.0 man in tuxedo: medium-light skin tone
-1F935 1F3FC 200D 2642                      ; minimally-qualified # 🤵🏼‍♂ E13.0 man in tuxedo: medium-light skin tone
-1F935 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🤵🏽‍♂️ E13.0 man in tuxedo: medium skin tone
-1F935 1F3FD 200D 2642                      ; minimally-qualified # 🤵🏽‍♂ E13.0 man in tuxedo: medium skin tone
-1F935 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🤵🏾‍♂️ E13.0 man in tuxedo: medium-dark skin tone
-1F935 1F3FE 200D 2642                      ; minimally-qualified # 🤵🏾‍♂ E13.0 man in tuxedo: medium-dark skin tone
-1F935 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🤵🏿‍♂️ E13.0 man in tuxedo: dark skin tone
-1F935 1F3FF 200D 2642                      ; minimally-qualified # 🤵🏿‍♂ E13.0 man in tuxedo: dark skin tone
-1F935 200D 2640 FE0F                       ; fully-qualified     # 🤵‍♀️ E13.0 woman in tuxedo
-1F935 200D 2640                            ; minimally-qualified # 🤵‍♀ E13.0 woman in tuxedo
-1F935 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🤵🏻‍♀️ E13.0 woman in tuxedo: light skin tone
-1F935 1F3FB 200D 2640                      ; minimally-qualified # 🤵🏻‍♀ E13.0 woman in tuxedo: light skin tone
-1F935 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🤵🏼‍♀️ E13.0 woman in tuxedo: medium-light skin tone
-1F935 1F3FC 200D 2640                      ; minimally-qualified # 🤵🏼‍♀ E13.0 woman in tuxedo: medium-light skin tone
-1F935 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🤵🏽‍♀️ E13.0 woman in tuxedo: medium skin tone
-1F935 1F3FD 200D 2640                      ; minimally-qualified # 🤵🏽‍♀ E13.0 woman in tuxedo: medium skin tone
-1F935 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🤵🏾‍♀️ E13.0 woman in tuxedo: medium-dark skin tone
-1F935 1F3FE 200D 2640                      ; minimally-qualified # 🤵🏾‍♀ E13.0 woman in tuxedo: medium-dark skin tone
-1F935 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🤵🏿‍♀️ E13.0 woman in tuxedo: dark skin tone
-1F935 1F3FF 200D 2640                      ; minimally-qualified # 🤵🏿‍♀ E13.0 woman in tuxedo: dark skin tone
-1F470                                      ; fully-qualified     # 👰 E0.6 person with veil
-1F470 1F3FB                                ; fully-qualified     # 👰🏻 E1.0 person with veil: light skin tone
-1F470 1F3FC                                ; fully-qualified     # 👰🏼 E1.0 person with veil: medium-light skin tone
-1F470 1F3FD                                ; fully-qualified     # 👰🏽 E1.0 person with veil: medium skin tone
-1F470 1F3FE                                ; fully-qualified     # 👰🏾 E1.0 person with veil: medium-dark skin tone
-1F470 1F3FF                                ; fully-qualified     # 👰🏿 E1.0 person with veil: dark skin tone
-1F470 200D 2642 FE0F                       ; fully-qualified     # 👰‍♂️ E13.0 man with veil
-1F470 200D 2642                            ; minimally-qualified # 👰‍♂ E13.0 man with veil
-1F470 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 👰🏻‍♂️ E13.0 man with veil: light skin tone
-1F470 1F3FB 200D 2642                      ; minimally-qualified # 👰🏻‍♂ E13.0 man with veil: light skin tone
-1F470 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 👰🏼‍♂️ E13.0 man with veil: medium-light skin tone
-1F470 1F3FC 200D 2642                      ; minimally-qualified # 👰🏼‍♂ E13.0 man with veil: medium-light skin tone
-1F470 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 👰🏽‍♂️ E13.0 man with veil: medium skin tone
-1F470 1F3FD 200D 2642                      ; minimally-qualified # 👰🏽‍♂ E13.0 man with veil: medium skin tone
-1F470 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 👰🏾‍♂️ E13.0 man with veil: medium-dark skin tone
-1F470 1F3FE 200D 2642                      ; minimally-qualified # 👰🏾‍♂ E13.0 man with veil: medium-dark skin tone
-1F470 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 👰🏿‍♂️ E13.0 man with veil: dark skin tone
-1F470 1F3FF 200D 2642                      ; minimally-qualified # 👰🏿‍♂ E13.0 man with veil: dark skin tone
-1F470 200D 2640 FE0F                       ; fully-qualified     # 👰‍♀️ E13.0 woman with veil
-1F470 200D 2640                            ; minimally-qualified # 👰‍♀ E13.0 woman with veil
-1F470 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 👰🏻‍♀️ E13.0 woman with veil: light skin tone
-1F470 1F3FB 200D 2640                      ; minimally-qualified # 👰🏻‍♀ E13.0 woman with veil: light skin tone
-1F470 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 👰🏼‍♀️ E13.0 woman with veil: medium-light skin tone
-1F470 1F3FC 200D 2640                      ; minimally-qualified # 👰🏼‍♀ E13.0 woman with veil: medium-light skin tone
-1F470 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 👰🏽‍♀️ E13.0 woman with veil: medium skin tone
-1F470 1F3FD 200D 2640                      ; minimally-qualified # 👰🏽‍♀ E13.0 woman with veil: medium skin tone
-1F470 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 👰🏾‍♀️ E13.0 woman with veil: medium-dark skin tone
-1F470 1F3FE 200D 2640                      ; minimally-qualified # 👰🏾‍♀ E13.0 woman with veil: medium-dark skin tone
-1F470 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 👰🏿‍♀️ E13.0 woman with veil: dark skin tone
-1F470 1F3FF 200D 2640                      ; minimally-qualified # 👰🏿‍♀ E13.0 woman with veil: dark skin tone
-1F930                                      ; fully-qualified     # 🤰 E3.0 pregnant woman
-1F930 1F3FB                                ; fully-qualified     # 🤰🏻 E3.0 pregnant woman: light skin tone
-1F930 1F3FC                                ; fully-qualified     # 🤰🏼 E3.0 pregnant woman: medium-light skin tone
-1F930 1F3FD                                ; fully-qualified     # 🤰🏽 E3.0 pregnant woman: medium skin tone
-1F930 1F3FE                                ; fully-qualified     # 🤰🏾 E3.0 pregnant woman: medium-dark skin tone
-1F930 1F3FF                                ; fully-qualified     # 🤰🏿 E3.0 pregnant woman: dark skin tone
-1F931                                      ; fully-qualified     # 🤱 E5.0 breast-feeding
-1F931 1F3FB                                ; fully-qualified     # 🤱🏻 E5.0 breast-feeding: light skin tone
-1F931 1F3FC                                ; fully-qualified     # 🤱🏼 E5.0 breast-feeding: medium-light skin tone
-1F931 1F3FD                                ; fully-qualified     # 🤱🏽 E5.0 breast-feeding: medium skin tone
-1F931 1F3FE                                ; fully-qualified     # 🤱🏾 E5.0 breast-feeding: medium-dark skin tone
-1F931 1F3FF                                ; fully-qualified     # 🤱🏿 E5.0 breast-feeding: dark skin tone
-1F469 200D 1F37C                           ; fully-qualified     # 👩‍🍼 E13.0 woman feeding baby
-1F469 1F3FB 200D 1F37C                     ; fully-qualified     # 👩🏻‍🍼 E13.0 woman feeding baby: light skin tone
-1F469 1F3FC 200D 1F37C                     ; fully-qualified     # 👩🏼‍🍼 E13.0 woman feeding baby: medium-light skin tone
-1F469 1F3FD 200D 1F37C                     ; fully-qualified     # 👩🏽‍🍼 E13.0 woman feeding baby: medium skin tone
-1F469 1F3FE 200D 1F37C                     ; fully-qualified     # 👩🏾‍🍼 E13.0 woman feeding baby: medium-dark skin tone
-1F469 1F3FF 200D 1F37C                     ; fully-qualified     # 👩🏿‍🍼 E13.0 woman feeding baby: dark skin tone
-1F468 200D 1F37C                           ; fully-qualified     # 👨‍🍼 E13.0 man feeding baby
-1F468 1F3FB 200D 1F37C                     ; fully-qualified     # 👨🏻‍🍼 E13.0 man feeding baby: light skin tone
-1F468 1F3FC 200D 1F37C                     ; fully-qualified     # 👨🏼‍🍼 E13.0 man feeding baby: medium-light skin tone
-1F468 1F3FD 200D 1F37C                     ; fully-qualified     # 👨🏽‍🍼 E13.0 man feeding baby: medium skin tone
-1F468 1F3FE 200D 1F37C                     ; fully-qualified     # 👨🏾‍🍼 E13.0 man feeding baby: medium-dark skin tone
-1F468 1F3FF 200D 1F37C                     ; fully-qualified     # 👨🏿‍🍼 E13.0 man feeding baby: dark skin tone
-1F9D1 200D 1F37C                           ; fully-qualified     # 🧑‍🍼 E13.0 person feeding baby
-1F9D1 1F3FB 200D 1F37C                     ; fully-qualified     # 🧑🏻‍🍼 E13.0 person feeding baby: light skin tone
-1F9D1 1F3FC 200D 1F37C                     ; fully-qualified     # 🧑🏼‍🍼 E13.0 person feeding baby: medium-light skin tone
-1F9D1 1F3FD 200D 1F37C                     ; fully-qualified     # 🧑🏽‍🍼 E13.0 person feeding baby: medium skin tone
-1F9D1 1F3FE 200D 1F37C                     ; fully-qualified     # 🧑🏾‍🍼 E13.0 person feeding baby: medium-dark skin tone
-1F9D1 1F3FF 200D 1F37C                     ; fully-qualified     # 🧑🏿‍🍼 E13.0 person feeding baby: dark skin tone
+1F9D1 200D 2695 FE0F                                   ; fully-qualified     # 🧑‍⚕️ E12.1 health worker
+1F9D1 200D 2695                                        ; minimally-qualified # 🧑‍⚕ E12.1 health worker
+1F9D1 1F3FB 200D 2695 FE0F                             ; fully-qualified     # 🧑🏻‍⚕️ E12.1 health worker: light skin tone
+1F9D1 1F3FB 200D 2695                                  ; minimally-qualified # 🧑🏻‍⚕ E12.1 health worker: light skin tone
+1F9D1 1F3FC 200D 2695 FE0F                             ; fully-qualified     # 🧑🏼‍⚕️ E12.1 health worker: medium-light skin tone
+1F9D1 1F3FC 200D 2695                                  ; minimally-qualified # 🧑🏼‍⚕ E12.1 health worker: medium-light skin tone
+1F9D1 1F3FD 200D 2695 FE0F                             ; fully-qualified     # 🧑🏽‍⚕️ E12.1 health worker: medium skin tone
+1F9D1 1F3FD 200D 2695                                  ; minimally-qualified # 🧑🏽‍⚕ E12.1 health worker: medium skin tone
+1F9D1 1F3FE 200D 2695 FE0F                             ; fully-qualified     # 🧑🏾‍⚕️ E12.1 health worker: medium-dark skin tone
+1F9D1 1F3FE 200D 2695                                  ; minimally-qualified # 🧑🏾‍⚕ E12.1 health worker: medium-dark skin tone
+1F9D1 1F3FF 200D 2695 FE0F                             ; fully-qualified     # 🧑🏿‍⚕️ E12.1 health worker: dark skin tone
+1F9D1 1F3FF 200D 2695                                  ; minimally-qualified # 🧑🏿‍⚕ E12.1 health worker: dark skin tone
+1F468 200D 2695 FE0F                                   ; fully-qualified     # 👨‍⚕️ E4.0 man health worker
+1F468 200D 2695                                        ; minimally-qualified # 👨‍⚕ E4.0 man health worker
+1F468 1F3FB 200D 2695 FE0F                             ; fully-qualified     # 👨🏻‍⚕️ E4.0 man health worker: light skin tone
+1F468 1F3FB 200D 2695                                  ; minimally-qualified # 👨🏻‍⚕ E4.0 man health worker: light skin tone
+1F468 1F3FC 200D 2695 FE0F                             ; fully-qualified     # 👨🏼‍⚕️ E4.0 man health worker: medium-light skin tone
+1F468 1F3FC 200D 2695                                  ; minimally-qualified # 👨🏼‍⚕ E4.0 man health worker: medium-light skin tone
+1F468 1F3FD 200D 2695 FE0F                             ; fully-qualified     # 👨🏽‍⚕️ E4.0 man health worker: medium skin tone
+1F468 1F3FD 200D 2695                                  ; minimally-qualified # 👨🏽‍⚕ E4.0 man health worker: medium skin tone
+1F468 1F3FE 200D 2695 FE0F                             ; fully-qualified     # 👨🏾‍⚕️ E4.0 man health worker: medium-dark skin tone
+1F468 1F3FE 200D 2695                                  ; minimally-qualified # 👨🏾‍⚕ E4.0 man health worker: medium-dark skin tone
+1F468 1F3FF 200D 2695 FE0F                             ; fully-qualified     # 👨🏿‍⚕️ E4.0 man health worker: dark skin tone
+1F468 1F3FF 200D 2695                                  ; minimally-qualified # 👨🏿‍⚕ E4.0 man health worker: dark skin tone
+1F469 200D 2695 FE0F                                   ; fully-qualified     # 👩‍⚕️ E4.0 woman health worker
+1F469 200D 2695                                        ; minimally-qualified # 👩‍⚕ E4.0 woman health worker
+1F469 1F3FB 200D 2695 FE0F                             ; fully-qualified     # 👩🏻‍⚕️ E4.0 woman health worker: light skin tone
+1F469 1F3FB 200D 2695                                  ; minimally-qualified # 👩🏻‍⚕ E4.0 woman health worker: light skin tone
+1F469 1F3FC 200D 2695 FE0F                             ; fully-qualified     # 👩🏼‍⚕️ E4.0 woman health worker: medium-light skin tone
+1F469 1F3FC 200D 2695                                  ; minimally-qualified # 👩🏼‍⚕ E4.0 woman health worker: medium-light skin tone
+1F469 1F3FD 200D 2695 FE0F                             ; fully-qualified     # 👩🏽‍⚕️ E4.0 woman health worker: medium skin tone
+1F469 1F3FD 200D 2695                                  ; minimally-qualified # 👩🏽‍⚕ E4.0 woman health worker: medium skin tone
+1F469 1F3FE 200D 2695 FE0F                             ; fully-qualified     # 👩🏾‍⚕️ E4.0 woman health worker: medium-dark skin tone
+1F469 1F3FE 200D 2695                                  ; minimally-qualified # 👩🏾‍⚕ E4.0 woman health worker: medium-dark skin tone
+1F469 1F3FF 200D 2695 FE0F                             ; fully-qualified     # 👩🏿‍⚕️ E4.0 woman health worker: dark skin tone
+1F469 1F3FF 200D 2695                                  ; minimally-qualified # 👩🏿‍⚕ E4.0 woman health worker: dark skin tone
+1F9D1 200D 1F393                                       ; fully-qualified     # 🧑‍🎓 E12.1 student
+1F9D1 1F3FB 200D 1F393                                 ; fully-qualified     # 🧑🏻‍🎓 E12.1 student: light skin tone
+1F9D1 1F3FC 200D 1F393                                 ; fully-qualified     # 🧑🏼‍🎓 E12.1 student: medium-light skin tone
+1F9D1 1F3FD 200D 1F393                                 ; fully-qualified     # 🧑🏽‍🎓 E12.1 student: medium skin tone
+1F9D1 1F3FE 200D 1F393                                 ; fully-qualified     # 🧑🏾‍🎓 E12.1 student: medium-dark skin tone
+1F9D1 1F3FF 200D 1F393                                 ; fully-qualified     # 🧑🏿‍🎓 E12.1 student: dark skin tone
+1F468 200D 1F393                                       ; fully-qualified     # 👨‍🎓 E4.0 man student
+1F468 1F3FB 200D 1F393                                 ; fully-qualified     # 👨🏻‍🎓 E4.0 man student: light skin tone
+1F468 1F3FC 200D 1F393                                 ; fully-qualified     # 👨🏼‍🎓 E4.0 man student: medium-light skin tone
+1F468 1F3FD 200D 1F393                                 ; fully-qualified     # 👨🏽‍🎓 E4.0 man student: medium skin tone
+1F468 1F3FE 200D 1F393                                 ; fully-qualified     # 👨🏾‍🎓 E4.0 man student: medium-dark skin tone
+1F468 1F3FF 200D 1F393                                 ; fully-qualified     # 👨🏿‍🎓 E4.0 man student: dark skin tone
+1F469 200D 1F393                                       ; fully-qualified     # 👩‍🎓 E4.0 woman student
+1F469 1F3FB 200D 1F393                                 ; fully-qualified     # 👩🏻‍🎓 E4.0 woman student: light skin tone
+1F469 1F3FC 200D 1F393                                 ; fully-qualified     # 👩🏼‍🎓 E4.0 woman student: medium-light skin tone
+1F469 1F3FD 200D 1F393                                 ; fully-qualified     # 👩🏽‍🎓 E4.0 woman student: medium skin tone
+1F469 1F3FE 200D 1F393                                 ; fully-qualified     # 👩🏾‍🎓 E4.0 woman student: medium-dark skin tone
+1F469 1F3FF 200D 1F393                                 ; fully-qualified     # 👩🏿‍🎓 E4.0 woman student: dark skin tone
+1F9D1 200D 1F3EB                                       ; fully-qualified     # 🧑‍🏫 E12.1 teacher
+1F9D1 1F3FB 200D 1F3EB                                 ; fully-qualified     # 🧑🏻‍🏫 E12.1 teacher: light skin tone
+1F9D1 1F3FC 200D 1F3EB                                 ; fully-qualified     # 🧑🏼‍🏫 E12.1 teacher: medium-light skin tone
+1F9D1 1F3FD 200D 1F3EB                                 ; fully-qualified     # 🧑🏽‍🏫 E12.1 teacher: medium skin tone
+1F9D1 1F3FE 200D 1F3EB                                 ; fully-qualified     # 🧑🏾‍🏫 E12.1 teacher: medium-dark skin tone
+1F9D1 1F3FF 200D 1F3EB                                 ; fully-qualified     # 🧑🏿‍🏫 E12.1 teacher: dark skin tone
+1F468 200D 1F3EB                                       ; fully-qualified     # 👨‍🏫 E4.0 man teacher
+1F468 1F3FB 200D 1F3EB                                 ; fully-qualified     # 👨🏻‍🏫 E4.0 man teacher: light skin tone
+1F468 1F3FC 200D 1F3EB                                 ; fully-qualified     # 👨🏼‍🏫 E4.0 man teacher: medium-light skin tone
+1F468 1F3FD 200D 1F3EB                                 ; fully-qualified     # 👨🏽‍🏫 E4.0 man teacher: medium skin tone
+1F468 1F3FE 200D 1F3EB                                 ; fully-qualified     # 👨🏾‍🏫 E4.0 man teacher: medium-dark skin tone
+1F468 1F3FF 200D 1F3EB                                 ; fully-qualified     # 👨🏿‍🏫 E4.0 man teacher: dark skin tone
+1F469 200D 1F3EB                                       ; fully-qualified     # 👩‍🏫 E4.0 woman teacher
+1F469 1F3FB 200D 1F3EB                                 ; fully-qualified     # 👩🏻‍🏫 E4.0 woman teacher: light skin tone
+1F469 1F3FC 200D 1F3EB                                 ; fully-qualified     # 👩🏼‍🏫 E4.0 woman teacher: medium-light skin tone
+1F469 1F3FD 200D 1F3EB                                 ; fully-qualified     # 👩🏽‍🏫 E4.0 woman teacher: medium skin tone
+1F469 1F3FE 200D 1F3EB                                 ; fully-qualified     # 👩🏾‍🏫 E4.0 woman teacher: medium-dark skin tone
+1F469 1F3FF 200D 1F3EB                                 ; fully-qualified     # 👩🏿‍🏫 E4.0 woman teacher: dark skin tone
+1F9D1 200D 2696 FE0F                                   ; fully-qualified     # 🧑‍⚖️ E12.1 judge
+1F9D1 200D 2696                                        ; minimally-qualified # 🧑‍⚖ E12.1 judge
+1F9D1 1F3FB 200D 2696 FE0F                             ; fully-qualified     # 🧑🏻‍⚖️ E12.1 judge: light skin tone
+1F9D1 1F3FB 200D 2696                                  ; minimally-qualified # 🧑🏻‍⚖ E12.1 judge: light skin tone
+1F9D1 1F3FC 200D 2696 FE0F                             ; fully-qualified     # 🧑🏼‍⚖️ E12.1 judge: medium-light skin tone
+1F9D1 1F3FC 200D 2696                                  ; minimally-qualified # 🧑🏼‍⚖ E12.1 judge: medium-light skin tone
+1F9D1 1F3FD 200D 2696 FE0F                             ; fully-qualified     # 🧑🏽‍⚖️ E12.1 judge: medium skin tone
+1F9D1 1F3FD 200D 2696                                  ; minimally-qualified # 🧑🏽‍⚖ E12.1 judge: medium skin tone
+1F9D1 1F3FE 200D 2696 FE0F                             ; fully-qualified     # 🧑🏾‍⚖️ E12.1 judge: medium-dark skin tone
+1F9D1 1F3FE 200D 2696                                  ; minimally-qualified # 🧑🏾‍⚖ E12.1 judge: medium-dark skin tone
+1F9D1 1F3FF 200D 2696 FE0F                             ; fully-qualified     # 🧑🏿‍⚖️ E12.1 judge: dark skin tone
+1F9D1 1F3FF 200D 2696                                  ; minimally-qualified # 🧑🏿‍⚖ E12.1 judge: dark skin tone
+1F468 200D 2696 FE0F                                   ; fully-qualified     # 👨‍⚖️ E4.0 man judge
+1F468 200D 2696                                        ; minimally-qualified # 👨‍⚖ E4.0 man judge
+1F468 1F3FB 200D 2696 FE0F                             ; fully-qualified     # 👨🏻‍⚖️ E4.0 man judge: light skin tone
+1F468 1F3FB 200D 2696                                  ; minimally-qualified # 👨🏻‍⚖ E4.0 man judge: light skin tone
+1F468 1F3FC 200D 2696 FE0F                             ; fully-qualified     # 👨🏼‍⚖️ E4.0 man judge: medium-light skin tone
+1F468 1F3FC 200D 2696                                  ; minimally-qualified # 👨🏼‍⚖ E4.0 man judge: medium-light skin tone
+1F468 1F3FD 200D 2696 FE0F                             ; fully-qualified     # 👨🏽‍⚖️ E4.0 man judge: medium skin tone
+1F468 1F3FD 200D 2696                                  ; minimally-qualified # 👨🏽‍⚖ E4.0 man judge: medium skin tone
+1F468 1F3FE 200D 2696 FE0F                             ; fully-qualified     # 👨🏾‍⚖️ E4.0 man judge: medium-dark skin tone
+1F468 1F3FE 200D 2696                                  ; minimally-qualified # 👨🏾‍⚖ E4.0 man judge: medium-dark skin tone
+1F468 1F3FF 200D 2696 FE0F                             ; fully-qualified     # 👨🏿‍⚖️ E4.0 man judge: dark skin tone
+1F468 1F3FF 200D 2696                                  ; minimally-qualified # 👨🏿‍⚖ E4.0 man judge: dark skin tone
+1F469 200D 2696 FE0F                                   ; fully-qualified     # 👩‍⚖️ E4.0 woman judge
+1F469 200D 2696                                        ; minimally-qualified # 👩‍⚖ E4.0 woman judge
+1F469 1F3FB 200D 2696 FE0F                             ; fully-qualified     # 👩🏻‍⚖️ E4.0 woman judge: light skin tone
+1F469 1F3FB 200D 2696                                  ; minimally-qualified # 👩🏻‍⚖ E4.0 woman judge: light skin tone
+1F469 1F3FC 200D 2696 FE0F                             ; fully-qualified     # 👩🏼‍⚖️ E4.0 woman judge: medium-light skin tone
+1F469 1F3FC 200D 2696                                  ; minimally-qualified # 👩🏼‍⚖ E4.0 woman judge: medium-light skin tone
+1F469 1F3FD 200D 2696 FE0F                             ; fully-qualified     # 👩🏽‍⚖️ E4.0 woman judge: medium skin tone
+1F469 1F3FD 200D 2696                                  ; minimally-qualified # 👩🏽‍⚖ E4.0 woman judge: medium skin tone
+1F469 1F3FE 200D 2696 FE0F                             ; fully-qualified     # 👩🏾‍⚖️ E4.0 woman judge: medium-dark skin tone
+1F469 1F3FE 200D 2696                                  ; minimally-qualified # 👩🏾‍⚖ E4.0 woman judge: medium-dark skin tone
+1F469 1F3FF 200D 2696 FE0F                             ; fully-qualified     # 👩🏿‍⚖️ E4.0 woman judge: dark skin tone
+1F469 1F3FF 200D 2696                                  ; minimally-qualified # 👩🏿‍⚖ E4.0 woman judge: dark skin tone
+1F9D1 200D 1F33E                                       ; fully-qualified     # 🧑‍🌾 E12.1 farmer
+1F9D1 1F3FB 200D 1F33E                                 ; fully-qualified     # 🧑🏻‍🌾 E12.1 farmer: light skin tone
+1F9D1 1F3FC 200D 1F33E                                 ; fully-qualified     # 🧑🏼‍🌾 E12.1 farmer: medium-light skin tone
+1F9D1 1F3FD 200D 1F33E                                 ; fully-qualified     # 🧑🏽‍🌾 E12.1 farmer: medium skin tone
+1F9D1 1F3FE 200D 1F33E                                 ; fully-qualified     # 🧑🏾‍🌾 E12.1 farmer: medium-dark skin tone
+1F9D1 1F3FF 200D 1F33E                                 ; fully-qualified     # 🧑🏿‍🌾 E12.1 farmer: dark skin tone
+1F468 200D 1F33E                                       ; fully-qualified     # 👨‍🌾 E4.0 man farmer
+1F468 1F3FB 200D 1F33E                                 ; fully-qualified     # 👨🏻‍🌾 E4.0 man farmer: light skin tone
+1F468 1F3FC 200D 1F33E                                 ; fully-qualified     # 👨🏼‍🌾 E4.0 man farmer: medium-light skin tone
+1F468 1F3FD 200D 1F33E                                 ; fully-qualified     # 👨🏽‍🌾 E4.0 man farmer: medium skin tone
+1F468 1F3FE 200D 1F33E                                 ; fully-qualified     # 👨🏾‍🌾 E4.0 man farmer: medium-dark skin tone
+1F468 1F3FF 200D 1F33E                                 ; fully-qualified     # 👨🏿‍🌾 E4.0 man farmer: dark skin tone
+1F469 200D 1F33E                                       ; fully-qualified     # 👩‍🌾 E4.0 woman farmer
+1F469 1F3FB 200D 1F33E                                 ; fully-qualified     # 👩🏻‍🌾 E4.0 woman farmer: light skin tone
+1F469 1F3FC 200D 1F33E                                 ; fully-qualified     # 👩🏼‍🌾 E4.0 woman farmer: medium-light skin tone
+1F469 1F3FD 200D 1F33E                                 ; fully-qualified     # 👩🏽‍🌾 E4.0 woman farmer: medium skin tone
+1F469 1F3FE 200D 1F33E                                 ; fully-qualified     # 👩🏾‍🌾 E4.0 woman farmer: medium-dark skin tone
+1F469 1F3FF 200D 1F33E                                 ; fully-qualified     # 👩🏿‍🌾 E4.0 woman farmer: dark skin tone
+1F9D1 200D 1F373                                       ; fully-qualified     # 🧑‍🍳 E12.1 cook
+1F9D1 1F3FB 200D 1F373                                 ; fully-qualified     # 🧑🏻‍🍳 E12.1 cook: light skin tone
+1F9D1 1F3FC 200D 1F373                                 ; fully-qualified     # 🧑🏼‍🍳 E12.1 cook: medium-light skin tone
+1F9D1 1F3FD 200D 1F373                                 ; fully-qualified     # 🧑🏽‍🍳 E12.1 cook: medium skin tone
+1F9D1 1F3FE 200D 1F373                                 ; fully-qualified     # 🧑🏾‍🍳 E12.1 cook: medium-dark skin tone
+1F9D1 1F3FF 200D 1F373                                 ; fully-qualified     # 🧑🏿‍🍳 E12.1 cook: dark skin tone
+1F468 200D 1F373                                       ; fully-qualified     # 👨‍🍳 E4.0 man cook
+1F468 1F3FB 200D 1F373                                 ; fully-qualified     # 👨🏻‍🍳 E4.0 man cook: light skin tone
+1F468 1F3FC 200D 1F373                                 ; fully-qualified     # 👨🏼‍🍳 E4.0 man cook: medium-light skin tone
+1F468 1F3FD 200D 1F373                                 ; fully-qualified     # 👨🏽‍🍳 E4.0 man cook: medium skin tone
+1F468 1F3FE 200D 1F373                                 ; fully-qualified     # 👨🏾‍🍳 E4.0 man cook: medium-dark skin tone
+1F468 1F3FF 200D 1F373                                 ; fully-qualified     # 👨🏿‍🍳 E4.0 man cook: dark skin tone
+1F469 200D 1F373                                       ; fully-qualified     # 👩‍🍳 E4.0 woman cook
+1F469 1F3FB 200D 1F373                                 ; fully-qualified     # 👩🏻‍🍳 E4.0 woman cook: light skin tone
+1F469 1F3FC 200D 1F373                                 ; fully-qualified     # 👩🏼‍🍳 E4.0 woman cook: medium-light skin tone
+1F469 1F3FD 200D 1F373                                 ; fully-qualified     # 👩🏽‍🍳 E4.0 woman cook: medium skin tone
+1F469 1F3FE 200D 1F373                                 ; fully-qualified     # 👩🏾‍🍳 E4.0 woman cook: medium-dark skin tone
+1F469 1F3FF 200D 1F373                                 ; fully-qualified     # 👩🏿‍🍳 E4.0 woman cook: dark skin tone
+1F9D1 200D 1F527                                       ; fully-qualified     # 🧑‍🔧 E12.1 mechanic
+1F9D1 1F3FB 200D 1F527                                 ; fully-qualified     # 🧑🏻‍🔧 E12.1 mechanic: light skin tone
+1F9D1 1F3FC 200D 1F527                                 ; fully-qualified     # 🧑🏼‍🔧 E12.1 mechanic: medium-light skin tone
+1F9D1 1F3FD 200D 1F527                                 ; fully-qualified     # 🧑🏽‍🔧 E12.1 mechanic: medium skin tone
+1F9D1 1F3FE 200D 1F527                                 ; fully-qualified     # 🧑🏾‍🔧 E12.1 mechanic: medium-dark skin tone
+1F9D1 1F3FF 200D 1F527                                 ; fully-qualified     # 🧑🏿‍🔧 E12.1 mechanic: dark skin tone
+1F468 200D 1F527                                       ; fully-qualified     # 👨‍🔧 E4.0 man mechanic
+1F468 1F3FB 200D 1F527                                 ; fully-qualified     # 👨🏻‍🔧 E4.0 man mechanic: light skin tone
+1F468 1F3FC 200D 1F527                                 ; fully-qualified     # 👨🏼‍🔧 E4.0 man mechanic: medium-light skin tone
+1F468 1F3FD 200D 1F527                                 ; fully-qualified     # 👨🏽‍🔧 E4.0 man mechanic: medium skin tone
+1F468 1F3FE 200D 1F527                                 ; fully-qualified     # 👨🏾‍🔧 E4.0 man mechanic: medium-dark skin tone
+1F468 1F3FF 200D 1F527                                 ; fully-qualified     # 👨🏿‍🔧 E4.0 man mechanic: dark skin tone
+1F469 200D 1F527                                       ; fully-qualified     # 👩‍🔧 E4.0 woman mechanic
+1F469 1F3FB 200D 1F527                                 ; fully-qualified     # 👩🏻‍🔧 E4.0 woman mechanic: light skin tone
+1F469 1F3FC 200D 1F527                                 ; fully-qualified     # 👩🏼‍🔧 E4.0 woman mechanic: medium-light skin tone
+1F469 1F3FD 200D 1F527                                 ; fully-qualified     # 👩🏽‍🔧 E4.0 woman mechanic: medium skin tone
+1F469 1F3FE 200D 1F527                                 ; fully-qualified     # 👩🏾‍🔧 E4.0 woman mechanic: medium-dark skin tone
+1F469 1F3FF 200D 1F527                                 ; fully-qualified     # 👩🏿‍🔧 E4.0 woman mechanic: dark skin tone
+1F9D1 200D 1F3ED                                       ; fully-qualified     # 🧑‍🏭 E12.1 factory worker
+1F9D1 1F3FB 200D 1F3ED                                 ; fully-qualified     # 🧑🏻‍🏭 E12.1 factory worker: light skin tone
+1F9D1 1F3FC 200D 1F3ED                                 ; fully-qualified     # 🧑🏼‍🏭 E12.1 factory worker: medium-light skin tone
+1F9D1 1F3FD 200D 1F3ED                                 ; fully-qualified     # 🧑🏽‍🏭 E12.1 factory worker: medium skin tone
+1F9D1 1F3FE 200D 1F3ED                                 ; fully-qualified     # 🧑🏾‍🏭 E12.1 factory worker: medium-dark skin tone
+1F9D1 1F3FF 200D 1F3ED                                 ; fully-qualified     # 🧑🏿‍🏭 E12.1 factory worker: dark skin tone
+1F468 200D 1F3ED                                       ; fully-qualified     # 👨‍🏭 E4.0 man factory worker
+1F468 1F3FB 200D 1F3ED                                 ; fully-qualified     # 👨🏻‍🏭 E4.0 man factory worker: light skin tone
+1F468 1F3FC 200D 1F3ED                                 ; fully-qualified     # 👨🏼‍🏭 E4.0 man factory worker: medium-light skin tone
+1F468 1F3FD 200D 1F3ED                                 ; fully-qualified     # 👨🏽‍🏭 E4.0 man factory worker: medium skin tone
+1F468 1F3FE 200D 1F3ED                                 ; fully-qualified     # 👨🏾‍🏭 E4.0 man factory worker: medium-dark skin tone
+1F468 1F3FF 200D 1F3ED                                 ; fully-qualified     # 👨🏿‍🏭 E4.0 man factory worker: dark skin tone
+1F469 200D 1F3ED                                       ; fully-qualified     # 👩‍🏭 E4.0 woman factory worker
+1F469 1F3FB 200D 1F3ED                                 ; fully-qualified     # 👩🏻‍🏭 E4.0 woman factory worker: light skin tone
+1F469 1F3FC 200D 1F3ED                                 ; fully-qualified     # 👩🏼‍🏭 E4.0 woman factory worker: medium-light skin tone
+1F469 1F3FD 200D 1F3ED                                 ; fully-qualified     # 👩🏽‍🏭 E4.0 woman factory worker: medium skin tone
+1F469 1F3FE 200D 1F3ED                                 ; fully-qualified     # 👩🏾‍🏭 E4.0 woman factory worker: medium-dark skin tone
+1F469 1F3FF 200D 1F3ED                                 ; fully-qualified     # 👩🏿‍🏭 E4.0 woman factory worker: dark skin tone
+1F9D1 200D 1F4BC                                       ; fully-qualified     # 🧑‍💼 E12.1 office worker
+1F9D1 1F3FB 200D 1F4BC                                 ; fully-qualified     # 🧑🏻‍💼 E12.1 office worker: light skin tone
+1F9D1 1F3FC 200D 1F4BC                                 ; fully-qualified     # 🧑🏼‍💼 E12.1 office worker: medium-light skin tone
+1F9D1 1F3FD 200D 1F4BC                                 ; fully-qualified     # 🧑🏽‍💼 E12.1 office worker: medium skin tone
+1F9D1 1F3FE 200D 1F4BC                                 ; fully-qualified     # 🧑🏾‍💼 E12.1 office worker: medium-dark skin tone
+1F9D1 1F3FF 200D 1F4BC                                 ; fully-qualified     # 🧑🏿‍💼 E12.1 office worker: dark skin tone
+1F468 200D 1F4BC                                       ; fully-qualified     # 👨‍💼 E4.0 man office worker
+1F468 1F3FB 200D 1F4BC                                 ; fully-qualified     # 👨🏻‍💼 E4.0 man office worker: light skin tone
+1F468 1F3FC 200D 1F4BC                                 ; fully-qualified     # 👨🏼‍💼 E4.0 man office worker: medium-light skin tone
+1F468 1F3FD 200D 1F4BC                                 ; fully-qualified     # 👨🏽‍💼 E4.0 man office worker: medium skin tone
+1F468 1F3FE 200D 1F4BC                                 ; fully-qualified     # 👨🏾‍💼 E4.0 man office worker: medium-dark skin tone
+1F468 1F3FF 200D 1F4BC                                 ; fully-qualified     # 👨🏿‍💼 E4.0 man office worker: dark skin tone
+1F469 200D 1F4BC                                       ; fully-qualified     # 👩‍💼 E4.0 woman office worker
+1F469 1F3FB 200D 1F4BC                                 ; fully-qualified     # 👩🏻‍💼 E4.0 woman office worker: light skin tone
+1F469 1F3FC 200D 1F4BC                                 ; fully-qualified     # 👩🏼‍💼 E4.0 woman office worker: medium-light skin tone
+1F469 1F3FD 200D 1F4BC                                 ; fully-qualified     # 👩🏽‍💼 E4.0 woman office worker: medium skin tone
+1F469 1F3FE 200D 1F4BC                                 ; fully-qualified     # 👩🏾‍💼 E4.0 woman office worker: medium-dark skin tone
+1F469 1F3FF 200D 1F4BC                                 ; fully-qualified     # 👩🏿‍💼 E4.0 woman office worker: dark skin tone
+1F9D1 200D 1F52C                                       ; fully-qualified     # 🧑‍🔬 E12.1 scientist
+1F9D1 1F3FB 200D 1F52C                                 ; fully-qualified     # 🧑🏻‍🔬 E12.1 scientist: light skin tone
+1F9D1 1F3FC 200D 1F52C                                 ; fully-qualified     # 🧑🏼‍🔬 E12.1 scientist: medium-light skin tone
+1F9D1 1F3FD 200D 1F52C                                 ; fully-qualified     # 🧑🏽‍🔬 E12.1 scientist: medium skin tone
+1F9D1 1F3FE 200D 1F52C                                 ; fully-qualified     # 🧑🏾‍🔬 E12.1 scientist: medium-dark skin tone
+1F9D1 1F3FF 200D 1F52C                                 ; fully-qualified     # 🧑🏿‍🔬 E12.1 scientist: dark skin tone
+1F468 200D 1F52C                                       ; fully-qualified     # 👨‍🔬 E4.0 man scientist
+1F468 1F3FB 200D 1F52C                                 ; fully-qualified     # 👨🏻‍🔬 E4.0 man scientist: light skin tone
+1F468 1F3FC 200D 1F52C                                 ; fully-qualified     # 👨🏼‍🔬 E4.0 man scientist: medium-light skin tone
+1F468 1F3FD 200D 1F52C                                 ; fully-qualified     # 👨🏽‍🔬 E4.0 man scientist: medium skin tone
+1F468 1F3FE 200D 1F52C                                 ; fully-qualified     # 👨🏾‍🔬 E4.0 man scientist: medium-dark skin tone
+1F468 1F3FF 200D 1F52C                                 ; fully-qualified     # 👨🏿‍🔬 E4.0 man scientist: dark skin tone
+1F469 200D 1F52C                                       ; fully-qualified     # 👩‍🔬 E4.0 woman scientist
+1F469 1F3FB 200D 1F52C                                 ; fully-qualified     # 👩🏻‍🔬 E4.0 woman scientist: light skin tone
+1F469 1F3FC 200D 1F52C                                 ; fully-qualified     # 👩🏼‍🔬 E4.0 woman scientist: medium-light skin tone
+1F469 1F3FD 200D 1F52C                                 ; fully-qualified     # 👩🏽‍🔬 E4.0 woman scientist: medium skin tone
+1F469 1F3FE 200D 1F52C                                 ; fully-qualified     # 👩🏾‍🔬 E4.0 woman scientist: medium-dark skin tone
+1F469 1F3FF 200D 1F52C                                 ; fully-qualified     # 👩🏿‍🔬 E4.0 woman scientist: dark skin tone
+1F9D1 200D 1F4BB                                       ; fully-qualified     # 🧑‍💻 E12.1 technologist
+1F9D1 1F3FB 200D 1F4BB                                 ; fully-qualified     # 🧑🏻‍💻 E12.1 technologist: light skin tone
+1F9D1 1F3FC 200D 1F4BB                                 ; fully-qualified     # 🧑🏼‍💻 E12.1 technologist: medium-light skin tone
+1F9D1 1F3FD 200D 1F4BB                                 ; fully-qualified     # 🧑🏽‍💻 E12.1 technologist: medium skin tone
+1F9D1 1F3FE 200D 1F4BB                                 ; fully-qualified     # 🧑🏾‍💻 E12.1 technologist: medium-dark skin tone
+1F9D1 1F3FF 200D 1F4BB                                 ; fully-qualified     # 🧑🏿‍💻 E12.1 technologist: dark skin tone
+1F468 200D 1F4BB                                       ; fully-qualified     # 👨‍💻 E4.0 man technologist
+1F468 1F3FB 200D 1F4BB                                 ; fully-qualified     # 👨🏻‍💻 E4.0 man technologist: light skin tone
+1F468 1F3FC 200D 1F4BB                                 ; fully-qualified     # 👨🏼‍💻 E4.0 man technologist: medium-light skin tone
+1F468 1F3FD 200D 1F4BB                                 ; fully-qualified     # 👨🏽‍💻 E4.0 man technologist: medium skin tone
+1F468 1F3FE 200D 1F4BB                                 ; fully-qualified     # 👨🏾‍💻 E4.0 man technologist: medium-dark skin tone
+1F468 1F3FF 200D 1F4BB                                 ; fully-qualified     # 👨🏿‍💻 E4.0 man technologist: dark skin tone
+1F469 200D 1F4BB                                       ; fully-qualified     # 👩‍💻 E4.0 woman technologist
+1F469 1F3FB 200D 1F4BB                                 ; fully-qualified     # 👩🏻‍💻 E4.0 woman technologist: light skin tone
+1F469 1F3FC 200D 1F4BB                                 ; fully-qualified     # 👩🏼‍💻 E4.0 woman technologist: medium-light skin tone
+1F469 1F3FD 200D 1F4BB                                 ; fully-qualified     # 👩🏽‍💻 E4.0 woman technologist: medium skin tone
+1F469 1F3FE 200D 1F4BB                                 ; fully-qualified     # 👩🏾‍💻 E4.0 woman technologist: medium-dark skin tone
+1F469 1F3FF 200D 1F4BB                                 ; fully-qualified     # 👩🏿‍💻 E4.0 woman technologist: dark skin tone
+1F9D1 200D 1F3A4                                       ; fully-qualified     # 🧑‍🎤 E12.1 singer
+1F9D1 1F3FB 200D 1F3A4                                 ; fully-qualified     # 🧑🏻‍🎤 E12.1 singer: light skin tone
+1F9D1 1F3FC 200D 1F3A4                                 ; fully-qualified     # 🧑🏼‍🎤 E12.1 singer: medium-light skin tone
+1F9D1 1F3FD 200D 1F3A4                                 ; fully-qualified     # 🧑🏽‍🎤 E12.1 singer: medium skin tone
+1F9D1 1F3FE 200D 1F3A4                                 ; fully-qualified     # 🧑🏾‍🎤 E12.1 singer: medium-dark skin tone
+1F9D1 1F3FF 200D 1F3A4                                 ; fully-qualified     # 🧑🏿‍🎤 E12.1 singer: dark skin tone
+1F468 200D 1F3A4                                       ; fully-qualified     # 👨‍🎤 E4.0 man singer
+1F468 1F3FB 200D 1F3A4                                 ; fully-qualified     # 👨🏻‍🎤 E4.0 man singer: light skin tone
+1F468 1F3FC 200D 1F3A4                                 ; fully-qualified     # 👨🏼‍🎤 E4.0 man singer: medium-light skin tone
+1F468 1F3FD 200D 1F3A4                                 ; fully-qualified     # 👨🏽‍🎤 E4.0 man singer: medium skin tone
+1F468 1F3FE 200D 1F3A4                                 ; fully-qualified     # 👨🏾‍🎤 E4.0 man singer: medium-dark skin tone
+1F468 1F3FF 200D 1F3A4                                 ; fully-qualified     # 👨🏿‍🎤 E4.0 man singer: dark skin tone
+1F469 200D 1F3A4                                       ; fully-qualified     # 👩‍🎤 E4.0 woman singer
+1F469 1F3FB 200D 1F3A4                                 ; fully-qualified     # 👩🏻‍🎤 E4.0 woman singer: light skin tone
+1F469 1F3FC 200D 1F3A4                                 ; fully-qualified     # 👩🏼‍🎤 E4.0 woman singer: medium-light skin tone
+1F469 1F3FD 200D 1F3A4                                 ; fully-qualified     # 👩🏽‍🎤 E4.0 woman singer: medium skin tone
+1F469 1F3FE 200D 1F3A4                                 ; fully-qualified     # 👩🏾‍🎤 E4.0 woman singer: medium-dark skin tone
+1F469 1F3FF 200D 1F3A4                                 ; fully-qualified     # 👩🏿‍🎤 E4.0 woman singer: dark skin tone
+1F9D1 200D 1F3A8                                       ; fully-qualified     # 🧑‍🎨 E12.1 artist
+1F9D1 1F3FB 200D 1F3A8                                 ; fully-qualified     # 🧑🏻‍🎨 E12.1 artist: light skin tone
+1F9D1 1F3FC 200D 1F3A8                                 ; fully-qualified     # 🧑🏼‍🎨 E12.1 artist: medium-light skin tone
+1F9D1 1F3FD 200D 1F3A8                                 ; fully-qualified     # 🧑🏽‍🎨 E12.1 artist: medium skin tone
+1F9D1 1F3FE 200D 1F3A8                                 ; fully-qualified     # 🧑🏾‍🎨 E12.1 artist: medium-dark skin tone
+1F9D1 1F3FF 200D 1F3A8                                 ; fully-qualified     # 🧑🏿‍🎨 E12.1 artist: dark skin tone
+1F468 200D 1F3A8                                       ; fully-qualified     # 👨‍🎨 E4.0 man artist
+1F468 1F3FB 200D 1F3A8                                 ; fully-qualified     # 👨🏻‍🎨 E4.0 man artist: light skin tone
+1F468 1F3FC 200D 1F3A8                                 ; fully-qualified     # 👨🏼‍🎨 E4.0 man artist: medium-light skin tone
+1F468 1F3FD 200D 1F3A8                                 ; fully-qualified     # 👨🏽‍🎨 E4.0 man artist: medium skin tone
+1F468 1F3FE 200D 1F3A8                                 ; fully-qualified     # 👨🏾‍🎨 E4.0 man artist: medium-dark skin tone
+1F468 1F3FF 200D 1F3A8                                 ; fully-qualified     # 👨🏿‍🎨 E4.0 man artist: dark skin tone
+1F469 200D 1F3A8                                       ; fully-qualified     # 👩‍🎨 E4.0 woman artist
+1F469 1F3FB 200D 1F3A8                                 ; fully-qualified     # 👩🏻‍🎨 E4.0 woman artist: light skin tone
+1F469 1F3FC 200D 1F3A8                                 ; fully-qualified     # 👩🏼‍🎨 E4.0 woman artist: medium-light skin tone
+1F469 1F3FD 200D 1F3A8                                 ; fully-qualified     # 👩🏽‍🎨 E4.0 woman artist: medium skin tone
+1F469 1F3FE 200D 1F3A8                                 ; fully-qualified     # 👩🏾‍🎨 E4.0 woman artist: medium-dark skin tone
+1F469 1F3FF 200D 1F3A8                                 ; fully-qualified     # 👩🏿‍🎨 E4.0 woman artist: dark skin tone
+1F9D1 200D 2708 FE0F                                   ; fully-qualified     # 🧑‍✈️ E12.1 pilot
+1F9D1 200D 2708                                        ; minimally-qualified # 🧑‍✈ E12.1 pilot
+1F9D1 1F3FB 200D 2708 FE0F                             ; fully-qualified     # 🧑🏻‍✈️ E12.1 pilot: light skin tone
+1F9D1 1F3FB 200D 2708                                  ; minimally-qualified # 🧑🏻‍✈ E12.1 pilot: light skin tone
+1F9D1 1F3FC 200D 2708 FE0F                             ; fully-qualified     # 🧑🏼‍✈️ E12.1 pilot: medium-light skin tone
+1F9D1 1F3FC 200D 2708                                  ; minimally-qualified # 🧑🏼‍✈ E12.1 pilot: medium-light skin tone
+1F9D1 1F3FD 200D 2708 FE0F                             ; fully-qualified     # 🧑🏽‍✈️ E12.1 pilot: medium skin tone
+1F9D1 1F3FD 200D 2708                                  ; minimally-qualified # 🧑🏽‍✈ E12.1 pilot: medium skin tone
+1F9D1 1F3FE 200D 2708 FE0F                             ; fully-qualified     # 🧑🏾‍✈️ E12.1 pilot: medium-dark skin tone
+1F9D1 1F3FE 200D 2708                                  ; minimally-qualified # 🧑🏾‍✈ E12.1 pilot: medium-dark skin tone
+1F9D1 1F3FF 200D 2708 FE0F                             ; fully-qualified     # 🧑🏿‍✈️ E12.1 pilot: dark skin tone
+1F9D1 1F3FF 200D 2708                                  ; minimally-qualified # 🧑🏿‍✈ E12.1 pilot: dark skin tone
+1F468 200D 2708 FE0F                                   ; fully-qualified     # 👨‍✈️ E4.0 man pilot
+1F468 200D 2708                                        ; minimally-qualified # 👨‍✈ E4.0 man pilot
+1F468 1F3FB 200D 2708 FE0F                             ; fully-qualified     # 👨🏻‍✈️ E4.0 man pilot: light skin tone
+1F468 1F3FB 200D 2708                                  ; minimally-qualified # 👨🏻‍✈ E4.0 man pilot: light skin tone
+1F468 1F3FC 200D 2708 FE0F                             ; fully-qualified     # 👨🏼‍✈️ E4.0 man pilot: medium-light skin tone
+1F468 1F3FC 200D 2708                                  ; minimally-qualified # 👨🏼‍✈ E4.0 man pilot: medium-light skin tone
+1F468 1F3FD 200D 2708 FE0F                             ; fully-qualified     # 👨🏽‍✈️ E4.0 man pilot: medium skin tone
+1F468 1F3FD 200D 2708                                  ; minimally-qualified # 👨🏽‍✈ E4.0 man pilot: medium skin tone
+1F468 1F3FE 200D 2708 FE0F                             ; fully-qualified     # 👨🏾‍✈️ E4.0 man pilot: medium-dark skin tone
+1F468 1F3FE 200D 2708                                  ; minimally-qualified # 👨🏾‍✈ E4.0 man pilot: medium-dark skin tone
+1F468 1F3FF 200D 2708 FE0F                             ; fully-qualified     # 👨🏿‍✈️ E4.0 man pilot: dark skin tone
+1F468 1F3FF 200D 2708                                  ; minimally-qualified # 👨🏿‍✈ E4.0 man pilot: dark skin tone
+1F469 200D 2708 FE0F                                   ; fully-qualified     # 👩‍✈️ E4.0 woman pilot
+1F469 200D 2708                                        ; minimally-qualified # 👩‍✈ E4.0 woman pilot
+1F469 1F3FB 200D 2708 FE0F                             ; fully-qualified     # 👩🏻‍✈️ E4.0 woman pilot: light skin tone
+1F469 1F3FB 200D 2708                                  ; minimally-qualified # 👩🏻‍✈ E4.0 woman pilot: light skin tone
+1F469 1F3FC 200D 2708 FE0F                             ; fully-qualified     # 👩🏼‍✈️ E4.0 woman pilot: medium-light skin tone
+1F469 1F3FC 200D 2708                                  ; minimally-qualified # 👩🏼‍✈ E4.0 woman pilot: medium-light skin tone
+1F469 1F3FD 200D 2708 FE0F                             ; fully-qualified     # 👩🏽‍✈️ E4.0 woman pilot: medium skin tone
+1F469 1F3FD 200D 2708                                  ; minimally-qualified # 👩🏽‍✈ E4.0 woman pilot: medium skin tone
+1F469 1F3FE 200D 2708 FE0F                             ; fully-qualified     # 👩🏾‍✈️ E4.0 woman pilot: medium-dark skin tone
+1F469 1F3FE 200D 2708                                  ; minimally-qualified # 👩🏾‍✈ E4.0 woman pilot: medium-dark skin tone
+1F469 1F3FF 200D 2708 FE0F                             ; fully-qualified     # 👩🏿‍✈️ E4.0 woman pilot: dark skin tone
+1F469 1F3FF 200D 2708                                  ; minimally-qualified # 👩🏿‍✈ E4.0 woman pilot: dark skin tone
+1F9D1 200D 1F680                                       ; fully-qualified     # 🧑‍🚀 E12.1 astronaut
+1F9D1 1F3FB 200D 1F680                                 ; fully-qualified     # 🧑🏻‍🚀 E12.1 astronaut: light skin tone
+1F9D1 1F3FC 200D 1F680                                 ; fully-qualified     # 🧑🏼‍🚀 E12.1 astronaut: medium-light skin tone
+1F9D1 1F3FD 200D 1F680                                 ; fully-qualified     # 🧑🏽‍🚀 E12.1 astronaut: medium skin tone
+1F9D1 1F3FE 200D 1F680                                 ; fully-qualified     # 🧑🏾‍🚀 E12.1 astronaut: medium-dark skin tone
+1F9D1 1F3FF 200D 1F680                                 ; fully-qualified     # 🧑🏿‍🚀 E12.1 astronaut: dark skin tone
+1F468 200D 1F680                                       ; fully-qualified     # 👨‍🚀 E4.0 man astronaut
+1F468 1F3FB 200D 1F680                                 ; fully-qualified     # 👨🏻‍🚀 E4.0 man astronaut: light skin tone
+1F468 1F3FC 200D 1F680                                 ; fully-qualified     # 👨🏼‍🚀 E4.0 man astronaut: medium-light skin tone
+1F468 1F3FD 200D 1F680                                 ; fully-qualified     # 👨🏽‍🚀 E4.0 man astronaut: medium skin tone
+1F468 1F3FE 200D 1F680                                 ; fully-qualified     # 👨🏾‍🚀 E4.0 man astronaut: medium-dark skin tone
+1F468 1F3FF 200D 1F680                                 ; fully-qualified     # 👨🏿‍🚀 E4.0 man astronaut: dark skin tone
+1F469 200D 1F680                                       ; fully-qualified     # 👩‍🚀 E4.0 woman astronaut
+1F469 1F3FB 200D 1F680                                 ; fully-qualified     # 👩🏻‍🚀 E4.0 woman astronaut: light skin tone
+1F469 1F3FC 200D 1F680                                 ; fully-qualified     # 👩🏼‍🚀 E4.0 woman astronaut: medium-light skin tone
+1F469 1F3FD 200D 1F680                                 ; fully-qualified     # 👩🏽‍🚀 E4.0 woman astronaut: medium skin tone
+1F469 1F3FE 200D 1F680                                 ; fully-qualified     # 👩🏾‍🚀 E4.0 woman astronaut: medium-dark skin tone
+1F469 1F3FF 200D 1F680                                 ; fully-qualified     # 👩🏿‍🚀 E4.0 woman astronaut: dark skin tone
+1F9D1 200D 1F692                                       ; fully-qualified     # 🧑‍🚒 E12.1 firefighter
+1F9D1 1F3FB 200D 1F692                                 ; fully-qualified     # 🧑🏻‍🚒 E12.1 firefighter: light skin tone
+1F9D1 1F3FC 200D 1F692                                 ; fully-qualified     # 🧑🏼‍🚒 E12.1 firefighter: medium-light skin tone
+1F9D1 1F3FD 200D 1F692                                 ; fully-qualified     # 🧑🏽‍🚒 E12.1 firefighter: medium skin tone
+1F9D1 1F3FE 200D 1F692                                 ; fully-qualified     # 🧑🏾‍🚒 E12.1 firefighter: medium-dark skin tone
+1F9D1 1F3FF 200D 1F692                                 ; fully-qualified     # 🧑🏿‍🚒 E12.1 firefighter: dark skin tone
+1F468 200D 1F692                                       ; fully-qualified     # 👨‍🚒 E4.0 man firefighter
+1F468 1F3FB 200D 1F692                                 ; fully-qualified     # 👨🏻‍🚒 E4.0 man firefighter: light skin tone
+1F468 1F3FC 200D 1F692                                 ; fully-qualified     # 👨🏼‍🚒 E4.0 man firefighter: medium-light skin tone
+1F468 1F3FD 200D 1F692                                 ; fully-qualified     # 👨🏽‍🚒 E4.0 man firefighter: medium skin tone
+1F468 1F3FE 200D 1F692                                 ; fully-qualified     # 👨🏾‍🚒 E4.0 man firefighter: medium-dark skin tone
+1F468 1F3FF 200D 1F692                                 ; fully-qualified     # 👨🏿‍🚒 E4.0 man firefighter: dark skin tone
+1F469 200D 1F692                                       ; fully-qualified     # 👩‍🚒 E4.0 woman firefighter
+1F469 1F3FB 200D 1F692                                 ; fully-qualified     # 👩🏻‍🚒 E4.0 woman firefighter: light skin tone
+1F469 1F3FC 200D 1F692                                 ; fully-qualified     # 👩🏼‍🚒 E4.0 woman firefighter: medium-light skin tone
+1F469 1F3FD 200D 1F692                                 ; fully-qualified     # 👩🏽‍🚒 E4.0 woman firefighter: medium skin tone
+1F469 1F3FE 200D 1F692                                 ; fully-qualified     # 👩🏾‍🚒 E4.0 woman firefighter: medium-dark skin tone
+1F469 1F3FF 200D 1F692                                 ; fully-qualified     # 👩🏿‍🚒 E4.0 woman firefighter: dark skin tone
+1F46E                                                  ; fully-qualified     # 👮 E0.6 police officer
+1F46E 1F3FB                                            ; fully-qualified     # 👮🏻 E1.0 police officer: light skin tone
+1F46E 1F3FC                                            ; fully-qualified     # 👮🏼 E1.0 police officer: medium-light skin tone
+1F46E 1F3FD                                            ; fully-qualified     # 👮🏽 E1.0 police officer: medium skin tone
+1F46E 1F3FE                                            ; fully-qualified     # 👮🏾 E1.0 police officer: medium-dark skin tone
+1F46E 1F3FF                                            ; fully-qualified     # 👮🏿 E1.0 police officer: dark skin tone
+1F46E 200D 2642 FE0F                                   ; fully-qualified     # 👮‍♂️ E4.0 man police officer
+1F46E 200D 2642                                        ; minimally-qualified # 👮‍♂ E4.0 man police officer
+1F46E 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 👮🏻‍♂️ E4.0 man police officer: light skin tone
+1F46E 1F3FB 200D 2642                                  ; minimally-qualified # 👮🏻‍♂ E4.0 man police officer: light skin tone
+1F46E 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 👮🏼‍♂️ E4.0 man police officer: medium-light skin tone
+1F46E 1F3FC 200D 2642                                  ; minimally-qualified # 👮🏼‍♂ E4.0 man police officer: medium-light skin tone
+1F46E 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 👮🏽‍♂️ E4.0 man police officer: medium skin tone
+1F46E 1F3FD 200D 2642                                  ; minimally-qualified # 👮🏽‍♂ E4.0 man police officer: medium skin tone
+1F46E 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 👮🏾‍♂️ E4.0 man police officer: medium-dark skin tone
+1F46E 1F3FE 200D 2642                                  ; minimally-qualified # 👮🏾‍♂ E4.0 man police officer: medium-dark skin tone
+1F46E 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 👮🏿‍♂️ E4.0 man police officer: dark skin tone
+1F46E 1F3FF 200D 2642                                  ; minimally-qualified # 👮🏿‍♂ E4.0 man police officer: dark skin tone
+1F46E 200D 2640 FE0F                                   ; fully-qualified     # 👮‍♀️ E4.0 woman police officer
+1F46E 200D 2640                                        ; minimally-qualified # 👮‍♀ E4.0 woman police officer
+1F46E 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 👮🏻‍♀️ E4.0 woman police officer: light skin tone
+1F46E 1F3FB 200D 2640                                  ; minimally-qualified # 👮🏻‍♀ E4.0 woman police officer: light skin tone
+1F46E 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 👮🏼‍♀️ E4.0 woman police officer: medium-light skin tone
+1F46E 1F3FC 200D 2640                                  ; minimally-qualified # 👮🏼‍♀ E4.0 woman police officer: medium-light skin tone
+1F46E 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 👮🏽‍♀️ E4.0 woman police officer: medium skin tone
+1F46E 1F3FD 200D 2640                                  ; minimally-qualified # 👮🏽‍♀ E4.0 woman police officer: medium skin tone
+1F46E 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 👮🏾‍♀️ E4.0 woman police officer: medium-dark skin tone
+1F46E 1F3FE 200D 2640                                  ; minimally-qualified # 👮🏾‍♀ E4.0 woman police officer: medium-dark skin tone
+1F46E 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 👮🏿‍♀️ E4.0 woman police officer: dark skin tone
+1F46E 1F3FF 200D 2640                                  ; minimally-qualified # 👮🏿‍♀ E4.0 woman police officer: dark skin tone
+1F575 FE0F                                             ; fully-qualified     # 🕵️ E0.7 detective
+1F575                                                  ; unqualified         # 🕵 E0.7 detective
+1F575 1F3FB                                            ; fully-qualified     # 🕵🏻 E2.0 detective: light skin tone
+1F575 1F3FC                                            ; fully-qualified     # 🕵🏼 E2.0 detective: medium-light skin tone
+1F575 1F3FD                                            ; fully-qualified     # 🕵🏽 E2.0 detective: medium skin tone
+1F575 1F3FE                                            ; fully-qualified     # 🕵🏾 E2.0 detective: medium-dark skin tone
+1F575 1F3FF                                            ; fully-qualified     # 🕵🏿 E2.0 detective: dark skin tone
+1F575 FE0F 200D 2642 FE0F                              ; fully-qualified     # 🕵️‍♂️ E4.0 man detective
+1F575 200D 2642 FE0F                                   ; unqualified         # 🕵‍♂️ E4.0 man detective
+1F575 FE0F 200D 2642                                   ; unqualified         # 🕵️‍♂ E4.0 man detective
+1F575 200D 2642                                        ; unqualified         # 🕵‍♂ E4.0 man detective
+1F575 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🕵🏻‍♂️ E4.0 man detective: light skin tone
+1F575 1F3FB 200D 2642                                  ; minimally-qualified # 🕵🏻‍♂ E4.0 man detective: light skin tone
+1F575 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🕵🏼‍♂️ E4.0 man detective: medium-light skin tone
+1F575 1F3FC 200D 2642                                  ; minimally-qualified # 🕵🏼‍♂ E4.0 man detective: medium-light skin tone
+1F575 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🕵🏽‍♂️ E4.0 man detective: medium skin tone
+1F575 1F3FD 200D 2642                                  ; minimally-qualified # 🕵🏽‍♂ E4.0 man detective: medium skin tone
+1F575 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🕵🏾‍♂️ E4.0 man detective: medium-dark skin tone
+1F575 1F3FE 200D 2642                                  ; minimally-qualified # 🕵🏾‍♂ E4.0 man detective: medium-dark skin tone
+1F575 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🕵🏿‍♂️ E4.0 man detective: dark skin tone
+1F575 1F3FF 200D 2642                                  ; minimally-qualified # 🕵🏿‍♂ E4.0 man detective: dark skin tone
+1F575 FE0F 200D 2640 FE0F                              ; fully-qualified     # 🕵️‍♀️ E4.0 woman detective
+1F575 200D 2640 FE0F                                   ; unqualified         # 🕵‍♀️ E4.0 woman detective
+1F575 FE0F 200D 2640                                   ; unqualified         # 🕵️‍♀ E4.0 woman detective
+1F575 200D 2640                                        ; unqualified         # 🕵‍♀ E4.0 woman detective
+1F575 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🕵🏻‍♀️ E4.0 woman detective: light skin tone
+1F575 1F3FB 200D 2640                                  ; minimally-qualified # 🕵🏻‍♀ E4.0 woman detective: light skin tone
+1F575 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🕵🏼‍♀️ E4.0 woman detective: medium-light skin tone
+1F575 1F3FC 200D 2640                                  ; minimally-qualified # 🕵🏼‍♀ E4.0 woman detective: medium-light skin tone
+1F575 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🕵🏽‍♀️ E4.0 woman detective: medium skin tone
+1F575 1F3FD 200D 2640                                  ; minimally-qualified # 🕵🏽‍♀ E4.0 woman detective: medium skin tone
+1F575 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🕵🏾‍♀️ E4.0 woman detective: medium-dark skin tone
+1F575 1F3FE 200D 2640                                  ; minimally-qualified # 🕵🏾‍♀ E4.0 woman detective: medium-dark skin tone
+1F575 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🕵🏿‍♀️ E4.0 woman detective: dark skin tone
+1F575 1F3FF 200D 2640                                  ; minimally-qualified # 🕵🏿‍♀ E4.0 woman detective: dark skin tone
+1F482                                                  ; fully-qualified     # 💂 E0.6 guard
+1F482 1F3FB                                            ; fully-qualified     # 💂🏻 E1.0 guard: light skin tone
+1F482 1F3FC                                            ; fully-qualified     # 💂🏼 E1.0 guard: medium-light skin tone
+1F482 1F3FD                                            ; fully-qualified     # 💂🏽 E1.0 guard: medium skin tone
+1F482 1F3FE                                            ; fully-qualified     # 💂🏾 E1.0 guard: medium-dark skin tone
+1F482 1F3FF                                            ; fully-qualified     # 💂🏿 E1.0 guard: dark skin tone
+1F482 200D 2642 FE0F                                   ; fully-qualified     # 💂‍♂️ E4.0 man guard
+1F482 200D 2642                                        ; minimally-qualified # 💂‍♂ E4.0 man guard
+1F482 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 💂🏻‍♂️ E4.0 man guard: light skin tone
+1F482 1F3FB 200D 2642                                  ; minimally-qualified # 💂🏻‍♂ E4.0 man guard: light skin tone
+1F482 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 💂🏼‍♂️ E4.0 man guard: medium-light skin tone
+1F482 1F3FC 200D 2642                                  ; minimally-qualified # 💂🏼‍♂ E4.0 man guard: medium-light skin tone
+1F482 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 💂🏽‍♂️ E4.0 man guard: medium skin tone
+1F482 1F3FD 200D 2642                                  ; minimally-qualified # 💂🏽‍♂ E4.0 man guard: medium skin tone
+1F482 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 💂🏾‍♂️ E4.0 man guard: medium-dark skin tone
+1F482 1F3FE 200D 2642                                  ; minimally-qualified # 💂🏾‍♂ E4.0 man guard: medium-dark skin tone
+1F482 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 💂🏿‍♂️ E4.0 man guard: dark skin tone
+1F482 1F3FF 200D 2642                                  ; minimally-qualified # 💂🏿‍♂ E4.0 man guard: dark skin tone
+1F482 200D 2640 FE0F                                   ; fully-qualified     # 💂‍♀️ E4.0 woman guard
+1F482 200D 2640                                        ; minimally-qualified # 💂‍♀ E4.0 woman guard
+1F482 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 💂🏻‍♀️ E4.0 woman guard: light skin tone
+1F482 1F3FB 200D 2640                                  ; minimally-qualified # 💂🏻‍♀ E4.0 woman guard: light skin tone
+1F482 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 💂🏼‍♀️ E4.0 woman guard: medium-light skin tone
+1F482 1F3FC 200D 2640                                  ; minimally-qualified # 💂🏼‍♀ E4.0 woman guard: medium-light skin tone
+1F482 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 💂🏽‍♀️ E4.0 woman guard: medium skin tone
+1F482 1F3FD 200D 2640                                  ; minimally-qualified # 💂🏽‍♀ E4.0 woman guard: medium skin tone
+1F482 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 💂🏾‍♀️ E4.0 woman guard: medium-dark skin tone
+1F482 1F3FE 200D 2640                                  ; minimally-qualified # 💂🏾‍♀ E4.0 woman guard: medium-dark skin tone
+1F482 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 💂🏿‍♀️ E4.0 woman guard: dark skin tone
+1F482 1F3FF 200D 2640                                  ; minimally-qualified # 💂🏿‍♀ E4.0 woman guard: dark skin tone
+1F977                                                  ; fully-qualified     # 🥷 E13.0 ninja
+1F977 1F3FB                                            ; fully-qualified     # 🥷🏻 E13.0 ninja: light skin tone
+1F977 1F3FC                                            ; fully-qualified     # 🥷🏼 E13.0 ninja: medium-light skin tone
+1F977 1F3FD                                            ; fully-qualified     # 🥷🏽 E13.0 ninja: medium skin tone
+1F977 1F3FE                                            ; fully-qualified     # 🥷🏾 E13.0 ninja: medium-dark skin tone
+1F977 1F3FF                                            ; fully-qualified     # 🥷🏿 E13.0 ninja: dark skin tone
+1F477                                                  ; fully-qualified     # 👷 E0.6 construction worker
+1F477 1F3FB                                            ; fully-qualified     # 👷🏻 E1.0 construction worker: light skin tone
+1F477 1F3FC                                            ; fully-qualified     # 👷🏼 E1.0 construction worker: medium-light skin tone
+1F477 1F3FD                                            ; fully-qualified     # 👷🏽 E1.0 construction worker: medium skin tone
+1F477 1F3FE                                            ; fully-qualified     # 👷🏾 E1.0 construction worker: medium-dark skin tone
+1F477 1F3FF                                            ; fully-qualified     # 👷🏿 E1.0 construction worker: dark skin tone
+1F477 200D 2642 FE0F                                   ; fully-qualified     # 👷‍♂️ E4.0 man construction worker
+1F477 200D 2642                                        ; minimally-qualified # 👷‍♂ E4.0 man construction worker
+1F477 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 👷🏻‍♂️ E4.0 man construction worker: light skin tone
+1F477 1F3FB 200D 2642                                  ; minimally-qualified # 👷🏻‍♂ E4.0 man construction worker: light skin tone
+1F477 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 👷🏼‍♂️ E4.0 man construction worker: medium-light skin tone
+1F477 1F3FC 200D 2642                                  ; minimally-qualified # 👷🏼‍♂ E4.0 man construction worker: medium-light skin tone
+1F477 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 👷🏽‍♂️ E4.0 man construction worker: medium skin tone
+1F477 1F3FD 200D 2642                                  ; minimally-qualified # 👷🏽‍♂ E4.0 man construction worker: medium skin tone
+1F477 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 👷🏾‍♂️ E4.0 man construction worker: medium-dark skin tone
+1F477 1F3FE 200D 2642                                  ; minimally-qualified # 👷🏾‍♂ E4.0 man construction worker: medium-dark skin tone
+1F477 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 👷🏿‍♂️ E4.0 man construction worker: dark skin tone
+1F477 1F3FF 200D 2642                                  ; minimally-qualified # 👷🏿‍♂ E4.0 man construction worker: dark skin tone
+1F477 200D 2640 FE0F                                   ; fully-qualified     # 👷‍♀️ E4.0 woman construction worker
+1F477 200D 2640                                        ; minimally-qualified # 👷‍♀ E4.0 woman construction worker
+1F477 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 👷🏻‍♀️ E4.0 woman construction worker: light skin tone
+1F477 1F3FB 200D 2640                                  ; minimally-qualified # 👷🏻‍♀ E4.0 woman construction worker: light skin tone
+1F477 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 👷🏼‍♀️ E4.0 woman construction worker: medium-light skin tone
+1F477 1F3FC 200D 2640                                  ; minimally-qualified # 👷🏼‍♀ E4.0 woman construction worker: medium-light skin tone
+1F477 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 👷🏽‍♀️ E4.0 woman construction worker: medium skin tone
+1F477 1F3FD 200D 2640                                  ; minimally-qualified # 👷🏽‍♀ E4.0 woman construction worker: medium skin tone
+1F477 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 👷🏾‍♀️ E4.0 woman construction worker: medium-dark skin tone
+1F477 1F3FE 200D 2640                                  ; minimally-qualified # 👷🏾‍♀ E4.0 woman construction worker: medium-dark skin tone
+1F477 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 👷🏿‍♀️ E4.0 woman construction worker: dark skin tone
+1F477 1F3FF 200D 2640                                  ; minimally-qualified # 👷🏿‍♀ E4.0 woman construction worker: dark skin tone
+1F934                                                  ; fully-qualified     # 🤴 E3.0 prince
+1F934 1F3FB                                            ; fully-qualified     # 🤴🏻 E3.0 prince: light skin tone
+1F934 1F3FC                                            ; fully-qualified     # 🤴🏼 E3.0 prince: medium-light skin tone
+1F934 1F3FD                                            ; fully-qualified     # 🤴🏽 E3.0 prince: medium skin tone
+1F934 1F3FE                                            ; fully-qualified     # 🤴🏾 E3.0 prince: medium-dark skin tone
+1F934 1F3FF                                            ; fully-qualified     # 🤴🏿 E3.0 prince: dark skin tone
+1F478                                                  ; fully-qualified     # 👸 E0.6 princess
+1F478 1F3FB                                            ; fully-qualified     # 👸🏻 E1.0 princess: light skin tone
+1F478 1F3FC                                            ; fully-qualified     # 👸🏼 E1.0 princess: medium-light skin tone
+1F478 1F3FD                                            ; fully-qualified     # 👸🏽 E1.0 princess: medium skin tone
+1F478 1F3FE                                            ; fully-qualified     # 👸🏾 E1.0 princess: medium-dark skin tone
+1F478 1F3FF                                            ; fully-qualified     # 👸🏿 E1.0 princess: dark skin tone
+1F473                                                  ; fully-qualified     # 👳 E0.6 person wearing turban
+1F473 1F3FB                                            ; fully-qualified     # 👳🏻 E1.0 person wearing turban: light skin tone
+1F473 1F3FC                                            ; fully-qualified     # 👳🏼 E1.0 person wearing turban: medium-light skin tone
+1F473 1F3FD                                            ; fully-qualified     # 👳🏽 E1.0 person wearing turban: medium skin tone
+1F473 1F3FE                                            ; fully-qualified     # 👳🏾 E1.0 person wearing turban: medium-dark skin tone
+1F473 1F3FF                                            ; fully-qualified     # 👳🏿 E1.0 person wearing turban: dark skin tone
+1F473 200D 2642 FE0F                                   ; fully-qualified     # 👳‍♂️ E4.0 man wearing turban
+1F473 200D 2642                                        ; minimally-qualified # 👳‍♂ E4.0 man wearing turban
+1F473 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 👳🏻‍♂️ E4.0 man wearing turban: light skin tone
+1F473 1F3FB 200D 2642                                  ; minimally-qualified # 👳🏻‍♂ E4.0 man wearing turban: light skin tone
+1F473 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 👳🏼‍♂️ E4.0 man wearing turban: medium-light skin tone
+1F473 1F3FC 200D 2642                                  ; minimally-qualified # 👳🏼‍♂ E4.0 man wearing turban: medium-light skin tone
+1F473 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 👳🏽‍♂️ E4.0 man wearing turban: medium skin tone
+1F473 1F3FD 200D 2642                                  ; minimally-qualified # 👳🏽‍♂ E4.0 man wearing turban: medium skin tone
+1F473 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 👳🏾‍♂️ E4.0 man wearing turban: medium-dark skin tone
+1F473 1F3FE 200D 2642                                  ; minimally-qualified # 👳🏾‍♂ E4.0 man wearing turban: medium-dark skin tone
+1F473 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 👳🏿‍♂️ E4.0 man wearing turban: dark skin tone
+1F473 1F3FF 200D 2642                                  ; minimally-qualified # 👳🏿‍♂ E4.0 man wearing turban: dark skin tone
+1F473 200D 2640 FE0F                                   ; fully-qualified     # 👳‍♀️ E4.0 woman wearing turban
+1F473 200D 2640                                        ; minimally-qualified # 👳‍♀ E4.0 woman wearing turban
+1F473 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 👳🏻‍♀️ E4.0 woman wearing turban: light skin tone
+1F473 1F3FB 200D 2640                                  ; minimally-qualified # 👳🏻‍♀ E4.0 woman wearing turban: light skin tone
+1F473 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 👳🏼‍♀️ E4.0 woman wearing turban: medium-light skin tone
+1F473 1F3FC 200D 2640                                  ; minimally-qualified # 👳🏼‍♀ E4.0 woman wearing turban: medium-light skin tone
+1F473 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 👳🏽‍♀️ E4.0 woman wearing turban: medium skin tone
+1F473 1F3FD 200D 2640                                  ; minimally-qualified # 👳🏽‍♀ E4.0 woman wearing turban: medium skin tone
+1F473 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 👳🏾‍♀️ E4.0 woman wearing turban: medium-dark skin tone
+1F473 1F3FE 200D 2640                                  ; minimally-qualified # 👳🏾‍♀ E4.0 woman wearing turban: medium-dark skin tone
+1F473 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 👳🏿‍♀️ E4.0 woman wearing turban: dark skin tone
+1F473 1F3FF 200D 2640                                  ; minimally-qualified # 👳🏿‍♀ E4.0 woman wearing turban: dark skin tone
+1F472                                                  ; fully-qualified     # 👲 E0.6 person with skullcap
+1F472 1F3FB                                            ; fully-qualified     # 👲🏻 E1.0 person with skullcap: light skin tone
+1F472 1F3FC                                            ; fully-qualified     # 👲🏼 E1.0 person with skullcap: medium-light skin tone
+1F472 1F3FD                                            ; fully-qualified     # 👲🏽 E1.0 person with skullcap: medium skin tone
+1F472 1F3FE                                            ; fully-qualified     # 👲🏾 E1.0 person with skullcap: medium-dark skin tone
+1F472 1F3FF                                            ; fully-qualified     # 👲🏿 E1.0 person with skullcap: dark skin tone
+1F9D5                                                  ; fully-qualified     # 🧕 E5.0 woman with headscarf
+1F9D5 1F3FB                                            ; fully-qualified     # 🧕🏻 E5.0 woman with headscarf: light skin tone
+1F9D5 1F3FC                                            ; fully-qualified     # 🧕🏼 E5.0 woman with headscarf: medium-light skin tone
+1F9D5 1F3FD                                            ; fully-qualified     # 🧕🏽 E5.0 woman with headscarf: medium skin tone
+1F9D5 1F3FE                                            ; fully-qualified     # 🧕🏾 E5.0 woman with headscarf: medium-dark skin tone
+1F9D5 1F3FF                                            ; fully-qualified     # 🧕🏿 E5.0 woman with headscarf: dark skin tone
+1F935                                                  ; fully-qualified     # 🤵 E3.0 person in tuxedo
+1F935 1F3FB                                            ; fully-qualified     # 🤵🏻 E3.0 person in tuxedo: light skin tone
+1F935 1F3FC                                            ; fully-qualified     # 🤵🏼 E3.0 person in tuxedo: medium-light skin tone
+1F935 1F3FD                                            ; fully-qualified     # 🤵🏽 E3.0 person in tuxedo: medium skin tone
+1F935 1F3FE                                            ; fully-qualified     # 🤵🏾 E3.0 person in tuxedo: medium-dark skin tone
+1F935 1F3FF                                            ; fully-qualified     # 🤵🏿 E3.0 person in tuxedo: dark skin tone
+1F935 200D 2642 FE0F                                   ; fully-qualified     # 🤵‍♂️ E13.0 man in tuxedo
+1F935 200D 2642                                        ; minimally-qualified # 🤵‍♂ E13.0 man in tuxedo
+1F935 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🤵🏻‍♂️ E13.0 man in tuxedo: light skin tone
+1F935 1F3FB 200D 2642                                  ; minimally-qualified # 🤵🏻‍♂ E13.0 man in tuxedo: light skin tone
+1F935 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🤵🏼‍♂️ E13.0 man in tuxedo: medium-light skin tone
+1F935 1F3FC 200D 2642                                  ; minimally-qualified # 🤵🏼‍♂ E13.0 man in tuxedo: medium-light skin tone
+1F935 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🤵🏽‍♂️ E13.0 man in tuxedo: medium skin tone
+1F935 1F3FD 200D 2642                                  ; minimally-qualified # 🤵🏽‍♂ E13.0 man in tuxedo: medium skin tone
+1F935 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🤵🏾‍♂️ E13.0 man in tuxedo: medium-dark skin tone
+1F935 1F3FE 200D 2642                                  ; minimally-qualified # 🤵🏾‍♂ E13.0 man in tuxedo: medium-dark skin tone
+1F935 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🤵🏿‍♂️ E13.0 man in tuxedo: dark skin tone
+1F935 1F3FF 200D 2642                                  ; minimally-qualified # 🤵🏿‍♂ E13.0 man in tuxedo: dark skin tone
+1F935 200D 2640 FE0F                                   ; fully-qualified     # 🤵‍♀️ E13.0 woman in tuxedo
+1F935 200D 2640                                        ; minimally-qualified # 🤵‍♀ E13.0 woman in tuxedo
+1F935 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🤵🏻‍♀️ E13.0 woman in tuxedo: light skin tone
+1F935 1F3FB 200D 2640                                  ; minimally-qualified # 🤵🏻‍♀ E13.0 woman in tuxedo: light skin tone
+1F935 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🤵🏼‍♀️ E13.0 woman in tuxedo: medium-light skin tone
+1F935 1F3FC 200D 2640                                  ; minimally-qualified # 🤵🏼‍♀ E13.0 woman in tuxedo: medium-light skin tone
+1F935 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🤵🏽‍♀️ E13.0 woman in tuxedo: medium skin tone
+1F935 1F3FD 200D 2640                                  ; minimally-qualified # 🤵🏽‍♀ E13.0 woman in tuxedo: medium skin tone
+1F935 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🤵🏾‍♀️ E13.0 woman in tuxedo: medium-dark skin tone
+1F935 1F3FE 200D 2640                                  ; minimally-qualified # 🤵🏾‍♀ E13.0 woman in tuxedo: medium-dark skin tone
+1F935 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🤵🏿‍♀️ E13.0 woman in tuxedo: dark skin tone
+1F935 1F3FF 200D 2640                                  ; minimally-qualified # 🤵🏿‍♀ E13.0 woman in tuxedo: dark skin tone
+1F470                                                  ; fully-qualified     # 👰 E0.6 person with veil
+1F470 1F3FB                                            ; fully-qualified     # 👰🏻 E1.0 person with veil: light skin tone
+1F470 1F3FC                                            ; fully-qualified     # 👰🏼 E1.0 person with veil: medium-light skin tone
+1F470 1F3FD                                            ; fully-qualified     # 👰🏽 E1.0 person with veil: medium skin tone
+1F470 1F3FE                                            ; fully-qualified     # 👰🏾 E1.0 person with veil: medium-dark skin tone
+1F470 1F3FF                                            ; fully-qualified     # 👰🏿 E1.0 person with veil: dark skin tone
+1F470 200D 2642 FE0F                                   ; fully-qualified     # 👰‍♂️ E13.0 man with veil
+1F470 200D 2642                                        ; minimally-qualified # 👰‍♂ E13.0 man with veil
+1F470 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 👰🏻‍♂️ E13.0 man with veil: light skin tone
+1F470 1F3FB 200D 2642                                  ; minimally-qualified # 👰🏻‍♂ E13.0 man with veil: light skin tone
+1F470 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 👰🏼‍♂️ E13.0 man with veil: medium-light skin tone
+1F470 1F3FC 200D 2642                                  ; minimally-qualified # 👰🏼‍♂ E13.0 man with veil: medium-light skin tone
+1F470 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 👰🏽‍♂️ E13.0 man with veil: medium skin tone
+1F470 1F3FD 200D 2642                                  ; minimally-qualified # 👰🏽‍♂ E13.0 man with veil: medium skin tone
+1F470 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 👰🏾‍♂️ E13.0 man with veil: medium-dark skin tone
+1F470 1F3FE 200D 2642                                  ; minimally-qualified # 👰🏾‍♂ E13.0 man with veil: medium-dark skin tone
+1F470 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 👰🏿‍♂️ E13.0 man with veil: dark skin tone
+1F470 1F3FF 200D 2642                                  ; minimally-qualified # 👰🏿‍♂ E13.0 man with veil: dark skin tone
+1F470 200D 2640 FE0F                                   ; fully-qualified     # 👰‍♀️ E13.0 woman with veil
+1F470 200D 2640                                        ; minimally-qualified # 👰‍♀ E13.0 woman with veil
+1F470 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 👰🏻‍♀️ E13.0 woman with veil: light skin tone
+1F470 1F3FB 200D 2640                                  ; minimally-qualified # 👰🏻‍♀ E13.0 woman with veil: light skin tone
+1F470 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 👰🏼‍♀️ E13.0 woman with veil: medium-light skin tone
+1F470 1F3FC 200D 2640                                  ; minimally-qualified # 👰🏼‍♀ E13.0 woman with veil: medium-light skin tone
+1F470 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 👰🏽‍♀️ E13.0 woman with veil: medium skin tone
+1F470 1F3FD 200D 2640                                  ; minimally-qualified # 👰🏽‍♀ E13.0 woman with veil: medium skin tone
+1F470 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 👰🏾‍♀️ E13.0 woman with veil: medium-dark skin tone
+1F470 1F3FE 200D 2640                                  ; minimally-qualified # 👰🏾‍♀ E13.0 woman with veil: medium-dark skin tone
+1F470 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 👰🏿‍♀️ E13.0 woman with veil: dark skin tone
+1F470 1F3FF 200D 2640                                  ; minimally-qualified # 👰🏿‍♀ E13.0 woman with veil: dark skin tone
+1F930                                                  ; fully-qualified     # 🤰 E3.0 pregnant woman
+1F930 1F3FB                                            ; fully-qualified     # 🤰🏻 E3.0 pregnant woman: light skin tone
+1F930 1F3FC                                            ; fully-qualified     # 🤰🏼 E3.0 pregnant woman: medium-light skin tone
+1F930 1F3FD                                            ; fully-qualified     # 🤰🏽 E3.0 pregnant woman: medium skin tone
+1F930 1F3FE                                            ; fully-qualified     # 🤰🏾 E3.0 pregnant woman: medium-dark skin tone
+1F930 1F3FF                                            ; fully-qualified     # 🤰🏿 E3.0 pregnant woman: dark skin tone
+1F931                                                  ; fully-qualified     # 🤱 E5.0 breast-feeding
+1F931 1F3FB                                            ; fully-qualified     # 🤱🏻 E5.0 breast-feeding: light skin tone
+1F931 1F3FC                                            ; fully-qualified     # 🤱🏼 E5.0 breast-feeding: medium-light skin tone
+1F931 1F3FD                                            ; fully-qualified     # 🤱🏽 E5.0 breast-feeding: medium skin tone
+1F931 1F3FE                                            ; fully-qualified     # 🤱🏾 E5.0 breast-feeding: medium-dark skin tone
+1F931 1F3FF                                            ; fully-qualified     # 🤱🏿 E5.0 breast-feeding: dark skin tone
+1F469 200D 1F37C                                       ; fully-qualified     # 👩‍🍼 E13.0 woman feeding baby
+1F469 1F3FB 200D 1F37C                                 ; fully-qualified     # 👩🏻‍🍼 E13.0 woman feeding baby: light skin tone
+1F469 1F3FC 200D 1F37C                                 ; fully-qualified     # 👩🏼‍🍼 E13.0 woman feeding baby: medium-light skin tone
+1F469 1F3FD 200D 1F37C                                 ; fully-qualified     # 👩🏽‍🍼 E13.0 woman feeding baby: medium skin tone
+1F469 1F3FE 200D 1F37C                                 ; fully-qualified     # 👩🏾‍🍼 E13.0 woman feeding baby: medium-dark skin tone
+1F469 1F3FF 200D 1F37C                                 ; fully-qualified     # 👩🏿‍🍼 E13.0 woman feeding baby: dark skin tone
+1F468 200D 1F37C                                       ; fully-qualified     # 👨‍🍼 E13.0 man feeding baby
+1F468 1F3FB 200D 1F37C                                 ; fully-qualified     # 👨🏻‍🍼 E13.0 man feeding baby: light skin tone
+1F468 1F3FC 200D 1F37C                                 ; fully-qualified     # 👨🏼‍🍼 E13.0 man feeding baby: medium-light skin tone
+1F468 1F3FD 200D 1F37C                                 ; fully-qualified     # 👨🏽‍🍼 E13.0 man feeding baby: medium skin tone
+1F468 1F3FE 200D 1F37C                                 ; fully-qualified     # 👨🏾‍🍼 E13.0 man feeding baby: medium-dark skin tone
+1F468 1F3FF 200D 1F37C                                 ; fully-qualified     # 👨🏿‍🍼 E13.0 man feeding baby: dark skin tone
+1F9D1 200D 1F37C                                       ; fully-qualified     # 🧑‍🍼 E13.0 person feeding baby
+1F9D1 1F3FB 200D 1F37C                                 ; fully-qualified     # 🧑🏻‍🍼 E13.0 person feeding baby: light skin tone
+1F9D1 1F3FC 200D 1F37C                                 ; fully-qualified     # 🧑🏼‍🍼 E13.0 person feeding baby: medium-light skin tone
+1F9D1 1F3FD 200D 1F37C                                 ; fully-qualified     # 🧑🏽‍🍼 E13.0 person feeding baby: medium skin tone
+1F9D1 1F3FE 200D 1F37C                                 ; fully-qualified     # 🧑🏾‍🍼 E13.0 person feeding baby: medium-dark skin tone
+1F9D1 1F3FF 200D 1F37C                                 ; fully-qualified     # 🧑🏿‍🍼 E13.0 person feeding baby: dark skin tone
 
 # subgroup: person-fantasy
-1F47C                                      ; fully-qualified     # 👼 E0.6 baby angel
-1F47C 1F3FB                                ; fully-qualified     # 👼🏻 E1.0 baby angel: light skin tone
-1F47C 1F3FC                                ; fully-qualified     # 👼🏼 E1.0 baby angel: medium-light skin tone
-1F47C 1F3FD                                ; fully-qualified     # 👼🏽 E1.0 baby angel: medium skin tone
-1F47C 1F3FE                                ; fully-qualified     # 👼🏾 E1.0 baby angel: medium-dark skin tone
-1F47C 1F3FF                                ; fully-qualified     # 👼🏿 E1.0 baby angel: dark skin tone
-1F385                                      ; fully-qualified     # 🎅 E0.6 Santa Claus
-1F385 1F3FB                                ; fully-qualified     # 🎅🏻 E1.0 Santa Claus: light skin tone
-1F385 1F3FC                                ; fully-qualified     # 🎅🏼 E1.0 Santa Claus: medium-light skin tone
-1F385 1F3FD                                ; fully-qualified     # 🎅🏽 E1.0 Santa Claus: medium skin tone
-1F385 1F3FE                                ; fully-qualified     # 🎅🏾 E1.0 Santa Claus: medium-dark skin tone
-1F385 1F3FF                                ; fully-qualified     # 🎅🏿 E1.0 Santa Claus: dark skin tone
-1F936                                      ; fully-qualified     # 🤶 E3.0 Mrs. Claus
-1F936 1F3FB                                ; fully-qualified     # 🤶🏻 E3.0 Mrs. Claus: light skin tone
-1F936 1F3FC                                ; fully-qualified     # 🤶🏼 E3.0 Mrs. Claus: medium-light skin tone
-1F936 1F3FD                                ; fully-qualified     # 🤶🏽 E3.0 Mrs. Claus: medium skin tone
-1F936 1F3FE                                ; fully-qualified     # 🤶🏾 E3.0 Mrs. Claus: medium-dark skin tone
-1F936 1F3FF                                ; fully-qualified     # 🤶🏿 E3.0 Mrs. Claus: dark skin tone
-1F9D1 200D 1F384                           ; fully-qualified     # 🧑‍🎄 E13.0 mx claus
-1F9D1 1F3FB 200D 1F384                     ; fully-qualified     # 🧑🏻‍🎄 E13.0 mx claus: light skin tone
-1F9D1 1F3FC 200D 1F384                     ; fully-qualified     # 🧑🏼‍🎄 E13.0 mx claus: medium-light skin tone
-1F9D1 1F3FD 200D 1F384                     ; fully-qualified     # 🧑🏽‍🎄 E13.0 mx claus: medium skin tone
-1F9D1 1F3FE 200D 1F384                     ; fully-qualified     # 🧑🏾‍🎄 E13.0 mx claus: medium-dark skin tone
-1F9D1 1F3FF 200D 1F384                     ; fully-qualified     # 🧑🏿‍🎄 E13.0 mx claus: dark skin tone
-1F9B8                                      ; fully-qualified     # 🦸 E11.0 superhero
-1F9B8 1F3FB                                ; fully-qualified     # 🦸🏻 E11.0 superhero: light skin tone
-1F9B8 1F3FC                                ; fully-qualified     # 🦸🏼 E11.0 superhero: medium-light skin tone
-1F9B8 1F3FD                                ; fully-qualified     # 🦸🏽 E11.0 superhero: medium skin tone
-1F9B8 1F3FE                                ; fully-qualified     # 🦸🏾 E11.0 superhero: medium-dark skin tone
-1F9B8 1F3FF                                ; fully-qualified     # 🦸🏿 E11.0 superhero: dark skin tone
-1F9B8 200D 2642 FE0F                       ; fully-qualified     # 🦸‍♂️ E11.0 man superhero
-1F9B8 200D 2642                            ; minimally-qualified # 🦸‍♂ E11.0 man superhero
-1F9B8 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🦸🏻‍♂️ E11.0 man superhero: light skin tone
-1F9B8 1F3FB 200D 2642                      ; minimally-qualified # 🦸🏻‍♂ E11.0 man superhero: light skin tone
-1F9B8 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🦸🏼‍♂️ E11.0 man superhero: medium-light skin tone
-1F9B8 1F3FC 200D 2642                      ; minimally-qualified # 🦸🏼‍♂ E11.0 man superhero: medium-light skin tone
-1F9B8 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🦸🏽‍♂️ E11.0 man superhero: medium skin tone
-1F9B8 1F3FD 200D 2642                      ; minimally-qualified # 🦸🏽‍♂ E11.0 man superhero: medium skin tone
-1F9B8 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🦸🏾‍♂️ E11.0 man superhero: medium-dark skin tone
-1F9B8 1F3FE 200D 2642                      ; minimally-qualified # 🦸🏾‍♂ E11.0 man superhero: medium-dark skin tone
-1F9B8 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🦸🏿‍♂️ E11.0 man superhero: dark skin tone
-1F9B8 1F3FF 200D 2642                      ; minimally-qualified # 🦸🏿‍♂ E11.0 man superhero: dark skin tone
-1F9B8 200D 2640 FE0F                       ; fully-qualified     # 🦸‍♀️ E11.0 woman superhero
-1F9B8 200D 2640                            ; minimally-qualified # 🦸‍♀ E11.0 woman superhero
-1F9B8 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🦸🏻‍♀️ E11.0 woman superhero: light skin tone
-1F9B8 1F3FB 200D 2640                      ; minimally-qualified # 🦸🏻‍♀ E11.0 woman superhero: light skin tone
-1F9B8 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🦸🏼‍♀️ E11.0 woman superhero: medium-light skin tone
-1F9B8 1F3FC 200D 2640                      ; minimally-qualified # 🦸🏼‍♀ E11.0 woman superhero: medium-light skin tone
-1F9B8 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🦸🏽‍♀️ E11.0 woman superhero: medium skin tone
-1F9B8 1F3FD 200D 2640                      ; minimally-qualified # 🦸🏽‍♀ E11.0 woman superhero: medium skin tone
-1F9B8 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🦸🏾‍♀️ E11.0 woman superhero: medium-dark skin tone
-1F9B8 1F3FE 200D 2640                      ; minimally-qualified # 🦸🏾‍♀ E11.0 woman superhero: medium-dark skin tone
-1F9B8 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🦸🏿‍♀️ E11.0 woman superhero: dark skin tone
-1F9B8 1F3FF 200D 2640                      ; minimally-qualified # 🦸🏿‍♀ E11.0 woman superhero: dark skin tone
-1F9B9                                      ; fully-qualified     # 🦹 E11.0 supervillain
-1F9B9 1F3FB                                ; fully-qualified     # 🦹🏻 E11.0 supervillain: light skin tone
-1F9B9 1F3FC                                ; fully-qualified     # 🦹🏼 E11.0 supervillain: medium-light skin tone
-1F9B9 1F3FD                                ; fully-qualified     # 🦹🏽 E11.0 supervillain: medium skin tone
-1F9B9 1F3FE                                ; fully-qualified     # 🦹🏾 E11.0 supervillain: medium-dark skin tone
-1F9B9 1F3FF                                ; fully-qualified     # 🦹🏿 E11.0 supervillain: dark skin tone
-1F9B9 200D 2642 FE0F                       ; fully-qualified     # 🦹‍♂️ E11.0 man supervillain
-1F9B9 200D 2642                            ; minimally-qualified # 🦹‍♂ E11.0 man supervillain
-1F9B9 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🦹🏻‍♂️ E11.0 man supervillain: light skin tone
-1F9B9 1F3FB 200D 2642                      ; minimally-qualified # 🦹🏻‍♂ E11.0 man supervillain: light skin tone
-1F9B9 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🦹🏼‍♂️ E11.0 man supervillain: medium-light skin tone
-1F9B9 1F3FC 200D 2642                      ; minimally-qualified # 🦹🏼‍♂ E11.0 man supervillain: medium-light skin tone
-1F9B9 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🦹🏽‍♂️ E11.0 man supervillain: medium skin tone
-1F9B9 1F3FD 200D 2642                      ; minimally-qualified # 🦹🏽‍♂ E11.0 man supervillain: medium skin tone
-1F9B9 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🦹🏾‍♂️ E11.0 man supervillain: medium-dark skin tone
-1F9B9 1F3FE 200D 2642                      ; minimally-qualified # 🦹🏾‍♂ E11.0 man supervillain: medium-dark skin tone
-1F9B9 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🦹🏿‍♂️ E11.0 man supervillain: dark skin tone
-1F9B9 1F3FF 200D 2642                      ; minimally-qualified # 🦹🏿‍♂ E11.0 man supervillain: dark skin tone
-1F9B9 200D 2640 FE0F                       ; fully-qualified     # 🦹‍♀️ E11.0 woman supervillain
-1F9B9 200D 2640                            ; minimally-qualified # 🦹‍♀ E11.0 woman supervillain
-1F9B9 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🦹🏻‍♀️ E11.0 woman supervillain: light skin tone
-1F9B9 1F3FB 200D 2640                      ; minimally-qualified # 🦹🏻‍♀ E11.0 woman supervillain: light skin tone
-1F9B9 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🦹🏼‍♀️ E11.0 woman supervillain: medium-light skin tone
-1F9B9 1F3FC 200D 2640                      ; minimally-qualified # 🦹🏼‍♀ E11.0 woman supervillain: medium-light skin tone
-1F9B9 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🦹🏽‍♀️ E11.0 woman supervillain: medium skin tone
-1F9B9 1F3FD 200D 2640                      ; minimally-qualified # 🦹🏽‍♀ E11.0 woman supervillain: medium skin tone
-1F9B9 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🦹🏾‍♀️ E11.0 woman supervillain: medium-dark skin tone
-1F9B9 1F3FE 200D 2640                      ; minimally-qualified # 🦹🏾‍♀ E11.0 woman supervillain: medium-dark skin tone
-1F9B9 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🦹🏿‍♀️ E11.0 woman supervillain: dark skin tone
-1F9B9 1F3FF 200D 2640                      ; minimally-qualified # 🦹🏿‍♀ E11.0 woman supervillain: dark skin tone
-1F9D9                                      ; fully-qualified     # 🧙 E5.0 mage
-1F9D9 1F3FB                                ; fully-qualified     # 🧙🏻 E5.0 mage: light skin tone
-1F9D9 1F3FC                                ; fully-qualified     # 🧙🏼 E5.0 mage: medium-light skin tone
-1F9D9 1F3FD                                ; fully-qualified     # 🧙🏽 E5.0 mage: medium skin tone
-1F9D9 1F3FE                                ; fully-qualified     # 🧙🏾 E5.0 mage: medium-dark skin tone
-1F9D9 1F3FF                                ; fully-qualified     # 🧙🏿 E5.0 mage: dark skin tone
-1F9D9 200D 2642 FE0F                       ; fully-qualified     # 🧙‍♂️ E5.0 man mage
-1F9D9 200D 2642                            ; minimally-qualified # 🧙‍♂ E5.0 man mage
-1F9D9 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🧙🏻‍♂️ E5.0 man mage: light skin tone
-1F9D9 1F3FB 200D 2642                      ; minimally-qualified # 🧙🏻‍♂ E5.0 man mage: light skin tone
-1F9D9 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🧙🏼‍♂️ E5.0 man mage: medium-light skin tone
-1F9D9 1F3FC 200D 2642                      ; minimally-qualified # 🧙🏼‍♂ E5.0 man mage: medium-light skin tone
-1F9D9 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🧙🏽‍♂️ E5.0 man mage: medium skin tone
-1F9D9 1F3FD 200D 2642                      ; minimally-qualified # 🧙🏽‍♂ E5.0 man mage: medium skin tone
-1F9D9 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🧙🏾‍♂️ E5.0 man mage: medium-dark skin tone
-1F9D9 1F3FE 200D 2642                      ; minimally-qualified # 🧙🏾‍♂ E5.0 man mage: medium-dark skin tone
-1F9D9 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🧙🏿‍♂️ E5.0 man mage: dark skin tone
-1F9D9 1F3FF 200D 2642                      ; minimally-qualified # 🧙🏿‍♂ E5.0 man mage: dark skin tone
-1F9D9 200D 2640 FE0F                       ; fully-qualified     # 🧙‍♀️ E5.0 woman mage
-1F9D9 200D 2640                            ; minimally-qualified # 🧙‍♀ E5.0 woman mage
-1F9D9 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🧙🏻‍♀️ E5.0 woman mage: light skin tone
-1F9D9 1F3FB 200D 2640                      ; minimally-qualified # 🧙🏻‍♀ E5.0 woman mage: light skin tone
-1F9D9 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🧙🏼‍♀️ E5.0 woman mage: medium-light skin tone
-1F9D9 1F3FC 200D 2640                      ; minimally-qualified # 🧙🏼‍♀ E5.0 woman mage: medium-light skin tone
-1F9D9 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🧙🏽‍♀️ E5.0 woman mage: medium skin tone
-1F9D9 1F3FD 200D 2640                      ; minimally-qualified # 🧙🏽‍♀ E5.0 woman mage: medium skin tone
-1F9D9 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🧙🏾‍♀️ E5.0 woman mage: medium-dark skin tone
-1F9D9 1F3FE 200D 2640                      ; minimally-qualified # 🧙🏾‍♀ E5.0 woman mage: medium-dark skin tone
-1F9D9 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🧙🏿‍♀️ E5.0 woman mage: dark skin tone
-1F9D9 1F3FF 200D 2640                      ; minimally-qualified # 🧙🏿‍♀ E5.0 woman mage: dark skin tone
-1F9DA                                      ; fully-qualified     # 🧚 E5.0 fairy
-1F9DA 1F3FB                                ; fully-qualified     # 🧚🏻 E5.0 fairy: light skin tone
-1F9DA 1F3FC                                ; fully-qualified     # 🧚🏼 E5.0 fairy: medium-light skin tone
-1F9DA 1F3FD                                ; fully-qualified     # 🧚🏽 E5.0 fairy: medium skin tone
-1F9DA 1F3FE                                ; fully-qualified     # 🧚🏾 E5.0 fairy: medium-dark skin tone
-1F9DA 1F3FF                                ; fully-qualified     # 🧚🏿 E5.0 fairy: dark skin tone
-1F9DA 200D 2642 FE0F                       ; fully-qualified     # 🧚‍♂️ E5.0 man fairy
-1F9DA 200D 2642                            ; minimally-qualified # 🧚‍♂ E5.0 man fairy
-1F9DA 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🧚🏻‍♂️ E5.0 man fairy: light skin tone
-1F9DA 1F3FB 200D 2642                      ; minimally-qualified # 🧚🏻‍♂ E5.0 man fairy: light skin tone
-1F9DA 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🧚🏼‍♂️ E5.0 man fairy: medium-light skin tone
-1F9DA 1F3FC 200D 2642                      ; minimally-qualified # 🧚🏼‍♂ E5.0 man fairy: medium-light skin tone
-1F9DA 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🧚🏽‍♂️ E5.0 man fairy: medium skin tone
-1F9DA 1F3FD 200D 2642                      ; minimally-qualified # 🧚🏽‍♂ E5.0 man fairy: medium skin tone
-1F9DA 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🧚🏾‍♂️ E5.0 man fairy: medium-dark skin tone
-1F9DA 1F3FE 200D 2642                      ; minimally-qualified # 🧚🏾‍♂ E5.0 man fairy: medium-dark skin tone
-1F9DA 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🧚🏿‍♂️ E5.0 man fairy: dark skin tone
-1F9DA 1F3FF 200D 2642                      ; minimally-qualified # 🧚🏿‍♂ E5.0 man fairy: dark skin tone
-1F9DA 200D 2640 FE0F                       ; fully-qualified     # 🧚‍♀️ E5.0 woman fairy
-1F9DA 200D 2640                            ; minimally-qualified # 🧚‍♀ E5.0 woman fairy
-1F9DA 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🧚🏻‍♀️ E5.0 woman fairy: light skin tone
-1F9DA 1F3FB 200D 2640                      ; minimally-qualified # 🧚🏻‍♀ E5.0 woman fairy: light skin tone
-1F9DA 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🧚🏼‍♀️ E5.0 woman fairy: medium-light skin tone
-1F9DA 1F3FC 200D 2640                      ; minimally-qualified # 🧚🏼‍♀ E5.0 woman fairy: medium-light skin tone
-1F9DA 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🧚🏽‍♀️ E5.0 woman fairy: medium skin tone
-1F9DA 1F3FD 200D 2640                      ; minimally-qualified # 🧚🏽‍♀ E5.0 woman fairy: medium skin tone
-1F9DA 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🧚🏾‍♀️ E5.0 woman fairy: medium-dark skin tone
-1F9DA 1F3FE 200D 2640                      ; minimally-qualified # 🧚🏾‍♀ E5.0 woman fairy: medium-dark skin tone
-1F9DA 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🧚🏿‍♀️ E5.0 woman fairy: dark skin tone
-1F9DA 1F3FF 200D 2640                      ; minimally-qualified # 🧚🏿‍♀ E5.0 woman fairy: dark skin tone
-1F9DB                                      ; fully-qualified     # 🧛 E5.0 vampire
-1F9DB 1F3FB                                ; fully-qualified     # 🧛🏻 E5.0 vampire: light skin tone
-1F9DB 1F3FC                                ; fully-qualified     # 🧛🏼 E5.0 vampire: medium-light skin tone
-1F9DB 1F3FD                                ; fully-qualified     # 🧛🏽 E5.0 vampire: medium skin tone
-1F9DB 1F3FE                                ; fully-qualified     # 🧛🏾 E5.0 vampire: medium-dark skin tone
-1F9DB 1F3FF                                ; fully-qualified     # 🧛🏿 E5.0 vampire: dark skin tone
-1F9DB 200D 2642 FE0F                       ; fully-qualified     # 🧛‍♂️ E5.0 man vampire
-1F9DB 200D 2642                            ; minimally-qualified # 🧛‍♂ E5.0 man vampire
-1F9DB 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🧛🏻‍♂️ E5.0 man vampire: light skin tone
-1F9DB 1F3FB 200D 2642                      ; minimally-qualified # 🧛🏻‍♂ E5.0 man vampire: light skin tone
-1F9DB 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🧛🏼‍♂️ E5.0 man vampire: medium-light skin tone
-1F9DB 1F3FC 200D 2642                      ; minimally-qualified # 🧛🏼‍♂ E5.0 man vampire: medium-light skin tone
-1F9DB 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🧛🏽‍♂️ E5.0 man vampire: medium skin tone
-1F9DB 1F3FD 200D 2642                      ; minimally-qualified # 🧛🏽‍♂ E5.0 man vampire: medium skin tone
-1F9DB 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🧛🏾‍♂️ E5.0 man vampire: medium-dark skin tone
-1F9DB 1F3FE 200D 2642                      ; minimally-qualified # 🧛🏾‍♂ E5.0 man vampire: medium-dark skin tone
-1F9DB 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🧛🏿‍♂️ E5.0 man vampire: dark skin tone
-1F9DB 1F3FF 200D 2642                      ; minimally-qualified # 🧛🏿‍♂ E5.0 man vampire: dark skin tone
-1F9DB 200D 2640 FE0F                       ; fully-qualified     # 🧛‍♀️ E5.0 woman vampire
-1F9DB 200D 2640                            ; minimally-qualified # 🧛‍♀ E5.0 woman vampire
-1F9DB 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🧛🏻‍♀️ E5.0 woman vampire: light skin tone
-1F9DB 1F3FB 200D 2640                      ; minimally-qualified # 🧛🏻‍♀ E5.0 woman vampire: light skin tone
-1F9DB 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🧛🏼‍♀️ E5.0 woman vampire: medium-light skin tone
-1F9DB 1F3FC 200D 2640                      ; minimally-qualified # 🧛🏼‍♀ E5.0 woman vampire: medium-light skin tone
-1F9DB 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🧛🏽‍♀️ E5.0 woman vampire: medium skin tone
-1F9DB 1F3FD 200D 2640                      ; minimally-qualified # 🧛🏽‍♀ E5.0 woman vampire: medium skin tone
-1F9DB 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🧛🏾‍♀️ E5.0 woman vampire: medium-dark skin tone
-1F9DB 1F3FE 200D 2640                      ; minimally-qualified # 🧛🏾‍♀ E5.0 woman vampire: medium-dark skin tone
-1F9DB 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🧛🏿‍♀️ E5.0 woman vampire: dark skin tone
-1F9DB 1F3FF 200D 2640                      ; minimally-qualified # 🧛🏿‍♀ E5.0 woman vampire: dark skin tone
-1F9DC                                      ; fully-qualified     # 🧜 E5.0 merperson
-1F9DC 1F3FB                                ; fully-qualified     # 🧜🏻 E5.0 merperson: light skin tone
-1F9DC 1F3FC                                ; fully-qualified     # 🧜🏼 E5.0 merperson: medium-light skin tone
-1F9DC 1F3FD                                ; fully-qualified     # 🧜🏽 E5.0 merperson: medium skin tone
-1F9DC 1F3FE                                ; fully-qualified     # 🧜🏾 E5.0 merperson: medium-dark skin tone
-1F9DC 1F3FF                                ; fully-qualified     # 🧜🏿 E5.0 merperson: dark skin tone
-1F9DC 200D 2642 FE0F                       ; fully-qualified     # 🧜‍♂️ E5.0 merman
-1F9DC 200D 2642                            ; minimally-qualified # 🧜‍♂ E5.0 merman
-1F9DC 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🧜🏻‍♂️ E5.0 merman: light skin tone
-1F9DC 1F3FB 200D 2642                      ; minimally-qualified # 🧜🏻‍♂ E5.0 merman: light skin tone
-1F9DC 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🧜🏼‍♂️ E5.0 merman: medium-light skin tone
-1F9DC 1F3FC 200D 2642                      ; minimally-qualified # 🧜🏼‍♂ E5.0 merman: medium-light skin tone
-1F9DC 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🧜🏽‍♂️ E5.0 merman: medium skin tone
-1F9DC 1F3FD 200D 2642                      ; minimally-qualified # 🧜🏽‍♂ E5.0 merman: medium skin tone
-1F9DC 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🧜🏾‍♂️ E5.0 merman: medium-dark skin tone
-1F9DC 1F3FE 200D 2642                      ; minimally-qualified # 🧜🏾‍♂ E5.0 merman: medium-dark skin tone
-1F9DC 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🧜🏿‍♂️ E5.0 merman: dark skin tone
-1F9DC 1F3FF 200D 2642                      ; minimally-qualified # 🧜🏿‍♂ E5.0 merman: dark skin tone
-1F9DC 200D 2640 FE0F                       ; fully-qualified     # 🧜‍♀️ E5.0 mermaid
-1F9DC 200D 2640                            ; minimally-qualified # 🧜‍♀ E5.0 mermaid
-1F9DC 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🧜🏻‍♀️ E5.0 mermaid: light skin tone
-1F9DC 1F3FB 200D 2640                      ; minimally-qualified # 🧜🏻‍♀ E5.0 mermaid: light skin tone
-1F9DC 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🧜🏼‍♀️ E5.0 mermaid: medium-light skin tone
-1F9DC 1F3FC 200D 2640                      ; minimally-qualified # 🧜🏼‍♀ E5.0 mermaid: medium-light skin tone
-1F9DC 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🧜🏽‍♀️ E5.0 mermaid: medium skin tone
-1F9DC 1F3FD 200D 2640                      ; minimally-qualified # 🧜🏽‍♀ E5.0 mermaid: medium skin tone
-1F9DC 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🧜🏾‍♀️ E5.0 mermaid: medium-dark skin tone
-1F9DC 1F3FE 200D 2640                      ; minimally-qualified # 🧜🏾‍♀ E5.0 mermaid: medium-dark skin tone
-1F9DC 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🧜🏿‍♀️ E5.0 mermaid: dark skin tone
-1F9DC 1F3FF 200D 2640                      ; minimally-qualified # 🧜🏿‍♀ E5.0 mermaid: dark skin tone
-1F9DD                                      ; fully-qualified     # 🧝 E5.0 elf
-1F9DD 1F3FB                                ; fully-qualified     # 🧝🏻 E5.0 elf: light skin tone
-1F9DD 1F3FC                                ; fully-qualified     # 🧝🏼 E5.0 elf: medium-light skin tone
-1F9DD 1F3FD                                ; fully-qualified     # 🧝🏽 E5.0 elf: medium skin tone
-1F9DD 1F3FE                                ; fully-qualified     # 🧝🏾 E5.0 elf: medium-dark skin tone
-1F9DD 1F3FF                                ; fully-qualified     # 🧝🏿 E5.0 elf: dark skin tone
-1F9DD 200D 2642 FE0F                       ; fully-qualified     # 🧝‍♂️ E5.0 man elf
-1F9DD 200D 2642                            ; minimally-qualified # 🧝‍♂ E5.0 man elf
-1F9DD 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🧝🏻‍♂️ E5.0 man elf: light skin tone
-1F9DD 1F3FB 200D 2642                      ; minimally-qualified # 🧝🏻‍♂ E5.0 man elf: light skin tone
-1F9DD 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🧝🏼‍♂️ E5.0 man elf: medium-light skin tone
-1F9DD 1F3FC 200D 2642                      ; minimally-qualified # 🧝🏼‍♂ E5.0 man elf: medium-light skin tone
-1F9DD 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🧝🏽‍♂️ E5.0 man elf: medium skin tone
-1F9DD 1F3FD 200D 2642                      ; minimally-qualified # 🧝🏽‍♂ E5.0 man elf: medium skin tone
-1F9DD 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🧝🏾‍♂️ E5.0 man elf: medium-dark skin tone
-1F9DD 1F3FE 200D 2642                      ; minimally-qualified # 🧝🏾‍♂ E5.0 man elf: medium-dark skin tone
-1F9DD 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🧝🏿‍♂️ E5.0 man elf: dark skin tone
-1F9DD 1F3FF 200D 2642                      ; minimally-qualified # 🧝🏿‍♂ E5.0 man elf: dark skin tone
-1F9DD 200D 2640 FE0F                       ; fully-qualified     # 🧝‍♀️ E5.0 woman elf
-1F9DD 200D 2640                            ; minimally-qualified # 🧝‍♀ E5.0 woman elf
-1F9DD 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🧝🏻‍♀️ E5.0 woman elf: light skin tone
-1F9DD 1F3FB 200D 2640                      ; minimally-qualified # 🧝🏻‍♀ E5.0 woman elf: light skin tone
-1F9DD 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🧝🏼‍♀️ E5.0 woman elf: medium-light skin tone
-1F9DD 1F3FC 200D 2640                      ; minimally-qualified # 🧝🏼‍♀ E5.0 woman elf: medium-light skin tone
-1F9DD 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🧝🏽‍♀️ E5.0 woman elf: medium skin tone
-1F9DD 1F3FD 200D 2640                      ; minimally-qualified # 🧝🏽‍♀ E5.0 woman elf: medium skin tone
-1F9DD 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🧝🏾‍♀️ E5.0 woman elf: medium-dark skin tone
-1F9DD 1F3FE 200D 2640                      ; minimally-qualified # 🧝🏾‍♀ E5.0 woman elf: medium-dark skin tone
-1F9DD 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🧝🏿‍♀️ E5.0 woman elf: dark skin tone
-1F9DD 1F3FF 200D 2640                      ; minimally-qualified # 🧝🏿‍♀ E5.0 woman elf: dark skin tone
-1F9DE                                      ; fully-qualified     # 🧞 E5.0 genie
-1F9DE 200D 2642 FE0F                       ; fully-qualified     # 🧞‍♂️ E5.0 man genie
-1F9DE 200D 2642                            ; minimally-qualified # 🧞‍♂ E5.0 man genie
-1F9DE 200D 2640 FE0F                       ; fully-qualified     # 🧞‍♀️ E5.0 woman genie
-1F9DE 200D 2640                            ; minimally-qualified # 🧞‍♀ E5.0 woman genie
-1F9DF                                      ; fully-qualified     # 🧟 E5.0 zombie
-1F9DF 200D 2642 FE0F                       ; fully-qualified     # 🧟‍♂️ E5.0 man zombie
-1F9DF 200D 2642                            ; minimally-qualified # 🧟‍♂ E5.0 man zombie
-1F9DF 200D 2640 FE0F                       ; fully-qualified     # 🧟‍♀️ E5.0 woman zombie
-1F9DF 200D 2640                            ; minimally-qualified # 🧟‍♀ E5.0 woman zombie
+1F47C                                                  ; fully-qualified     # 👼 E0.6 baby angel
+1F47C 1F3FB                                            ; fully-qualified     # 👼🏻 E1.0 baby angel: light skin tone
+1F47C 1F3FC                                            ; fully-qualified     # 👼🏼 E1.0 baby angel: medium-light skin tone
+1F47C 1F3FD                                            ; fully-qualified     # 👼🏽 E1.0 baby angel: medium skin tone
+1F47C 1F3FE                                            ; fully-qualified     # 👼🏾 E1.0 baby angel: medium-dark skin tone
+1F47C 1F3FF                                            ; fully-qualified     # 👼🏿 E1.0 baby angel: dark skin tone
+1F385                                                  ; fully-qualified     # 🎅 E0.6 Santa Claus
+1F385 1F3FB                                            ; fully-qualified     # 🎅🏻 E1.0 Santa Claus: light skin tone
+1F385 1F3FC                                            ; fully-qualified     # 🎅🏼 E1.0 Santa Claus: medium-light skin tone
+1F385 1F3FD                                            ; fully-qualified     # 🎅🏽 E1.0 Santa Claus: medium skin tone
+1F385 1F3FE                                            ; fully-qualified     # 🎅🏾 E1.0 Santa Claus: medium-dark skin tone
+1F385 1F3FF                                            ; fully-qualified     # 🎅🏿 E1.0 Santa Claus: dark skin tone
+1F936                                                  ; fully-qualified     # 🤶 E3.0 Mrs. Claus
+1F936 1F3FB                                            ; fully-qualified     # 🤶🏻 E3.0 Mrs. Claus: light skin tone
+1F936 1F3FC                                            ; fully-qualified     # 🤶🏼 E3.0 Mrs. Claus: medium-light skin tone
+1F936 1F3FD                                            ; fully-qualified     # 🤶🏽 E3.0 Mrs. Claus: medium skin tone
+1F936 1F3FE                                            ; fully-qualified     # 🤶🏾 E3.0 Mrs. Claus: medium-dark skin tone
+1F936 1F3FF                                            ; fully-qualified     # 🤶🏿 E3.0 Mrs. Claus: dark skin tone
+1F9D1 200D 1F384                                       ; fully-qualified     # 🧑‍🎄 E13.0 mx claus
+1F9D1 1F3FB 200D 1F384                                 ; fully-qualified     # 🧑🏻‍🎄 E13.0 mx claus: light skin tone
+1F9D1 1F3FC 200D 1F384                                 ; fully-qualified     # 🧑🏼‍🎄 E13.0 mx claus: medium-light skin tone
+1F9D1 1F3FD 200D 1F384                                 ; fully-qualified     # 🧑🏽‍🎄 E13.0 mx claus: medium skin tone
+1F9D1 1F3FE 200D 1F384                                 ; fully-qualified     # 🧑🏾‍🎄 E13.0 mx claus: medium-dark skin tone
+1F9D1 1F3FF 200D 1F384                                 ; fully-qualified     # 🧑🏿‍🎄 E13.0 mx claus: dark skin tone
+1F9B8                                                  ; fully-qualified     # 🦸 E11.0 superhero
+1F9B8 1F3FB                                            ; fully-qualified     # 🦸🏻 E11.0 superhero: light skin tone
+1F9B8 1F3FC                                            ; fully-qualified     # 🦸🏼 E11.0 superhero: medium-light skin tone
+1F9B8 1F3FD                                            ; fully-qualified     # 🦸🏽 E11.0 superhero: medium skin tone
+1F9B8 1F3FE                                            ; fully-qualified     # 🦸🏾 E11.0 superhero: medium-dark skin tone
+1F9B8 1F3FF                                            ; fully-qualified     # 🦸🏿 E11.0 superhero: dark skin tone
+1F9B8 200D 2642 FE0F                                   ; fully-qualified     # 🦸‍♂️ E11.0 man superhero
+1F9B8 200D 2642                                        ; minimally-qualified # 🦸‍♂ E11.0 man superhero
+1F9B8 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🦸🏻‍♂️ E11.0 man superhero: light skin tone
+1F9B8 1F3FB 200D 2642                                  ; minimally-qualified # 🦸🏻‍♂ E11.0 man superhero: light skin tone
+1F9B8 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🦸🏼‍♂️ E11.0 man superhero: medium-light skin tone
+1F9B8 1F3FC 200D 2642                                  ; minimally-qualified # 🦸🏼‍♂ E11.0 man superhero: medium-light skin tone
+1F9B8 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🦸🏽‍♂️ E11.0 man superhero: medium skin tone
+1F9B8 1F3FD 200D 2642                                  ; minimally-qualified # 🦸🏽‍♂ E11.0 man superhero: medium skin tone
+1F9B8 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🦸🏾‍♂️ E11.0 man superhero: medium-dark skin tone
+1F9B8 1F3FE 200D 2642                                  ; minimally-qualified # 🦸🏾‍♂ E11.0 man superhero: medium-dark skin tone
+1F9B8 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🦸🏿‍♂️ E11.0 man superhero: dark skin tone
+1F9B8 1F3FF 200D 2642                                  ; minimally-qualified # 🦸🏿‍♂ E11.0 man superhero: dark skin tone
+1F9B8 200D 2640 FE0F                                   ; fully-qualified     # 🦸‍♀️ E11.0 woman superhero
+1F9B8 200D 2640                                        ; minimally-qualified # 🦸‍♀ E11.0 woman superhero
+1F9B8 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🦸🏻‍♀️ E11.0 woman superhero: light skin tone
+1F9B8 1F3FB 200D 2640                                  ; minimally-qualified # 🦸🏻‍♀ E11.0 woman superhero: light skin tone
+1F9B8 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🦸🏼‍♀️ E11.0 woman superhero: medium-light skin tone
+1F9B8 1F3FC 200D 2640                                  ; minimally-qualified # 🦸🏼‍♀ E11.0 woman superhero: medium-light skin tone
+1F9B8 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🦸🏽‍♀️ E11.0 woman superhero: medium skin tone
+1F9B8 1F3FD 200D 2640                                  ; minimally-qualified # 🦸🏽‍♀ E11.0 woman superhero: medium skin tone
+1F9B8 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🦸🏾‍♀️ E11.0 woman superhero: medium-dark skin tone
+1F9B8 1F3FE 200D 2640                                  ; minimally-qualified # 🦸🏾‍♀ E11.0 woman superhero: medium-dark skin tone
+1F9B8 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🦸🏿‍♀️ E11.0 woman superhero: dark skin tone
+1F9B8 1F3FF 200D 2640                                  ; minimally-qualified # 🦸🏿‍♀ E11.0 woman superhero: dark skin tone
+1F9B9                                                  ; fully-qualified     # 🦹 E11.0 supervillain
+1F9B9 1F3FB                                            ; fully-qualified     # 🦹🏻 E11.0 supervillain: light skin tone
+1F9B9 1F3FC                                            ; fully-qualified     # 🦹🏼 E11.0 supervillain: medium-light skin tone
+1F9B9 1F3FD                                            ; fully-qualified     # 🦹🏽 E11.0 supervillain: medium skin tone
+1F9B9 1F3FE                                            ; fully-qualified     # 🦹🏾 E11.0 supervillain: medium-dark skin tone
+1F9B9 1F3FF                                            ; fully-qualified     # 🦹🏿 E11.0 supervillain: dark skin tone
+1F9B9 200D 2642 FE0F                                   ; fully-qualified     # 🦹‍♂️ E11.0 man supervillain
+1F9B9 200D 2642                                        ; minimally-qualified # 🦹‍♂ E11.0 man supervillain
+1F9B9 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🦹🏻‍♂️ E11.0 man supervillain: light skin tone
+1F9B9 1F3FB 200D 2642                                  ; minimally-qualified # 🦹🏻‍♂ E11.0 man supervillain: light skin tone
+1F9B9 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🦹🏼‍♂️ E11.0 man supervillain: medium-light skin tone
+1F9B9 1F3FC 200D 2642                                  ; minimally-qualified # 🦹🏼‍♂ E11.0 man supervillain: medium-light skin tone
+1F9B9 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🦹🏽‍♂️ E11.0 man supervillain: medium skin tone
+1F9B9 1F3FD 200D 2642                                  ; minimally-qualified # 🦹🏽‍♂ E11.0 man supervillain: medium skin tone
+1F9B9 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🦹🏾‍♂️ E11.0 man supervillain: medium-dark skin tone
+1F9B9 1F3FE 200D 2642                                  ; minimally-qualified # 🦹🏾‍♂ E11.0 man supervillain: medium-dark skin tone
+1F9B9 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🦹🏿‍♂️ E11.0 man supervillain: dark skin tone
+1F9B9 1F3FF 200D 2642                                  ; minimally-qualified # 🦹🏿‍♂ E11.0 man supervillain: dark skin tone
+1F9B9 200D 2640 FE0F                                   ; fully-qualified     # 🦹‍♀️ E11.0 woman supervillain
+1F9B9 200D 2640                                        ; minimally-qualified # 🦹‍♀ E11.0 woman supervillain
+1F9B9 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🦹🏻‍♀️ E11.0 woman supervillain: light skin tone
+1F9B9 1F3FB 200D 2640                                  ; minimally-qualified # 🦹🏻‍♀ E11.0 woman supervillain: light skin tone
+1F9B9 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🦹🏼‍♀️ E11.0 woman supervillain: medium-light skin tone
+1F9B9 1F3FC 200D 2640                                  ; minimally-qualified # 🦹🏼‍♀ E11.0 woman supervillain: medium-light skin tone
+1F9B9 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🦹🏽‍♀️ E11.0 woman supervillain: medium skin tone
+1F9B9 1F3FD 200D 2640                                  ; minimally-qualified # 🦹🏽‍♀ E11.0 woman supervillain: medium skin tone
+1F9B9 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🦹🏾‍♀️ E11.0 woman supervillain: medium-dark skin tone
+1F9B9 1F3FE 200D 2640                                  ; minimally-qualified # 🦹🏾‍♀ E11.0 woman supervillain: medium-dark skin tone
+1F9B9 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🦹🏿‍♀️ E11.0 woman supervillain: dark skin tone
+1F9B9 1F3FF 200D 2640                                  ; minimally-qualified # 🦹🏿‍♀ E11.0 woman supervillain: dark skin tone
+1F9D9                                                  ; fully-qualified     # 🧙 E5.0 mage
+1F9D9 1F3FB                                            ; fully-qualified     # 🧙🏻 E5.0 mage: light skin tone
+1F9D9 1F3FC                                            ; fully-qualified     # 🧙🏼 E5.0 mage: medium-light skin tone
+1F9D9 1F3FD                                            ; fully-qualified     # 🧙🏽 E5.0 mage: medium skin tone
+1F9D9 1F3FE                                            ; fully-qualified     # 🧙🏾 E5.0 mage: medium-dark skin tone
+1F9D9 1F3FF                                            ; fully-qualified     # 🧙🏿 E5.0 mage: dark skin tone
+1F9D9 200D 2642 FE0F                                   ; fully-qualified     # 🧙‍♂️ E5.0 man mage
+1F9D9 200D 2642                                        ; minimally-qualified # 🧙‍♂ E5.0 man mage
+1F9D9 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🧙🏻‍♂️ E5.0 man mage: light skin tone
+1F9D9 1F3FB 200D 2642                                  ; minimally-qualified # 🧙🏻‍♂ E5.0 man mage: light skin tone
+1F9D9 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🧙🏼‍♂️ E5.0 man mage: medium-light skin tone
+1F9D9 1F3FC 200D 2642                                  ; minimally-qualified # 🧙🏼‍♂ E5.0 man mage: medium-light skin tone
+1F9D9 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🧙🏽‍♂️ E5.0 man mage: medium skin tone
+1F9D9 1F3FD 200D 2642                                  ; minimally-qualified # 🧙🏽‍♂ E5.0 man mage: medium skin tone
+1F9D9 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🧙🏾‍♂️ E5.0 man mage: medium-dark skin tone
+1F9D9 1F3FE 200D 2642                                  ; minimally-qualified # 🧙🏾‍♂ E5.0 man mage: medium-dark skin tone
+1F9D9 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🧙🏿‍♂️ E5.0 man mage: dark skin tone
+1F9D9 1F3FF 200D 2642                                  ; minimally-qualified # 🧙🏿‍♂ E5.0 man mage: dark skin tone
+1F9D9 200D 2640 FE0F                                   ; fully-qualified     # 🧙‍♀️ E5.0 woman mage
+1F9D9 200D 2640                                        ; minimally-qualified # 🧙‍♀ E5.0 woman mage
+1F9D9 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🧙🏻‍♀️ E5.0 woman mage: light skin tone
+1F9D9 1F3FB 200D 2640                                  ; minimally-qualified # 🧙🏻‍♀ E5.0 woman mage: light skin tone
+1F9D9 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🧙🏼‍♀️ E5.0 woman mage: medium-light skin tone
+1F9D9 1F3FC 200D 2640                                  ; minimally-qualified # 🧙🏼‍♀ E5.0 woman mage: medium-light skin tone
+1F9D9 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🧙🏽‍♀️ E5.0 woman mage: medium skin tone
+1F9D9 1F3FD 200D 2640                                  ; minimally-qualified # 🧙🏽‍♀ E5.0 woman mage: medium skin tone
+1F9D9 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🧙🏾‍♀️ E5.0 woman mage: medium-dark skin tone
+1F9D9 1F3FE 200D 2640                                  ; minimally-qualified # 🧙🏾‍♀ E5.0 woman mage: medium-dark skin tone
+1F9D9 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🧙🏿‍♀️ E5.0 woman mage: dark skin tone
+1F9D9 1F3FF 200D 2640                                  ; minimally-qualified # 🧙🏿‍♀ E5.0 woman mage: dark skin tone
+1F9DA                                                  ; fully-qualified     # 🧚 E5.0 fairy
+1F9DA 1F3FB                                            ; fully-qualified     # 🧚🏻 E5.0 fairy: light skin tone
+1F9DA 1F3FC                                            ; fully-qualified     # 🧚🏼 E5.0 fairy: medium-light skin tone
+1F9DA 1F3FD                                            ; fully-qualified     # 🧚🏽 E5.0 fairy: medium skin tone
+1F9DA 1F3FE                                            ; fully-qualified     # 🧚🏾 E5.0 fairy: medium-dark skin tone
+1F9DA 1F3FF                                            ; fully-qualified     # 🧚🏿 E5.0 fairy: dark skin tone
+1F9DA 200D 2642 FE0F                                   ; fully-qualified     # 🧚‍♂️ E5.0 man fairy
+1F9DA 200D 2642                                        ; minimally-qualified # 🧚‍♂ E5.0 man fairy
+1F9DA 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🧚🏻‍♂️ E5.0 man fairy: light skin tone
+1F9DA 1F3FB 200D 2642                                  ; minimally-qualified # 🧚🏻‍♂ E5.0 man fairy: light skin tone
+1F9DA 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🧚🏼‍♂️ E5.0 man fairy: medium-light skin tone
+1F9DA 1F3FC 200D 2642                                  ; minimally-qualified # 🧚🏼‍♂ E5.0 man fairy: medium-light skin tone
+1F9DA 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🧚🏽‍♂️ E5.0 man fairy: medium skin tone
+1F9DA 1F3FD 200D 2642                                  ; minimally-qualified # 🧚🏽‍♂ E5.0 man fairy: medium skin tone
+1F9DA 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🧚🏾‍♂️ E5.0 man fairy: medium-dark skin tone
+1F9DA 1F3FE 200D 2642                                  ; minimally-qualified # 🧚🏾‍♂ E5.0 man fairy: medium-dark skin tone
+1F9DA 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🧚🏿‍♂️ E5.0 man fairy: dark skin tone
+1F9DA 1F3FF 200D 2642                                  ; minimally-qualified # 🧚🏿‍♂ E5.0 man fairy: dark skin tone
+1F9DA 200D 2640 FE0F                                   ; fully-qualified     # 🧚‍♀️ E5.0 woman fairy
+1F9DA 200D 2640                                        ; minimally-qualified # 🧚‍♀ E5.0 woman fairy
+1F9DA 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🧚🏻‍♀️ E5.0 woman fairy: light skin tone
+1F9DA 1F3FB 200D 2640                                  ; minimally-qualified # 🧚🏻‍♀ E5.0 woman fairy: light skin tone
+1F9DA 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🧚🏼‍♀️ E5.0 woman fairy: medium-light skin tone
+1F9DA 1F3FC 200D 2640                                  ; minimally-qualified # 🧚🏼‍♀ E5.0 woman fairy: medium-light skin tone
+1F9DA 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🧚🏽‍♀️ E5.0 woman fairy: medium skin tone
+1F9DA 1F3FD 200D 2640                                  ; minimally-qualified # 🧚🏽‍♀ E5.0 woman fairy: medium skin tone
+1F9DA 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🧚🏾‍♀️ E5.0 woman fairy: medium-dark skin tone
+1F9DA 1F3FE 200D 2640                                  ; minimally-qualified # 🧚🏾‍♀ E5.0 woman fairy: medium-dark skin tone
+1F9DA 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🧚🏿‍♀️ E5.0 woman fairy: dark skin tone
+1F9DA 1F3FF 200D 2640                                  ; minimally-qualified # 🧚🏿‍♀ E5.0 woman fairy: dark skin tone
+1F9DB                                                  ; fully-qualified     # 🧛 E5.0 vampire
+1F9DB 1F3FB                                            ; fully-qualified     # 🧛🏻 E5.0 vampire: light skin tone
+1F9DB 1F3FC                                            ; fully-qualified     # 🧛🏼 E5.0 vampire: medium-light skin tone
+1F9DB 1F3FD                                            ; fully-qualified     # 🧛🏽 E5.0 vampire: medium skin tone
+1F9DB 1F3FE                                            ; fully-qualified     # 🧛🏾 E5.0 vampire: medium-dark skin tone
+1F9DB 1F3FF                                            ; fully-qualified     # 🧛🏿 E5.0 vampire: dark skin tone
+1F9DB 200D 2642 FE0F                                   ; fully-qualified     # 🧛‍♂️ E5.0 man vampire
+1F9DB 200D 2642                                        ; minimally-qualified # 🧛‍♂ E5.0 man vampire
+1F9DB 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🧛🏻‍♂️ E5.0 man vampire: light skin tone
+1F9DB 1F3FB 200D 2642                                  ; minimally-qualified # 🧛🏻‍♂ E5.0 man vampire: light skin tone
+1F9DB 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🧛🏼‍♂️ E5.0 man vampire: medium-light skin tone
+1F9DB 1F3FC 200D 2642                                  ; minimally-qualified # 🧛🏼‍♂ E5.0 man vampire: medium-light skin tone
+1F9DB 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🧛🏽‍♂️ E5.0 man vampire: medium skin tone
+1F9DB 1F3FD 200D 2642                                  ; minimally-qualified # 🧛🏽‍♂ E5.0 man vampire: medium skin tone
+1F9DB 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🧛🏾‍♂️ E5.0 man vampire: medium-dark skin tone
+1F9DB 1F3FE 200D 2642                                  ; minimally-qualified # 🧛🏾‍♂ E5.0 man vampire: medium-dark skin tone
+1F9DB 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🧛🏿‍♂️ E5.0 man vampire: dark skin tone
+1F9DB 1F3FF 200D 2642                                  ; minimally-qualified # 🧛🏿‍♂ E5.0 man vampire: dark skin tone
+1F9DB 200D 2640 FE0F                                   ; fully-qualified     # 🧛‍♀️ E5.0 woman vampire
+1F9DB 200D 2640                                        ; minimally-qualified # 🧛‍♀ E5.0 woman vampire
+1F9DB 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🧛🏻‍♀️ E5.0 woman vampire: light skin tone
+1F9DB 1F3FB 200D 2640                                  ; minimally-qualified # 🧛🏻‍♀ E5.0 woman vampire: light skin tone
+1F9DB 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🧛🏼‍♀️ E5.0 woman vampire: medium-light skin tone
+1F9DB 1F3FC 200D 2640                                  ; minimally-qualified # 🧛🏼‍♀ E5.0 woman vampire: medium-light skin tone
+1F9DB 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🧛🏽‍♀️ E5.0 woman vampire: medium skin tone
+1F9DB 1F3FD 200D 2640                                  ; minimally-qualified # 🧛🏽‍♀ E5.0 woman vampire: medium skin tone
+1F9DB 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🧛🏾‍♀️ E5.0 woman vampire: medium-dark skin tone
+1F9DB 1F3FE 200D 2640                                  ; minimally-qualified # 🧛🏾‍♀ E5.0 woman vampire: medium-dark skin tone
+1F9DB 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🧛🏿‍♀️ E5.0 woman vampire: dark skin tone
+1F9DB 1F3FF 200D 2640                                  ; minimally-qualified # 🧛🏿‍♀ E5.0 woman vampire: dark skin tone
+1F9DC                                                  ; fully-qualified     # 🧜 E5.0 merperson
+1F9DC 1F3FB                                            ; fully-qualified     # 🧜🏻 E5.0 merperson: light skin tone
+1F9DC 1F3FC                                            ; fully-qualified     # 🧜🏼 E5.0 merperson: medium-light skin tone
+1F9DC 1F3FD                                            ; fully-qualified     # 🧜🏽 E5.0 merperson: medium skin tone
+1F9DC 1F3FE                                            ; fully-qualified     # 🧜🏾 E5.0 merperson: medium-dark skin tone
+1F9DC 1F3FF                                            ; fully-qualified     # 🧜🏿 E5.0 merperson: dark skin tone
+1F9DC 200D 2642 FE0F                                   ; fully-qualified     # 🧜‍♂️ E5.0 merman
+1F9DC 200D 2642                                        ; minimally-qualified # 🧜‍♂ E5.0 merman
+1F9DC 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🧜🏻‍♂️ E5.0 merman: light skin tone
+1F9DC 1F3FB 200D 2642                                  ; minimally-qualified # 🧜🏻‍♂ E5.0 merman: light skin tone
+1F9DC 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🧜🏼‍♂️ E5.0 merman: medium-light skin tone
+1F9DC 1F3FC 200D 2642                                  ; minimally-qualified # 🧜🏼‍♂ E5.0 merman: medium-light skin tone
+1F9DC 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🧜🏽‍♂️ E5.0 merman: medium skin tone
+1F9DC 1F3FD 200D 2642                                  ; minimally-qualified # 🧜🏽‍♂ E5.0 merman: medium skin tone
+1F9DC 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🧜🏾‍♂️ E5.0 merman: medium-dark skin tone
+1F9DC 1F3FE 200D 2642                                  ; minimally-qualified # 🧜🏾‍♂ E5.0 merman: medium-dark skin tone
+1F9DC 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🧜🏿‍♂️ E5.0 merman: dark skin tone
+1F9DC 1F3FF 200D 2642                                  ; minimally-qualified # 🧜🏿‍♂ E5.0 merman: dark skin tone
+1F9DC 200D 2640 FE0F                                   ; fully-qualified     # 🧜‍♀️ E5.0 mermaid
+1F9DC 200D 2640                                        ; minimally-qualified # 🧜‍♀ E5.0 mermaid
+1F9DC 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🧜🏻‍♀️ E5.0 mermaid: light skin tone
+1F9DC 1F3FB 200D 2640                                  ; minimally-qualified # 🧜🏻‍♀ E5.0 mermaid: light skin tone
+1F9DC 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🧜🏼‍♀️ E5.0 mermaid: medium-light skin tone
+1F9DC 1F3FC 200D 2640                                  ; minimally-qualified # 🧜🏼‍♀ E5.0 mermaid: medium-light skin tone
+1F9DC 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🧜🏽‍♀️ E5.0 mermaid: medium skin tone
+1F9DC 1F3FD 200D 2640                                  ; minimally-qualified # 🧜🏽‍♀ E5.0 mermaid: medium skin tone
+1F9DC 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🧜🏾‍♀️ E5.0 mermaid: medium-dark skin tone
+1F9DC 1F3FE 200D 2640                                  ; minimally-qualified # 🧜🏾‍♀ E5.0 mermaid: medium-dark skin tone
+1F9DC 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🧜🏿‍♀️ E5.0 mermaid: dark skin tone
+1F9DC 1F3FF 200D 2640                                  ; minimally-qualified # 🧜🏿‍♀ E5.0 mermaid: dark skin tone
+1F9DD                                                  ; fully-qualified     # 🧝 E5.0 elf
+1F9DD 1F3FB                                            ; fully-qualified     # 🧝🏻 E5.0 elf: light skin tone
+1F9DD 1F3FC                                            ; fully-qualified     # 🧝🏼 E5.0 elf: medium-light skin tone
+1F9DD 1F3FD                                            ; fully-qualified     # 🧝🏽 E5.0 elf: medium skin tone
+1F9DD 1F3FE                                            ; fully-qualified     # 🧝🏾 E5.0 elf: medium-dark skin tone
+1F9DD 1F3FF                                            ; fully-qualified     # 🧝🏿 E5.0 elf: dark skin tone
+1F9DD 200D 2642 FE0F                                   ; fully-qualified     # 🧝‍♂️ E5.0 man elf
+1F9DD 200D 2642                                        ; minimally-qualified # 🧝‍♂ E5.0 man elf
+1F9DD 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🧝🏻‍♂️ E5.0 man elf: light skin tone
+1F9DD 1F3FB 200D 2642                                  ; minimally-qualified # 🧝🏻‍♂ E5.0 man elf: light skin tone
+1F9DD 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🧝🏼‍♂️ E5.0 man elf: medium-light skin tone
+1F9DD 1F3FC 200D 2642                                  ; minimally-qualified # 🧝🏼‍♂ E5.0 man elf: medium-light skin tone
+1F9DD 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🧝🏽‍♂️ E5.0 man elf: medium skin tone
+1F9DD 1F3FD 200D 2642                                  ; minimally-qualified # 🧝🏽‍♂ E5.0 man elf: medium skin tone
+1F9DD 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🧝🏾‍♂️ E5.0 man elf: medium-dark skin tone
+1F9DD 1F3FE 200D 2642                                  ; minimally-qualified # 🧝🏾‍♂ E5.0 man elf: medium-dark skin tone
+1F9DD 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🧝🏿‍♂️ E5.0 man elf: dark skin tone
+1F9DD 1F3FF 200D 2642                                  ; minimally-qualified # 🧝🏿‍♂ E5.0 man elf: dark skin tone
+1F9DD 200D 2640 FE0F                                   ; fully-qualified     # 🧝‍♀️ E5.0 woman elf
+1F9DD 200D 2640                                        ; minimally-qualified # 🧝‍♀ E5.0 woman elf
+1F9DD 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🧝🏻‍♀️ E5.0 woman elf: light skin tone
+1F9DD 1F3FB 200D 2640                                  ; minimally-qualified # 🧝🏻‍♀ E5.0 woman elf: light skin tone
+1F9DD 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🧝🏼‍♀️ E5.0 woman elf: medium-light skin tone
+1F9DD 1F3FC 200D 2640                                  ; minimally-qualified # 🧝🏼‍♀ E5.0 woman elf: medium-light skin tone
+1F9DD 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🧝🏽‍♀️ E5.0 woman elf: medium skin tone
+1F9DD 1F3FD 200D 2640                                  ; minimally-qualified # 🧝🏽‍♀ E5.0 woman elf: medium skin tone
+1F9DD 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🧝🏾‍♀️ E5.0 woman elf: medium-dark skin tone
+1F9DD 1F3FE 200D 2640                                  ; minimally-qualified # 🧝🏾‍♀ E5.0 woman elf: medium-dark skin tone
+1F9DD 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🧝🏿‍♀️ E5.0 woman elf: dark skin tone
+1F9DD 1F3FF 200D 2640                                  ; minimally-qualified # 🧝🏿‍♀ E5.0 woman elf: dark skin tone
+1F9DE                                                  ; fully-qualified     # 🧞 E5.0 genie
+1F9DE 200D 2642 FE0F                                   ; fully-qualified     # 🧞‍♂️ E5.0 man genie
+1F9DE 200D 2642                                        ; minimally-qualified # 🧞‍♂ E5.0 man genie
+1F9DE 200D 2640 FE0F                                   ; fully-qualified     # 🧞‍♀️ E5.0 woman genie
+1F9DE 200D 2640                                        ; minimally-qualified # 🧞‍♀ E5.0 woman genie
+1F9DF                                                  ; fully-qualified     # 🧟 E5.0 zombie
+1F9DF 200D 2642 FE0F                                   ; fully-qualified     # 🧟‍♂️ E5.0 man zombie
+1F9DF 200D 2642                                        ; minimally-qualified # 🧟‍♂ E5.0 man zombie
+1F9DF 200D 2640 FE0F                                   ; fully-qualified     # 🧟‍♀️ E5.0 woman zombie
+1F9DF 200D 2640                                        ; minimally-qualified # 🧟‍♀ E5.0 woman zombie
 
 # subgroup: person-activity
-1F486                                      ; fully-qualified     # 💆 E0.6 person getting massage
-1F486 1F3FB                                ; fully-qualified     # 💆🏻 E1.0 person getting massage: light skin tone
-1F486 1F3FC                                ; fully-qualified     # 💆🏼 E1.0 person getting massage: medium-light skin tone
-1F486 1F3FD                                ; fully-qualified     # 💆🏽 E1.0 person getting massage: medium skin tone
-1F486 1F3FE                                ; fully-qualified     # 💆🏾 E1.0 person getting massage: medium-dark skin tone
-1F486 1F3FF                                ; fully-qualified     # 💆🏿 E1.0 person getting massage: dark skin tone
-1F486 200D 2642 FE0F                       ; fully-qualified     # 💆‍♂️ E4.0 man getting massage
-1F486 200D 2642                            ; minimally-qualified # 💆‍♂ E4.0 man getting massage
-1F486 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 💆🏻‍♂️ E4.0 man getting massage: light skin tone
-1F486 1F3FB 200D 2642                      ; minimally-qualified # 💆🏻‍♂ E4.0 man getting massage: light skin tone
-1F486 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 💆🏼‍♂️ E4.0 man getting massage: medium-light skin tone
-1F486 1F3FC 200D 2642                      ; minimally-qualified # 💆🏼‍♂ E4.0 man getting massage: medium-light skin tone
-1F486 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 💆🏽‍♂️ E4.0 man getting massage: medium skin tone
-1F486 1F3FD 200D 2642                      ; minimally-qualified # 💆🏽‍♂ E4.0 man getting massage: medium skin tone
-1F486 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 💆🏾‍♂️ E4.0 man getting massage: medium-dark skin tone
-1F486 1F3FE 200D 2642                      ; minimally-qualified # 💆🏾‍♂ E4.0 man getting massage: medium-dark skin tone
-1F486 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 💆🏿‍♂️ E4.0 man getting massage: dark skin tone
-1F486 1F3FF 200D 2642                      ; minimally-qualified # 💆🏿‍♂ E4.0 man getting massage: dark skin tone
-1F486 200D 2640 FE0F                       ; fully-qualified     # 💆‍♀️ E4.0 woman getting massage
-1F486 200D 2640                            ; minimally-qualified # 💆‍♀ E4.0 woman getting massage
-1F486 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 💆🏻‍♀️ E4.0 woman getting massage: light skin tone
-1F486 1F3FB 200D 2640                      ; minimally-qualified # 💆🏻‍♀ E4.0 woman getting massage: light skin tone
-1F486 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 💆🏼‍♀️ E4.0 woman getting massage: medium-light skin tone
-1F486 1F3FC 200D 2640                      ; minimally-qualified # 💆🏼‍♀ E4.0 woman getting massage: medium-light skin tone
-1F486 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 💆🏽‍♀️ E4.0 woman getting massage: medium skin tone
-1F486 1F3FD 200D 2640                      ; minimally-qualified # 💆🏽‍♀ E4.0 woman getting massage: medium skin tone
-1F486 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 💆🏾‍♀️ E4.0 woman getting massage: medium-dark skin tone
-1F486 1F3FE 200D 2640                      ; minimally-qualified # 💆🏾‍♀ E4.0 woman getting massage: medium-dark skin tone
-1F486 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 💆🏿‍♀️ E4.0 woman getting massage: dark skin tone
-1F486 1F3FF 200D 2640                      ; minimally-qualified # 💆🏿‍♀ E4.0 woman getting massage: dark skin tone
-1F487                                      ; fully-qualified     # 💇 E0.6 person getting haircut
-1F487 1F3FB                                ; fully-qualified     # 💇🏻 E1.0 person getting haircut: light skin tone
-1F487 1F3FC                                ; fully-qualified     # 💇🏼 E1.0 person getting haircut: medium-light skin tone
-1F487 1F3FD                                ; fully-qualified     # 💇🏽 E1.0 person getting haircut: medium skin tone
-1F487 1F3FE                                ; fully-qualified     # 💇🏾 E1.0 person getting haircut: medium-dark skin tone
-1F487 1F3FF                                ; fully-qualified     # 💇🏿 E1.0 person getting haircut: dark skin tone
-1F487 200D 2642 FE0F                       ; fully-qualified     # 💇‍♂️ E4.0 man getting haircut
-1F487 200D 2642                            ; minimally-qualified # 💇‍♂ E4.0 man getting haircut
-1F487 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 💇🏻‍♂️ E4.0 man getting haircut: light skin tone
-1F487 1F3FB 200D 2642                      ; minimally-qualified # 💇🏻‍♂ E4.0 man getting haircut: light skin tone
-1F487 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 💇🏼‍♂️ E4.0 man getting haircut: medium-light skin tone
-1F487 1F3FC 200D 2642                      ; minimally-qualified # 💇🏼‍♂ E4.0 man getting haircut: medium-light skin tone
-1F487 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 💇🏽‍♂️ E4.0 man getting haircut: medium skin tone
-1F487 1F3FD 200D 2642                      ; minimally-qualified # 💇🏽‍♂ E4.0 man getting haircut: medium skin tone
-1F487 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 💇🏾‍♂️ E4.0 man getting haircut: medium-dark skin tone
-1F487 1F3FE 200D 2642                      ; minimally-qualified # 💇🏾‍♂ E4.0 man getting haircut: medium-dark skin tone
-1F487 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 💇🏿‍♂️ E4.0 man getting haircut: dark skin tone
-1F487 1F3FF 200D 2642                      ; minimally-qualified # 💇🏿‍♂ E4.0 man getting haircut: dark skin tone
-1F487 200D 2640 FE0F                       ; fully-qualified     # 💇‍♀️ E4.0 woman getting haircut
-1F487 200D 2640                            ; minimally-qualified # 💇‍♀ E4.0 woman getting haircut
-1F487 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 💇🏻‍♀️ E4.0 woman getting haircut: light skin tone
-1F487 1F3FB 200D 2640                      ; minimally-qualified # 💇🏻‍♀ E4.0 woman getting haircut: light skin tone
-1F487 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 💇🏼‍♀️ E4.0 woman getting haircut: medium-light skin tone
-1F487 1F3FC 200D 2640                      ; minimally-qualified # 💇🏼‍♀ E4.0 woman getting haircut: medium-light skin tone
-1F487 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 💇🏽‍♀️ E4.0 woman getting haircut: medium skin tone
-1F487 1F3FD 200D 2640                      ; minimally-qualified # 💇🏽‍♀ E4.0 woman getting haircut: medium skin tone
-1F487 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 💇🏾‍♀️ E4.0 woman getting haircut: medium-dark skin tone
-1F487 1F3FE 200D 2640                      ; minimally-qualified # 💇🏾‍♀ E4.0 woman getting haircut: medium-dark skin tone
-1F487 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 💇🏿‍♀️ E4.0 woman getting haircut: dark skin tone
-1F487 1F3FF 200D 2640                      ; minimally-qualified # 💇🏿‍♀ E4.0 woman getting haircut: dark skin tone
-1F6B6                                      ; fully-qualified     # 🚶 E0.6 person walking
-1F6B6 1F3FB                                ; fully-qualified     # 🚶🏻 E1.0 person walking: light skin tone
-1F6B6 1F3FC                                ; fully-qualified     # 🚶🏼 E1.0 person walking: medium-light skin tone
-1F6B6 1F3FD                                ; fully-qualified     # 🚶🏽 E1.0 person walking: medium skin tone
-1F6B6 1F3FE                                ; fully-qualified     # 🚶🏾 E1.0 person walking: medium-dark skin tone
-1F6B6 1F3FF                                ; fully-qualified     # 🚶🏿 E1.0 person walking: dark skin tone
-1F6B6 200D 2642 FE0F                       ; fully-qualified     # 🚶‍♂️ E4.0 man walking
-1F6B6 200D 2642                            ; minimally-qualified # 🚶‍♂ E4.0 man walking
-1F6B6 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🚶🏻‍♂️ E4.0 man walking: light skin tone
-1F6B6 1F3FB 200D 2642                      ; minimally-qualified # 🚶🏻‍♂ E4.0 man walking: light skin tone
-1F6B6 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🚶🏼‍♂️ E4.0 man walking: medium-light skin tone
-1F6B6 1F3FC 200D 2642                      ; minimally-qualified # 🚶🏼‍♂ E4.0 man walking: medium-light skin tone
-1F6B6 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🚶🏽‍♂️ E4.0 man walking: medium skin tone
-1F6B6 1F3FD 200D 2642                      ; minimally-qualified # 🚶🏽‍♂ E4.0 man walking: medium skin tone
-1F6B6 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🚶🏾‍♂️ E4.0 man walking: medium-dark skin tone
-1F6B6 1F3FE 200D 2642                      ; minimally-qualified # 🚶🏾‍♂ E4.0 man walking: medium-dark skin tone
-1F6B6 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🚶🏿‍♂️ E4.0 man walking: dark skin tone
-1F6B6 1F3FF 200D 2642                      ; minimally-qualified # 🚶🏿‍♂ E4.0 man walking: dark skin tone
-1F6B6 200D 2640 FE0F                       ; fully-qualified     # 🚶‍♀️ E4.0 woman walking
-1F6B6 200D 2640                            ; minimally-qualified # 🚶‍♀ E4.0 woman walking
-1F6B6 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🚶🏻‍♀️ E4.0 woman walking: light skin tone
-1F6B6 1F3FB 200D 2640                      ; minimally-qualified # 🚶🏻‍♀ E4.0 woman walking: light skin tone
-1F6B6 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🚶🏼‍♀️ E4.0 woman walking: medium-light skin tone
-1F6B6 1F3FC 200D 2640                      ; minimally-qualified # 🚶🏼‍♀ E4.0 woman walking: medium-light skin tone
-1F6B6 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🚶🏽‍♀️ E4.0 woman walking: medium skin tone
-1F6B6 1F3FD 200D 2640                      ; minimally-qualified # 🚶🏽‍♀ E4.0 woman walking: medium skin tone
-1F6B6 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🚶🏾‍♀️ E4.0 woman walking: medium-dark skin tone
-1F6B6 1F3FE 200D 2640                      ; minimally-qualified # 🚶🏾‍♀ E4.0 woman walking: medium-dark skin tone
-1F6B6 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🚶🏿‍♀️ E4.0 woman walking: dark skin tone
-1F6B6 1F3FF 200D 2640                      ; minimally-qualified # 🚶🏿‍♀ E4.0 woman walking: dark skin tone
-1F9CD                                      ; fully-qualified     # 🧍 E12.0 person standing
-1F9CD 1F3FB                                ; fully-qualified     # 🧍🏻 E12.0 person standing: light skin tone
-1F9CD 1F3FC                                ; fully-qualified     # 🧍🏼 E12.0 person standing: medium-light skin tone
-1F9CD 1F3FD                                ; fully-qualified     # 🧍🏽 E12.0 person standing: medium skin tone
-1F9CD 1F3FE                                ; fully-qualified     # 🧍🏾 E12.0 person standing: medium-dark skin tone
-1F9CD 1F3FF                                ; fully-qualified     # 🧍🏿 E12.0 person standing: dark skin tone
-1F9CD 200D 2642 FE0F                       ; fully-qualified     # 🧍‍♂️ E12.0 man standing
-1F9CD 200D 2642                            ; minimally-qualified # 🧍‍♂ E12.0 man standing
-1F9CD 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🧍🏻‍♂️ E12.0 man standing: light skin tone
-1F9CD 1F3FB 200D 2642                      ; minimally-qualified # 🧍🏻‍♂ E12.0 man standing: light skin tone
-1F9CD 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🧍🏼‍♂️ E12.0 man standing: medium-light skin tone
-1F9CD 1F3FC 200D 2642                      ; minimally-qualified # 🧍🏼‍♂ E12.0 man standing: medium-light skin tone
-1F9CD 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🧍🏽‍♂️ E12.0 man standing: medium skin tone
-1F9CD 1F3FD 200D 2642                      ; minimally-qualified # 🧍🏽‍♂ E12.0 man standing: medium skin tone
-1F9CD 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🧍🏾‍♂️ E12.0 man standing: medium-dark skin tone
-1F9CD 1F3FE 200D 2642                      ; minimally-qualified # 🧍🏾‍♂ E12.0 man standing: medium-dark skin tone
-1F9CD 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🧍🏿‍♂️ E12.0 man standing: dark skin tone
-1F9CD 1F3FF 200D 2642                      ; minimally-qualified # 🧍🏿‍♂ E12.0 man standing: dark skin tone
-1F9CD 200D 2640 FE0F                       ; fully-qualified     # 🧍‍♀️ E12.0 woman standing
-1F9CD 200D 2640                            ; minimally-qualified # 🧍‍♀ E12.0 woman standing
-1F9CD 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🧍🏻‍♀️ E12.0 woman standing: light skin tone
-1F9CD 1F3FB 200D 2640                      ; minimally-qualified # 🧍🏻‍♀ E12.0 woman standing: light skin tone
-1F9CD 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🧍🏼‍♀️ E12.0 woman standing: medium-light skin tone
-1F9CD 1F3FC 200D 2640                      ; minimally-qualified # 🧍🏼‍♀ E12.0 woman standing: medium-light skin tone
-1F9CD 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🧍🏽‍♀️ E12.0 woman standing: medium skin tone
-1F9CD 1F3FD 200D 2640                      ; minimally-qualified # 🧍🏽‍♀ E12.0 woman standing: medium skin tone
-1F9CD 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🧍🏾‍♀️ E12.0 woman standing: medium-dark skin tone
-1F9CD 1F3FE 200D 2640                      ; minimally-qualified # 🧍🏾‍♀ E12.0 woman standing: medium-dark skin tone
-1F9CD 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🧍🏿‍♀️ E12.0 woman standing: dark skin tone
-1F9CD 1F3FF 200D 2640                      ; minimally-qualified # 🧍🏿‍♀ E12.0 woman standing: dark skin tone
-1F9CE                                      ; fully-qualified     # 🧎 E12.0 person kneeling
-1F9CE 1F3FB                                ; fully-qualified     # 🧎🏻 E12.0 person kneeling: light skin tone
-1F9CE 1F3FC                                ; fully-qualified     # 🧎🏼 E12.0 person kneeling: medium-light skin tone
-1F9CE 1F3FD                                ; fully-qualified     # 🧎🏽 E12.0 person kneeling: medium skin tone
-1F9CE 1F3FE                                ; fully-qualified     # 🧎🏾 E12.0 person kneeling: medium-dark skin tone
-1F9CE 1F3FF                                ; fully-qualified     # 🧎🏿 E12.0 person kneeling: dark skin tone
-1F9CE 200D 2642 FE0F                       ; fully-qualified     # 🧎‍♂️ E12.0 man kneeling
-1F9CE 200D 2642                            ; minimally-qualified # 🧎‍♂ E12.0 man kneeling
-1F9CE 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🧎🏻‍♂️ E12.0 man kneeling: light skin tone
-1F9CE 1F3FB 200D 2642                      ; minimally-qualified # 🧎🏻‍♂ E12.0 man kneeling: light skin tone
-1F9CE 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🧎🏼‍♂️ E12.0 man kneeling: medium-light skin tone
-1F9CE 1F3FC 200D 2642                      ; minimally-qualified # 🧎🏼‍♂ E12.0 man kneeling: medium-light skin tone
-1F9CE 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🧎🏽‍♂️ E12.0 man kneeling: medium skin tone
-1F9CE 1F3FD 200D 2642                      ; minimally-qualified # 🧎🏽‍♂ E12.0 man kneeling: medium skin tone
-1F9CE 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🧎🏾‍♂️ E12.0 man kneeling: medium-dark skin tone
-1F9CE 1F3FE 200D 2642                      ; minimally-qualified # 🧎🏾‍♂ E12.0 man kneeling: medium-dark skin tone
-1F9CE 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🧎🏿‍♂️ E12.0 man kneeling: dark skin tone
-1F9CE 1F3FF 200D 2642                      ; minimally-qualified # 🧎🏿‍♂ E12.0 man kneeling: dark skin tone
-1F9CE 200D 2640 FE0F                       ; fully-qualified     # 🧎‍♀️ E12.0 woman kneeling
-1F9CE 200D 2640                            ; minimally-qualified # 🧎‍♀ E12.0 woman kneeling
-1F9CE 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🧎🏻‍♀️ E12.0 woman kneeling: light skin tone
-1F9CE 1F3FB 200D 2640                      ; minimally-qualified # 🧎🏻‍♀ E12.0 woman kneeling: light skin tone
-1F9CE 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🧎🏼‍♀️ E12.0 woman kneeling: medium-light skin tone
-1F9CE 1F3FC 200D 2640                      ; minimally-qualified # 🧎🏼‍♀ E12.0 woman kneeling: medium-light skin tone
-1F9CE 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🧎🏽‍♀️ E12.0 woman kneeling: medium skin tone
-1F9CE 1F3FD 200D 2640                      ; minimally-qualified # 🧎🏽‍♀ E12.0 woman kneeling: medium skin tone
-1F9CE 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🧎🏾‍♀️ E12.0 woman kneeling: medium-dark skin tone
-1F9CE 1F3FE 200D 2640                      ; minimally-qualified # 🧎🏾‍♀ E12.0 woman kneeling: medium-dark skin tone
-1F9CE 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🧎🏿‍♀️ E12.0 woman kneeling: dark skin tone
-1F9CE 1F3FF 200D 2640                      ; minimally-qualified # 🧎🏿‍♀ E12.0 woman kneeling: dark skin tone
-1F9D1 200D 1F9AF                           ; fully-qualified     # 🧑‍🦯 E12.1 person with white cane
-1F9D1 1F3FB 200D 1F9AF                     ; fully-qualified     # 🧑🏻‍🦯 E12.1 person with white cane: light skin tone
-1F9D1 1F3FC 200D 1F9AF                     ; fully-qualified     # 🧑🏼‍🦯 E12.1 person with white cane: medium-light skin tone
-1F9D1 1F3FD 200D 1F9AF                     ; fully-qualified     # 🧑🏽‍🦯 E12.1 person with white cane: medium skin tone
-1F9D1 1F3FE 200D 1F9AF                     ; fully-qualified     # 🧑🏾‍🦯 E12.1 person with white cane: medium-dark skin tone
-1F9D1 1F3FF 200D 1F9AF                     ; fully-qualified     # 🧑🏿‍🦯 E12.1 person with white cane: dark skin tone
-1F468 200D 1F9AF                           ; fully-qualified     # 👨‍🦯 E12.0 man with white cane
-1F468 1F3FB 200D 1F9AF                     ; fully-qualified     # 👨🏻‍🦯 E12.0 man with white cane: light skin tone
-1F468 1F3FC 200D 1F9AF                     ; fully-qualified     # 👨🏼‍🦯 E12.0 man with white cane: medium-light skin tone
-1F468 1F3FD 200D 1F9AF                     ; fully-qualified     # 👨🏽‍🦯 E12.0 man with white cane: medium skin tone
-1F468 1F3FE 200D 1F9AF                     ; fully-qualified     # 👨🏾‍🦯 E12.0 man with white cane: medium-dark skin tone
-1F468 1F3FF 200D 1F9AF                     ; fully-qualified     # 👨🏿‍🦯 E12.0 man with white cane: dark skin tone
-1F469 200D 1F9AF                           ; fully-qualified     # 👩‍🦯 E12.0 woman with white cane
-1F469 1F3FB 200D 1F9AF                     ; fully-qualified     # 👩🏻‍🦯 E12.0 woman with white cane: light skin tone
-1F469 1F3FC 200D 1F9AF                     ; fully-qualified     # 👩🏼‍🦯 E12.0 woman with white cane: medium-light skin tone
-1F469 1F3FD 200D 1F9AF                     ; fully-qualified     # 👩🏽‍🦯 E12.0 woman with white cane: medium skin tone
-1F469 1F3FE 200D 1F9AF                     ; fully-qualified     # 👩🏾‍🦯 E12.0 woman with white cane: medium-dark skin tone
-1F469 1F3FF 200D 1F9AF                     ; fully-qualified     # 👩🏿‍🦯 E12.0 woman with white cane: dark skin tone
-1F9D1 200D 1F9BC                           ; fully-qualified     # 🧑‍🦼 E12.1 person in motorized wheelchair
-1F9D1 1F3FB 200D 1F9BC                     ; fully-qualified     # 🧑🏻‍🦼 E12.1 person in motorized wheelchair: light skin tone
-1F9D1 1F3FC 200D 1F9BC                     ; fully-qualified     # 🧑🏼‍🦼 E12.1 person in motorized wheelchair: medium-light skin tone
-1F9D1 1F3FD 200D 1F9BC                     ; fully-qualified     # 🧑🏽‍🦼 E12.1 person in motorized wheelchair: medium skin tone
-1F9D1 1F3FE 200D 1F9BC                     ; fully-qualified     # 🧑🏾‍🦼 E12.1 person in motorized wheelchair: medium-dark skin tone
-1F9D1 1F3FF 200D 1F9BC                     ; fully-qualified     # 🧑🏿‍🦼 E12.1 person in motorized wheelchair: dark skin tone
-1F468 200D 1F9BC                           ; fully-qualified     # 👨‍🦼 E12.0 man in motorized wheelchair
-1F468 1F3FB 200D 1F9BC                     ; fully-qualified     # 👨🏻‍🦼 E12.0 man in motorized wheelchair: light skin tone
-1F468 1F3FC 200D 1F9BC                     ; fully-qualified     # 👨🏼‍🦼 E12.0 man in motorized wheelchair: medium-light skin tone
-1F468 1F3FD 200D 1F9BC                     ; fully-qualified     # 👨🏽‍🦼 E12.0 man in motorized wheelchair: medium skin tone
-1F468 1F3FE 200D 1F9BC                     ; fully-qualified     # 👨🏾‍🦼 E12.0 man in motorized wheelchair: medium-dark skin tone
-1F468 1F3FF 200D 1F9BC                     ; fully-qualified     # 👨🏿‍🦼 E12.0 man in motorized wheelchair: dark skin tone
-1F469 200D 1F9BC                           ; fully-qualified     # 👩‍🦼 E12.0 woman in motorized wheelchair
-1F469 1F3FB 200D 1F9BC                     ; fully-qualified     # 👩🏻‍🦼 E12.0 woman in motorized wheelchair: light skin tone
-1F469 1F3FC 200D 1F9BC                     ; fully-qualified     # 👩🏼‍🦼 E12.0 woman in motorized wheelchair: medium-light skin tone
-1F469 1F3FD 200D 1F9BC                     ; fully-qualified     # 👩🏽‍🦼 E12.0 woman in motorized wheelchair: medium skin tone
-1F469 1F3FE 200D 1F9BC                     ; fully-qualified     # 👩🏾‍🦼 E12.0 woman in motorized wheelchair: medium-dark skin tone
-1F469 1F3FF 200D 1F9BC                     ; fully-qualified     # 👩🏿‍🦼 E12.0 woman in motorized wheelchair: dark skin tone
-1F9D1 200D 1F9BD                           ; fully-qualified     # 🧑‍🦽 E12.1 person in manual wheelchair
-1F9D1 1F3FB 200D 1F9BD                     ; fully-qualified     # 🧑🏻‍🦽 E12.1 person in manual wheelchair: light skin tone
-1F9D1 1F3FC 200D 1F9BD                     ; fully-qualified     # 🧑🏼‍🦽 E12.1 person in manual wheelchair: medium-light skin tone
-1F9D1 1F3FD 200D 1F9BD                     ; fully-qualified     # 🧑🏽‍🦽 E12.1 person in manual wheelchair: medium skin tone
-1F9D1 1F3FE 200D 1F9BD                     ; fully-qualified     # 🧑🏾‍🦽 E12.1 person in manual wheelchair: medium-dark skin tone
-1F9D1 1F3FF 200D 1F9BD                     ; fully-qualified     # 🧑🏿‍🦽 E12.1 person in manual wheelchair: dark skin tone
-1F468 200D 1F9BD                           ; fully-qualified     # 👨‍🦽 E12.0 man in manual wheelchair
-1F468 1F3FB 200D 1F9BD                     ; fully-qualified     # 👨🏻‍🦽 E12.0 man in manual wheelchair: light skin tone
-1F468 1F3FC 200D 1F9BD                     ; fully-qualified     # 👨🏼‍🦽 E12.0 man in manual wheelchair: medium-light skin tone
-1F468 1F3FD 200D 1F9BD                     ; fully-qualified     # 👨🏽‍🦽 E12.0 man in manual wheelchair: medium skin tone
-1F468 1F3FE 200D 1F9BD                     ; fully-qualified     # 👨🏾‍🦽 E12.0 man in manual wheelchair: medium-dark skin tone
-1F468 1F3FF 200D 1F9BD                     ; fully-qualified     # 👨🏿‍🦽 E12.0 man in manual wheelchair: dark skin tone
-1F469 200D 1F9BD                           ; fully-qualified     # 👩‍🦽 E12.0 woman in manual wheelchair
-1F469 1F3FB 200D 1F9BD                     ; fully-qualified     # 👩🏻‍🦽 E12.0 woman in manual wheelchair: light skin tone
-1F469 1F3FC 200D 1F9BD                     ; fully-qualified     # 👩🏼‍🦽 E12.0 woman in manual wheelchair: medium-light skin tone
-1F469 1F3FD 200D 1F9BD                     ; fully-qualified     # 👩🏽‍🦽 E12.0 woman in manual wheelchair: medium skin tone
-1F469 1F3FE 200D 1F9BD                     ; fully-qualified     # 👩🏾‍🦽 E12.0 woman in manual wheelchair: medium-dark skin tone
-1F469 1F3FF 200D 1F9BD                     ; fully-qualified     # 👩🏿‍🦽 E12.0 woman in manual wheelchair: dark skin tone
-1F3C3                                      ; fully-qualified     # 🏃 E0.6 person running
-1F3C3 1F3FB                                ; fully-qualified     # 🏃🏻 E1.0 person running: light skin tone
-1F3C3 1F3FC                                ; fully-qualified     # 🏃🏼 E1.0 person running: medium-light skin tone
-1F3C3 1F3FD                                ; fully-qualified     # 🏃🏽 E1.0 person running: medium skin tone
-1F3C3 1F3FE                                ; fully-qualified     # 🏃🏾 E1.0 person running: medium-dark skin tone
-1F3C3 1F3FF                                ; fully-qualified     # 🏃🏿 E1.0 person running: dark skin tone
-1F3C3 200D 2642 FE0F                       ; fully-qualified     # 🏃‍♂️ E4.0 man running
-1F3C3 200D 2642                            ; minimally-qualified # 🏃‍♂ E4.0 man running
-1F3C3 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🏃🏻‍♂️ E4.0 man running: light skin tone
-1F3C3 1F3FB 200D 2642                      ; minimally-qualified # 🏃🏻‍♂ E4.0 man running: light skin tone
-1F3C3 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🏃🏼‍♂️ E4.0 man running: medium-light skin tone
-1F3C3 1F3FC 200D 2642                      ; minimally-qualified # 🏃🏼‍♂ E4.0 man running: medium-light skin tone
-1F3C3 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🏃🏽‍♂️ E4.0 man running: medium skin tone
-1F3C3 1F3FD 200D 2642                      ; minimally-qualified # 🏃🏽‍♂ E4.0 man running: medium skin tone
-1F3C3 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🏃🏾‍♂️ E4.0 man running: medium-dark skin tone
-1F3C3 1F3FE 200D 2642                      ; minimally-qualified # 🏃🏾‍♂ E4.0 man running: medium-dark skin tone
-1F3C3 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🏃🏿‍♂️ E4.0 man running: dark skin tone
-1F3C3 1F3FF 200D 2642                      ; minimally-qualified # 🏃🏿‍♂ E4.0 man running: dark skin tone
-1F3C3 200D 2640 FE0F                       ; fully-qualified     # 🏃‍♀️ E4.0 woman running
-1F3C3 200D 2640                            ; minimally-qualified # 🏃‍♀ E4.0 woman running
-1F3C3 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🏃🏻‍♀️ E4.0 woman running: light skin tone
-1F3C3 1F3FB 200D 2640                      ; minimally-qualified # 🏃🏻‍♀ E4.0 woman running: light skin tone
-1F3C3 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🏃🏼‍♀️ E4.0 woman running: medium-light skin tone
-1F3C3 1F3FC 200D 2640                      ; minimally-qualified # 🏃🏼‍♀ E4.0 woman running: medium-light skin tone
-1F3C3 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🏃🏽‍♀️ E4.0 woman running: medium skin tone
-1F3C3 1F3FD 200D 2640                      ; minimally-qualified # 🏃🏽‍♀ E4.0 woman running: medium skin tone
-1F3C3 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🏃🏾‍♀️ E4.0 woman running: medium-dark skin tone
-1F3C3 1F3FE 200D 2640                      ; minimally-qualified # 🏃🏾‍♀ E4.0 woman running: medium-dark skin tone
-1F3C3 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🏃🏿‍♀️ E4.0 woman running: dark skin tone
-1F3C3 1F3FF 200D 2640                      ; minimally-qualified # 🏃🏿‍♀ E4.0 woman running: dark skin tone
-1F483                                      ; fully-qualified     # 💃 E0.6 woman dancing
-1F483 1F3FB                                ; fully-qualified     # 💃🏻 E1.0 woman dancing: light skin tone
-1F483 1F3FC                                ; fully-qualified     # 💃🏼 E1.0 woman dancing: medium-light skin tone
-1F483 1F3FD                                ; fully-qualified     # 💃🏽 E1.0 woman dancing: medium skin tone
-1F483 1F3FE                                ; fully-qualified     # 💃🏾 E1.0 woman dancing: medium-dark skin tone
-1F483 1F3FF                                ; fully-qualified     # 💃🏿 E1.0 woman dancing: dark skin tone
-1F57A                                      ; fully-qualified     # 🕺 E3.0 man dancing
-1F57A 1F3FB                                ; fully-qualified     # 🕺🏻 E3.0 man dancing: light skin tone
-1F57A 1F3FC                                ; fully-qualified     # 🕺🏼 E3.0 man dancing: medium-light skin tone
-1F57A 1F3FD                                ; fully-qualified     # 🕺🏽 E3.0 man dancing: medium skin tone
-1F57A 1F3FE                                ; fully-qualified     # 🕺🏾 E3.0 man dancing: medium-dark skin tone
-1F57A 1F3FF                                ; fully-qualified     # 🕺🏿 E3.0 man dancing: dark skin tone
-1F574 FE0F                                 ; fully-qualified     # 🕴️ E0.7 person in suit levitating
-1F574                                      ; unqualified         # 🕴 E0.7 person in suit levitating
-1F574 1F3FB                                ; fully-qualified     # 🕴🏻 E4.0 person in suit levitating: light skin tone
-1F574 1F3FC                                ; fully-qualified     # 🕴🏼 E4.0 person in suit levitating: medium-light skin tone
-1F574 1F3FD                                ; fully-qualified     # 🕴🏽 E4.0 person in suit levitating: medium skin tone
-1F574 1F3FE                                ; fully-qualified     # 🕴🏾 E4.0 person in suit levitating: medium-dark skin tone
-1F574 1F3FF                                ; fully-qualified     # 🕴🏿 E4.0 person in suit levitating: dark skin tone
-1F46F                                      ; fully-qualified     # 👯 E0.6 people with bunny ears
-1F46F 200D 2642 FE0F                       ; fully-qualified     # 👯‍♂️ E4.0 men with bunny ears
-1F46F 200D 2642                            ; minimally-qualified # 👯‍♂ E4.0 men with bunny ears
-1F46F 200D 2640 FE0F                       ; fully-qualified     # 👯‍♀️ E4.0 women with bunny ears
-1F46F 200D 2640                            ; minimally-qualified # 👯‍♀ E4.0 women with bunny ears
-1F9D6                                      ; fully-qualified     # 🧖 E5.0 person in steamy room
-1F9D6 1F3FB                                ; fully-qualified     # 🧖🏻 E5.0 person in steamy room: light skin tone
-1F9D6 1F3FC                                ; fully-qualified     # 🧖🏼 E5.0 person in steamy room: medium-light skin tone
-1F9D6 1F3FD                                ; fully-qualified     # 🧖🏽 E5.0 person in steamy room: medium skin tone
-1F9D6 1F3FE                                ; fully-qualified     # 🧖🏾 E5.0 person in steamy room: medium-dark skin tone
-1F9D6 1F3FF                                ; fully-qualified     # 🧖🏿 E5.0 person in steamy room: dark skin tone
-1F9D6 200D 2642 FE0F                       ; fully-qualified     # 🧖‍♂️ E5.0 man in steamy room
-1F9D6 200D 2642                            ; minimally-qualified # 🧖‍♂ E5.0 man in steamy room
-1F9D6 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🧖🏻‍♂️ E5.0 man in steamy room: light skin tone
-1F9D6 1F3FB 200D 2642                      ; minimally-qualified # 🧖🏻‍♂ E5.0 man in steamy room: light skin tone
-1F9D6 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🧖🏼‍♂️ E5.0 man in steamy room: medium-light skin tone
-1F9D6 1F3FC 200D 2642                      ; minimally-qualified # 🧖🏼‍♂ E5.0 man in steamy room: medium-light skin tone
-1F9D6 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🧖🏽‍♂️ E5.0 man in steamy room: medium skin tone
-1F9D6 1F3FD 200D 2642                      ; minimally-qualified # 🧖🏽‍♂ E5.0 man in steamy room: medium skin tone
-1F9D6 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🧖🏾‍♂️ E5.0 man in steamy room: medium-dark skin tone
-1F9D6 1F3FE 200D 2642                      ; minimally-qualified # 🧖🏾‍♂ E5.0 man in steamy room: medium-dark skin tone
-1F9D6 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🧖🏿‍♂️ E5.0 man in steamy room: dark skin tone
-1F9D6 1F3FF 200D 2642                      ; minimally-qualified # 🧖🏿‍♂ E5.0 man in steamy room: dark skin tone
-1F9D6 200D 2640 FE0F                       ; fully-qualified     # 🧖‍♀️ E5.0 woman in steamy room
-1F9D6 200D 2640                            ; minimally-qualified # 🧖‍♀ E5.0 woman in steamy room
-1F9D6 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🧖🏻‍♀️ E5.0 woman in steamy room: light skin tone
-1F9D6 1F3FB 200D 2640                      ; minimally-qualified # 🧖🏻‍♀ E5.0 woman in steamy room: light skin tone
-1F9D6 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🧖🏼‍♀️ E5.0 woman in steamy room: medium-light skin tone
-1F9D6 1F3FC 200D 2640                      ; minimally-qualified # 🧖🏼‍♀ E5.0 woman in steamy room: medium-light skin tone
-1F9D6 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🧖🏽‍♀️ E5.0 woman in steamy room: medium skin tone
-1F9D6 1F3FD 200D 2640                      ; minimally-qualified # 🧖🏽‍♀ E5.0 woman in steamy room: medium skin tone
-1F9D6 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🧖🏾‍♀️ E5.0 woman in steamy room: medium-dark skin tone
-1F9D6 1F3FE 200D 2640                      ; minimally-qualified # 🧖🏾‍♀ E5.0 woman in steamy room: medium-dark skin tone
-1F9D6 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🧖🏿‍♀️ E5.0 woman in steamy room: dark skin tone
-1F9D6 1F3FF 200D 2640                      ; minimally-qualified # 🧖🏿‍♀ E5.0 woman in steamy room: dark skin tone
-1F9D7                                      ; fully-qualified     # 🧗 E5.0 person climbing
-1F9D7 1F3FB                                ; fully-qualified     # 🧗🏻 E5.0 person climbing: light skin tone
-1F9D7 1F3FC                                ; fully-qualified     # 🧗🏼 E5.0 person climbing: medium-light skin tone
-1F9D7 1F3FD                                ; fully-qualified     # 🧗🏽 E5.0 person climbing: medium skin tone
-1F9D7 1F3FE                                ; fully-qualified     # 🧗🏾 E5.0 person climbing: medium-dark skin tone
-1F9D7 1F3FF                                ; fully-qualified     # 🧗🏿 E5.0 person climbing: dark skin tone
-1F9D7 200D 2642 FE0F                       ; fully-qualified     # 🧗‍♂️ E5.0 man climbing
-1F9D7 200D 2642                            ; minimally-qualified # 🧗‍♂ E5.0 man climbing
-1F9D7 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🧗🏻‍♂️ E5.0 man climbing: light skin tone
-1F9D7 1F3FB 200D 2642                      ; minimally-qualified # 🧗🏻‍♂ E5.0 man climbing: light skin tone
-1F9D7 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🧗🏼‍♂️ E5.0 man climbing: medium-light skin tone
-1F9D7 1F3FC 200D 2642                      ; minimally-qualified # 🧗🏼‍♂ E5.0 man climbing: medium-light skin tone
-1F9D7 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🧗🏽‍♂️ E5.0 man climbing: medium skin tone
-1F9D7 1F3FD 200D 2642                      ; minimally-qualified # 🧗🏽‍♂ E5.0 man climbing: medium skin tone
-1F9D7 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🧗🏾‍♂️ E5.0 man climbing: medium-dark skin tone
-1F9D7 1F3FE 200D 2642                      ; minimally-qualified # 🧗🏾‍♂ E5.0 man climbing: medium-dark skin tone
-1F9D7 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🧗🏿‍♂️ E5.0 man climbing: dark skin tone
-1F9D7 1F3FF 200D 2642                      ; minimally-qualified # 🧗🏿‍♂ E5.0 man climbing: dark skin tone
-1F9D7 200D 2640 FE0F                       ; fully-qualified     # 🧗‍♀️ E5.0 woman climbing
-1F9D7 200D 2640                            ; minimally-qualified # 🧗‍♀ E5.0 woman climbing
-1F9D7 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🧗🏻‍♀️ E5.0 woman climbing: light skin tone
-1F9D7 1F3FB 200D 2640                      ; minimally-qualified # 🧗🏻‍♀ E5.0 woman climbing: light skin tone
-1F9D7 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🧗🏼‍♀️ E5.0 woman climbing: medium-light skin tone
-1F9D7 1F3FC 200D 2640                      ; minimally-qualified # 🧗🏼‍♀ E5.0 woman climbing: medium-light skin tone
-1F9D7 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🧗🏽‍♀️ E5.0 woman climbing: medium skin tone
-1F9D7 1F3FD 200D 2640                      ; minimally-qualified # 🧗🏽‍♀ E5.0 woman climbing: medium skin tone
-1F9D7 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🧗🏾‍♀️ E5.0 woman climbing: medium-dark skin tone
-1F9D7 1F3FE 200D 2640                      ; minimally-qualified # 🧗🏾‍♀ E5.0 woman climbing: medium-dark skin tone
-1F9D7 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🧗🏿‍♀️ E5.0 woman climbing: dark skin tone
-1F9D7 1F3FF 200D 2640                      ; minimally-qualified # 🧗🏿‍♀ E5.0 woman climbing: dark skin tone
+1F486                                                  ; fully-qualified     # 💆 E0.6 person getting massage
+1F486 1F3FB                                            ; fully-qualified     # 💆🏻 E1.0 person getting massage: light skin tone
+1F486 1F3FC                                            ; fully-qualified     # 💆🏼 E1.0 person getting massage: medium-light skin tone
+1F486 1F3FD                                            ; fully-qualified     # 💆🏽 E1.0 person getting massage: medium skin tone
+1F486 1F3FE                                            ; fully-qualified     # 💆🏾 E1.0 person getting massage: medium-dark skin tone
+1F486 1F3FF                                            ; fully-qualified     # 💆🏿 E1.0 person getting massage: dark skin tone
+1F486 200D 2642 FE0F                                   ; fully-qualified     # 💆‍♂️ E4.0 man getting massage
+1F486 200D 2642                                        ; minimally-qualified # 💆‍♂ E4.0 man getting massage
+1F486 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 💆🏻‍♂️ E4.0 man getting massage: light skin tone
+1F486 1F3FB 200D 2642                                  ; minimally-qualified # 💆🏻‍♂ E4.0 man getting massage: light skin tone
+1F486 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 💆🏼‍♂️ E4.0 man getting massage: medium-light skin tone
+1F486 1F3FC 200D 2642                                  ; minimally-qualified # 💆🏼‍♂ E4.0 man getting massage: medium-light skin tone
+1F486 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 💆🏽‍♂️ E4.0 man getting massage: medium skin tone
+1F486 1F3FD 200D 2642                                  ; minimally-qualified # 💆🏽‍♂ E4.0 man getting massage: medium skin tone
+1F486 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 💆🏾‍♂️ E4.0 man getting massage: medium-dark skin tone
+1F486 1F3FE 200D 2642                                  ; minimally-qualified # 💆🏾‍♂ E4.0 man getting massage: medium-dark skin tone
+1F486 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 💆🏿‍♂️ E4.0 man getting massage: dark skin tone
+1F486 1F3FF 200D 2642                                  ; minimally-qualified # 💆🏿‍♂ E4.0 man getting massage: dark skin tone
+1F486 200D 2640 FE0F                                   ; fully-qualified     # 💆‍♀️ E4.0 woman getting massage
+1F486 200D 2640                                        ; minimally-qualified # 💆‍♀ E4.0 woman getting massage
+1F486 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 💆🏻‍♀️ E4.0 woman getting massage: light skin tone
+1F486 1F3FB 200D 2640                                  ; minimally-qualified # 💆🏻‍♀ E4.0 woman getting massage: light skin tone
+1F486 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 💆🏼‍♀️ E4.0 woman getting massage: medium-light skin tone
+1F486 1F3FC 200D 2640                                  ; minimally-qualified # 💆🏼‍♀ E4.0 woman getting massage: medium-light skin tone
+1F486 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 💆🏽‍♀️ E4.0 woman getting massage: medium skin tone
+1F486 1F3FD 200D 2640                                  ; minimally-qualified # 💆🏽‍♀ E4.0 woman getting massage: medium skin tone
+1F486 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 💆🏾‍♀️ E4.0 woman getting massage: medium-dark skin tone
+1F486 1F3FE 200D 2640                                  ; minimally-qualified # 💆🏾‍♀ E4.0 woman getting massage: medium-dark skin tone
+1F486 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 💆🏿‍♀️ E4.0 woman getting massage: dark skin tone
+1F486 1F3FF 200D 2640                                  ; minimally-qualified # 💆🏿‍♀ E4.0 woman getting massage: dark skin tone
+1F487                                                  ; fully-qualified     # 💇 E0.6 person getting haircut
+1F487 1F3FB                                            ; fully-qualified     # 💇🏻 E1.0 person getting haircut: light skin tone
+1F487 1F3FC                                            ; fully-qualified     # 💇🏼 E1.0 person getting haircut: medium-light skin tone
+1F487 1F3FD                                            ; fully-qualified     # 💇🏽 E1.0 person getting haircut: medium skin tone
+1F487 1F3FE                                            ; fully-qualified     # 💇🏾 E1.0 person getting haircut: medium-dark skin tone
+1F487 1F3FF                                            ; fully-qualified     # 💇🏿 E1.0 person getting haircut: dark skin tone
+1F487 200D 2642 FE0F                                   ; fully-qualified     # 💇‍♂️ E4.0 man getting haircut
+1F487 200D 2642                                        ; minimally-qualified # 💇‍♂ E4.0 man getting haircut
+1F487 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 💇🏻‍♂️ E4.0 man getting haircut: light skin tone
+1F487 1F3FB 200D 2642                                  ; minimally-qualified # 💇🏻‍♂ E4.0 man getting haircut: light skin tone
+1F487 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 💇🏼‍♂️ E4.0 man getting haircut: medium-light skin tone
+1F487 1F3FC 200D 2642                                  ; minimally-qualified # 💇🏼‍♂ E4.0 man getting haircut: medium-light skin tone
+1F487 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 💇🏽‍♂️ E4.0 man getting haircut: medium skin tone
+1F487 1F3FD 200D 2642                                  ; minimally-qualified # 💇🏽‍♂ E4.0 man getting haircut: medium skin tone
+1F487 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 💇🏾‍♂️ E4.0 man getting haircut: medium-dark skin tone
+1F487 1F3FE 200D 2642                                  ; minimally-qualified # 💇🏾‍♂ E4.0 man getting haircut: medium-dark skin tone
+1F487 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 💇🏿‍♂️ E4.0 man getting haircut: dark skin tone
+1F487 1F3FF 200D 2642                                  ; minimally-qualified # 💇🏿‍♂ E4.0 man getting haircut: dark skin tone
+1F487 200D 2640 FE0F                                   ; fully-qualified     # 💇‍♀️ E4.0 woman getting haircut
+1F487 200D 2640                                        ; minimally-qualified # 💇‍♀ E4.0 woman getting haircut
+1F487 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 💇🏻‍♀️ E4.0 woman getting haircut: light skin tone
+1F487 1F3FB 200D 2640                                  ; minimally-qualified # 💇🏻‍♀ E4.0 woman getting haircut: light skin tone
+1F487 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 💇🏼‍♀️ E4.0 woman getting haircut: medium-light skin tone
+1F487 1F3FC 200D 2640                                  ; minimally-qualified # 💇🏼‍♀ E4.0 woman getting haircut: medium-light skin tone
+1F487 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 💇🏽‍♀️ E4.0 woman getting haircut: medium skin tone
+1F487 1F3FD 200D 2640                                  ; minimally-qualified # 💇🏽‍♀ E4.0 woman getting haircut: medium skin tone
+1F487 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 💇🏾‍♀️ E4.0 woman getting haircut: medium-dark skin tone
+1F487 1F3FE 200D 2640                                  ; minimally-qualified # 💇🏾‍♀ E4.0 woman getting haircut: medium-dark skin tone
+1F487 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 💇🏿‍♀️ E4.0 woman getting haircut: dark skin tone
+1F487 1F3FF 200D 2640                                  ; minimally-qualified # 💇🏿‍♀ E4.0 woman getting haircut: dark skin tone
+1F6B6                                                  ; fully-qualified     # 🚶 E0.6 person walking
+1F6B6 1F3FB                                            ; fully-qualified     # 🚶🏻 E1.0 person walking: light skin tone
+1F6B6 1F3FC                                            ; fully-qualified     # 🚶🏼 E1.0 person walking: medium-light skin tone
+1F6B6 1F3FD                                            ; fully-qualified     # 🚶🏽 E1.0 person walking: medium skin tone
+1F6B6 1F3FE                                            ; fully-qualified     # 🚶🏾 E1.0 person walking: medium-dark skin tone
+1F6B6 1F3FF                                            ; fully-qualified     # 🚶🏿 E1.0 person walking: dark skin tone
+1F6B6 200D 2642 FE0F                                   ; fully-qualified     # 🚶‍♂️ E4.0 man walking
+1F6B6 200D 2642                                        ; minimally-qualified # 🚶‍♂ E4.0 man walking
+1F6B6 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🚶🏻‍♂️ E4.0 man walking: light skin tone
+1F6B6 1F3FB 200D 2642                                  ; minimally-qualified # 🚶🏻‍♂ E4.0 man walking: light skin tone
+1F6B6 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🚶🏼‍♂️ E4.0 man walking: medium-light skin tone
+1F6B6 1F3FC 200D 2642                                  ; minimally-qualified # 🚶🏼‍♂ E4.0 man walking: medium-light skin tone
+1F6B6 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🚶🏽‍♂️ E4.0 man walking: medium skin tone
+1F6B6 1F3FD 200D 2642                                  ; minimally-qualified # 🚶🏽‍♂ E4.0 man walking: medium skin tone
+1F6B6 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🚶🏾‍♂️ E4.0 man walking: medium-dark skin tone
+1F6B6 1F3FE 200D 2642                                  ; minimally-qualified # 🚶🏾‍♂ E4.0 man walking: medium-dark skin tone
+1F6B6 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🚶🏿‍♂️ E4.0 man walking: dark skin tone
+1F6B6 1F3FF 200D 2642                                  ; minimally-qualified # 🚶🏿‍♂ E4.0 man walking: dark skin tone
+1F6B6 200D 2640 FE0F                                   ; fully-qualified     # 🚶‍♀️ E4.0 woman walking
+1F6B6 200D 2640                                        ; minimally-qualified # 🚶‍♀ E4.0 woman walking
+1F6B6 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🚶🏻‍♀️ E4.0 woman walking: light skin tone
+1F6B6 1F3FB 200D 2640                                  ; minimally-qualified # 🚶🏻‍♀ E4.0 woman walking: light skin tone
+1F6B6 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🚶🏼‍♀️ E4.0 woman walking: medium-light skin tone
+1F6B6 1F3FC 200D 2640                                  ; minimally-qualified # 🚶🏼‍♀ E4.0 woman walking: medium-light skin tone
+1F6B6 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🚶🏽‍♀️ E4.0 woman walking: medium skin tone
+1F6B6 1F3FD 200D 2640                                  ; minimally-qualified # 🚶🏽‍♀ E4.0 woman walking: medium skin tone
+1F6B6 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🚶🏾‍♀️ E4.0 woman walking: medium-dark skin tone
+1F6B6 1F3FE 200D 2640                                  ; minimally-qualified # 🚶🏾‍♀ E4.0 woman walking: medium-dark skin tone
+1F6B6 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🚶🏿‍♀️ E4.0 woman walking: dark skin tone
+1F6B6 1F3FF 200D 2640                                  ; minimally-qualified # 🚶🏿‍♀ E4.0 woman walking: dark skin tone
+1F9CD                                                  ; fully-qualified     # 🧍 E12.0 person standing
+1F9CD 1F3FB                                            ; fully-qualified     # 🧍🏻 E12.0 person standing: light skin tone
+1F9CD 1F3FC                                            ; fully-qualified     # 🧍🏼 E12.0 person standing: medium-light skin tone
+1F9CD 1F3FD                                            ; fully-qualified     # 🧍🏽 E12.0 person standing: medium skin tone
+1F9CD 1F3FE                                            ; fully-qualified     # 🧍🏾 E12.0 person standing: medium-dark skin tone
+1F9CD 1F3FF                                            ; fully-qualified     # 🧍🏿 E12.0 person standing: dark skin tone
+1F9CD 200D 2642 FE0F                                   ; fully-qualified     # 🧍‍♂️ E12.0 man standing
+1F9CD 200D 2642                                        ; minimally-qualified # 🧍‍♂ E12.0 man standing
+1F9CD 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🧍🏻‍♂️ E12.0 man standing: light skin tone
+1F9CD 1F3FB 200D 2642                                  ; minimally-qualified # 🧍🏻‍♂ E12.0 man standing: light skin tone
+1F9CD 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🧍🏼‍♂️ E12.0 man standing: medium-light skin tone
+1F9CD 1F3FC 200D 2642                                  ; minimally-qualified # 🧍🏼‍♂ E12.0 man standing: medium-light skin tone
+1F9CD 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🧍🏽‍♂️ E12.0 man standing: medium skin tone
+1F9CD 1F3FD 200D 2642                                  ; minimally-qualified # 🧍🏽‍♂ E12.0 man standing: medium skin tone
+1F9CD 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🧍🏾‍♂️ E12.0 man standing: medium-dark skin tone
+1F9CD 1F3FE 200D 2642                                  ; minimally-qualified # 🧍🏾‍♂ E12.0 man standing: medium-dark skin tone
+1F9CD 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🧍🏿‍♂️ E12.0 man standing: dark skin tone
+1F9CD 1F3FF 200D 2642                                  ; minimally-qualified # 🧍🏿‍♂ E12.0 man standing: dark skin tone
+1F9CD 200D 2640 FE0F                                   ; fully-qualified     # 🧍‍♀️ E12.0 woman standing
+1F9CD 200D 2640                                        ; minimally-qualified # 🧍‍♀ E12.0 woman standing
+1F9CD 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🧍🏻‍♀️ E12.0 woman standing: light skin tone
+1F9CD 1F3FB 200D 2640                                  ; minimally-qualified # 🧍🏻‍♀ E12.0 woman standing: light skin tone
+1F9CD 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🧍🏼‍♀️ E12.0 woman standing: medium-light skin tone
+1F9CD 1F3FC 200D 2640                                  ; minimally-qualified # 🧍🏼‍♀ E12.0 woman standing: medium-light skin tone
+1F9CD 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🧍🏽‍♀️ E12.0 woman standing: medium skin tone
+1F9CD 1F3FD 200D 2640                                  ; minimally-qualified # 🧍🏽‍♀ E12.0 woman standing: medium skin tone
+1F9CD 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🧍🏾‍♀️ E12.0 woman standing: medium-dark skin tone
+1F9CD 1F3FE 200D 2640                                  ; minimally-qualified # 🧍🏾‍♀ E12.0 woman standing: medium-dark skin tone
+1F9CD 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🧍🏿‍♀️ E12.0 woman standing: dark skin tone
+1F9CD 1F3FF 200D 2640                                  ; minimally-qualified # 🧍🏿‍♀ E12.0 woman standing: dark skin tone
+1F9CE                                                  ; fully-qualified     # 🧎 E12.0 person kneeling
+1F9CE 1F3FB                                            ; fully-qualified     # 🧎🏻 E12.0 person kneeling: light skin tone
+1F9CE 1F3FC                                            ; fully-qualified     # 🧎🏼 E12.0 person kneeling: medium-light skin tone
+1F9CE 1F3FD                                            ; fully-qualified     # 🧎🏽 E12.0 person kneeling: medium skin tone
+1F9CE 1F3FE                                            ; fully-qualified     # 🧎🏾 E12.0 person kneeling: medium-dark skin tone
+1F9CE 1F3FF                                            ; fully-qualified     # 🧎🏿 E12.0 person kneeling: dark skin tone
+1F9CE 200D 2642 FE0F                                   ; fully-qualified     # 🧎‍♂️ E12.0 man kneeling
+1F9CE 200D 2642                                        ; minimally-qualified # 🧎‍♂ E12.0 man kneeling
+1F9CE 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🧎🏻‍♂️ E12.0 man kneeling: light skin tone
+1F9CE 1F3FB 200D 2642                                  ; minimally-qualified # 🧎🏻‍♂ E12.0 man kneeling: light skin tone
+1F9CE 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🧎🏼‍♂️ E12.0 man kneeling: medium-light skin tone
+1F9CE 1F3FC 200D 2642                                  ; minimally-qualified # 🧎🏼‍♂ E12.0 man kneeling: medium-light skin tone
+1F9CE 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🧎🏽‍♂️ E12.0 man kneeling: medium skin tone
+1F9CE 1F3FD 200D 2642                                  ; minimally-qualified # 🧎🏽‍♂ E12.0 man kneeling: medium skin tone
+1F9CE 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🧎🏾‍♂️ E12.0 man kneeling: medium-dark skin tone
+1F9CE 1F3FE 200D 2642                                  ; minimally-qualified # 🧎🏾‍♂ E12.0 man kneeling: medium-dark skin tone
+1F9CE 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🧎🏿‍♂️ E12.0 man kneeling: dark skin tone
+1F9CE 1F3FF 200D 2642                                  ; minimally-qualified # 🧎🏿‍♂ E12.0 man kneeling: dark skin tone
+1F9CE 200D 2640 FE0F                                   ; fully-qualified     # 🧎‍♀️ E12.0 woman kneeling
+1F9CE 200D 2640                                        ; minimally-qualified # 🧎‍♀ E12.0 woman kneeling
+1F9CE 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🧎🏻‍♀️ E12.0 woman kneeling: light skin tone
+1F9CE 1F3FB 200D 2640                                  ; minimally-qualified # 🧎🏻‍♀ E12.0 woman kneeling: light skin tone
+1F9CE 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🧎🏼‍♀️ E12.0 woman kneeling: medium-light skin tone
+1F9CE 1F3FC 200D 2640                                  ; minimally-qualified # 🧎🏼‍♀ E12.0 woman kneeling: medium-light skin tone
+1F9CE 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🧎🏽‍♀️ E12.0 woman kneeling: medium skin tone
+1F9CE 1F3FD 200D 2640                                  ; minimally-qualified # 🧎🏽‍♀ E12.0 woman kneeling: medium skin tone
+1F9CE 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🧎🏾‍♀️ E12.0 woman kneeling: medium-dark skin tone
+1F9CE 1F3FE 200D 2640                                  ; minimally-qualified # 🧎🏾‍♀ E12.0 woman kneeling: medium-dark skin tone
+1F9CE 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🧎🏿‍♀️ E12.0 woman kneeling: dark skin tone
+1F9CE 1F3FF 200D 2640                                  ; minimally-qualified # 🧎🏿‍♀ E12.0 woman kneeling: dark skin tone
+1F9D1 200D 1F9AF                                       ; fully-qualified     # 🧑‍🦯 E12.1 person with white cane
+1F9D1 1F3FB 200D 1F9AF                                 ; fully-qualified     # 🧑🏻‍🦯 E12.1 person with white cane: light skin tone
+1F9D1 1F3FC 200D 1F9AF                                 ; fully-qualified     # 🧑🏼‍🦯 E12.1 person with white cane: medium-light skin tone
+1F9D1 1F3FD 200D 1F9AF                                 ; fully-qualified     # 🧑🏽‍🦯 E12.1 person with white cane: medium skin tone
+1F9D1 1F3FE 200D 1F9AF                                 ; fully-qualified     # 🧑🏾‍🦯 E12.1 person with white cane: medium-dark skin tone
+1F9D1 1F3FF 200D 1F9AF                                 ; fully-qualified     # 🧑🏿‍🦯 E12.1 person with white cane: dark skin tone
+1F468 200D 1F9AF                                       ; fully-qualified     # 👨‍🦯 E12.0 man with white cane
+1F468 1F3FB 200D 1F9AF                                 ; fully-qualified     # 👨🏻‍🦯 E12.0 man with white cane: light skin tone
+1F468 1F3FC 200D 1F9AF                                 ; fully-qualified     # 👨🏼‍🦯 E12.0 man with white cane: medium-light skin tone
+1F468 1F3FD 200D 1F9AF                                 ; fully-qualified     # 👨🏽‍🦯 E12.0 man with white cane: medium skin tone
+1F468 1F3FE 200D 1F9AF                                 ; fully-qualified     # 👨🏾‍🦯 E12.0 man with white cane: medium-dark skin tone
+1F468 1F3FF 200D 1F9AF                                 ; fully-qualified     # 👨🏿‍🦯 E12.0 man with white cane: dark skin tone
+1F469 200D 1F9AF                                       ; fully-qualified     # 👩‍🦯 E12.0 woman with white cane
+1F469 1F3FB 200D 1F9AF                                 ; fully-qualified     # 👩🏻‍🦯 E12.0 woman with white cane: light skin tone
+1F469 1F3FC 200D 1F9AF                                 ; fully-qualified     # 👩🏼‍🦯 E12.0 woman with white cane: medium-light skin tone
+1F469 1F3FD 200D 1F9AF                                 ; fully-qualified     # 👩🏽‍🦯 E12.0 woman with white cane: medium skin tone
+1F469 1F3FE 200D 1F9AF                                 ; fully-qualified     # 👩🏾‍🦯 E12.0 woman with white cane: medium-dark skin tone
+1F469 1F3FF 200D 1F9AF                                 ; fully-qualified     # 👩🏿‍🦯 E12.0 woman with white cane: dark skin tone
+1F9D1 200D 1F9BC                                       ; fully-qualified     # 🧑‍🦼 E12.1 person in motorized wheelchair
+1F9D1 1F3FB 200D 1F9BC                                 ; fully-qualified     # 🧑🏻‍🦼 E12.1 person in motorized wheelchair: light skin tone
+1F9D1 1F3FC 200D 1F9BC                                 ; fully-qualified     # 🧑🏼‍🦼 E12.1 person in motorized wheelchair: medium-light skin tone
+1F9D1 1F3FD 200D 1F9BC                                 ; fully-qualified     # 🧑🏽‍🦼 E12.1 person in motorized wheelchair: medium skin tone
+1F9D1 1F3FE 200D 1F9BC                                 ; fully-qualified     # 🧑🏾‍🦼 E12.1 person in motorized wheelchair: medium-dark skin tone
+1F9D1 1F3FF 200D 1F9BC                                 ; fully-qualified     # 🧑🏿‍🦼 E12.1 person in motorized wheelchair: dark skin tone
+1F468 200D 1F9BC                                       ; fully-qualified     # 👨‍🦼 E12.0 man in motorized wheelchair
+1F468 1F3FB 200D 1F9BC                                 ; fully-qualified     # 👨🏻‍🦼 E12.0 man in motorized wheelchair: light skin tone
+1F468 1F3FC 200D 1F9BC                                 ; fully-qualified     # 👨🏼‍🦼 E12.0 man in motorized wheelchair: medium-light skin tone
+1F468 1F3FD 200D 1F9BC                                 ; fully-qualified     # 👨🏽‍🦼 E12.0 man in motorized wheelchair: medium skin tone
+1F468 1F3FE 200D 1F9BC                                 ; fully-qualified     # 👨🏾‍🦼 E12.0 man in motorized wheelchair: medium-dark skin tone
+1F468 1F3FF 200D 1F9BC                                 ; fully-qualified     # 👨🏿‍🦼 E12.0 man in motorized wheelchair: dark skin tone
+1F469 200D 1F9BC                                       ; fully-qualified     # 👩‍🦼 E12.0 woman in motorized wheelchair
+1F469 1F3FB 200D 1F9BC                                 ; fully-qualified     # 👩🏻‍🦼 E12.0 woman in motorized wheelchair: light skin tone
+1F469 1F3FC 200D 1F9BC                                 ; fully-qualified     # 👩🏼‍🦼 E12.0 woman in motorized wheelchair: medium-light skin tone
+1F469 1F3FD 200D 1F9BC                                 ; fully-qualified     # 👩🏽‍🦼 E12.0 woman in motorized wheelchair: medium skin tone
+1F469 1F3FE 200D 1F9BC                                 ; fully-qualified     # 👩🏾‍🦼 E12.0 woman in motorized wheelchair: medium-dark skin tone
+1F469 1F3FF 200D 1F9BC                                 ; fully-qualified     # 👩🏿‍🦼 E12.0 woman in motorized wheelchair: dark skin tone
+1F9D1 200D 1F9BD                                       ; fully-qualified     # 🧑‍🦽 E12.1 person in manual wheelchair
+1F9D1 1F3FB 200D 1F9BD                                 ; fully-qualified     # 🧑🏻‍🦽 E12.1 person in manual wheelchair: light skin tone
+1F9D1 1F3FC 200D 1F9BD                                 ; fully-qualified     # 🧑🏼‍🦽 E12.1 person in manual wheelchair: medium-light skin tone
+1F9D1 1F3FD 200D 1F9BD                                 ; fully-qualified     # 🧑🏽‍🦽 E12.1 person in manual wheelchair: medium skin tone
+1F9D1 1F3FE 200D 1F9BD                                 ; fully-qualified     # 🧑🏾‍🦽 E12.1 person in manual wheelchair: medium-dark skin tone
+1F9D1 1F3FF 200D 1F9BD                                 ; fully-qualified     # 🧑🏿‍🦽 E12.1 person in manual wheelchair: dark skin tone
+1F468 200D 1F9BD                                       ; fully-qualified     # 👨‍🦽 E12.0 man in manual wheelchair
+1F468 1F3FB 200D 1F9BD                                 ; fully-qualified     # 👨🏻‍🦽 E12.0 man in manual wheelchair: light skin tone
+1F468 1F3FC 200D 1F9BD                                 ; fully-qualified     # 👨🏼‍🦽 E12.0 man in manual wheelchair: medium-light skin tone
+1F468 1F3FD 200D 1F9BD                                 ; fully-qualified     # 👨🏽‍🦽 E12.0 man in manual wheelchair: medium skin tone
+1F468 1F3FE 200D 1F9BD                                 ; fully-qualified     # 👨🏾‍🦽 E12.0 man in manual wheelchair: medium-dark skin tone
+1F468 1F3FF 200D 1F9BD                                 ; fully-qualified     # 👨🏿‍🦽 E12.0 man in manual wheelchair: dark skin tone
+1F469 200D 1F9BD                                       ; fully-qualified     # 👩‍🦽 E12.0 woman in manual wheelchair
+1F469 1F3FB 200D 1F9BD                                 ; fully-qualified     # 👩🏻‍🦽 E12.0 woman in manual wheelchair: light skin tone
+1F469 1F3FC 200D 1F9BD                                 ; fully-qualified     # 👩🏼‍🦽 E12.0 woman in manual wheelchair: medium-light skin tone
+1F469 1F3FD 200D 1F9BD                                 ; fully-qualified     # 👩🏽‍🦽 E12.0 woman in manual wheelchair: medium skin tone
+1F469 1F3FE 200D 1F9BD                                 ; fully-qualified     # 👩🏾‍🦽 E12.0 woman in manual wheelchair: medium-dark skin tone
+1F469 1F3FF 200D 1F9BD                                 ; fully-qualified     # 👩🏿‍🦽 E12.0 woman in manual wheelchair: dark skin tone
+1F3C3                                                  ; fully-qualified     # 🏃 E0.6 person running
+1F3C3 1F3FB                                            ; fully-qualified     # 🏃🏻 E1.0 person running: light skin tone
+1F3C3 1F3FC                                            ; fully-qualified     # 🏃🏼 E1.0 person running: medium-light skin tone
+1F3C3 1F3FD                                            ; fully-qualified     # 🏃🏽 E1.0 person running: medium skin tone
+1F3C3 1F3FE                                            ; fully-qualified     # 🏃🏾 E1.0 person running: medium-dark skin tone
+1F3C3 1F3FF                                            ; fully-qualified     # 🏃🏿 E1.0 person running: dark skin tone
+1F3C3 200D 2642 FE0F                                   ; fully-qualified     # 🏃‍♂️ E4.0 man running
+1F3C3 200D 2642                                        ; minimally-qualified # 🏃‍♂ E4.0 man running
+1F3C3 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🏃🏻‍♂️ E4.0 man running: light skin tone
+1F3C3 1F3FB 200D 2642                                  ; minimally-qualified # 🏃🏻‍♂ E4.0 man running: light skin tone
+1F3C3 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🏃🏼‍♂️ E4.0 man running: medium-light skin tone
+1F3C3 1F3FC 200D 2642                                  ; minimally-qualified # 🏃🏼‍♂ E4.0 man running: medium-light skin tone
+1F3C3 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🏃🏽‍♂️ E4.0 man running: medium skin tone
+1F3C3 1F3FD 200D 2642                                  ; minimally-qualified # 🏃🏽‍♂ E4.0 man running: medium skin tone
+1F3C3 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🏃🏾‍♂️ E4.0 man running: medium-dark skin tone
+1F3C3 1F3FE 200D 2642                                  ; minimally-qualified # 🏃🏾‍♂ E4.0 man running: medium-dark skin tone
+1F3C3 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🏃🏿‍♂️ E4.0 man running: dark skin tone
+1F3C3 1F3FF 200D 2642                                  ; minimally-qualified # 🏃🏿‍♂ E4.0 man running: dark skin tone
+1F3C3 200D 2640 FE0F                                   ; fully-qualified     # 🏃‍♀️ E4.0 woman running
+1F3C3 200D 2640                                        ; minimally-qualified # 🏃‍♀ E4.0 woman running
+1F3C3 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🏃🏻‍♀️ E4.0 woman running: light skin tone
+1F3C3 1F3FB 200D 2640                                  ; minimally-qualified # 🏃🏻‍♀ E4.0 woman running: light skin tone
+1F3C3 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🏃🏼‍♀️ E4.0 woman running: medium-light skin tone
+1F3C3 1F3FC 200D 2640                                  ; minimally-qualified # 🏃🏼‍♀ E4.0 woman running: medium-light skin tone
+1F3C3 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🏃🏽‍♀️ E4.0 woman running: medium skin tone
+1F3C3 1F3FD 200D 2640                                  ; minimally-qualified # 🏃🏽‍♀ E4.0 woman running: medium skin tone
+1F3C3 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🏃🏾‍♀️ E4.0 woman running: medium-dark skin tone
+1F3C3 1F3FE 200D 2640                                  ; minimally-qualified # 🏃🏾‍♀ E4.0 woman running: medium-dark skin tone
+1F3C3 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🏃🏿‍♀️ E4.0 woman running: dark skin tone
+1F3C3 1F3FF 200D 2640                                  ; minimally-qualified # 🏃🏿‍♀ E4.0 woman running: dark skin tone
+1F483                                                  ; fully-qualified     # 💃 E0.6 woman dancing
+1F483 1F3FB                                            ; fully-qualified     # 💃🏻 E1.0 woman dancing: light skin tone
+1F483 1F3FC                                            ; fully-qualified     # 💃🏼 E1.0 woman dancing: medium-light skin tone
+1F483 1F3FD                                            ; fully-qualified     # 💃🏽 E1.0 woman dancing: medium skin tone
+1F483 1F3FE                                            ; fully-qualified     # 💃🏾 E1.0 woman dancing: medium-dark skin tone
+1F483 1F3FF                                            ; fully-qualified     # 💃🏿 E1.0 woman dancing: dark skin tone
+1F57A                                                  ; fully-qualified     # 🕺 E3.0 man dancing
+1F57A 1F3FB                                            ; fully-qualified     # 🕺🏻 E3.0 man dancing: light skin tone
+1F57A 1F3FC                                            ; fully-qualified     # 🕺🏼 E3.0 man dancing: medium-light skin tone
+1F57A 1F3FD                                            ; fully-qualified     # 🕺🏽 E3.0 man dancing: medium skin tone
+1F57A 1F3FE                                            ; fully-qualified     # 🕺🏾 E3.0 man dancing: medium-dark skin tone
+1F57A 1F3FF                                            ; fully-qualified     # 🕺🏿 E3.0 man dancing: dark skin tone
+1F574 FE0F                                             ; fully-qualified     # 🕴️ E0.7 person in suit levitating
+1F574                                                  ; unqualified         # 🕴 E0.7 person in suit levitating
+1F574 1F3FB                                            ; fully-qualified     # 🕴🏻 E4.0 person in suit levitating: light skin tone
+1F574 1F3FC                                            ; fully-qualified     # 🕴🏼 E4.0 person in suit levitating: medium-light skin tone
+1F574 1F3FD                                            ; fully-qualified     # 🕴🏽 E4.0 person in suit levitating: medium skin tone
+1F574 1F3FE                                            ; fully-qualified     # 🕴🏾 E4.0 person in suit levitating: medium-dark skin tone
+1F574 1F3FF                                            ; fully-qualified     # 🕴🏿 E4.0 person in suit levitating: dark skin tone
+1F46F                                                  ; fully-qualified     # 👯 E0.6 people with bunny ears
+1F46F 200D 2642 FE0F                                   ; fully-qualified     # 👯‍♂️ E4.0 men with bunny ears
+1F46F 200D 2642                                        ; minimally-qualified # 👯‍♂ E4.0 men with bunny ears
+1F46F 200D 2640 FE0F                                   ; fully-qualified     # 👯‍♀️ E4.0 women with bunny ears
+1F46F 200D 2640                                        ; minimally-qualified # 👯‍♀ E4.0 women with bunny ears
+1F9D6                                                  ; fully-qualified     # 🧖 E5.0 person in steamy room
+1F9D6 1F3FB                                            ; fully-qualified     # 🧖🏻 E5.0 person in steamy room: light skin tone
+1F9D6 1F3FC                                            ; fully-qualified     # 🧖🏼 E5.0 person in steamy room: medium-light skin tone
+1F9D6 1F3FD                                            ; fully-qualified     # 🧖🏽 E5.0 person in steamy room: medium skin tone
+1F9D6 1F3FE                                            ; fully-qualified     # 🧖🏾 E5.0 person in steamy room: medium-dark skin tone
+1F9D6 1F3FF                                            ; fully-qualified     # 🧖🏿 E5.0 person in steamy room: dark skin tone
+1F9D6 200D 2642 FE0F                                   ; fully-qualified     # 🧖‍♂️ E5.0 man in steamy room
+1F9D6 200D 2642                                        ; minimally-qualified # 🧖‍♂ E5.0 man in steamy room
+1F9D6 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🧖🏻‍♂️ E5.0 man in steamy room: light skin tone
+1F9D6 1F3FB 200D 2642                                  ; minimally-qualified # 🧖🏻‍♂ E5.0 man in steamy room: light skin tone
+1F9D6 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🧖🏼‍♂️ E5.0 man in steamy room: medium-light skin tone
+1F9D6 1F3FC 200D 2642                                  ; minimally-qualified # 🧖🏼‍♂ E5.0 man in steamy room: medium-light skin tone
+1F9D6 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🧖🏽‍♂️ E5.0 man in steamy room: medium skin tone
+1F9D6 1F3FD 200D 2642                                  ; minimally-qualified # 🧖🏽‍♂ E5.0 man in steamy room: medium skin tone
+1F9D6 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🧖🏾‍♂️ E5.0 man in steamy room: medium-dark skin tone
+1F9D6 1F3FE 200D 2642                                  ; minimally-qualified # 🧖🏾‍♂ E5.0 man in steamy room: medium-dark skin tone
+1F9D6 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🧖🏿‍♂️ E5.0 man in steamy room: dark skin tone
+1F9D6 1F3FF 200D 2642                                  ; minimally-qualified # 🧖🏿‍♂ E5.0 man in steamy room: dark skin tone
+1F9D6 200D 2640 FE0F                                   ; fully-qualified     # 🧖‍♀️ E5.0 woman in steamy room
+1F9D6 200D 2640                                        ; minimally-qualified # 🧖‍♀ E5.0 woman in steamy room
+1F9D6 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🧖🏻‍♀️ E5.0 woman in steamy room: light skin tone
+1F9D6 1F3FB 200D 2640                                  ; minimally-qualified # 🧖🏻‍♀ E5.0 woman in steamy room: light skin tone
+1F9D6 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🧖🏼‍♀️ E5.0 woman in steamy room: medium-light skin tone
+1F9D6 1F3FC 200D 2640                                  ; minimally-qualified # 🧖🏼‍♀ E5.0 woman in steamy room: medium-light skin tone
+1F9D6 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🧖🏽‍♀️ E5.0 woman in steamy room: medium skin tone
+1F9D6 1F3FD 200D 2640                                  ; minimally-qualified # 🧖🏽‍♀ E5.0 woman in steamy room: medium skin tone
+1F9D6 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🧖🏾‍♀️ E5.0 woman in steamy room: medium-dark skin tone
+1F9D6 1F3FE 200D 2640                                  ; minimally-qualified # 🧖🏾‍♀ E5.0 woman in steamy room: medium-dark skin tone
+1F9D6 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🧖🏿‍♀️ E5.0 woman in steamy room: dark skin tone
+1F9D6 1F3FF 200D 2640                                  ; minimally-qualified # 🧖🏿‍♀ E5.0 woman in steamy room: dark skin tone
+1F9D7                                                  ; fully-qualified     # 🧗 E5.0 person climbing
+1F9D7 1F3FB                                            ; fully-qualified     # 🧗🏻 E5.0 person climbing: light skin tone
+1F9D7 1F3FC                                            ; fully-qualified     # 🧗🏼 E5.0 person climbing: medium-light skin tone
+1F9D7 1F3FD                                            ; fully-qualified     # 🧗🏽 E5.0 person climbing: medium skin tone
+1F9D7 1F3FE                                            ; fully-qualified     # 🧗🏾 E5.0 person climbing: medium-dark skin tone
+1F9D7 1F3FF                                            ; fully-qualified     # 🧗🏿 E5.0 person climbing: dark skin tone
+1F9D7 200D 2642 FE0F                                   ; fully-qualified     # 🧗‍♂️ E5.0 man climbing
+1F9D7 200D 2642                                        ; minimally-qualified # 🧗‍♂ E5.0 man climbing
+1F9D7 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🧗🏻‍♂️ E5.0 man climbing: light skin tone
+1F9D7 1F3FB 200D 2642                                  ; minimally-qualified # 🧗🏻‍♂ E5.0 man climbing: light skin tone
+1F9D7 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🧗🏼‍♂️ E5.0 man climbing: medium-light skin tone
+1F9D7 1F3FC 200D 2642                                  ; minimally-qualified # 🧗🏼‍♂ E5.0 man climbing: medium-light skin tone
+1F9D7 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🧗🏽‍♂️ E5.0 man climbing: medium skin tone
+1F9D7 1F3FD 200D 2642                                  ; minimally-qualified # 🧗🏽‍♂ E5.0 man climbing: medium skin tone
+1F9D7 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🧗🏾‍♂️ E5.0 man climbing: medium-dark skin tone
+1F9D7 1F3FE 200D 2642                                  ; minimally-qualified # 🧗🏾‍♂ E5.0 man climbing: medium-dark skin tone
+1F9D7 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🧗🏿‍♂️ E5.0 man climbing: dark skin tone
+1F9D7 1F3FF 200D 2642                                  ; minimally-qualified # 🧗🏿‍♂ E5.0 man climbing: dark skin tone
+1F9D7 200D 2640 FE0F                                   ; fully-qualified     # 🧗‍♀️ E5.0 woman climbing
+1F9D7 200D 2640                                        ; minimally-qualified # 🧗‍♀ E5.0 woman climbing
+1F9D7 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🧗🏻‍♀️ E5.0 woman climbing: light skin tone
+1F9D7 1F3FB 200D 2640                                  ; minimally-qualified # 🧗🏻‍♀ E5.0 woman climbing: light skin tone
+1F9D7 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🧗🏼‍♀️ E5.0 woman climbing: medium-light skin tone
+1F9D7 1F3FC 200D 2640                                  ; minimally-qualified # 🧗🏼‍♀ E5.0 woman climbing: medium-light skin tone
+1F9D7 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🧗🏽‍♀️ E5.0 woman climbing: medium skin tone
+1F9D7 1F3FD 200D 2640                                  ; minimally-qualified # 🧗🏽‍♀ E5.0 woman climbing: medium skin tone
+1F9D7 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🧗🏾‍♀️ E5.0 woman climbing: medium-dark skin tone
+1F9D7 1F3FE 200D 2640                                  ; minimally-qualified # 🧗🏾‍♀ E5.0 woman climbing: medium-dark skin tone
+1F9D7 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🧗🏿‍♀️ E5.0 woman climbing: dark skin tone
+1F9D7 1F3FF 200D 2640                                  ; minimally-qualified # 🧗🏿‍♀ E5.0 woman climbing: dark skin tone
 
 # subgroup: person-sport
-1F93A                                      ; fully-qualified     # 🤺 E3.0 person fencing
-1F3C7                                      ; fully-qualified     # 🏇 E1.0 horse racing
-1F3C7 1F3FB                                ; fully-qualified     # 🏇🏻 E1.0 horse racing: light skin tone
-1F3C7 1F3FC                                ; fully-qualified     # 🏇🏼 E1.0 horse racing: medium-light skin tone
-1F3C7 1F3FD                                ; fully-qualified     # 🏇🏽 E1.0 horse racing: medium skin tone
-1F3C7 1F3FE                                ; fully-qualified     # 🏇🏾 E1.0 horse racing: medium-dark skin tone
-1F3C7 1F3FF                                ; fully-qualified     # 🏇🏿 E1.0 horse racing: dark skin tone
-26F7 FE0F                                  ; fully-qualified     # ⛷️ E0.7 skier
-26F7                                       ; unqualified         # ⛷ E0.7 skier
-1F3C2                                      ; fully-qualified     # 🏂 E0.6 snowboarder
-1F3C2 1F3FB                                ; fully-qualified     # 🏂🏻 E1.0 snowboarder: light skin tone
-1F3C2 1F3FC                                ; fully-qualified     # 🏂🏼 E1.0 snowboarder: medium-light skin tone
-1F3C2 1F3FD                                ; fully-qualified     # 🏂🏽 E1.0 snowboarder: medium skin tone
-1F3C2 1F3FE                                ; fully-qualified     # 🏂🏾 E1.0 snowboarder: medium-dark skin tone
-1F3C2 1F3FF                                ; fully-qualified     # 🏂🏿 E1.0 snowboarder: dark skin tone
-1F3CC FE0F                                 ; fully-qualified     # 🏌️ E0.7 person golfing
-1F3CC                                      ; unqualified         # 🏌 E0.7 person golfing
-1F3CC 1F3FB                                ; fully-qualified     # 🏌🏻 E4.0 person golfing: light skin tone
-1F3CC 1F3FC                                ; fully-qualified     # 🏌🏼 E4.0 person golfing: medium-light skin tone
-1F3CC 1F3FD                                ; fully-qualified     # 🏌🏽 E4.0 person golfing: medium skin tone
-1F3CC 1F3FE                                ; fully-qualified     # 🏌🏾 E4.0 person golfing: medium-dark skin tone
-1F3CC 1F3FF                                ; fully-qualified     # 🏌🏿 E4.0 person golfing: dark skin tone
-1F3CC FE0F 200D 2642 FE0F                  ; fully-qualified     # 🏌️‍♂️ E4.0 man golfing
-1F3CC 200D 2642 FE0F                       ; unqualified         # 🏌‍♂️ E4.0 man golfing
-1F3CC FE0F 200D 2642                       ; unqualified         # 🏌️‍♂ E4.0 man golfing
-1F3CC 200D 2642                            ; unqualified         # 🏌‍♂ E4.0 man golfing
-1F3CC 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🏌🏻‍♂️ E4.0 man golfing: light skin tone
-1F3CC 1F3FB 200D 2642                      ; minimally-qualified # 🏌🏻‍♂ E4.0 man golfing: light skin tone
-1F3CC 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🏌🏼‍♂️ E4.0 man golfing: medium-light skin tone
-1F3CC 1F3FC 200D 2642                      ; minimally-qualified # 🏌🏼‍♂ E4.0 man golfing: medium-light skin tone
-1F3CC 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🏌🏽‍♂️ E4.0 man golfing: medium skin tone
-1F3CC 1F3FD 200D 2642                      ; minimally-qualified # 🏌🏽‍♂ E4.0 man golfing: medium skin tone
-1F3CC 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🏌🏾‍♂️ E4.0 man golfing: medium-dark skin tone
-1F3CC 1F3FE 200D 2642                      ; minimally-qualified # 🏌🏾‍♂ E4.0 man golfing: medium-dark skin tone
-1F3CC 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🏌🏿‍♂️ E4.0 man golfing: dark skin tone
-1F3CC 1F3FF 200D 2642                      ; minimally-qualified # 🏌🏿‍♂ E4.0 man golfing: dark skin tone
-1F3CC FE0F 200D 2640 FE0F                  ; fully-qualified     # 🏌️‍♀️ E4.0 woman golfing
-1F3CC 200D 2640 FE0F                       ; unqualified         # 🏌‍♀️ E4.0 woman golfing
-1F3CC FE0F 200D 2640                       ; unqualified         # 🏌️‍♀ E4.0 woman golfing
-1F3CC 200D 2640                            ; unqualified         # 🏌‍♀ E4.0 woman golfing
-1F3CC 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🏌🏻‍♀️ E4.0 woman golfing: light skin tone
-1F3CC 1F3FB 200D 2640                      ; minimally-qualified # 🏌🏻‍♀ E4.0 woman golfing: light skin tone
-1F3CC 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🏌🏼‍♀️ E4.0 woman golfing: medium-light skin tone
-1F3CC 1F3FC 200D 2640                      ; minimally-qualified # 🏌🏼‍♀ E4.0 woman golfing: medium-light skin tone
-1F3CC 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🏌🏽‍♀️ E4.0 woman golfing: medium skin tone
-1F3CC 1F3FD 200D 2640                      ; minimally-qualified # 🏌🏽‍♀ E4.0 woman golfing: medium skin tone
-1F3CC 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🏌🏾‍♀️ E4.0 woman golfing: medium-dark skin tone
-1F3CC 1F3FE 200D 2640                      ; minimally-qualified # 🏌🏾‍♀ E4.0 woman golfing: medium-dark skin tone
-1F3CC 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🏌🏿‍♀️ E4.0 woman golfing: dark skin tone
-1F3CC 1F3FF 200D 2640                      ; minimally-qualified # 🏌🏿‍♀ E4.0 woman golfing: dark skin tone
-1F3C4                                      ; fully-qualified     # 🏄 E0.6 person surfing
-1F3C4 1F3FB                                ; fully-qualified     # 🏄🏻 E1.0 person surfing: light skin tone
-1F3C4 1F3FC                                ; fully-qualified     # 🏄🏼 E1.0 person surfing: medium-light skin tone
-1F3C4 1F3FD                                ; fully-qualified     # 🏄🏽 E1.0 person surfing: medium skin tone
-1F3C4 1F3FE                                ; fully-qualified     # 🏄🏾 E1.0 person surfing: medium-dark skin tone
-1F3C4 1F3FF                                ; fully-qualified     # 🏄🏿 E1.0 person surfing: dark skin tone
-1F3C4 200D 2642 FE0F                       ; fully-qualified     # 🏄‍♂️ E4.0 man surfing
-1F3C4 200D 2642                            ; minimally-qualified # 🏄‍♂ E4.0 man surfing
-1F3C4 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🏄🏻‍♂️ E4.0 man surfing: light skin tone
-1F3C4 1F3FB 200D 2642                      ; minimally-qualified # 🏄🏻‍♂ E4.0 man surfing: light skin tone
-1F3C4 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🏄🏼‍♂️ E4.0 man surfing: medium-light skin tone
-1F3C4 1F3FC 200D 2642                      ; minimally-qualified # 🏄🏼‍♂ E4.0 man surfing: medium-light skin tone
-1F3C4 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🏄🏽‍♂️ E4.0 man surfing: medium skin tone
-1F3C4 1F3FD 200D 2642                      ; minimally-qualified # 🏄🏽‍♂ E4.0 man surfing: medium skin tone
-1F3C4 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🏄🏾‍♂️ E4.0 man surfing: medium-dark skin tone
-1F3C4 1F3FE 200D 2642                      ; minimally-qualified # 🏄🏾‍♂ E4.0 man surfing: medium-dark skin tone
-1F3C4 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🏄🏿‍♂️ E4.0 man surfing: dark skin tone
-1F3C4 1F3FF 200D 2642                      ; minimally-qualified # 🏄🏿‍♂ E4.0 man surfing: dark skin tone
-1F3C4 200D 2640 FE0F                       ; fully-qualified     # 🏄‍♀️ E4.0 woman surfing
-1F3C4 200D 2640                            ; minimally-qualified # 🏄‍♀ E4.0 woman surfing
-1F3C4 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🏄🏻‍♀️ E4.0 woman surfing: light skin tone
-1F3C4 1F3FB 200D 2640                      ; minimally-qualified # 🏄🏻‍♀ E4.0 woman surfing: light skin tone
-1F3C4 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🏄🏼‍♀️ E4.0 woman surfing: medium-light skin tone
-1F3C4 1F3FC 200D 2640                      ; minimally-qualified # 🏄🏼‍♀ E4.0 woman surfing: medium-light skin tone
-1F3C4 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🏄🏽‍♀️ E4.0 woman surfing: medium skin tone
-1F3C4 1F3FD 200D 2640                      ; minimally-qualified # 🏄🏽‍♀ E4.0 woman surfing: medium skin tone
-1F3C4 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🏄🏾‍♀️ E4.0 woman surfing: medium-dark skin tone
-1F3C4 1F3FE 200D 2640                      ; minimally-qualified # 🏄🏾‍♀ E4.0 woman surfing: medium-dark skin tone
-1F3C4 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🏄🏿‍♀️ E4.0 woman surfing: dark skin tone
-1F3C4 1F3FF 200D 2640                      ; minimally-qualified # 🏄🏿‍♀ E4.0 woman surfing: dark skin tone
-1F6A3                                      ; fully-qualified     # 🚣 E1.0 person rowing boat
-1F6A3 1F3FB                                ; fully-qualified     # 🚣🏻 E1.0 person rowing boat: light skin tone
-1F6A3 1F3FC                                ; fully-qualified     # 🚣🏼 E1.0 person rowing boat: medium-light skin tone
-1F6A3 1F3FD                                ; fully-qualified     # 🚣🏽 E1.0 person rowing boat: medium skin tone
-1F6A3 1F3FE                                ; fully-qualified     # 🚣🏾 E1.0 person rowing boat: medium-dark skin tone
-1F6A3 1F3FF                                ; fully-qualified     # 🚣🏿 E1.0 person rowing boat: dark skin tone
-1F6A3 200D 2642 FE0F                       ; fully-qualified     # 🚣‍♂️ E4.0 man rowing boat
-1F6A3 200D 2642                            ; minimally-qualified # 🚣‍♂ E4.0 man rowing boat
-1F6A3 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🚣🏻‍♂️ E4.0 man rowing boat: light skin tone
-1F6A3 1F3FB 200D 2642                      ; minimally-qualified # 🚣🏻‍♂ E4.0 man rowing boat: light skin tone
-1F6A3 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🚣🏼‍♂️ E4.0 man rowing boat: medium-light skin tone
-1F6A3 1F3FC 200D 2642                      ; minimally-qualified # 🚣🏼‍♂ E4.0 man rowing boat: medium-light skin tone
-1F6A3 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🚣🏽‍♂️ E4.0 man rowing boat: medium skin tone
-1F6A3 1F3FD 200D 2642                      ; minimally-qualified # 🚣🏽‍♂ E4.0 man rowing boat: medium skin tone
-1F6A3 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🚣🏾‍♂️ E4.0 man rowing boat: medium-dark skin tone
-1F6A3 1F3FE 200D 2642                      ; minimally-qualified # 🚣🏾‍♂ E4.0 man rowing boat: medium-dark skin tone
-1F6A3 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🚣🏿‍♂️ E4.0 man rowing boat: dark skin tone
-1F6A3 1F3FF 200D 2642                      ; minimally-qualified # 🚣🏿‍♂ E4.0 man rowing boat: dark skin tone
-1F6A3 200D 2640 FE0F                       ; fully-qualified     # 🚣‍♀️ E4.0 woman rowing boat
-1F6A3 200D 2640                            ; minimally-qualified # 🚣‍♀ E4.0 woman rowing boat
-1F6A3 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🚣🏻‍♀️ E4.0 woman rowing boat: light skin tone
-1F6A3 1F3FB 200D 2640                      ; minimally-qualified # 🚣🏻‍♀ E4.0 woman rowing boat: light skin tone
-1F6A3 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🚣🏼‍♀️ E4.0 woman rowing boat: medium-light skin tone
-1F6A3 1F3FC 200D 2640                      ; minimally-qualified # 🚣🏼‍♀ E4.0 woman rowing boat: medium-light skin tone
-1F6A3 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🚣🏽‍♀️ E4.0 woman rowing boat: medium skin tone
-1F6A3 1F3FD 200D 2640                      ; minimally-qualified # 🚣🏽‍♀ E4.0 woman rowing boat: medium skin tone
-1F6A3 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🚣🏾‍♀️ E4.0 woman rowing boat: medium-dark skin tone
-1F6A3 1F3FE 200D 2640                      ; minimally-qualified # 🚣🏾‍♀ E4.0 woman rowing boat: medium-dark skin tone
-1F6A3 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🚣🏿‍♀️ E4.0 woman rowing boat: dark skin tone
-1F6A3 1F3FF 200D 2640                      ; minimally-qualified # 🚣🏿‍♀ E4.0 woman rowing boat: dark skin tone
-1F3CA                                      ; fully-qualified     # 🏊 E0.6 person swimming
-1F3CA 1F3FB                                ; fully-qualified     # 🏊🏻 E1.0 person swimming: light skin tone
-1F3CA 1F3FC                                ; fully-qualified     # 🏊🏼 E1.0 person swimming: medium-light skin tone
-1F3CA 1F3FD                                ; fully-qualified     # 🏊🏽 E1.0 person swimming: medium skin tone
-1F3CA 1F3FE                                ; fully-qualified     # 🏊🏾 E1.0 person swimming: medium-dark skin tone
-1F3CA 1F3FF                                ; fully-qualified     # 🏊🏿 E1.0 person swimming: dark skin tone
-1F3CA 200D 2642 FE0F                       ; fully-qualified     # 🏊‍♂️ E4.0 man swimming
-1F3CA 200D 2642                            ; minimally-qualified # 🏊‍♂ E4.0 man swimming
-1F3CA 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🏊🏻‍♂️ E4.0 man swimming: light skin tone
-1F3CA 1F3FB 200D 2642                      ; minimally-qualified # 🏊🏻‍♂ E4.0 man swimming: light skin tone
-1F3CA 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🏊🏼‍♂️ E4.0 man swimming: medium-light skin tone
-1F3CA 1F3FC 200D 2642                      ; minimally-qualified # 🏊🏼‍♂ E4.0 man swimming: medium-light skin tone
-1F3CA 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🏊🏽‍♂️ E4.0 man swimming: medium skin tone
-1F3CA 1F3FD 200D 2642                      ; minimally-qualified # 🏊🏽‍♂ E4.0 man swimming: medium skin tone
-1F3CA 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🏊🏾‍♂️ E4.0 man swimming: medium-dark skin tone
-1F3CA 1F3FE 200D 2642                      ; minimally-qualified # 🏊🏾‍♂ E4.0 man swimming: medium-dark skin tone
-1F3CA 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🏊🏿‍♂️ E4.0 man swimming: dark skin tone
-1F3CA 1F3FF 200D 2642                      ; minimally-qualified # 🏊🏿‍♂ E4.0 man swimming: dark skin tone
-1F3CA 200D 2640 FE0F                       ; fully-qualified     # 🏊‍♀️ E4.0 woman swimming
-1F3CA 200D 2640                            ; minimally-qualified # 🏊‍♀ E4.0 woman swimming
-1F3CA 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🏊🏻‍♀️ E4.0 woman swimming: light skin tone
-1F3CA 1F3FB 200D 2640                      ; minimally-qualified # 🏊🏻‍♀ E4.0 woman swimming: light skin tone
-1F3CA 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🏊🏼‍♀️ E4.0 woman swimming: medium-light skin tone
-1F3CA 1F3FC 200D 2640                      ; minimally-qualified # 🏊🏼‍♀ E4.0 woman swimming: medium-light skin tone
-1F3CA 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🏊🏽‍♀️ E4.0 woman swimming: medium skin tone
-1F3CA 1F3FD 200D 2640                      ; minimally-qualified # 🏊🏽‍♀ E4.0 woman swimming: medium skin tone
-1F3CA 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🏊🏾‍♀️ E4.0 woman swimming: medium-dark skin tone
-1F3CA 1F3FE 200D 2640                      ; minimally-qualified # 🏊🏾‍♀ E4.0 woman swimming: medium-dark skin tone
-1F3CA 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🏊🏿‍♀️ E4.0 woman swimming: dark skin tone
-1F3CA 1F3FF 200D 2640                      ; minimally-qualified # 🏊🏿‍♀ E4.0 woman swimming: dark skin tone
-26F9 FE0F                                  ; fully-qualified     # ⛹️ E0.7 person bouncing ball
-26F9                                       ; unqualified         # ⛹ E0.7 person bouncing ball
-26F9 1F3FB                                 ; fully-qualified     # ⛹🏻 E2.0 person bouncing ball: light skin tone
-26F9 1F3FC                                 ; fully-qualified     # ⛹🏼 E2.0 person bouncing ball: medium-light skin tone
-26F9 1F3FD                                 ; fully-qualified     # ⛹🏽 E2.0 person bouncing ball: medium skin tone
-26F9 1F3FE                                 ; fully-qualified     # ⛹🏾 E2.0 person bouncing ball: medium-dark skin tone
-26F9 1F3FF                                 ; fully-qualified     # ⛹🏿 E2.0 person bouncing ball: dark skin tone
-26F9 FE0F 200D 2642 FE0F                   ; fully-qualified     # ⛹️‍♂️ E4.0 man bouncing ball
-26F9 200D 2642 FE0F                        ; unqualified         # ⛹‍♂️ E4.0 man bouncing ball
-26F9 FE0F 200D 2642                        ; unqualified         # ⛹️‍♂ E4.0 man bouncing ball
-26F9 200D 2642                             ; unqualified         # ⛹‍♂ E4.0 man bouncing ball
-26F9 1F3FB 200D 2642 FE0F                  ; fully-qualified     # ⛹🏻‍♂️ E4.0 man bouncing ball: light skin tone
-26F9 1F3FB 200D 2642                       ; minimally-qualified # ⛹🏻‍♂ E4.0 man bouncing ball: light skin tone
-26F9 1F3FC 200D 2642 FE0F                  ; fully-qualified     # ⛹🏼‍♂️ E4.0 man bouncing ball: medium-light skin tone
-26F9 1F3FC 200D 2642                       ; minimally-qualified # ⛹🏼‍♂ E4.0 man bouncing ball: medium-light skin tone
-26F9 1F3FD 200D 2642 FE0F                  ; fully-qualified     # ⛹🏽‍♂️ E4.0 man bouncing ball: medium skin tone
-26F9 1F3FD 200D 2642                       ; minimally-qualified # ⛹🏽‍♂ E4.0 man bouncing ball: medium skin tone
-26F9 1F3FE 200D 2642 FE0F                  ; fully-qualified     # ⛹🏾‍♂️ E4.0 man bouncing ball: medium-dark skin tone
-26F9 1F3FE 200D 2642                       ; minimally-qualified # ⛹🏾‍♂ E4.0 man bouncing ball: medium-dark skin tone
-26F9 1F3FF 200D 2642 FE0F                  ; fully-qualified     # ⛹🏿‍♂️ E4.0 man bouncing ball: dark skin tone
-26F9 1F3FF 200D 2642                       ; minimally-qualified # ⛹🏿‍♂ E4.0 man bouncing ball: dark skin tone
-26F9 FE0F 200D 2640 FE0F                   ; fully-qualified     # ⛹️‍♀️ E4.0 woman bouncing ball
-26F9 200D 2640 FE0F                        ; unqualified         # ⛹‍♀️ E4.0 woman bouncing ball
-26F9 FE0F 200D 2640                        ; unqualified         # ⛹️‍♀ E4.0 woman bouncing ball
-26F9 200D 2640                             ; unqualified         # ⛹‍♀ E4.0 woman bouncing ball
-26F9 1F3FB 200D 2640 FE0F                  ; fully-qualified     # ⛹🏻‍♀️ E4.0 woman bouncing ball: light skin tone
-26F9 1F3FB 200D 2640                       ; minimally-qualified # ⛹🏻‍♀ E4.0 woman bouncing ball: light skin tone
-26F9 1F3FC 200D 2640 FE0F                  ; fully-qualified     # ⛹🏼‍♀️ E4.0 woman bouncing ball: medium-light skin tone
-26F9 1F3FC 200D 2640                       ; minimally-qualified # ⛹🏼‍♀ E4.0 woman bouncing ball: medium-light skin tone
-26F9 1F3FD 200D 2640 FE0F                  ; fully-qualified     # ⛹🏽‍♀️ E4.0 woman bouncing ball: medium skin tone
-26F9 1F3FD 200D 2640                       ; minimally-qualified # ⛹🏽‍♀ E4.0 woman bouncing ball: medium skin tone
-26F9 1F3FE 200D 2640 FE0F                  ; fully-qualified     # ⛹🏾‍♀️ E4.0 woman bouncing ball: medium-dark skin tone
-26F9 1F3FE 200D 2640                       ; minimally-qualified # ⛹🏾‍♀ E4.0 woman bouncing ball: medium-dark skin tone
-26F9 1F3FF 200D 2640 FE0F                  ; fully-qualified     # ⛹🏿‍♀️ E4.0 woman bouncing ball: dark skin tone
-26F9 1F3FF 200D 2640                       ; minimally-qualified # ⛹🏿‍♀ E4.0 woman bouncing ball: dark skin tone
-1F3CB FE0F                                 ; fully-qualified     # 🏋️ E0.7 person lifting weights
-1F3CB                                      ; unqualified         # 🏋 E0.7 person lifting weights
-1F3CB 1F3FB                                ; fully-qualified     # 🏋🏻 E2.0 person lifting weights: light skin tone
-1F3CB 1F3FC                                ; fully-qualified     # 🏋🏼 E2.0 person lifting weights: medium-light skin tone
-1F3CB 1F3FD                                ; fully-qualified     # 🏋🏽 E2.0 person lifting weights: medium skin tone
-1F3CB 1F3FE                                ; fully-qualified     # 🏋🏾 E2.0 person lifting weights: medium-dark skin tone
-1F3CB 1F3FF                                ; fully-qualified     # 🏋🏿 E2.0 person lifting weights: dark skin tone
-1F3CB FE0F 200D 2642 FE0F                  ; fully-qualified     # 🏋️‍♂️ E4.0 man lifting weights
-1F3CB 200D 2642 FE0F                       ; unqualified         # 🏋‍♂️ E4.0 man lifting weights
-1F3CB FE0F 200D 2642                       ; unqualified         # 🏋️‍♂ E4.0 man lifting weights
-1F3CB 200D 2642                            ; unqualified         # 🏋‍♂ E4.0 man lifting weights
-1F3CB 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🏋🏻‍♂️ E4.0 man lifting weights: light skin tone
-1F3CB 1F3FB 200D 2642                      ; minimally-qualified # 🏋🏻‍♂ E4.0 man lifting weights: light skin tone
-1F3CB 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🏋🏼‍♂️ E4.0 man lifting weights: medium-light skin tone
-1F3CB 1F3FC 200D 2642                      ; minimally-qualified # 🏋🏼‍♂ E4.0 man lifting weights: medium-light skin tone
-1F3CB 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🏋🏽‍♂️ E4.0 man lifting weights: medium skin tone
-1F3CB 1F3FD 200D 2642                      ; minimally-qualified # 🏋🏽‍♂ E4.0 man lifting weights: medium skin tone
-1F3CB 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🏋🏾‍♂️ E4.0 man lifting weights: medium-dark skin tone
-1F3CB 1F3FE 200D 2642                      ; minimally-qualified # 🏋🏾‍♂ E4.0 man lifting weights: medium-dark skin tone
-1F3CB 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🏋🏿‍♂️ E4.0 man lifting weights: dark skin tone
-1F3CB 1F3FF 200D 2642                      ; minimally-qualified # 🏋🏿‍♂ E4.0 man lifting weights: dark skin tone
-1F3CB FE0F 200D 2640 FE0F                  ; fully-qualified     # 🏋️‍♀️ E4.0 woman lifting weights
-1F3CB 200D 2640 FE0F                       ; unqualified         # 🏋‍♀️ E4.0 woman lifting weights
-1F3CB FE0F 200D 2640                       ; unqualified         # 🏋️‍♀ E4.0 woman lifting weights
-1F3CB 200D 2640                            ; unqualified         # 🏋‍♀ E4.0 woman lifting weights
-1F3CB 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🏋🏻‍♀️ E4.0 woman lifting weights: light skin tone
-1F3CB 1F3FB 200D 2640                      ; minimally-qualified # 🏋🏻‍♀ E4.0 woman lifting weights: light skin tone
-1F3CB 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🏋🏼‍♀️ E4.0 woman lifting weights: medium-light skin tone
-1F3CB 1F3FC 200D 2640                      ; minimally-qualified # 🏋🏼‍♀ E4.0 woman lifting weights: medium-light skin tone
-1F3CB 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🏋🏽‍♀️ E4.0 woman lifting weights: medium skin tone
-1F3CB 1F3FD 200D 2640                      ; minimally-qualified # 🏋🏽‍♀ E4.0 woman lifting weights: medium skin tone
-1F3CB 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🏋🏾‍♀️ E4.0 woman lifting weights: medium-dark skin tone
-1F3CB 1F3FE 200D 2640                      ; minimally-qualified # 🏋🏾‍♀ E4.0 woman lifting weights: medium-dark skin tone
-1F3CB 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🏋🏿‍♀️ E4.0 woman lifting weights: dark skin tone
-1F3CB 1F3FF 200D 2640                      ; minimally-qualified # 🏋🏿‍♀ E4.0 woman lifting weights: dark skin tone
-1F6B4                                      ; fully-qualified     # 🚴 E1.0 person biking
-1F6B4 1F3FB                                ; fully-qualified     # 🚴🏻 E1.0 person biking: light skin tone
-1F6B4 1F3FC                                ; fully-qualified     # 🚴🏼 E1.0 person biking: medium-light skin tone
-1F6B4 1F3FD                                ; fully-qualified     # 🚴🏽 E1.0 person biking: medium skin tone
-1F6B4 1F3FE                                ; fully-qualified     # 🚴🏾 E1.0 person biking: medium-dark skin tone
-1F6B4 1F3FF                                ; fully-qualified     # 🚴🏿 E1.0 person biking: dark skin tone
-1F6B4 200D 2642 FE0F                       ; fully-qualified     # 🚴‍♂️ E4.0 man biking
-1F6B4 200D 2642                            ; minimally-qualified # 🚴‍♂ E4.0 man biking
-1F6B4 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🚴🏻‍♂️ E4.0 man biking: light skin tone
-1F6B4 1F3FB 200D 2642                      ; minimally-qualified # 🚴🏻‍♂ E4.0 man biking: light skin tone
-1F6B4 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🚴🏼‍♂️ E4.0 man biking: medium-light skin tone
-1F6B4 1F3FC 200D 2642                      ; minimally-qualified # 🚴🏼‍♂ E4.0 man biking: medium-light skin tone
-1F6B4 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🚴🏽‍♂️ E4.0 man biking: medium skin tone
-1F6B4 1F3FD 200D 2642                      ; minimally-qualified # 🚴🏽‍♂ E4.0 man biking: medium skin tone
-1F6B4 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🚴🏾‍♂️ E4.0 man biking: medium-dark skin tone
-1F6B4 1F3FE 200D 2642                      ; minimally-qualified # 🚴🏾‍♂ E4.0 man biking: medium-dark skin tone
-1F6B4 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🚴🏿‍♂️ E4.0 man biking: dark skin tone
-1F6B4 1F3FF 200D 2642                      ; minimally-qualified # 🚴🏿‍♂ E4.0 man biking: dark skin tone
-1F6B4 200D 2640 FE0F                       ; fully-qualified     # 🚴‍♀️ E4.0 woman biking
-1F6B4 200D 2640                            ; minimally-qualified # 🚴‍♀ E4.0 woman biking
-1F6B4 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🚴🏻‍♀️ E4.0 woman biking: light skin tone
-1F6B4 1F3FB 200D 2640                      ; minimally-qualified # 🚴🏻‍♀ E4.0 woman biking: light skin tone
-1F6B4 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🚴🏼‍♀️ E4.0 woman biking: medium-light skin tone
-1F6B4 1F3FC 200D 2640                      ; minimally-qualified # 🚴🏼‍♀ E4.0 woman biking: medium-light skin tone
-1F6B4 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🚴🏽‍♀️ E4.0 woman biking: medium skin tone
-1F6B4 1F3FD 200D 2640                      ; minimally-qualified # 🚴🏽‍♀ E4.0 woman biking: medium skin tone
-1F6B4 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🚴🏾‍♀️ E4.0 woman biking: medium-dark skin tone
-1F6B4 1F3FE 200D 2640                      ; minimally-qualified # 🚴🏾‍♀ E4.0 woman biking: medium-dark skin tone
-1F6B4 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🚴🏿‍♀️ E4.0 woman biking: dark skin tone
-1F6B4 1F3FF 200D 2640                      ; minimally-qualified # 🚴🏿‍♀ E4.0 woman biking: dark skin tone
-1F6B5                                      ; fully-qualified     # 🚵 E1.0 person mountain biking
-1F6B5 1F3FB                                ; fully-qualified     # 🚵🏻 E1.0 person mountain biking: light skin tone
-1F6B5 1F3FC                                ; fully-qualified     # 🚵🏼 E1.0 person mountain biking: medium-light skin tone
-1F6B5 1F3FD                                ; fully-qualified     # 🚵🏽 E1.0 person mountain biking: medium skin tone
-1F6B5 1F3FE                                ; fully-qualified     # 🚵🏾 E1.0 person mountain biking: medium-dark skin tone
-1F6B5 1F3FF                                ; fully-qualified     # 🚵🏿 E1.0 person mountain biking: dark skin tone
-1F6B5 200D 2642 FE0F                       ; fully-qualified     # 🚵‍♂️ E4.0 man mountain biking
-1F6B5 200D 2642                            ; minimally-qualified # 🚵‍♂ E4.0 man mountain biking
-1F6B5 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🚵🏻‍♂️ E4.0 man mountain biking: light skin tone
-1F6B5 1F3FB 200D 2642                      ; minimally-qualified # 🚵🏻‍♂ E4.0 man mountain biking: light skin tone
-1F6B5 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🚵🏼‍♂️ E4.0 man mountain biking: medium-light skin tone
-1F6B5 1F3FC 200D 2642                      ; minimally-qualified # 🚵🏼‍♂ E4.0 man mountain biking: medium-light skin tone
-1F6B5 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🚵🏽‍♂️ E4.0 man mountain biking: medium skin tone
-1F6B5 1F3FD 200D 2642                      ; minimally-qualified # 🚵🏽‍♂ E4.0 man mountain biking: medium skin tone
-1F6B5 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🚵🏾‍♂️ E4.0 man mountain biking: medium-dark skin tone
-1F6B5 1F3FE 200D 2642                      ; minimally-qualified # 🚵🏾‍♂ E4.0 man mountain biking: medium-dark skin tone
-1F6B5 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🚵🏿‍♂️ E4.0 man mountain biking: dark skin tone
-1F6B5 1F3FF 200D 2642                      ; minimally-qualified # 🚵🏿‍♂ E4.0 man mountain biking: dark skin tone
-1F6B5 200D 2640 FE0F                       ; fully-qualified     # 🚵‍♀️ E4.0 woman mountain biking
-1F6B5 200D 2640                            ; minimally-qualified # 🚵‍♀ E4.0 woman mountain biking
-1F6B5 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🚵🏻‍♀️ E4.0 woman mountain biking: light skin tone
-1F6B5 1F3FB 200D 2640                      ; minimally-qualified # 🚵🏻‍♀ E4.0 woman mountain biking: light skin tone
-1F6B5 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🚵🏼‍♀️ E4.0 woman mountain biking: medium-light skin tone
-1F6B5 1F3FC 200D 2640                      ; minimally-qualified # 🚵🏼‍♀ E4.0 woman mountain biking: medium-light skin tone
-1F6B5 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🚵🏽‍♀️ E4.0 woman mountain biking: medium skin tone
-1F6B5 1F3FD 200D 2640                      ; minimally-qualified # 🚵🏽‍♀ E4.0 woman mountain biking: medium skin tone
-1F6B5 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🚵🏾‍♀️ E4.0 woman mountain biking: medium-dark skin tone
-1F6B5 1F3FE 200D 2640                      ; minimally-qualified # 🚵🏾‍♀ E4.0 woman mountain biking: medium-dark skin tone
-1F6B5 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🚵🏿‍♀️ E4.0 woman mountain biking: dark skin tone
-1F6B5 1F3FF 200D 2640                      ; minimally-qualified # 🚵🏿‍♀ E4.0 woman mountain biking: dark skin tone
-1F938                                      ; fully-qualified     # 🤸 E3.0 person cartwheeling
-1F938 1F3FB                                ; fully-qualified     # 🤸🏻 E3.0 person cartwheeling: light skin tone
-1F938 1F3FC                                ; fully-qualified     # 🤸🏼 E3.0 person cartwheeling: medium-light skin tone
-1F938 1F3FD                                ; fully-qualified     # 🤸🏽 E3.0 person cartwheeling: medium skin tone
-1F938 1F3FE                                ; fully-qualified     # 🤸🏾 E3.0 person cartwheeling: medium-dark skin tone
-1F938 1F3FF                                ; fully-qualified     # 🤸🏿 E3.0 person cartwheeling: dark skin tone
-1F938 200D 2642 FE0F                       ; fully-qualified     # 🤸‍♂️ E4.0 man cartwheeling
-1F938 200D 2642                            ; minimally-qualified # 🤸‍♂ E4.0 man cartwheeling
-1F938 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🤸🏻‍♂️ E4.0 man cartwheeling: light skin tone
-1F938 1F3FB 200D 2642                      ; minimally-qualified # 🤸🏻‍♂ E4.0 man cartwheeling: light skin tone
-1F938 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🤸🏼‍♂️ E4.0 man cartwheeling: medium-light skin tone
-1F938 1F3FC 200D 2642                      ; minimally-qualified # 🤸🏼‍♂ E4.0 man cartwheeling: medium-light skin tone
-1F938 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🤸🏽‍♂️ E4.0 man cartwheeling: medium skin tone
-1F938 1F3FD 200D 2642                      ; minimally-qualified # 🤸🏽‍♂ E4.0 man cartwheeling: medium skin tone
-1F938 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🤸🏾‍♂️ E4.0 man cartwheeling: medium-dark skin tone
-1F938 1F3FE 200D 2642                      ; minimally-qualified # 🤸🏾‍♂ E4.0 man cartwheeling: medium-dark skin tone
-1F938 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🤸🏿‍♂️ E4.0 man cartwheeling: dark skin tone
-1F938 1F3FF 200D 2642                      ; minimally-qualified # 🤸🏿‍♂ E4.0 man cartwheeling: dark skin tone
-1F938 200D 2640 FE0F                       ; fully-qualified     # 🤸‍♀️ E4.0 woman cartwheeling
-1F938 200D 2640                            ; minimally-qualified # 🤸‍♀ E4.0 woman cartwheeling
-1F938 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🤸🏻‍♀️ E4.0 woman cartwheeling: light skin tone
-1F938 1F3FB 200D 2640                      ; minimally-qualified # 🤸🏻‍♀ E4.0 woman cartwheeling: light skin tone
-1F938 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🤸🏼‍♀️ E4.0 woman cartwheeling: medium-light skin tone
-1F938 1F3FC 200D 2640                      ; minimally-qualified # 🤸🏼‍♀ E4.0 woman cartwheeling: medium-light skin tone
-1F938 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🤸🏽‍♀️ E4.0 woman cartwheeling: medium skin tone
-1F938 1F3FD 200D 2640                      ; minimally-qualified # 🤸🏽‍♀ E4.0 woman cartwheeling: medium skin tone
-1F938 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🤸🏾‍♀️ E4.0 woman cartwheeling: medium-dark skin tone
-1F938 1F3FE 200D 2640                      ; minimally-qualified # 🤸🏾‍♀ E4.0 woman cartwheeling: medium-dark skin tone
-1F938 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🤸🏿‍♀️ E4.0 woman cartwheeling: dark skin tone
-1F938 1F3FF 200D 2640                      ; minimally-qualified # 🤸🏿‍♀ E4.0 woman cartwheeling: dark skin tone
-1F93C                                      ; fully-qualified     # 🤼 E3.0 people wrestling
-1F93C 200D 2642 FE0F                       ; fully-qualified     # 🤼‍♂️ E4.0 men wrestling
-1F93C 200D 2642                            ; minimally-qualified # 🤼‍♂ E4.0 men wrestling
-1F93C 200D 2640 FE0F                       ; fully-qualified     # 🤼‍♀️ E4.0 women wrestling
-1F93C 200D 2640                            ; minimally-qualified # 🤼‍♀ E4.0 women wrestling
-1F93D                                      ; fully-qualified     # 🤽 E3.0 person playing water polo
-1F93D 1F3FB                                ; fully-qualified     # 🤽🏻 E3.0 person playing water polo: light skin tone
-1F93D 1F3FC                                ; fully-qualified     # 🤽🏼 E3.0 person playing water polo: medium-light skin tone
-1F93D 1F3FD                                ; fully-qualified     # 🤽🏽 E3.0 person playing water polo: medium skin tone
-1F93D 1F3FE                                ; fully-qualified     # 🤽🏾 E3.0 person playing water polo: medium-dark skin tone
-1F93D 1F3FF                                ; fully-qualified     # 🤽🏿 E3.0 person playing water polo: dark skin tone
-1F93D 200D 2642 FE0F                       ; fully-qualified     # 🤽‍♂️ E4.0 man playing water polo
-1F93D 200D 2642                            ; minimally-qualified # 🤽‍♂ E4.0 man playing water polo
-1F93D 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🤽🏻‍♂️ E4.0 man playing water polo: light skin tone
-1F93D 1F3FB 200D 2642                      ; minimally-qualified # 🤽🏻‍♂ E4.0 man playing water polo: light skin tone
-1F93D 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🤽🏼‍♂️ E4.0 man playing water polo: medium-light skin tone
-1F93D 1F3FC 200D 2642                      ; minimally-qualified # 🤽🏼‍♂ E4.0 man playing water polo: medium-light skin tone
-1F93D 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🤽🏽‍♂️ E4.0 man playing water polo: medium skin tone
-1F93D 1F3FD 200D 2642                      ; minimally-qualified # 🤽🏽‍♂ E4.0 man playing water polo: medium skin tone
-1F93D 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🤽🏾‍♂️ E4.0 man playing water polo: medium-dark skin tone
-1F93D 1F3FE 200D 2642                      ; minimally-qualified # 🤽🏾‍♂ E4.0 man playing water polo: medium-dark skin tone
-1F93D 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🤽🏿‍♂️ E4.0 man playing water polo: dark skin tone
-1F93D 1F3FF 200D 2642                      ; minimally-qualified # 🤽🏿‍♂ E4.0 man playing water polo: dark skin tone
-1F93D 200D 2640 FE0F                       ; fully-qualified     # 🤽‍♀️ E4.0 woman playing water polo
-1F93D 200D 2640                            ; minimally-qualified # 🤽‍♀ E4.0 woman playing water polo
-1F93D 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🤽🏻‍♀️ E4.0 woman playing water polo: light skin tone
-1F93D 1F3FB 200D 2640                      ; minimally-qualified # 🤽🏻‍♀ E4.0 woman playing water polo: light skin tone
-1F93D 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🤽🏼‍♀️ E4.0 woman playing water polo: medium-light skin tone
-1F93D 1F3FC 200D 2640                      ; minimally-qualified # 🤽🏼‍♀ E4.0 woman playing water polo: medium-light skin tone
-1F93D 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🤽🏽‍♀️ E4.0 woman playing water polo: medium skin tone
-1F93D 1F3FD 200D 2640                      ; minimally-qualified # 🤽🏽‍♀ E4.0 woman playing water polo: medium skin tone
-1F93D 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🤽🏾‍♀️ E4.0 woman playing water polo: medium-dark skin tone
-1F93D 1F3FE 200D 2640                      ; minimally-qualified # 🤽🏾‍♀ E4.0 woman playing water polo: medium-dark skin tone
-1F93D 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🤽🏿‍♀️ E4.0 woman playing water polo: dark skin tone
-1F93D 1F3FF 200D 2640                      ; minimally-qualified # 🤽🏿‍♀ E4.0 woman playing water polo: dark skin tone
-1F93E                                      ; fully-qualified     # 🤾 E3.0 person playing handball
-1F93E 1F3FB                                ; fully-qualified     # 🤾🏻 E3.0 person playing handball: light skin tone
-1F93E 1F3FC                                ; fully-qualified     # 🤾🏼 E3.0 person playing handball: medium-light skin tone
-1F93E 1F3FD                                ; fully-qualified     # 🤾🏽 E3.0 person playing handball: medium skin tone
-1F93E 1F3FE                                ; fully-qualified     # 🤾🏾 E3.0 person playing handball: medium-dark skin tone
-1F93E 1F3FF                                ; fully-qualified     # 🤾🏿 E3.0 person playing handball: dark skin tone
-1F93E 200D 2642 FE0F                       ; fully-qualified     # 🤾‍♂️ E4.0 man playing handball
-1F93E 200D 2642                            ; minimally-qualified # 🤾‍♂ E4.0 man playing handball
-1F93E 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🤾🏻‍♂️ E4.0 man playing handball: light skin tone
-1F93E 1F3FB 200D 2642                      ; minimally-qualified # 🤾🏻‍♂ E4.0 man playing handball: light skin tone
-1F93E 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🤾🏼‍♂️ E4.0 man playing handball: medium-light skin tone
-1F93E 1F3FC 200D 2642                      ; minimally-qualified # 🤾🏼‍♂ E4.0 man playing handball: medium-light skin tone
-1F93E 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🤾🏽‍♂️ E4.0 man playing handball: medium skin tone
-1F93E 1F3FD 200D 2642                      ; minimally-qualified # 🤾🏽‍♂ E4.0 man playing handball: medium skin tone
-1F93E 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🤾🏾‍♂️ E4.0 man playing handball: medium-dark skin tone
-1F93E 1F3FE 200D 2642                      ; minimally-qualified # 🤾🏾‍♂ E4.0 man playing handball: medium-dark skin tone
-1F93E 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🤾🏿‍♂️ E4.0 man playing handball: dark skin tone
-1F93E 1F3FF 200D 2642                      ; minimally-qualified # 🤾🏿‍♂ E4.0 man playing handball: dark skin tone
-1F93E 200D 2640 FE0F                       ; fully-qualified     # 🤾‍♀️ E4.0 woman playing handball
-1F93E 200D 2640                            ; minimally-qualified # 🤾‍♀ E4.0 woman playing handball
-1F93E 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🤾🏻‍♀️ E4.0 woman playing handball: light skin tone
-1F93E 1F3FB 200D 2640                      ; minimally-qualified # 🤾🏻‍♀ E4.0 woman playing handball: light skin tone
-1F93E 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🤾🏼‍♀️ E4.0 woman playing handball: medium-light skin tone
-1F93E 1F3FC 200D 2640                      ; minimally-qualified # 🤾🏼‍♀ E4.0 woman playing handball: medium-light skin tone
-1F93E 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🤾🏽‍♀️ E4.0 woman playing handball: medium skin tone
-1F93E 1F3FD 200D 2640                      ; minimally-qualified # 🤾🏽‍♀ E4.0 woman playing handball: medium skin tone
-1F93E 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🤾🏾‍♀️ E4.0 woman playing handball: medium-dark skin tone
-1F93E 1F3FE 200D 2640                      ; minimally-qualified # 🤾🏾‍♀ E4.0 woman playing handball: medium-dark skin tone
-1F93E 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🤾🏿‍♀️ E4.0 woman playing handball: dark skin tone
-1F93E 1F3FF 200D 2640                      ; minimally-qualified # 🤾🏿‍♀ E4.0 woman playing handball: dark skin tone
-1F939                                      ; fully-qualified     # 🤹 E3.0 person juggling
-1F939 1F3FB                                ; fully-qualified     # 🤹🏻 E3.0 person juggling: light skin tone
-1F939 1F3FC                                ; fully-qualified     # 🤹🏼 E3.0 person juggling: medium-light skin tone
-1F939 1F3FD                                ; fully-qualified     # 🤹🏽 E3.0 person juggling: medium skin tone
-1F939 1F3FE                                ; fully-qualified     # 🤹🏾 E3.0 person juggling: medium-dark skin tone
-1F939 1F3FF                                ; fully-qualified     # 🤹🏿 E3.0 person juggling: dark skin tone
-1F939 200D 2642 FE0F                       ; fully-qualified     # 🤹‍♂️ E4.0 man juggling
-1F939 200D 2642                            ; minimally-qualified # 🤹‍♂ E4.0 man juggling
-1F939 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🤹🏻‍♂️ E4.0 man juggling: light skin tone
-1F939 1F3FB 200D 2642                      ; minimally-qualified # 🤹🏻‍♂ E4.0 man juggling: light skin tone
-1F939 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🤹🏼‍♂️ E4.0 man juggling: medium-light skin tone
-1F939 1F3FC 200D 2642                      ; minimally-qualified # 🤹🏼‍♂ E4.0 man juggling: medium-light skin tone
-1F939 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🤹🏽‍♂️ E4.0 man juggling: medium skin tone
-1F939 1F3FD 200D 2642                      ; minimally-qualified # 🤹🏽‍♂ E4.0 man juggling: medium skin tone
-1F939 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🤹🏾‍♂️ E4.0 man juggling: medium-dark skin tone
-1F939 1F3FE 200D 2642                      ; minimally-qualified # 🤹🏾‍♂ E4.0 man juggling: medium-dark skin tone
-1F939 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🤹🏿‍♂️ E4.0 man juggling: dark skin tone
-1F939 1F3FF 200D 2642                      ; minimally-qualified # 🤹🏿‍♂ E4.0 man juggling: dark skin tone
-1F939 200D 2640 FE0F                       ; fully-qualified     # 🤹‍♀️ E4.0 woman juggling
-1F939 200D 2640                            ; minimally-qualified # 🤹‍♀ E4.0 woman juggling
-1F939 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🤹🏻‍♀️ E4.0 woman juggling: light skin tone
-1F939 1F3FB 200D 2640                      ; minimally-qualified # 🤹🏻‍♀ E4.0 woman juggling: light skin tone
-1F939 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🤹🏼‍♀️ E4.0 woman juggling: medium-light skin tone
-1F939 1F3FC 200D 2640                      ; minimally-qualified # 🤹🏼‍♀ E4.0 woman juggling: medium-light skin tone
-1F939 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🤹🏽‍♀️ E4.0 woman juggling: medium skin tone
-1F939 1F3FD 200D 2640                      ; minimally-qualified # 🤹🏽‍♀ E4.0 woman juggling: medium skin tone
-1F939 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🤹🏾‍♀️ E4.0 woman juggling: medium-dark skin tone
-1F939 1F3FE 200D 2640                      ; minimally-qualified # 🤹🏾‍♀ E4.0 woman juggling: medium-dark skin tone
-1F939 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🤹🏿‍♀️ E4.0 woman juggling: dark skin tone
-1F939 1F3FF 200D 2640                      ; minimally-qualified # 🤹🏿‍♀ E4.0 woman juggling: dark skin tone
+1F93A                                                  ; fully-qualified     # 🤺 E3.0 person fencing
+1F3C7                                                  ; fully-qualified     # 🏇 E1.0 horse racing
+1F3C7 1F3FB                                            ; fully-qualified     # 🏇🏻 E1.0 horse racing: light skin tone
+1F3C7 1F3FC                                            ; fully-qualified     # 🏇🏼 E1.0 horse racing: medium-light skin tone
+1F3C7 1F3FD                                            ; fully-qualified     # 🏇🏽 E1.0 horse racing: medium skin tone
+1F3C7 1F3FE                                            ; fully-qualified     # 🏇🏾 E1.0 horse racing: medium-dark skin tone
+1F3C7 1F3FF                                            ; fully-qualified     # 🏇🏿 E1.0 horse racing: dark skin tone
+26F7 FE0F                                              ; fully-qualified     # ⛷️ E0.7 skier
+26F7                                                   ; unqualified         # ⛷ E0.7 skier
+1F3C2                                                  ; fully-qualified     # 🏂 E0.6 snowboarder
+1F3C2 1F3FB                                            ; fully-qualified     # 🏂🏻 E1.0 snowboarder: light skin tone
+1F3C2 1F3FC                                            ; fully-qualified     # 🏂🏼 E1.0 snowboarder: medium-light skin tone
+1F3C2 1F3FD                                            ; fully-qualified     # 🏂🏽 E1.0 snowboarder: medium skin tone
+1F3C2 1F3FE                                            ; fully-qualified     # 🏂🏾 E1.0 snowboarder: medium-dark skin tone
+1F3C2 1F3FF                                            ; fully-qualified     # 🏂🏿 E1.0 snowboarder: dark skin tone
+1F3CC FE0F                                             ; fully-qualified     # 🏌️ E0.7 person golfing
+1F3CC                                                  ; unqualified         # 🏌 E0.7 person golfing
+1F3CC 1F3FB                                            ; fully-qualified     # 🏌🏻 E4.0 person golfing: light skin tone
+1F3CC 1F3FC                                            ; fully-qualified     # 🏌🏼 E4.0 person golfing: medium-light skin tone
+1F3CC 1F3FD                                            ; fully-qualified     # 🏌🏽 E4.0 person golfing: medium skin tone
+1F3CC 1F3FE                                            ; fully-qualified     # 🏌🏾 E4.0 person golfing: medium-dark skin tone
+1F3CC 1F3FF                                            ; fully-qualified     # 🏌🏿 E4.0 person golfing: dark skin tone
+1F3CC FE0F 200D 2642 FE0F                              ; fully-qualified     # 🏌️‍♂️ E4.0 man golfing
+1F3CC 200D 2642 FE0F                                   ; unqualified         # 🏌‍♂️ E4.0 man golfing
+1F3CC FE0F 200D 2642                                   ; unqualified         # 🏌️‍♂ E4.0 man golfing
+1F3CC 200D 2642                                        ; unqualified         # 🏌‍♂ E4.0 man golfing
+1F3CC 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🏌🏻‍♂️ E4.0 man golfing: light skin tone
+1F3CC 1F3FB 200D 2642                                  ; minimally-qualified # 🏌🏻‍♂ E4.0 man golfing: light skin tone
+1F3CC 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🏌🏼‍♂️ E4.0 man golfing: medium-light skin tone
+1F3CC 1F3FC 200D 2642                                  ; minimally-qualified # 🏌🏼‍♂ E4.0 man golfing: medium-light skin tone
+1F3CC 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🏌🏽‍♂️ E4.0 man golfing: medium skin tone
+1F3CC 1F3FD 200D 2642                                  ; minimally-qualified # 🏌🏽‍♂ E4.0 man golfing: medium skin tone
+1F3CC 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🏌🏾‍♂️ E4.0 man golfing: medium-dark skin tone
+1F3CC 1F3FE 200D 2642                                  ; minimally-qualified # 🏌🏾‍♂ E4.0 man golfing: medium-dark skin tone
+1F3CC 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🏌🏿‍♂️ E4.0 man golfing: dark skin tone
+1F3CC 1F3FF 200D 2642                                  ; minimally-qualified # 🏌🏿‍♂ E4.0 man golfing: dark skin tone
+1F3CC FE0F 200D 2640 FE0F                              ; fully-qualified     # 🏌️‍♀️ E4.0 woman golfing
+1F3CC 200D 2640 FE0F                                   ; unqualified         # 🏌‍♀️ E4.0 woman golfing
+1F3CC FE0F 200D 2640                                   ; unqualified         # 🏌️‍♀ E4.0 woman golfing
+1F3CC 200D 2640                                        ; unqualified         # 🏌‍♀ E4.0 woman golfing
+1F3CC 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🏌🏻‍♀️ E4.0 woman golfing: light skin tone
+1F3CC 1F3FB 200D 2640                                  ; minimally-qualified # 🏌🏻‍♀ E4.0 woman golfing: light skin tone
+1F3CC 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🏌🏼‍♀️ E4.0 woman golfing: medium-light skin tone
+1F3CC 1F3FC 200D 2640                                  ; minimally-qualified # 🏌🏼‍♀ E4.0 woman golfing: medium-light skin tone
+1F3CC 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🏌🏽‍♀️ E4.0 woman golfing: medium skin tone
+1F3CC 1F3FD 200D 2640                                  ; minimally-qualified # 🏌🏽‍♀ E4.0 woman golfing: medium skin tone
+1F3CC 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🏌🏾‍♀️ E4.0 woman golfing: medium-dark skin tone
+1F3CC 1F3FE 200D 2640                                  ; minimally-qualified # 🏌🏾‍♀ E4.0 woman golfing: medium-dark skin tone
+1F3CC 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🏌🏿‍♀️ E4.0 woman golfing: dark skin tone
+1F3CC 1F3FF 200D 2640                                  ; minimally-qualified # 🏌🏿‍♀ E4.0 woman golfing: dark skin tone
+1F3C4                                                  ; fully-qualified     # 🏄 E0.6 person surfing
+1F3C4 1F3FB                                            ; fully-qualified     # 🏄🏻 E1.0 person surfing: light skin tone
+1F3C4 1F3FC                                            ; fully-qualified     # 🏄🏼 E1.0 person surfing: medium-light skin tone
+1F3C4 1F3FD                                            ; fully-qualified     # 🏄🏽 E1.0 person surfing: medium skin tone
+1F3C4 1F3FE                                            ; fully-qualified     # 🏄🏾 E1.0 person surfing: medium-dark skin tone
+1F3C4 1F3FF                                            ; fully-qualified     # 🏄🏿 E1.0 person surfing: dark skin tone
+1F3C4 200D 2642 FE0F                                   ; fully-qualified     # 🏄‍♂️ E4.0 man surfing
+1F3C4 200D 2642                                        ; minimally-qualified # 🏄‍♂ E4.0 man surfing
+1F3C4 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🏄🏻‍♂️ E4.0 man surfing: light skin tone
+1F3C4 1F3FB 200D 2642                                  ; minimally-qualified # 🏄🏻‍♂ E4.0 man surfing: light skin tone
+1F3C4 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🏄🏼‍♂️ E4.0 man surfing: medium-light skin tone
+1F3C4 1F3FC 200D 2642                                  ; minimally-qualified # 🏄🏼‍♂ E4.0 man surfing: medium-light skin tone
+1F3C4 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🏄🏽‍♂️ E4.0 man surfing: medium skin tone
+1F3C4 1F3FD 200D 2642                                  ; minimally-qualified # 🏄🏽‍♂ E4.0 man surfing: medium skin tone
+1F3C4 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🏄🏾‍♂️ E4.0 man surfing: medium-dark skin tone
+1F3C4 1F3FE 200D 2642                                  ; minimally-qualified # 🏄🏾‍♂ E4.0 man surfing: medium-dark skin tone
+1F3C4 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🏄🏿‍♂️ E4.0 man surfing: dark skin tone
+1F3C4 1F3FF 200D 2642                                  ; minimally-qualified # 🏄🏿‍♂ E4.0 man surfing: dark skin tone
+1F3C4 200D 2640 FE0F                                   ; fully-qualified     # 🏄‍♀️ E4.0 woman surfing
+1F3C4 200D 2640                                        ; minimally-qualified # 🏄‍♀ E4.0 woman surfing
+1F3C4 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🏄🏻‍♀️ E4.0 woman surfing: light skin tone
+1F3C4 1F3FB 200D 2640                                  ; minimally-qualified # 🏄🏻‍♀ E4.0 woman surfing: light skin tone
+1F3C4 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🏄🏼‍♀️ E4.0 woman surfing: medium-light skin tone
+1F3C4 1F3FC 200D 2640                                  ; minimally-qualified # 🏄🏼‍♀ E4.0 woman surfing: medium-light skin tone
+1F3C4 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🏄🏽‍♀️ E4.0 woman surfing: medium skin tone
+1F3C4 1F3FD 200D 2640                                  ; minimally-qualified # 🏄🏽‍♀ E4.0 woman surfing: medium skin tone
+1F3C4 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🏄🏾‍♀️ E4.0 woman surfing: medium-dark skin tone
+1F3C4 1F3FE 200D 2640                                  ; minimally-qualified # 🏄🏾‍♀ E4.0 woman surfing: medium-dark skin tone
+1F3C4 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🏄🏿‍♀️ E4.0 woman surfing: dark skin tone
+1F3C4 1F3FF 200D 2640                                  ; minimally-qualified # 🏄🏿‍♀ E4.0 woman surfing: dark skin tone
+1F6A3                                                  ; fully-qualified     # 🚣 E1.0 person rowing boat
+1F6A3 1F3FB                                            ; fully-qualified     # 🚣🏻 E1.0 person rowing boat: light skin tone
+1F6A3 1F3FC                                            ; fully-qualified     # 🚣🏼 E1.0 person rowing boat: medium-light skin tone
+1F6A3 1F3FD                                            ; fully-qualified     # 🚣🏽 E1.0 person rowing boat: medium skin tone
+1F6A3 1F3FE                                            ; fully-qualified     # 🚣🏾 E1.0 person rowing boat: medium-dark skin tone
+1F6A3 1F3FF                                            ; fully-qualified     # 🚣🏿 E1.0 person rowing boat: dark skin tone
+1F6A3 200D 2642 FE0F                                   ; fully-qualified     # 🚣‍♂️ E4.0 man rowing boat
+1F6A3 200D 2642                                        ; minimally-qualified # 🚣‍♂ E4.0 man rowing boat
+1F6A3 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🚣🏻‍♂️ E4.0 man rowing boat: light skin tone
+1F6A3 1F3FB 200D 2642                                  ; minimally-qualified # 🚣🏻‍♂ E4.0 man rowing boat: light skin tone
+1F6A3 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🚣🏼‍♂️ E4.0 man rowing boat: medium-light skin tone
+1F6A3 1F3FC 200D 2642                                  ; minimally-qualified # 🚣🏼‍♂ E4.0 man rowing boat: medium-light skin tone
+1F6A3 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🚣🏽‍♂️ E4.0 man rowing boat: medium skin tone
+1F6A3 1F3FD 200D 2642                                  ; minimally-qualified # 🚣🏽‍♂ E4.0 man rowing boat: medium skin tone
+1F6A3 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🚣🏾‍♂️ E4.0 man rowing boat: medium-dark skin tone
+1F6A3 1F3FE 200D 2642                                  ; minimally-qualified # 🚣🏾‍♂ E4.0 man rowing boat: medium-dark skin tone
+1F6A3 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🚣🏿‍♂️ E4.0 man rowing boat: dark skin tone
+1F6A3 1F3FF 200D 2642                                  ; minimally-qualified # 🚣🏿‍♂ E4.0 man rowing boat: dark skin tone
+1F6A3 200D 2640 FE0F                                   ; fully-qualified     # 🚣‍♀️ E4.0 woman rowing boat
+1F6A3 200D 2640                                        ; minimally-qualified # 🚣‍♀ E4.0 woman rowing boat
+1F6A3 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🚣🏻‍♀️ E4.0 woman rowing boat: light skin tone
+1F6A3 1F3FB 200D 2640                                  ; minimally-qualified # 🚣🏻‍♀ E4.0 woman rowing boat: light skin tone
+1F6A3 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🚣🏼‍♀️ E4.0 woman rowing boat: medium-light skin tone
+1F6A3 1F3FC 200D 2640                                  ; minimally-qualified # 🚣🏼‍♀ E4.0 woman rowing boat: medium-light skin tone
+1F6A3 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🚣🏽‍♀️ E4.0 woman rowing boat: medium skin tone
+1F6A3 1F3FD 200D 2640                                  ; minimally-qualified # 🚣🏽‍♀ E4.0 woman rowing boat: medium skin tone
+1F6A3 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🚣🏾‍♀️ E4.0 woman rowing boat: medium-dark skin tone
+1F6A3 1F3FE 200D 2640                                  ; minimally-qualified # 🚣🏾‍♀ E4.0 woman rowing boat: medium-dark skin tone
+1F6A3 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🚣🏿‍♀️ E4.0 woman rowing boat: dark skin tone
+1F6A3 1F3FF 200D 2640                                  ; minimally-qualified # 🚣🏿‍♀ E4.0 woman rowing boat: dark skin tone
+1F3CA                                                  ; fully-qualified     # 🏊 E0.6 person swimming
+1F3CA 1F3FB                                            ; fully-qualified     # 🏊🏻 E1.0 person swimming: light skin tone
+1F3CA 1F3FC                                            ; fully-qualified     # 🏊🏼 E1.0 person swimming: medium-light skin tone
+1F3CA 1F3FD                                            ; fully-qualified     # 🏊🏽 E1.0 person swimming: medium skin tone
+1F3CA 1F3FE                                            ; fully-qualified     # 🏊🏾 E1.0 person swimming: medium-dark skin tone
+1F3CA 1F3FF                                            ; fully-qualified     # 🏊🏿 E1.0 person swimming: dark skin tone
+1F3CA 200D 2642 FE0F                                   ; fully-qualified     # 🏊‍♂️ E4.0 man swimming
+1F3CA 200D 2642                                        ; minimally-qualified # 🏊‍♂ E4.0 man swimming
+1F3CA 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🏊🏻‍♂️ E4.0 man swimming: light skin tone
+1F3CA 1F3FB 200D 2642                                  ; minimally-qualified # 🏊🏻‍♂ E4.0 man swimming: light skin tone
+1F3CA 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🏊🏼‍♂️ E4.0 man swimming: medium-light skin tone
+1F3CA 1F3FC 200D 2642                                  ; minimally-qualified # 🏊🏼‍♂ E4.0 man swimming: medium-light skin tone
+1F3CA 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🏊🏽‍♂️ E4.0 man swimming: medium skin tone
+1F3CA 1F3FD 200D 2642                                  ; minimally-qualified # 🏊🏽‍♂ E4.0 man swimming: medium skin tone
+1F3CA 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🏊🏾‍♂️ E4.0 man swimming: medium-dark skin tone
+1F3CA 1F3FE 200D 2642                                  ; minimally-qualified # 🏊🏾‍♂ E4.0 man swimming: medium-dark skin tone
+1F3CA 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🏊🏿‍♂️ E4.0 man swimming: dark skin tone
+1F3CA 1F3FF 200D 2642                                  ; minimally-qualified # 🏊🏿‍♂ E4.0 man swimming: dark skin tone
+1F3CA 200D 2640 FE0F                                   ; fully-qualified     # 🏊‍♀️ E4.0 woman swimming
+1F3CA 200D 2640                                        ; minimally-qualified # 🏊‍♀ E4.0 woman swimming
+1F3CA 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🏊🏻‍♀️ E4.0 woman swimming: light skin tone
+1F3CA 1F3FB 200D 2640                                  ; minimally-qualified # 🏊🏻‍♀ E4.0 woman swimming: light skin tone
+1F3CA 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🏊🏼‍♀️ E4.0 woman swimming: medium-light skin tone
+1F3CA 1F3FC 200D 2640                                  ; minimally-qualified # 🏊🏼‍♀ E4.0 woman swimming: medium-light skin tone
+1F3CA 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🏊🏽‍♀️ E4.0 woman swimming: medium skin tone
+1F3CA 1F3FD 200D 2640                                  ; minimally-qualified # 🏊🏽‍♀ E4.0 woman swimming: medium skin tone
+1F3CA 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🏊🏾‍♀️ E4.0 woman swimming: medium-dark skin tone
+1F3CA 1F3FE 200D 2640                                  ; minimally-qualified # 🏊🏾‍♀ E4.0 woman swimming: medium-dark skin tone
+1F3CA 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🏊🏿‍♀️ E4.0 woman swimming: dark skin tone
+1F3CA 1F3FF 200D 2640                                  ; minimally-qualified # 🏊🏿‍♀ E4.0 woman swimming: dark skin tone
+26F9 FE0F                                              ; fully-qualified     # ⛹️ E0.7 person bouncing ball
+26F9                                                   ; unqualified         # ⛹ E0.7 person bouncing ball
+26F9 1F3FB                                             ; fully-qualified     # ⛹🏻 E2.0 person bouncing ball: light skin tone
+26F9 1F3FC                                             ; fully-qualified     # ⛹🏼 E2.0 person bouncing ball: medium-light skin tone
+26F9 1F3FD                                             ; fully-qualified     # ⛹🏽 E2.0 person bouncing ball: medium skin tone
+26F9 1F3FE                                             ; fully-qualified     # ⛹🏾 E2.0 person bouncing ball: medium-dark skin tone
+26F9 1F3FF                                             ; fully-qualified     # ⛹🏿 E2.0 person bouncing ball: dark skin tone
+26F9 FE0F 200D 2642 FE0F                               ; fully-qualified     # ⛹️‍♂️ E4.0 man bouncing ball
+26F9 200D 2642 FE0F                                    ; unqualified         # ⛹‍♂️ E4.0 man bouncing ball
+26F9 FE0F 200D 2642                                    ; unqualified         # ⛹️‍♂ E4.0 man bouncing ball
+26F9 200D 2642                                         ; unqualified         # ⛹‍♂ E4.0 man bouncing ball
+26F9 1F3FB 200D 2642 FE0F                              ; fully-qualified     # ⛹🏻‍♂️ E4.0 man bouncing ball: light skin tone
+26F9 1F3FB 200D 2642                                   ; minimally-qualified # ⛹🏻‍♂ E4.0 man bouncing ball: light skin tone
+26F9 1F3FC 200D 2642 FE0F                              ; fully-qualified     # ⛹🏼‍♂️ E4.0 man bouncing ball: medium-light skin tone
+26F9 1F3FC 200D 2642                                   ; minimally-qualified # ⛹🏼‍♂ E4.0 man bouncing ball: medium-light skin tone
+26F9 1F3FD 200D 2642 FE0F                              ; fully-qualified     # ⛹🏽‍♂️ E4.0 man bouncing ball: medium skin tone
+26F9 1F3FD 200D 2642                                   ; minimally-qualified # ⛹🏽‍♂ E4.0 man bouncing ball: medium skin tone
+26F9 1F3FE 200D 2642 FE0F                              ; fully-qualified     # ⛹🏾‍♂️ E4.0 man bouncing ball: medium-dark skin tone
+26F9 1F3FE 200D 2642                                   ; minimally-qualified # ⛹🏾‍♂ E4.0 man bouncing ball: medium-dark skin tone
+26F9 1F3FF 200D 2642 FE0F                              ; fully-qualified     # ⛹🏿‍♂️ E4.0 man bouncing ball: dark skin tone
+26F9 1F3FF 200D 2642                                   ; minimally-qualified # ⛹🏿‍♂ E4.0 man bouncing ball: dark skin tone
+26F9 FE0F 200D 2640 FE0F                               ; fully-qualified     # ⛹️‍♀️ E4.0 woman bouncing ball
+26F9 200D 2640 FE0F                                    ; unqualified         # ⛹‍♀️ E4.0 woman bouncing ball
+26F9 FE0F 200D 2640                                    ; unqualified         # ⛹️‍♀ E4.0 woman bouncing ball
+26F9 200D 2640                                         ; unqualified         # ⛹‍♀ E4.0 woman bouncing ball
+26F9 1F3FB 200D 2640 FE0F                              ; fully-qualified     # ⛹🏻‍♀️ E4.0 woman bouncing ball: light skin tone
+26F9 1F3FB 200D 2640                                   ; minimally-qualified # ⛹🏻‍♀ E4.0 woman bouncing ball: light skin tone
+26F9 1F3FC 200D 2640 FE0F                              ; fully-qualified     # ⛹🏼‍♀️ E4.0 woman bouncing ball: medium-light skin tone
+26F9 1F3FC 200D 2640                                   ; minimally-qualified # ⛹🏼‍♀ E4.0 woman bouncing ball: medium-light skin tone
+26F9 1F3FD 200D 2640 FE0F                              ; fully-qualified     # ⛹🏽‍♀️ E4.0 woman bouncing ball: medium skin tone
+26F9 1F3FD 200D 2640                                   ; minimally-qualified # ⛹🏽‍♀ E4.0 woman bouncing ball: medium skin tone
+26F9 1F3FE 200D 2640 FE0F                              ; fully-qualified     # ⛹🏾‍♀️ E4.0 woman bouncing ball: medium-dark skin tone
+26F9 1F3FE 200D 2640                                   ; minimally-qualified # ⛹🏾‍♀ E4.0 woman bouncing ball: medium-dark skin tone
+26F9 1F3FF 200D 2640 FE0F                              ; fully-qualified     # ⛹🏿‍♀️ E4.0 woman bouncing ball: dark skin tone
+26F9 1F3FF 200D 2640                                   ; minimally-qualified # ⛹🏿‍♀ E4.0 woman bouncing ball: dark skin tone
+1F3CB FE0F                                             ; fully-qualified     # 🏋️ E0.7 person lifting weights
+1F3CB                                                  ; unqualified         # 🏋 E0.7 person lifting weights
+1F3CB 1F3FB                                            ; fully-qualified     # 🏋🏻 E2.0 person lifting weights: light skin tone
+1F3CB 1F3FC                                            ; fully-qualified     # 🏋🏼 E2.0 person lifting weights: medium-light skin tone
+1F3CB 1F3FD                                            ; fully-qualified     # 🏋🏽 E2.0 person lifting weights: medium skin tone
+1F3CB 1F3FE                                            ; fully-qualified     # 🏋🏾 E2.0 person lifting weights: medium-dark skin tone
+1F3CB 1F3FF                                            ; fully-qualified     # 🏋🏿 E2.0 person lifting weights: dark skin tone
+1F3CB FE0F 200D 2642 FE0F                              ; fully-qualified     # 🏋️‍♂️ E4.0 man lifting weights
+1F3CB 200D 2642 FE0F                                   ; unqualified         # 🏋‍♂️ E4.0 man lifting weights
+1F3CB FE0F 200D 2642                                   ; unqualified         # 🏋️‍♂ E4.0 man lifting weights
+1F3CB 200D 2642                                        ; unqualified         # 🏋‍♂ E4.0 man lifting weights
+1F3CB 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🏋🏻‍♂️ E4.0 man lifting weights: light skin tone
+1F3CB 1F3FB 200D 2642                                  ; minimally-qualified # 🏋🏻‍♂ E4.0 man lifting weights: light skin tone
+1F3CB 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🏋🏼‍♂️ E4.0 man lifting weights: medium-light skin tone
+1F3CB 1F3FC 200D 2642                                  ; minimally-qualified # 🏋🏼‍♂ E4.0 man lifting weights: medium-light skin tone
+1F3CB 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🏋🏽‍♂️ E4.0 man lifting weights: medium skin tone
+1F3CB 1F3FD 200D 2642                                  ; minimally-qualified # 🏋🏽‍♂ E4.0 man lifting weights: medium skin tone
+1F3CB 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🏋🏾‍♂️ E4.0 man lifting weights: medium-dark skin tone
+1F3CB 1F3FE 200D 2642                                  ; minimally-qualified # 🏋🏾‍♂ E4.0 man lifting weights: medium-dark skin tone
+1F3CB 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🏋🏿‍♂️ E4.0 man lifting weights: dark skin tone
+1F3CB 1F3FF 200D 2642                                  ; minimally-qualified # 🏋🏿‍♂ E4.0 man lifting weights: dark skin tone
+1F3CB FE0F 200D 2640 FE0F                              ; fully-qualified     # 🏋️‍♀️ E4.0 woman lifting weights
+1F3CB 200D 2640 FE0F                                   ; unqualified         # 🏋‍♀️ E4.0 woman lifting weights
+1F3CB FE0F 200D 2640                                   ; unqualified         # 🏋️‍♀ E4.0 woman lifting weights
+1F3CB 200D 2640                                        ; unqualified         # 🏋‍♀ E4.0 woman lifting weights
+1F3CB 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🏋🏻‍♀️ E4.0 woman lifting weights: light skin tone
+1F3CB 1F3FB 200D 2640                                  ; minimally-qualified # 🏋🏻‍♀ E4.0 woman lifting weights: light skin tone
+1F3CB 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🏋🏼‍♀️ E4.0 woman lifting weights: medium-light skin tone
+1F3CB 1F3FC 200D 2640                                  ; minimally-qualified # 🏋🏼‍♀ E4.0 woman lifting weights: medium-light skin tone
+1F3CB 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🏋🏽‍♀️ E4.0 woman lifting weights: medium skin tone
+1F3CB 1F3FD 200D 2640                                  ; minimally-qualified # 🏋🏽‍♀ E4.0 woman lifting weights: medium skin tone
+1F3CB 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🏋🏾‍♀️ E4.0 woman lifting weights: medium-dark skin tone
+1F3CB 1F3FE 200D 2640                                  ; minimally-qualified # 🏋🏾‍♀ E4.0 woman lifting weights: medium-dark skin tone
+1F3CB 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🏋🏿‍♀️ E4.0 woman lifting weights: dark skin tone
+1F3CB 1F3FF 200D 2640                                  ; minimally-qualified # 🏋🏿‍♀ E4.0 woman lifting weights: dark skin tone
+1F6B4                                                  ; fully-qualified     # 🚴 E1.0 person biking
+1F6B4 1F3FB                                            ; fully-qualified     # 🚴🏻 E1.0 person biking: light skin tone
+1F6B4 1F3FC                                            ; fully-qualified     # 🚴🏼 E1.0 person biking: medium-light skin tone
+1F6B4 1F3FD                                            ; fully-qualified     # 🚴🏽 E1.0 person biking: medium skin tone
+1F6B4 1F3FE                                            ; fully-qualified     # 🚴🏾 E1.0 person biking: medium-dark skin tone
+1F6B4 1F3FF                                            ; fully-qualified     # 🚴🏿 E1.0 person biking: dark skin tone
+1F6B4 200D 2642 FE0F                                   ; fully-qualified     # 🚴‍♂️ E4.0 man biking
+1F6B4 200D 2642                                        ; minimally-qualified # 🚴‍♂ E4.0 man biking
+1F6B4 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🚴🏻‍♂️ E4.0 man biking: light skin tone
+1F6B4 1F3FB 200D 2642                                  ; minimally-qualified # 🚴🏻‍♂ E4.0 man biking: light skin tone
+1F6B4 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🚴🏼‍♂️ E4.0 man biking: medium-light skin tone
+1F6B4 1F3FC 200D 2642                                  ; minimally-qualified # 🚴🏼‍♂ E4.0 man biking: medium-light skin tone
+1F6B4 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🚴🏽‍♂️ E4.0 man biking: medium skin tone
+1F6B4 1F3FD 200D 2642                                  ; minimally-qualified # 🚴🏽‍♂ E4.0 man biking: medium skin tone
+1F6B4 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🚴🏾‍♂️ E4.0 man biking: medium-dark skin tone
+1F6B4 1F3FE 200D 2642                                  ; minimally-qualified # 🚴🏾‍♂ E4.0 man biking: medium-dark skin tone
+1F6B4 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🚴🏿‍♂️ E4.0 man biking: dark skin tone
+1F6B4 1F3FF 200D 2642                                  ; minimally-qualified # 🚴🏿‍♂ E4.0 man biking: dark skin tone
+1F6B4 200D 2640 FE0F                                   ; fully-qualified     # 🚴‍♀️ E4.0 woman biking
+1F6B4 200D 2640                                        ; minimally-qualified # 🚴‍♀ E4.0 woman biking
+1F6B4 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🚴🏻‍♀️ E4.0 woman biking: light skin tone
+1F6B4 1F3FB 200D 2640                                  ; minimally-qualified # 🚴🏻‍♀ E4.0 woman biking: light skin tone
+1F6B4 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🚴🏼‍♀️ E4.0 woman biking: medium-light skin tone
+1F6B4 1F3FC 200D 2640                                  ; minimally-qualified # 🚴🏼‍♀ E4.0 woman biking: medium-light skin tone
+1F6B4 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🚴🏽‍♀️ E4.0 woman biking: medium skin tone
+1F6B4 1F3FD 200D 2640                                  ; minimally-qualified # 🚴🏽‍♀ E4.0 woman biking: medium skin tone
+1F6B4 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🚴🏾‍♀️ E4.0 woman biking: medium-dark skin tone
+1F6B4 1F3FE 200D 2640                                  ; minimally-qualified # 🚴🏾‍♀ E4.0 woman biking: medium-dark skin tone
+1F6B4 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🚴🏿‍♀️ E4.0 woman biking: dark skin tone
+1F6B4 1F3FF 200D 2640                                  ; minimally-qualified # 🚴🏿‍♀ E4.0 woman biking: dark skin tone
+1F6B5                                                  ; fully-qualified     # 🚵 E1.0 person mountain biking
+1F6B5 1F3FB                                            ; fully-qualified     # 🚵🏻 E1.0 person mountain biking: light skin tone
+1F6B5 1F3FC                                            ; fully-qualified     # 🚵🏼 E1.0 person mountain biking: medium-light skin tone
+1F6B5 1F3FD                                            ; fully-qualified     # 🚵🏽 E1.0 person mountain biking: medium skin tone
+1F6B5 1F3FE                                            ; fully-qualified     # 🚵🏾 E1.0 person mountain biking: medium-dark skin tone
+1F6B5 1F3FF                                            ; fully-qualified     # 🚵🏿 E1.0 person mountain biking: dark skin tone
+1F6B5 200D 2642 FE0F                                   ; fully-qualified     # 🚵‍♂️ E4.0 man mountain biking
+1F6B5 200D 2642                                        ; minimally-qualified # 🚵‍♂ E4.0 man mountain biking
+1F6B5 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🚵🏻‍♂️ E4.0 man mountain biking: light skin tone
+1F6B5 1F3FB 200D 2642                                  ; minimally-qualified # 🚵🏻‍♂ E4.0 man mountain biking: light skin tone
+1F6B5 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🚵🏼‍♂️ E4.0 man mountain biking: medium-light skin tone
+1F6B5 1F3FC 200D 2642                                  ; minimally-qualified # 🚵🏼‍♂ E4.0 man mountain biking: medium-light skin tone
+1F6B5 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🚵🏽‍♂️ E4.0 man mountain biking: medium skin tone
+1F6B5 1F3FD 200D 2642                                  ; minimally-qualified # 🚵🏽‍♂ E4.0 man mountain biking: medium skin tone
+1F6B5 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🚵🏾‍♂️ E4.0 man mountain biking: medium-dark skin tone
+1F6B5 1F3FE 200D 2642                                  ; minimally-qualified # 🚵🏾‍♂ E4.0 man mountain biking: medium-dark skin tone
+1F6B5 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🚵🏿‍♂️ E4.0 man mountain biking: dark skin tone
+1F6B5 1F3FF 200D 2642                                  ; minimally-qualified # 🚵🏿‍♂ E4.0 man mountain biking: dark skin tone
+1F6B5 200D 2640 FE0F                                   ; fully-qualified     # 🚵‍♀️ E4.0 woman mountain biking
+1F6B5 200D 2640                                        ; minimally-qualified # 🚵‍♀ E4.0 woman mountain biking
+1F6B5 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🚵🏻‍♀️ E4.0 woman mountain biking: light skin tone
+1F6B5 1F3FB 200D 2640                                  ; minimally-qualified # 🚵🏻‍♀ E4.0 woman mountain biking: light skin tone
+1F6B5 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🚵🏼‍♀️ E4.0 woman mountain biking: medium-light skin tone
+1F6B5 1F3FC 200D 2640                                  ; minimally-qualified # 🚵🏼‍♀ E4.0 woman mountain biking: medium-light skin tone
+1F6B5 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🚵🏽‍♀️ E4.0 woman mountain biking: medium skin tone
+1F6B5 1F3FD 200D 2640                                  ; minimally-qualified # 🚵🏽‍♀ E4.0 woman mountain biking: medium skin tone
+1F6B5 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🚵🏾‍♀️ E4.0 woman mountain biking: medium-dark skin tone
+1F6B5 1F3FE 200D 2640                                  ; minimally-qualified # 🚵🏾‍♀ E4.0 woman mountain biking: medium-dark skin tone
+1F6B5 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🚵🏿‍♀️ E4.0 woman mountain biking: dark skin tone
+1F6B5 1F3FF 200D 2640                                  ; minimally-qualified # 🚵🏿‍♀ E4.0 woman mountain biking: dark skin tone
+1F938                                                  ; fully-qualified     # 🤸 E3.0 person cartwheeling
+1F938 1F3FB                                            ; fully-qualified     # 🤸🏻 E3.0 person cartwheeling: light skin tone
+1F938 1F3FC                                            ; fully-qualified     # 🤸🏼 E3.0 person cartwheeling: medium-light skin tone
+1F938 1F3FD                                            ; fully-qualified     # 🤸🏽 E3.0 person cartwheeling: medium skin tone
+1F938 1F3FE                                            ; fully-qualified     # 🤸🏾 E3.0 person cartwheeling: medium-dark skin tone
+1F938 1F3FF                                            ; fully-qualified     # 🤸🏿 E3.0 person cartwheeling: dark skin tone
+1F938 200D 2642 FE0F                                   ; fully-qualified     # 🤸‍♂️ E4.0 man cartwheeling
+1F938 200D 2642                                        ; minimally-qualified # 🤸‍♂ E4.0 man cartwheeling
+1F938 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🤸🏻‍♂️ E4.0 man cartwheeling: light skin tone
+1F938 1F3FB 200D 2642                                  ; minimally-qualified # 🤸🏻‍♂ E4.0 man cartwheeling: light skin tone
+1F938 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🤸🏼‍♂️ E4.0 man cartwheeling: medium-light skin tone
+1F938 1F3FC 200D 2642                                  ; minimally-qualified # 🤸🏼‍♂ E4.0 man cartwheeling: medium-light skin tone
+1F938 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🤸🏽‍♂️ E4.0 man cartwheeling: medium skin tone
+1F938 1F3FD 200D 2642                                  ; minimally-qualified # 🤸🏽‍♂ E4.0 man cartwheeling: medium skin tone
+1F938 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🤸🏾‍♂️ E4.0 man cartwheeling: medium-dark skin tone
+1F938 1F3FE 200D 2642                                  ; minimally-qualified # 🤸🏾‍♂ E4.0 man cartwheeling: medium-dark skin tone
+1F938 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🤸🏿‍♂️ E4.0 man cartwheeling: dark skin tone
+1F938 1F3FF 200D 2642                                  ; minimally-qualified # 🤸🏿‍♂ E4.0 man cartwheeling: dark skin tone
+1F938 200D 2640 FE0F                                   ; fully-qualified     # 🤸‍♀️ E4.0 woman cartwheeling
+1F938 200D 2640                                        ; minimally-qualified # 🤸‍♀ E4.0 woman cartwheeling
+1F938 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🤸🏻‍♀️ E4.0 woman cartwheeling: light skin tone
+1F938 1F3FB 200D 2640                                  ; minimally-qualified # 🤸🏻‍♀ E4.0 woman cartwheeling: light skin tone
+1F938 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🤸🏼‍♀️ E4.0 woman cartwheeling: medium-light skin tone
+1F938 1F3FC 200D 2640                                  ; minimally-qualified # 🤸🏼‍♀ E4.0 woman cartwheeling: medium-light skin tone
+1F938 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🤸🏽‍♀️ E4.0 woman cartwheeling: medium skin tone
+1F938 1F3FD 200D 2640                                  ; minimally-qualified # 🤸🏽‍♀ E4.0 woman cartwheeling: medium skin tone
+1F938 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🤸🏾‍♀️ E4.0 woman cartwheeling: medium-dark skin tone
+1F938 1F3FE 200D 2640                                  ; minimally-qualified # 🤸🏾‍♀ E4.0 woman cartwheeling: medium-dark skin tone
+1F938 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🤸🏿‍♀️ E4.0 woman cartwheeling: dark skin tone
+1F938 1F3FF 200D 2640                                  ; minimally-qualified # 🤸🏿‍♀ E4.0 woman cartwheeling: dark skin tone
+1F93C                                                  ; fully-qualified     # 🤼 E3.0 people wrestling
+1F93C 200D 2642 FE0F                                   ; fully-qualified     # 🤼‍♂️ E4.0 men wrestling
+1F93C 200D 2642                                        ; minimally-qualified # 🤼‍♂ E4.0 men wrestling
+1F93C 200D 2640 FE0F                                   ; fully-qualified     # 🤼‍♀️ E4.0 women wrestling
+1F93C 200D 2640                                        ; minimally-qualified # 🤼‍♀ E4.0 women wrestling
+1F93D                                                  ; fully-qualified     # 🤽 E3.0 person playing water polo
+1F93D 1F3FB                                            ; fully-qualified     # 🤽🏻 E3.0 person playing water polo: light skin tone
+1F93D 1F3FC                                            ; fully-qualified     # 🤽🏼 E3.0 person playing water polo: medium-light skin tone
+1F93D 1F3FD                                            ; fully-qualified     # 🤽🏽 E3.0 person playing water polo: medium skin tone
+1F93D 1F3FE                                            ; fully-qualified     # 🤽🏾 E3.0 person playing water polo: medium-dark skin tone
+1F93D 1F3FF                                            ; fully-qualified     # 🤽🏿 E3.0 person playing water polo: dark skin tone
+1F93D 200D 2642 FE0F                                   ; fully-qualified     # 🤽‍♂️ E4.0 man playing water polo
+1F93D 200D 2642                                        ; minimally-qualified # 🤽‍♂ E4.0 man playing water polo
+1F93D 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🤽🏻‍♂️ E4.0 man playing water polo: light skin tone
+1F93D 1F3FB 200D 2642                                  ; minimally-qualified # 🤽🏻‍♂ E4.0 man playing water polo: light skin tone
+1F93D 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🤽🏼‍♂️ E4.0 man playing water polo: medium-light skin tone
+1F93D 1F3FC 200D 2642                                  ; minimally-qualified # 🤽🏼‍♂ E4.0 man playing water polo: medium-light skin tone
+1F93D 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🤽🏽‍♂️ E4.0 man playing water polo: medium skin tone
+1F93D 1F3FD 200D 2642                                  ; minimally-qualified # 🤽🏽‍♂ E4.0 man playing water polo: medium skin tone
+1F93D 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🤽🏾‍♂️ E4.0 man playing water polo: medium-dark skin tone
+1F93D 1F3FE 200D 2642                                  ; minimally-qualified # 🤽🏾‍♂ E4.0 man playing water polo: medium-dark skin tone
+1F93D 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🤽🏿‍♂️ E4.0 man playing water polo: dark skin tone
+1F93D 1F3FF 200D 2642                                  ; minimally-qualified # 🤽🏿‍♂ E4.0 man playing water polo: dark skin tone
+1F93D 200D 2640 FE0F                                   ; fully-qualified     # 🤽‍♀️ E4.0 woman playing water polo
+1F93D 200D 2640                                        ; minimally-qualified # 🤽‍♀ E4.0 woman playing water polo
+1F93D 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🤽🏻‍♀️ E4.0 woman playing water polo: light skin tone
+1F93D 1F3FB 200D 2640                                  ; minimally-qualified # 🤽🏻‍♀ E4.0 woman playing water polo: light skin tone
+1F93D 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🤽🏼‍♀️ E4.0 woman playing water polo: medium-light skin tone
+1F93D 1F3FC 200D 2640                                  ; minimally-qualified # 🤽🏼‍♀ E4.0 woman playing water polo: medium-light skin tone
+1F93D 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🤽🏽‍♀️ E4.0 woman playing water polo: medium skin tone
+1F93D 1F3FD 200D 2640                                  ; minimally-qualified # 🤽🏽‍♀ E4.0 woman playing water polo: medium skin tone
+1F93D 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🤽🏾‍♀️ E4.0 woman playing water polo: medium-dark skin tone
+1F93D 1F3FE 200D 2640                                  ; minimally-qualified # 🤽🏾‍♀ E4.0 woman playing water polo: medium-dark skin tone
+1F93D 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🤽🏿‍♀️ E4.0 woman playing water polo: dark skin tone
+1F93D 1F3FF 200D 2640                                  ; minimally-qualified # 🤽🏿‍♀ E4.0 woman playing water polo: dark skin tone
+1F93E                                                  ; fully-qualified     # 🤾 E3.0 person playing handball
+1F93E 1F3FB                                            ; fully-qualified     # 🤾🏻 E3.0 person playing handball: light skin tone
+1F93E 1F3FC                                            ; fully-qualified     # 🤾🏼 E3.0 person playing handball: medium-light skin tone
+1F93E 1F3FD                                            ; fully-qualified     # 🤾🏽 E3.0 person playing handball: medium skin tone
+1F93E 1F3FE                                            ; fully-qualified     # 🤾🏾 E3.0 person playing handball: medium-dark skin tone
+1F93E 1F3FF                                            ; fully-qualified     # 🤾🏿 E3.0 person playing handball: dark skin tone
+1F93E 200D 2642 FE0F                                   ; fully-qualified     # 🤾‍♂️ E4.0 man playing handball
+1F93E 200D 2642                                        ; minimally-qualified # 🤾‍♂ E4.0 man playing handball
+1F93E 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🤾🏻‍♂️ E4.0 man playing handball: light skin tone
+1F93E 1F3FB 200D 2642                                  ; minimally-qualified # 🤾🏻‍♂ E4.0 man playing handball: light skin tone
+1F93E 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🤾🏼‍♂️ E4.0 man playing handball: medium-light skin tone
+1F93E 1F3FC 200D 2642                                  ; minimally-qualified # 🤾🏼‍♂ E4.0 man playing handball: medium-light skin tone
+1F93E 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🤾🏽‍♂️ E4.0 man playing handball: medium skin tone
+1F93E 1F3FD 200D 2642                                  ; minimally-qualified # 🤾🏽‍♂ E4.0 man playing handball: medium skin tone
+1F93E 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🤾🏾‍♂️ E4.0 man playing handball: medium-dark skin tone
+1F93E 1F3FE 200D 2642                                  ; minimally-qualified # 🤾🏾‍♂ E4.0 man playing handball: medium-dark skin tone
+1F93E 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🤾🏿‍♂️ E4.0 man playing handball: dark skin tone
+1F93E 1F3FF 200D 2642                                  ; minimally-qualified # 🤾🏿‍♂ E4.0 man playing handball: dark skin tone
+1F93E 200D 2640 FE0F                                   ; fully-qualified     # 🤾‍♀️ E4.0 woman playing handball
+1F93E 200D 2640                                        ; minimally-qualified # 🤾‍♀ E4.0 woman playing handball
+1F93E 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🤾🏻‍♀️ E4.0 woman playing handball: light skin tone
+1F93E 1F3FB 200D 2640                                  ; minimally-qualified # 🤾🏻‍♀ E4.0 woman playing handball: light skin tone
+1F93E 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🤾🏼‍♀️ E4.0 woman playing handball: medium-light skin tone
+1F93E 1F3FC 200D 2640                                  ; minimally-qualified # 🤾🏼‍♀ E4.0 woman playing handball: medium-light skin tone
+1F93E 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🤾🏽‍♀️ E4.0 woman playing handball: medium skin tone
+1F93E 1F3FD 200D 2640                                  ; minimally-qualified # 🤾🏽‍♀ E4.0 woman playing handball: medium skin tone
+1F93E 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🤾🏾‍♀️ E4.0 woman playing handball: medium-dark skin tone
+1F93E 1F3FE 200D 2640                                  ; minimally-qualified # 🤾🏾‍♀ E4.0 woman playing handball: medium-dark skin tone
+1F93E 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🤾🏿‍♀️ E4.0 woman playing handball: dark skin tone
+1F93E 1F3FF 200D 2640                                  ; minimally-qualified # 🤾🏿‍♀ E4.0 woman playing handball: dark skin tone
+1F939                                                  ; fully-qualified     # 🤹 E3.0 person juggling
+1F939 1F3FB                                            ; fully-qualified     # 🤹🏻 E3.0 person juggling: light skin tone
+1F939 1F3FC                                            ; fully-qualified     # 🤹🏼 E3.0 person juggling: medium-light skin tone
+1F939 1F3FD                                            ; fully-qualified     # 🤹🏽 E3.0 person juggling: medium skin tone
+1F939 1F3FE                                            ; fully-qualified     # 🤹🏾 E3.0 person juggling: medium-dark skin tone
+1F939 1F3FF                                            ; fully-qualified     # 🤹🏿 E3.0 person juggling: dark skin tone
+1F939 200D 2642 FE0F                                   ; fully-qualified     # 🤹‍♂️ E4.0 man juggling
+1F939 200D 2642                                        ; minimally-qualified # 🤹‍♂ E4.0 man juggling
+1F939 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🤹🏻‍♂️ E4.0 man juggling: light skin tone
+1F939 1F3FB 200D 2642                                  ; minimally-qualified # 🤹🏻‍♂ E4.0 man juggling: light skin tone
+1F939 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🤹🏼‍♂️ E4.0 man juggling: medium-light skin tone
+1F939 1F3FC 200D 2642                                  ; minimally-qualified # 🤹🏼‍♂ E4.0 man juggling: medium-light skin tone
+1F939 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🤹🏽‍♂️ E4.0 man juggling: medium skin tone
+1F939 1F3FD 200D 2642                                  ; minimally-qualified # 🤹🏽‍♂ E4.0 man juggling: medium skin tone
+1F939 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🤹🏾‍♂️ E4.0 man juggling: medium-dark skin tone
+1F939 1F3FE 200D 2642                                  ; minimally-qualified # 🤹🏾‍♂ E4.0 man juggling: medium-dark skin tone
+1F939 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🤹🏿‍♂️ E4.0 man juggling: dark skin tone
+1F939 1F3FF 200D 2642                                  ; minimally-qualified # 🤹🏿‍♂ E4.0 man juggling: dark skin tone
+1F939 200D 2640 FE0F                                   ; fully-qualified     # 🤹‍♀️ E4.0 woman juggling
+1F939 200D 2640                                        ; minimally-qualified # 🤹‍♀ E4.0 woman juggling
+1F939 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🤹🏻‍♀️ E4.0 woman juggling: light skin tone
+1F939 1F3FB 200D 2640                                  ; minimally-qualified # 🤹🏻‍♀ E4.0 woman juggling: light skin tone
+1F939 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🤹🏼‍♀️ E4.0 woman juggling: medium-light skin tone
+1F939 1F3FC 200D 2640                                  ; minimally-qualified # 🤹🏼‍♀ E4.0 woman juggling: medium-light skin tone
+1F939 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🤹🏽‍♀️ E4.0 woman juggling: medium skin tone
+1F939 1F3FD 200D 2640                                  ; minimally-qualified # 🤹🏽‍♀ E4.0 woman juggling: medium skin tone
+1F939 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🤹🏾‍♀️ E4.0 woman juggling: medium-dark skin tone
+1F939 1F3FE 200D 2640                                  ; minimally-qualified # 🤹🏾‍♀ E4.0 woman juggling: medium-dark skin tone
+1F939 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🤹🏿‍♀️ E4.0 woman juggling: dark skin tone
+1F939 1F3FF 200D 2640                                  ; minimally-qualified # 🤹🏿‍♀ E4.0 woman juggling: dark skin tone
 
 # subgroup: person-resting
-1F9D8                                      ; fully-qualified     # 🧘 E5.0 person in lotus position
-1F9D8 1F3FB                                ; fully-qualified     # 🧘🏻 E5.0 person in lotus position: light skin tone
-1F9D8 1F3FC                                ; fully-qualified     # 🧘🏼 E5.0 person in lotus position: medium-light skin tone
-1F9D8 1F3FD                                ; fully-qualified     # 🧘🏽 E5.0 person in lotus position: medium skin tone
-1F9D8 1F3FE                                ; fully-qualified     # 🧘🏾 E5.0 person in lotus position: medium-dark skin tone
-1F9D8 1F3FF                                ; fully-qualified     # 🧘🏿 E5.0 person in lotus position: dark skin tone
-1F9D8 200D 2642 FE0F                       ; fully-qualified     # 🧘‍♂️ E5.0 man in lotus position
-1F9D8 200D 2642                            ; minimally-qualified # 🧘‍♂ E5.0 man in lotus position
-1F9D8 1F3FB 200D 2642 FE0F                 ; fully-qualified     # 🧘🏻‍♂️ E5.0 man in lotus position: light skin tone
-1F9D8 1F3FB 200D 2642                      ; minimally-qualified # 🧘🏻‍♂ E5.0 man in lotus position: light skin tone
-1F9D8 1F3FC 200D 2642 FE0F                 ; fully-qualified     # 🧘🏼‍♂️ E5.0 man in lotus position: medium-light skin tone
-1F9D8 1F3FC 200D 2642                      ; minimally-qualified # 🧘🏼‍♂ E5.0 man in lotus position: medium-light skin tone
-1F9D8 1F3FD 200D 2642 FE0F                 ; fully-qualified     # 🧘🏽‍♂️ E5.0 man in lotus position: medium skin tone
-1F9D8 1F3FD 200D 2642                      ; minimally-qualified # 🧘🏽‍♂ E5.0 man in lotus position: medium skin tone
-1F9D8 1F3FE 200D 2642 FE0F                 ; fully-qualified     # 🧘🏾‍♂️ E5.0 man in lotus position: medium-dark skin tone
-1F9D8 1F3FE 200D 2642                      ; minimally-qualified # 🧘🏾‍♂ E5.0 man in lotus position: medium-dark skin tone
-1F9D8 1F3FF 200D 2642 FE0F                 ; fully-qualified     # 🧘🏿‍♂️ E5.0 man in lotus position: dark skin tone
-1F9D8 1F3FF 200D 2642                      ; minimally-qualified # 🧘🏿‍♂ E5.0 man in lotus position: dark skin tone
-1F9D8 200D 2640 FE0F                       ; fully-qualified     # 🧘‍♀️ E5.0 woman in lotus position
-1F9D8 200D 2640                            ; minimally-qualified # 🧘‍♀ E5.0 woman in lotus position
-1F9D8 1F3FB 200D 2640 FE0F                 ; fully-qualified     # 🧘🏻‍♀️ E5.0 woman in lotus position: light skin tone
-1F9D8 1F3FB 200D 2640                      ; minimally-qualified # 🧘🏻‍♀ E5.0 woman in lotus position: light skin tone
-1F9D8 1F3FC 200D 2640 FE0F                 ; fully-qualified     # 🧘🏼‍♀️ E5.0 woman in lotus position: medium-light skin tone
-1F9D8 1F3FC 200D 2640                      ; minimally-qualified # 🧘🏼‍♀ E5.0 woman in lotus position: medium-light skin tone
-1F9D8 1F3FD 200D 2640 FE0F                 ; fully-qualified     # 🧘🏽‍♀️ E5.0 woman in lotus position: medium skin tone
-1F9D8 1F3FD 200D 2640                      ; minimally-qualified # 🧘🏽‍♀ E5.0 woman in lotus position: medium skin tone
-1F9D8 1F3FE 200D 2640 FE0F                 ; fully-qualified     # 🧘🏾‍♀️ E5.0 woman in lotus position: medium-dark skin tone
-1F9D8 1F3FE 200D 2640                      ; minimally-qualified # 🧘🏾‍♀ E5.0 woman in lotus position: medium-dark skin tone
-1F9D8 1F3FF 200D 2640 FE0F                 ; fully-qualified     # 🧘🏿‍♀️ E5.0 woman in lotus position: dark skin tone
-1F9D8 1F3FF 200D 2640                      ; minimally-qualified # 🧘🏿‍♀ E5.0 woman in lotus position: dark skin tone
-1F6C0                                      ; fully-qualified     # 🛀 E0.6 person taking bath
-1F6C0 1F3FB                                ; fully-qualified     # 🛀🏻 E1.0 person taking bath: light skin tone
-1F6C0 1F3FC                                ; fully-qualified     # 🛀🏼 E1.0 person taking bath: medium-light skin tone
-1F6C0 1F3FD                                ; fully-qualified     # 🛀🏽 E1.0 person taking bath: medium skin tone
-1F6C0 1F3FE                                ; fully-qualified     # 🛀🏾 E1.0 person taking bath: medium-dark skin tone
-1F6C0 1F3FF                                ; fully-qualified     # 🛀🏿 E1.0 person taking bath: dark skin tone
-1F6CC                                      ; fully-qualified     # 🛌 E1.0 person in bed
-1F6CC 1F3FB                                ; fully-qualified     # 🛌🏻 E4.0 person in bed: light skin tone
-1F6CC 1F3FC                                ; fully-qualified     # 🛌🏼 E4.0 person in bed: medium-light skin tone
-1F6CC 1F3FD                                ; fully-qualified     # 🛌🏽 E4.0 person in bed: medium skin tone
-1F6CC 1F3FE                                ; fully-qualified     # 🛌🏾 E4.0 person in bed: medium-dark skin tone
-1F6CC 1F3FF                                ; fully-qualified     # 🛌🏿 E4.0 person in bed: dark skin tone
+1F9D8                                                  ; fully-qualified     # 🧘 E5.0 person in lotus position
+1F9D8 1F3FB                                            ; fully-qualified     # 🧘🏻 E5.0 person in lotus position: light skin tone
+1F9D8 1F3FC                                            ; fully-qualified     # 🧘🏼 E5.0 person in lotus position: medium-light skin tone
+1F9D8 1F3FD                                            ; fully-qualified     # 🧘🏽 E5.0 person in lotus position: medium skin tone
+1F9D8 1F3FE                                            ; fully-qualified     # 🧘🏾 E5.0 person in lotus position: medium-dark skin tone
+1F9D8 1F3FF                                            ; fully-qualified     # 🧘🏿 E5.0 person in lotus position: dark skin tone
+1F9D8 200D 2642 FE0F                                   ; fully-qualified     # 🧘‍♂️ E5.0 man in lotus position
+1F9D8 200D 2642                                        ; minimally-qualified # 🧘‍♂ E5.0 man in lotus position
+1F9D8 1F3FB 200D 2642 FE0F                             ; fully-qualified     # 🧘🏻‍♂️ E5.0 man in lotus position: light skin tone
+1F9D8 1F3FB 200D 2642                                  ; minimally-qualified # 🧘🏻‍♂ E5.0 man in lotus position: light skin tone
+1F9D8 1F3FC 200D 2642 FE0F                             ; fully-qualified     # 🧘🏼‍♂️ E5.0 man in lotus position: medium-light skin tone
+1F9D8 1F3FC 200D 2642                                  ; minimally-qualified # 🧘🏼‍♂ E5.0 man in lotus position: medium-light skin tone
+1F9D8 1F3FD 200D 2642 FE0F                             ; fully-qualified     # 🧘🏽‍♂️ E5.0 man in lotus position: medium skin tone
+1F9D8 1F3FD 200D 2642                                  ; minimally-qualified # 🧘🏽‍♂ E5.0 man in lotus position: medium skin tone
+1F9D8 1F3FE 200D 2642 FE0F                             ; fully-qualified     # 🧘🏾‍♂️ E5.0 man in lotus position: medium-dark skin tone
+1F9D8 1F3FE 200D 2642                                  ; minimally-qualified # 🧘🏾‍♂ E5.0 man in lotus position: medium-dark skin tone
+1F9D8 1F3FF 200D 2642 FE0F                             ; fully-qualified     # 🧘🏿‍♂️ E5.0 man in lotus position: dark skin tone
+1F9D8 1F3FF 200D 2642                                  ; minimally-qualified # 🧘🏿‍♂ E5.0 man in lotus position: dark skin tone
+1F9D8 200D 2640 FE0F                                   ; fully-qualified     # 🧘‍♀️ E5.0 woman in lotus position
+1F9D8 200D 2640                                        ; minimally-qualified # 🧘‍♀ E5.0 woman in lotus position
+1F9D8 1F3FB 200D 2640 FE0F                             ; fully-qualified     # 🧘🏻‍♀️ E5.0 woman in lotus position: light skin tone
+1F9D8 1F3FB 200D 2640                                  ; minimally-qualified # 🧘🏻‍♀ E5.0 woman in lotus position: light skin tone
+1F9D8 1F3FC 200D 2640 FE0F                             ; fully-qualified     # 🧘🏼‍♀️ E5.0 woman in lotus position: medium-light skin tone
+1F9D8 1F3FC 200D 2640                                  ; minimally-qualified # 🧘🏼‍♀ E5.0 woman in lotus position: medium-light skin tone
+1F9D8 1F3FD 200D 2640 FE0F                             ; fully-qualified     # 🧘🏽‍♀️ E5.0 woman in lotus position: medium skin tone
+1F9D8 1F3FD 200D 2640                                  ; minimally-qualified # 🧘🏽‍♀ E5.0 woman in lotus position: medium skin tone
+1F9D8 1F3FE 200D 2640 FE0F                             ; fully-qualified     # 🧘🏾‍♀️ E5.0 woman in lotus position: medium-dark skin tone
+1F9D8 1F3FE 200D 2640                                  ; minimally-qualified # 🧘🏾‍♀ E5.0 woman in lotus position: medium-dark skin tone
+1F9D8 1F3FF 200D 2640 FE0F                             ; fully-qualified     # 🧘🏿‍♀️ E5.0 woman in lotus position: dark skin tone
+1F9D8 1F3FF 200D 2640                                  ; minimally-qualified # 🧘🏿‍♀ E5.0 woman in lotus position: dark skin tone
+1F6C0                                                  ; fully-qualified     # 🛀 E0.6 person taking bath
+1F6C0 1F3FB                                            ; fully-qualified     # 🛀🏻 E1.0 person taking bath: light skin tone
+1F6C0 1F3FC                                            ; fully-qualified     # 🛀🏼 E1.0 person taking bath: medium-light skin tone
+1F6C0 1F3FD                                            ; fully-qualified     # 🛀🏽 E1.0 person taking bath: medium skin tone
+1F6C0 1F3FE                                            ; fully-qualified     # 🛀🏾 E1.0 person taking bath: medium-dark skin tone
+1F6C0 1F3FF                                            ; fully-qualified     # 🛀🏿 E1.0 person taking bath: dark skin tone
+1F6CC                                                  ; fully-qualified     # 🛌 E1.0 person in bed
+1F6CC 1F3FB                                            ; fully-qualified     # 🛌🏻 E4.0 person in bed: light skin tone
+1F6CC 1F3FC                                            ; fully-qualified     # 🛌🏼 E4.0 person in bed: medium-light skin tone
+1F6CC 1F3FD                                            ; fully-qualified     # 🛌🏽 E4.0 person in bed: medium skin tone
+1F6CC 1F3FE                                            ; fully-qualified     # 🛌🏾 E4.0 person in bed: medium-dark skin tone
+1F6CC 1F3FF                                            ; fully-qualified     # 🛌🏿 E4.0 person in bed: dark skin tone
 
 # subgroup: family
-1F9D1 200D 1F91D 200D 1F9D1                ; fully-qualified     # 🧑‍🤝‍🧑 E12.0 people holding hands
-1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FB    ; fully-qualified     # 🧑🏻‍🤝‍🧑🏻 E12.0 people holding hands: light skin tone
-1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FC    ; fully-qualified     # 🧑🏻‍🤝‍🧑🏼 E12.1 people holding hands: light skin tone, medium-light skin tone
-1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FD    ; fully-qualified     # 🧑🏻‍🤝‍🧑🏽 E12.1 people holding hands: light skin tone, medium skin tone
-1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FE    ; fully-qualified     # 🧑🏻‍🤝‍🧑🏾 E12.1 people holding hands: light skin tone, medium-dark skin tone
-1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FF    ; fully-qualified     # 🧑🏻‍🤝‍🧑🏿 E12.1 people holding hands: light skin tone, dark skin tone
-1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FB    ; fully-qualified     # 🧑🏼‍🤝‍🧑🏻 E12.0 people holding hands: medium-light skin tone, light skin tone
-1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FC    ; fully-qualified     # 🧑🏼‍🤝‍🧑🏼 E12.0 people holding hands: medium-light skin tone
-1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FD    ; fully-qualified     # 🧑🏼‍🤝‍🧑🏽 E12.1 people holding hands: medium-light skin tone, medium skin tone
-1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FE    ; fully-qualified     # 🧑🏼‍🤝‍🧑🏾 E12.1 people holding hands: medium-light skin tone, medium-dark skin tone
-1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FF    ; fully-qualified     # 🧑🏼‍🤝‍🧑🏿 E12.1 people holding hands: medium-light skin tone, dark skin tone
-1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FB    ; fully-qualified     # 🧑🏽‍🤝‍🧑🏻 E12.0 people holding hands: medium skin tone, light skin tone
-1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FC    ; fully-qualified     # 🧑🏽‍🤝‍🧑🏼 E12.0 people holding hands: medium skin tone, medium-light skin tone
-1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FD    ; fully-qualified     # 🧑🏽‍🤝‍🧑🏽 E12.0 people holding hands: medium skin tone
-1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FE    ; fully-qualified     # 🧑🏽‍🤝‍🧑🏾 E12.1 people holding hands: medium skin tone, medium-dark skin tone
-1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FF    ; fully-qualified     # 🧑🏽‍🤝‍🧑🏿 E12.1 people holding hands: medium skin tone, dark skin tone
-1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FB    ; fully-qualified     # 🧑🏾‍🤝‍🧑🏻 E12.0 people holding hands: medium-dark skin tone, light skin tone
-1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FC    ; fully-qualified     # 🧑🏾‍🤝‍🧑🏼 E12.0 people holding hands: medium-dark skin tone, medium-light skin tone
-1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FD    ; fully-qualified     # 🧑🏾‍🤝‍🧑🏽 E12.0 people holding hands: medium-dark skin tone, medium skin tone
-1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FE    ; fully-qualified     # 🧑🏾‍🤝‍🧑🏾 E12.0 people holding hands: medium-dark skin tone
-1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FF    ; fully-qualified     # 🧑🏾‍🤝‍🧑🏿 E12.1 people holding hands: medium-dark skin tone, dark skin tone
-1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FB    ; fully-qualified     # 🧑🏿‍🤝‍🧑🏻 E12.0 people holding hands: dark skin tone, light skin tone
-1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FC    ; fully-qualified     # 🧑🏿‍🤝‍🧑🏼 E12.0 people holding hands: dark skin tone, medium-light skin tone
-1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FD    ; fully-qualified     # 🧑🏿‍🤝‍🧑🏽 E12.0 people holding hands: dark skin tone, medium skin tone
-1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FE    ; fully-qualified     # 🧑🏿‍🤝‍🧑🏾 E12.0 people holding hands: dark skin tone, medium-dark skin tone
-1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FF    ; fully-qualified     # 🧑🏿‍🤝‍🧑🏿 E12.0 people holding hands: dark skin tone
-1F46D                                      ; fully-qualified     # 👭 E1.0 women holding hands
-1F46D 1F3FB                                ; fully-qualified     # 👭🏻 E12.0 women holding hands: light skin tone
-1F469 1F3FB 200D 1F91D 200D 1F469 1F3FC    ; fully-qualified     # 👩🏻‍🤝‍👩🏼 E12.1 women holding hands: light skin tone, medium-light skin tone
-1F469 1F3FB 200D 1F91D 200D 1F469 1F3FD    ; fully-qualified     # 👩🏻‍🤝‍👩🏽 E12.1 women holding hands: light skin tone, medium skin tone
-1F469 1F3FB 200D 1F91D 200D 1F469 1F3FE    ; fully-qualified     # 👩🏻‍🤝‍👩🏾 E12.1 women holding hands: light skin tone, medium-dark skin tone
-1F469 1F3FB 200D 1F91D 200D 1F469 1F3FF    ; fully-qualified     # 👩🏻‍🤝‍👩🏿 E12.1 women holding hands: light skin tone, dark skin tone
-1F469 1F3FC 200D 1F91D 200D 1F469 1F3FB    ; fully-qualified     # 👩🏼‍🤝‍👩🏻 E12.0 women holding hands: medium-light skin tone, light skin tone
-1F46D 1F3FC                                ; fully-qualified     # 👭🏼 E12.0 women holding hands: medium-light skin tone
-1F469 1F3FC 200D 1F91D 200D 1F469 1F3FD    ; fully-qualified     # 👩🏼‍🤝‍👩🏽 E12.1 women holding hands: medium-light skin tone, medium skin tone
-1F469 1F3FC 200D 1F91D 200D 1F469 1F3FE    ; fully-qualified     # 👩🏼‍🤝‍👩🏾 E12.1 women holding hands: medium-light skin tone, medium-dark skin tone
-1F469 1F3FC 200D 1F91D 200D 1F469 1F3FF    ; fully-qualified     # 👩🏼‍🤝‍👩🏿 E12.1 women holding hands: medium-light skin tone, dark skin tone
-1F469 1F3FD 200D 1F91D 200D 1F469 1F3FB    ; fully-qualified     # 👩🏽‍🤝‍👩🏻 E12.0 women holding hands: medium skin tone, light skin tone
-1F469 1F3FD 200D 1F91D 200D 1F469 1F3FC    ; fully-qualified     # 👩🏽‍🤝‍👩🏼 E12.0 women holding hands: medium skin tone, medium-light skin tone
-1F46D 1F3FD                                ; fully-qualified     # 👭🏽 E12.0 women holding hands: medium skin tone
-1F469 1F3FD 200D 1F91D 200D 1F469 1F3FE    ; fully-qualified     # 👩🏽‍🤝‍👩🏾 E12.1 women holding hands: medium skin tone, medium-dark skin tone
-1F469 1F3FD 200D 1F91D 200D 1F469 1F3FF    ; fully-qualified     # 👩🏽‍🤝‍👩🏿 E12.1 women holding hands: medium skin tone, dark skin tone
-1F469 1F3FE 200D 1F91D 200D 1F469 1F3FB    ; fully-qualified     # 👩🏾‍🤝‍👩🏻 E12.0 women holding hands: medium-dark skin tone, light skin tone
-1F469 1F3FE 200D 1F91D 200D 1F469 1F3FC    ; fully-qualified     # 👩🏾‍🤝‍👩🏼 E12.0 women holding hands: medium-dark skin tone, medium-light skin tone
-1F469 1F3FE 200D 1F91D 200D 1F469 1F3FD    ; fully-qualified     # 👩🏾‍🤝‍👩🏽 E12.0 women holding hands: medium-dark skin tone, medium skin tone
-1F46D 1F3FE                                ; fully-qualified     # 👭🏾 E12.0 women holding hands: medium-dark skin tone
-1F469 1F3FE 200D 1F91D 200D 1F469 1F3FF    ; fully-qualified     # 👩🏾‍🤝‍👩🏿 E12.1 women holding hands: medium-dark skin tone, dark skin tone
-1F469 1F3FF 200D 1F91D 200D 1F469 1F3FB    ; fully-qualified     # 👩🏿‍🤝‍👩🏻 E12.0 women holding hands: dark skin tone, light skin tone
-1F469 1F3FF 200D 1F91D 200D 1F469 1F3FC    ; fully-qualified     # 👩🏿‍🤝‍👩🏼 E12.0 women holding hands: dark skin tone, medium-light skin tone
-1F469 1F3FF 200D 1F91D 200D 1F469 1F3FD    ; fully-qualified     # 👩🏿‍🤝‍👩🏽 E12.0 women holding hands: dark skin tone, medium skin tone
-1F469 1F3FF 200D 1F91D 200D 1F469 1F3FE    ; fully-qualified     # 👩🏿‍🤝‍👩🏾 E12.0 women holding hands: dark skin tone, medium-dark skin tone
-1F46D 1F3FF                                ; fully-qualified     # 👭🏿 E12.0 women holding hands: dark skin tone
-1F46B                                      ; fully-qualified     # 👫 E0.6 woman and man holding hands
-1F46B 1F3FB                                ; fully-qualified     # 👫🏻 E12.0 woman and man holding hands: light skin tone
-1F469 1F3FB 200D 1F91D 200D 1F468 1F3FC    ; fully-qualified     # 👩🏻‍🤝‍👨🏼 E12.0 woman and man holding hands: light skin tone, medium-light skin tone
-1F469 1F3FB 200D 1F91D 200D 1F468 1F3FD    ; fully-qualified     # 👩🏻‍🤝‍👨🏽 E12.0 woman and man holding hands: light skin tone, medium skin tone
-1F469 1F3FB 200D 1F91D 200D 1F468 1F3FE    ; fully-qualified     # 👩🏻‍🤝‍👨🏾 E12.0 woman and man holding hands: light skin tone, medium-dark skin tone
-1F469 1F3FB 200D 1F91D 200D 1F468 1F3FF    ; fully-qualified     # 👩🏻‍🤝‍👨🏿 E12.0 woman and man holding hands: light skin tone, dark skin tone
-1F469 1F3FC 200D 1F91D 200D 1F468 1F3FB    ; fully-qualified     # 👩🏼‍🤝‍👨🏻 E12.0 woman and man holding hands: medium-light skin tone, light skin tone
-1F46B 1F3FC                                ; fully-qualified     # 👫🏼 E12.0 woman and man holding hands: medium-light skin tone
-1F469 1F3FC 200D 1F91D 200D 1F468 1F3FD    ; fully-qualified     # 👩🏼‍🤝‍👨🏽 E12.0 woman and man holding hands: medium-light skin tone, medium skin tone
-1F469 1F3FC 200D 1F91D 200D 1F468 1F3FE    ; fully-qualified     # 👩🏼‍🤝‍👨🏾 E12.0 woman and man holding hands: medium-light skin tone, medium-dark skin tone
-1F469 1F3FC 200D 1F91D 200D 1F468 1F3FF    ; fully-qualified     # 👩🏼‍🤝‍👨🏿 E12.0 woman and man holding hands: medium-light skin tone, dark skin tone
-1F469 1F3FD 200D 1F91D 200D 1F468 1F3FB    ; fully-qualified     # 👩🏽‍🤝‍👨🏻 E12.0 woman and man holding hands: medium skin tone, light skin tone
-1F469 1F3FD 200D 1F91D 200D 1F468 1F3FC    ; fully-qualified     # 👩🏽‍🤝‍👨🏼 E12.0 woman and man holding hands: medium skin tone, medium-light skin tone
-1F46B 1F3FD                                ; fully-qualified     # 👫🏽 E12.0 woman and man holding hands: medium skin tone
-1F469 1F3FD 200D 1F91D 200D 1F468 1F3FE    ; fully-qualified     # 👩🏽‍🤝‍👨🏾 E12.0 woman and man holding hands: medium skin tone, medium-dark skin tone
-1F469 1F3FD 200D 1F91D 200D 1F468 1F3FF    ; fully-qualified     # 👩🏽‍🤝‍👨🏿 E12.0 woman and man holding hands: medium skin tone, dark skin tone
-1F469 1F3FE 200D 1F91D 200D 1F468 1F3FB    ; fully-qualified     # 👩🏾‍🤝‍👨🏻 E12.0 woman and man holding hands: medium-dark skin tone, light skin tone
-1F469 1F3FE 200D 1F91D 200D 1F468 1F3FC    ; fully-qualified     # 👩🏾‍🤝‍👨🏼 E12.0 woman and man holding hands: medium-dark skin tone, medium-light skin tone
-1F469 1F3FE 200D 1F91D 200D 1F468 1F3FD    ; fully-qualified     # 👩🏾‍🤝‍👨🏽 E12.0 woman and man holding hands: medium-dark skin tone, medium skin tone
-1F46B 1F3FE                                ; fully-qualified     # 👫🏾 E12.0 woman and man holding hands: medium-dark skin tone
-1F469 1F3FE 200D 1F91D 200D 1F468 1F3FF    ; fully-qualified     # 👩🏾‍🤝‍👨🏿 E12.0 woman and man holding hands: medium-dark skin tone, dark skin tone
-1F469 1F3FF 200D 1F91D 200D 1F468 1F3FB    ; fully-qualified     # 👩🏿‍🤝‍👨🏻 E12.0 woman and man holding hands: dark skin tone, light skin tone
-1F469 1F3FF 200D 1F91D 200D 1F468 1F3FC    ; fully-qualified     # 👩🏿‍🤝‍👨🏼 E12.0 woman and man holding hands: dark skin tone, medium-light skin tone
-1F469 1F3FF 200D 1F91D 200D 1F468 1F3FD    ; fully-qualified     # 👩🏿‍🤝‍👨🏽 E12.0 woman and man holding hands: dark skin tone, medium skin tone
-1F469 1F3FF 200D 1F91D 200D 1F468 1F3FE    ; fully-qualified     # 👩🏿‍🤝‍👨🏾 E12.0 woman and man holding hands: dark skin tone, medium-dark skin tone
-1F46B 1F3FF                                ; fully-qualified     # 👫🏿 E12.0 woman and man holding hands: dark skin tone
-1F46C                                      ; fully-qualified     # 👬 E1.0 men holding hands
-1F46C 1F3FB                                ; fully-qualified     # 👬🏻 E12.0 men holding hands: light skin tone
-1F468 1F3FB 200D 1F91D 200D 1F468 1F3FC    ; fully-qualified     # 👨🏻‍🤝‍👨🏼 E12.1 men holding hands: light skin tone, medium-light skin tone
-1F468 1F3FB 200D 1F91D 200D 1F468 1F3FD    ; fully-qualified     # 👨🏻‍🤝‍👨🏽 E12.1 men holding hands: light skin tone, medium skin tone
-1F468 1F3FB 200D 1F91D 200D 1F468 1F3FE    ; fully-qualified     # 👨🏻‍🤝‍👨🏾 E12.1 men holding hands: light skin tone, medium-dark skin tone
-1F468 1F3FB 200D 1F91D 200D 1F468 1F3FF    ; fully-qualified     # 👨🏻‍🤝‍👨🏿 E12.1 men holding hands: light skin tone, dark skin tone
-1F468 1F3FC 200D 1F91D 200D 1F468 1F3FB    ; fully-qualified     # 👨🏼‍🤝‍👨🏻 E12.0 men holding hands: medium-light skin tone, light skin tone
-1F46C 1F3FC                                ; fully-qualified     # 👬🏼 E12.0 men holding hands: medium-light skin tone
-1F468 1F3FC 200D 1F91D 200D 1F468 1F3FD    ; fully-qualified     # 👨🏼‍🤝‍👨🏽 E12.1 men holding hands: medium-light skin tone, medium skin tone
-1F468 1F3FC 200D 1F91D 200D 1F468 1F3FE    ; fully-qualified     # 👨🏼‍🤝‍👨🏾 E12.1 men holding hands: medium-light skin tone, medium-dark skin tone
-1F468 1F3FC 200D 1F91D 200D 1F468 1F3FF    ; fully-qualified     # 👨🏼‍🤝‍👨🏿 E12.1 men holding hands: medium-light skin tone, dark skin tone
-1F468 1F3FD 200D 1F91D 200D 1F468 1F3FB    ; fully-qualified     # 👨🏽‍🤝‍👨🏻 E12.0 men holding hands: medium skin tone, light skin tone
-1F468 1F3FD 200D 1F91D 200D 1F468 1F3FC    ; fully-qualified     # 👨🏽‍🤝‍👨🏼 E12.0 men holding hands: medium skin tone, medium-light skin tone
-1F46C 1F3FD                                ; fully-qualified     # 👬🏽 E12.0 men holding hands: medium skin tone
-1F468 1F3FD 200D 1F91D 200D 1F468 1F3FE    ; fully-qualified     # 👨🏽‍🤝‍👨🏾 E12.1 men holding hands: medium skin tone, medium-dark skin tone
-1F468 1F3FD 200D 1F91D 200D 1F468 1F3FF    ; fully-qualified     # 👨🏽‍🤝‍👨🏿 E12.1 men holding hands: medium skin tone, dark skin tone
-1F468 1F3FE 200D 1F91D 200D 1F468 1F3FB    ; fully-qualified     # 👨🏾‍🤝‍👨🏻 E12.0 men holding hands: medium-dark skin tone, light skin tone
-1F468 1F3FE 200D 1F91D 200D 1F468 1F3FC    ; fully-qualified     # 👨🏾‍🤝‍👨🏼 E12.0 men holding hands: medium-dark skin tone, medium-light skin tone
-1F468 1F3FE 200D 1F91D 200D 1F468 1F3FD    ; fully-qualified     # 👨🏾‍🤝‍👨🏽 E12.0 men holding hands: medium-dark skin tone, medium skin tone
-1F46C 1F3FE                                ; fully-qualified     # 👬🏾 E12.0 men holding hands: medium-dark skin tone
-1F468 1F3FE 200D 1F91D 200D 1F468 1F3FF    ; fully-qualified     # 👨🏾‍🤝‍👨🏿 E12.1 men holding hands: medium-dark skin tone, dark skin tone
-1F468 1F3FF 200D 1F91D 200D 1F468 1F3FB    ; fully-qualified     # 👨🏿‍🤝‍👨🏻 E12.0 men holding hands: dark skin tone, light skin tone
-1F468 1F3FF 200D 1F91D 200D 1F468 1F3FC    ; fully-qualified     # 👨🏿‍🤝‍👨🏼 E12.0 men holding hands: dark skin tone, medium-light skin tone
-1F468 1F3FF 200D 1F91D 200D 1F468 1F3FD    ; fully-qualified     # 👨🏿‍🤝‍👨🏽 E12.0 men holding hands: dark skin tone, medium skin tone
-1F468 1F3FF 200D 1F91D 200D 1F468 1F3FE    ; fully-qualified     # 👨🏿‍🤝‍👨🏾 E12.0 men holding hands: dark skin tone, medium-dark skin tone
-1F46C 1F3FF                                ; fully-qualified     # 👬🏿 E12.0 men holding hands: dark skin tone
-1F48F                                      ; fully-qualified     # 💏 E0.6 kiss
-1F469 200D 2764 FE0F 200D 1F48B 200D 1F468 ; fully-qualified     # 👩‍❤️‍💋‍👨 E2.0 kiss: woman, man
-1F469 200D 2764 200D 1F48B 200D 1F468      ; minimally-qualified # 👩‍❤‍💋‍👨 E2.0 kiss: woman, man
-1F468 200D 2764 FE0F 200D 1F48B 200D 1F468 ; fully-qualified     # 👨‍❤️‍💋‍👨 E2.0 kiss: man, man
-1F468 200D 2764 200D 1F48B 200D 1F468      ; minimally-qualified # 👨‍❤‍💋‍👨 E2.0 kiss: man, man
-1F469 200D 2764 FE0F 200D 1F48B 200D 1F469 ; fully-qualified     # 👩‍❤️‍💋‍👩 E2.0 kiss: woman, woman
-1F469 200D 2764 200D 1F48B 200D 1F469      ; minimally-qualified # 👩‍❤‍💋‍👩 E2.0 kiss: woman, woman
-1F491                                      ; fully-qualified     # 💑 E0.6 couple with heart
-1F469 200D 2764 FE0F 200D 1F468            ; fully-qualified     # 👩‍❤️‍👨 E2.0 couple with heart: woman, man
-1F469 200D 2764 200D 1F468                 ; minimally-qualified # 👩‍❤‍👨 E2.0 couple with heart: woman, man
-1F468 200D 2764 FE0F 200D 1F468            ; fully-qualified     # 👨‍❤️‍👨 E2.0 couple with heart: man, man
-1F468 200D 2764 200D 1F468                 ; minimally-qualified # 👨‍❤‍👨 E2.0 couple with heart: man, man
-1F469 200D 2764 FE0F 200D 1F469            ; fully-qualified     # 👩‍❤️‍👩 E2.0 couple with heart: woman, woman
-1F469 200D 2764 200D 1F469                 ; minimally-qualified # 👩‍❤‍👩 E2.0 couple with heart: woman, woman
-1F46A                                      ; fully-qualified     # 👪 E0.6 family
-1F468 200D 1F469 200D 1F466                ; fully-qualified     # 👨‍👩‍👦 E2.0 family: man, woman, boy
-1F468 200D 1F469 200D 1F467                ; fully-qualified     # 👨‍👩‍👧 E2.0 family: man, woman, girl
-1F468 200D 1F469 200D 1F467 200D 1F466     ; fully-qualified     # 👨‍👩‍👧‍👦 E2.0 family: man, woman, girl, boy
-1F468 200D 1F469 200D 1F466 200D 1F466     ; fully-qualified     # 👨‍👩‍👦‍👦 E2.0 family: man, woman, boy, boy
-1F468 200D 1F469 200D 1F467 200D 1F467     ; fully-qualified     # 👨‍👩‍👧‍👧 E2.0 family: man, woman, girl, girl
-1F468 200D 1F468 200D 1F466                ; fully-qualified     # 👨‍👨‍👦 E2.0 family: man, man, boy
-1F468 200D 1F468 200D 1F467                ; fully-qualified     # 👨‍👨‍👧 E2.0 family: man, man, girl
-1F468 200D 1F468 200D 1F467 200D 1F466     ; fully-qualified     # 👨‍👨‍👧‍👦 E2.0 family: man, man, girl, boy
-1F468 200D 1F468 200D 1F466 200D 1F466     ; fully-qualified     # 👨‍👨‍👦‍👦 E2.0 family: man, man, boy, boy
-1F468 200D 1F468 200D 1F467 200D 1F467     ; fully-qualified     # 👨‍👨‍👧‍👧 E2.0 family: man, man, girl, girl
-1F469 200D 1F469 200D 1F466                ; fully-qualified     # 👩‍👩‍👦 E2.0 family: woman, woman, boy
-1F469 200D 1F469 200D 1F467                ; fully-qualified     # 👩‍👩‍👧 E2.0 family: woman, woman, girl
-1F469 200D 1F469 200D 1F467 200D 1F466     ; fully-qualified     # 👩‍👩‍👧‍👦 E2.0 family: woman, woman, girl, boy
-1F469 200D 1F469 200D 1F466 200D 1F466     ; fully-qualified     # 👩‍👩‍👦‍👦 E2.0 family: woman, woman, boy, boy
-1F469 200D 1F469 200D 1F467 200D 1F467     ; fully-qualified     # 👩‍👩‍👧‍👧 E2.0 family: woman, woman, girl, girl
-1F468 200D 1F466                           ; fully-qualified     # 👨‍👦 E4.0 family: man, boy
-1F468 200D 1F466 200D 1F466                ; fully-qualified     # 👨‍👦‍👦 E4.0 family: man, boy, boy
-1F468 200D 1F467                           ; fully-qualified     # 👨‍👧 E4.0 family: man, girl
-1F468 200D 1F467 200D 1F466                ; fully-qualified     # 👨‍👧‍👦 E4.0 family: man, girl, boy
-1F468 200D 1F467 200D 1F467                ; fully-qualified     # 👨‍👧‍👧 E4.0 family: man, girl, girl
-1F469 200D 1F466                           ; fully-qualified     # 👩‍👦 E4.0 family: woman, boy
-1F469 200D 1F466 200D 1F466                ; fully-qualified     # 👩‍👦‍👦 E4.0 family: woman, boy, boy
-1F469 200D 1F467                           ; fully-qualified     # 👩‍👧 E4.0 family: woman, girl
-1F469 200D 1F467 200D 1F466                ; fully-qualified     # 👩‍👧‍👦 E4.0 family: woman, girl, boy
-1F469 200D 1F467 200D 1F467                ; fully-qualified     # 👩‍👧‍👧 E4.0 family: woman, girl, girl
+1F9D1 200D 1F91D 200D 1F9D1                            ; fully-qualified     # 🧑‍🤝‍🧑 E12.0 people holding hands
+1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FB                ; fully-qualified     # 🧑🏻‍🤝‍🧑🏻 E12.0 people holding hands: light skin tone
+1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FC                ; fully-qualified     # 🧑🏻‍🤝‍🧑🏼 E12.1 people holding hands: light skin tone, medium-light skin tone
+1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FD                ; fully-qualified     # 🧑🏻‍🤝‍🧑🏽 E12.1 people holding hands: light skin tone, medium skin tone
+1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FE                ; fully-qualified     # 🧑🏻‍🤝‍🧑🏾 E12.1 people holding hands: light skin tone, medium-dark skin tone
+1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FF                ; fully-qualified     # 🧑🏻‍🤝‍🧑🏿 E12.1 people holding hands: light skin tone, dark skin tone
+1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FB                ; fully-qualified     # 🧑🏼‍🤝‍🧑🏻 E12.0 people holding hands: medium-light skin tone, light skin tone
+1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FC                ; fully-qualified     # 🧑🏼‍🤝‍🧑🏼 E12.0 people holding hands: medium-light skin tone
+1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FD                ; fully-qualified     # 🧑🏼‍🤝‍🧑🏽 E12.1 people holding hands: medium-light skin tone, medium skin tone
+1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FE                ; fully-qualified     # 🧑🏼‍🤝‍🧑🏾 E12.1 people holding hands: medium-light skin tone, medium-dark skin tone
+1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FF                ; fully-qualified     # 🧑🏼‍🤝‍🧑🏿 E12.1 people holding hands: medium-light skin tone, dark skin tone
+1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FB                ; fully-qualified     # 🧑🏽‍🤝‍🧑🏻 E12.0 people holding hands: medium skin tone, light skin tone
+1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FC                ; fully-qualified     # 🧑🏽‍🤝‍🧑🏼 E12.0 people holding hands: medium skin tone, medium-light skin tone
+1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FD                ; fully-qualified     # 🧑🏽‍🤝‍🧑🏽 E12.0 people holding hands: medium skin tone
+1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FE                ; fully-qualified     # 🧑🏽‍🤝‍🧑🏾 E12.1 people holding hands: medium skin tone, medium-dark skin tone
+1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FF                ; fully-qualified     # 🧑🏽‍🤝‍🧑🏿 E12.1 people holding hands: medium skin tone, dark skin tone
+1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FB                ; fully-qualified     # 🧑🏾‍🤝‍🧑🏻 E12.0 people holding hands: medium-dark skin tone, light skin tone
+1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FC                ; fully-qualified     # 🧑🏾‍🤝‍🧑🏼 E12.0 people holding hands: medium-dark skin tone, medium-light skin tone
+1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FD                ; fully-qualified     # 🧑🏾‍🤝‍🧑🏽 E12.0 people holding hands: medium-dark skin tone, medium skin tone
+1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FE                ; fully-qualified     # 🧑🏾‍🤝‍🧑🏾 E12.0 people holding hands: medium-dark skin tone
+1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FF                ; fully-qualified     # 🧑🏾‍🤝‍🧑🏿 E12.1 people holding hands: medium-dark skin tone, dark skin tone
+1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FB                ; fully-qualified     # 🧑🏿‍🤝‍🧑🏻 E12.0 people holding hands: dark skin tone, light skin tone
+1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FC                ; fully-qualified     # 🧑🏿‍🤝‍🧑🏼 E12.0 people holding hands: dark skin tone, medium-light skin tone
+1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FD                ; fully-qualified     # 🧑🏿‍🤝‍🧑🏽 E12.0 people holding hands: dark skin tone, medium skin tone
+1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FE                ; fully-qualified     # 🧑🏿‍🤝‍🧑🏾 E12.0 people holding hands: dark skin tone, medium-dark skin tone
+1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FF                ; fully-qualified     # 🧑🏿‍🤝‍🧑🏿 E12.0 people holding hands: dark skin tone
+1F46D                                                  ; fully-qualified     # 👭 E1.0 women holding hands
+1F46D 1F3FB                                            ; fully-qualified     # 👭🏻 E12.0 women holding hands: light skin tone
+1F469 1F3FB 200D 1F91D 200D 1F469 1F3FC                ; fully-qualified     # 👩🏻‍🤝‍👩🏼 E12.1 women holding hands: light skin tone, medium-light skin tone
+1F469 1F3FB 200D 1F91D 200D 1F469 1F3FD                ; fully-qualified     # 👩🏻‍🤝‍👩🏽 E12.1 women holding hands: light skin tone, medium skin tone
+1F469 1F3FB 200D 1F91D 200D 1F469 1F3FE                ; fully-qualified     # 👩🏻‍🤝‍👩🏾 E12.1 women holding hands: light skin tone, medium-dark skin tone
+1F469 1F3FB 200D 1F91D 200D 1F469 1F3FF                ; fully-qualified     # 👩🏻‍🤝‍👩🏿 E12.1 women holding hands: light skin tone, dark skin tone
+1F469 1F3FC 200D 1F91D 200D 1F469 1F3FB                ; fully-qualified     # 👩🏼‍🤝‍👩🏻 E12.0 women holding hands: medium-light skin tone, light skin tone
+1F46D 1F3FC                                            ; fully-qualified     # 👭🏼 E12.0 women holding hands: medium-light skin tone
+1F469 1F3FC 200D 1F91D 200D 1F469 1F3FD                ; fully-qualified     # 👩🏼‍🤝‍👩🏽 E12.1 women holding hands: medium-light skin tone, medium skin tone
+1F469 1F3FC 200D 1F91D 200D 1F469 1F3FE                ; fully-qualified     # 👩🏼‍🤝‍👩🏾 E12.1 women holding hands: medium-light skin tone, medium-dark skin tone
+1F469 1F3FC 200D 1F91D 200D 1F469 1F3FF                ; fully-qualified     # 👩🏼‍🤝‍👩🏿 E12.1 women holding hands: medium-light skin tone, dark skin tone
+1F469 1F3FD 200D 1F91D 200D 1F469 1F3FB                ; fully-qualified     # 👩🏽‍🤝‍👩🏻 E12.0 women holding hands: medium skin tone, light skin tone
+1F469 1F3FD 200D 1F91D 200D 1F469 1F3FC                ; fully-qualified     # 👩🏽‍🤝‍👩🏼 E12.0 women holding hands: medium skin tone, medium-light skin tone
+1F46D 1F3FD                                            ; fully-qualified     # 👭🏽 E12.0 women holding hands: medium skin tone
+1F469 1F3FD 200D 1F91D 200D 1F469 1F3FE                ; fully-qualified     # 👩🏽‍🤝‍👩🏾 E12.1 women holding hands: medium skin tone, medium-dark skin tone
+1F469 1F3FD 200D 1F91D 200D 1F469 1F3FF                ; fully-qualified     # 👩🏽‍🤝‍👩🏿 E12.1 women holding hands: medium skin tone, dark skin tone
+1F469 1F3FE 200D 1F91D 200D 1F469 1F3FB                ; fully-qualified     # 👩🏾‍🤝‍👩🏻 E12.0 women holding hands: medium-dark skin tone, light skin tone
+1F469 1F3FE 200D 1F91D 200D 1F469 1F3FC                ; fully-qualified     # 👩🏾‍🤝‍👩🏼 E12.0 women holding hands: medium-dark skin tone, medium-light skin tone
+1F469 1F3FE 200D 1F91D 200D 1F469 1F3FD                ; fully-qualified     # 👩🏾‍🤝‍👩🏽 E12.0 women holding hands: medium-dark skin tone, medium skin tone
+1F46D 1F3FE                                            ; fully-qualified     # 👭🏾 E12.0 women holding hands: medium-dark skin tone
+1F469 1F3FE 200D 1F91D 200D 1F469 1F3FF                ; fully-qualified     # 👩🏾‍🤝‍👩🏿 E12.1 women holding hands: medium-dark skin tone, dark skin tone
+1F469 1F3FF 200D 1F91D 200D 1F469 1F3FB                ; fully-qualified     # 👩🏿‍🤝‍👩🏻 E12.0 women holding hands: dark skin tone, light skin tone
+1F469 1F3FF 200D 1F91D 200D 1F469 1F3FC                ; fully-qualified     # 👩🏿‍🤝‍👩🏼 E12.0 women holding hands: dark skin tone, medium-light skin tone
+1F469 1F3FF 200D 1F91D 200D 1F469 1F3FD                ; fully-qualified     # 👩🏿‍🤝‍👩🏽 E12.0 women holding hands: dark skin tone, medium skin tone
+1F469 1F3FF 200D 1F91D 200D 1F469 1F3FE                ; fully-qualified     # 👩🏿‍🤝‍👩🏾 E12.0 women holding hands: dark skin tone, medium-dark skin tone
+1F46D 1F3FF                                            ; fully-qualified     # 👭🏿 E12.0 women holding hands: dark skin tone
+1F46B                                                  ; fully-qualified     # 👫 E0.6 woman and man holding hands
+1F46B 1F3FB                                            ; fully-qualified     # 👫🏻 E12.0 woman and man holding hands: light skin tone
+1F469 1F3FB 200D 1F91D 200D 1F468 1F3FC                ; fully-qualified     # 👩🏻‍🤝‍👨🏼 E12.0 woman and man holding hands: light skin tone, medium-light skin tone
+1F469 1F3FB 200D 1F91D 200D 1F468 1F3FD                ; fully-qualified     # 👩🏻‍🤝‍👨🏽 E12.0 woman and man holding hands: light skin tone, medium skin tone
+1F469 1F3FB 200D 1F91D 200D 1F468 1F3FE                ; fully-qualified     # 👩🏻‍🤝‍👨🏾 E12.0 woman and man holding hands: light skin tone, medium-dark skin tone
+1F469 1F3FB 200D 1F91D 200D 1F468 1F3FF                ; fully-qualified     # 👩🏻‍🤝‍👨🏿 E12.0 woman and man holding hands: light skin tone, dark skin tone
+1F469 1F3FC 200D 1F91D 200D 1F468 1F3FB                ; fully-qualified     # 👩🏼‍🤝‍👨🏻 E12.0 woman and man holding hands: medium-light skin tone, light skin tone
+1F46B 1F3FC                                            ; fully-qualified     # 👫🏼 E12.0 woman and man holding hands: medium-light skin tone
+1F469 1F3FC 200D 1F91D 200D 1F468 1F3FD                ; fully-qualified     # 👩🏼‍🤝‍👨🏽 E12.0 woman and man holding hands: medium-light skin tone, medium skin tone
+1F469 1F3FC 200D 1F91D 200D 1F468 1F3FE                ; fully-qualified     # 👩🏼‍🤝‍👨🏾 E12.0 woman and man holding hands: medium-light skin tone, medium-dark skin tone
+1F469 1F3FC 200D 1F91D 200D 1F468 1F3FF                ; fully-qualified     # 👩🏼‍🤝‍👨🏿 E12.0 woman and man holding hands: medium-light skin tone, dark skin tone
+1F469 1F3FD 200D 1F91D 200D 1F468 1F3FB                ; fully-qualified     # 👩🏽‍🤝‍👨🏻 E12.0 woman and man holding hands: medium skin tone, light skin tone
+1F469 1F3FD 200D 1F91D 200D 1F468 1F3FC                ; fully-qualified     # 👩🏽‍🤝‍👨🏼 E12.0 woman and man holding hands: medium skin tone, medium-light skin tone
+1F46B 1F3FD                                            ; fully-qualified     # 👫🏽 E12.0 woman and man holding hands: medium skin tone
+1F469 1F3FD 200D 1F91D 200D 1F468 1F3FE                ; fully-qualified     # 👩🏽‍🤝‍👨🏾 E12.0 woman and man holding hands: medium skin tone, medium-dark skin tone
+1F469 1F3FD 200D 1F91D 200D 1F468 1F3FF                ; fully-qualified     # 👩🏽‍🤝‍👨🏿 E12.0 woman and man holding hands: medium skin tone, dark skin tone
+1F469 1F3FE 200D 1F91D 200D 1F468 1F3FB                ; fully-qualified     # 👩🏾‍🤝‍👨🏻 E12.0 woman and man holding hands: medium-dark skin tone, light skin tone
+1F469 1F3FE 200D 1F91D 200D 1F468 1F3FC                ; fully-qualified     # 👩🏾‍🤝‍👨🏼 E12.0 woman and man holding hands: medium-dark skin tone, medium-light skin tone
+1F469 1F3FE 200D 1F91D 200D 1F468 1F3FD                ; fully-qualified     # 👩🏾‍🤝‍👨🏽 E12.0 woman and man holding hands: medium-dark skin tone, medium skin tone
+1F46B 1F3FE                                            ; fully-qualified     # 👫🏾 E12.0 woman and man holding hands: medium-dark skin tone
+1F469 1F3FE 200D 1F91D 200D 1F468 1F3FF                ; fully-qualified     # 👩🏾‍🤝‍👨🏿 E12.0 woman and man holding hands: medium-dark skin tone, dark skin tone
+1F469 1F3FF 200D 1F91D 200D 1F468 1F3FB                ; fully-qualified     # 👩🏿‍🤝‍👨🏻 E12.0 woman and man holding hands: dark skin tone, light skin tone
+1F469 1F3FF 200D 1F91D 200D 1F468 1F3FC                ; fully-qualified     # 👩🏿‍🤝‍👨🏼 E12.0 woman and man holding hands: dark skin tone, medium-light skin tone
+1F469 1F3FF 200D 1F91D 200D 1F468 1F3FD                ; fully-qualified     # 👩🏿‍🤝‍👨🏽 E12.0 woman and man holding hands: dark skin tone, medium skin tone
+1F469 1F3FF 200D 1F91D 200D 1F468 1F3FE                ; fully-qualified     # 👩🏿‍🤝‍👨🏾 E12.0 woman and man holding hands: dark skin tone, medium-dark skin tone
+1F46B 1F3FF                                            ; fully-qualified     # 👫🏿 E12.0 woman and man holding hands: dark skin tone
+1F46C                                                  ; fully-qualified     # 👬 E1.0 men holding hands
+1F46C 1F3FB                                            ; fully-qualified     # 👬🏻 E12.0 men holding hands: light skin tone
+1F468 1F3FB 200D 1F91D 200D 1F468 1F3FC                ; fully-qualified     # 👨🏻‍🤝‍👨🏼 E12.1 men holding hands: light skin tone, medium-light skin tone
+1F468 1F3FB 200D 1F91D 200D 1F468 1F3FD                ; fully-qualified     # 👨🏻‍🤝‍👨🏽 E12.1 men holding hands: light skin tone, medium skin tone
+1F468 1F3FB 200D 1F91D 200D 1F468 1F3FE                ; fully-qualified     # 👨🏻‍🤝‍👨🏾 E12.1 men holding hands: light skin tone, medium-dark skin tone
+1F468 1F3FB 200D 1F91D 200D 1F468 1F3FF                ; fully-qualified     # 👨🏻‍🤝‍👨🏿 E12.1 men holding hands: light skin tone, dark skin tone
+1F468 1F3FC 200D 1F91D 200D 1F468 1F3FB                ; fully-qualified     # 👨🏼‍🤝‍👨🏻 E12.0 men holding hands: medium-light skin tone, light skin tone
+1F46C 1F3FC                                            ; fully-qualified     # 👬🏼 E12.0 men holding hands: medium-light skin tone
+1F468 1F3FC 200D 1F91D 200D 1F468 1F3FD                ; fully-qualified     # 👨🏼‍🤝‍👨🏽 E12.1 men holding hands: medium-light skin tone, medium skin tone
+1F468 1F3FC 200D 1F91D 200D 1F468 1F3FE                ; fully-qualified     # 👨🏼‍🤝‍👨🏾 E12.1 men holding hands: medium-light skin tone, medium-dark skin tone
+1F468 1F3FC 200D 1F91D 200D 1F468 1F3FF                ; fully-qualified     # 👨🏼‍🤝‍👨🏿 E12.1 men holding hands: medium-light skin tone, dark skin tone
+1F468 1F3FD 200D 1F91D 200D 1F468 1F3FB                ; fully-qualified     # 👨🏽‍🤝‍👨🏻 E12.0 men holding hands: medium skin tone, light skin tone
+1F468 1F3FD 200D 1F91D 200D 1F468 1F3FC                ; fully-qualified     # 👨🏽‍🤝‍👨🏼 E12.0 men holding hands: medium skin tone, medium-light skin tone
+1F46C 1F3FD                                            ; fully-qualified     # 👬🏽 E12.0 men holding hands: medium skin tone
+1F468 1F3FD 200D 1F91D 200D 1F468 1F3FE                ; fully-qualified     # 👨🏽‍🤝‍👨🏾 E12.1 men holding hands: medium skin tone, medium-dark skin tone
+1F468 1F3FD 200D 1F91D 200D 1F468 1F3FF                ; fully-qualified     # 👨🏽‍🤝‍👨🏿 E12.1 men holding hands: medium skin tone, dark skin tone
+1F468 1F3FE 200D 1F91D 200D 1F468 1F3FB                ; fully-qualified     # 👨🏾‍🤝‍👨🏻 E12.0 men holding hands: medium-dark skin tone, light skin tone
+1F468 1F3FE 200D 1F91D 200D 1F468 1F3FC                ; fully-qualified     # 👨🏾‍🤝‍👨🏼 E12.0 men holding hands: medium-dark skin tone, medium-light skin tone
+1F468 1F3FE 200D 1F91D 200D 1F468 1F3FD                ; fully-qualified     # 👨🏾‍🤝‍👨🏽 E12.0 men holding hands: medium-dark skin tone, medium skin tone
+1F46C 1F3FE                                            ; fully-qualified     # 👬🏾 E12.0 men holding hands: medium-dark skin tone
+1F468 1F3FE 200D 1F91D 200D 1F468 1F3FF                ; fully-qualified     # 👨🏾‍🤝‍👨🏿 E12.1 men holding hands: medium-dark skin tone, dark skin tone
+1F468 1F3FF 200D 1F91D 200D 1F468 1F3FB                ; fully-qualified     # 👨🏿‍🤝‍👨🏻 E12.0 men holding hands: dark skin tone, light skin tone
+1F468 1F3FF 200D 1F91D 200D 1F468 1F3FC                ; fully-qualified     # 👨🏿‍🤝‍👨🏼 E12.0 men holding hands: dark skin tone, medium-light skin tone
+1F468 1F3FF 200D 1F91D 200D 1F468 1F3FD                ; fully-qualified     # 👨🏿‍🤝‍👨🏽 E12.0 men holding hands: dark skin tone, medium skin tone
+1F468 1F3FF 200D 1F91D 200D 1F468 1F3FE                ; fully-qualified     # 👨🏿‍🤝‍👨🏾 E12.0 men holding hands: dark skin tone, medium-dark skin tone
+1F46C 1F3FF                                            ; fully-qualified     # 👬🏿 E12.0 men holding hands: dark skin tone
+1F48F                                                  ; fully-qualified     # 💏 E0.6 kiss
+1F48F 1F3FB                                            ; fully-qualified     # 💏🏻 E13.1 kiss: light skin tone
+1F48F 1F3FC                                            ; fully-qualified     # 💏🏼 E13.1 kiss: medium-light skin tone
+1F48F 1F3FD                                            ; fully-qualified     # 💏🏽 E13.1 kiss: medium skin tone
+1F48F 1F3FE                                            ; fully-qualified     # 💏🏾 E13.1 kiss: medium-dark skin tone
+1F48F 1F3FF                                            ; fully-qualified     # 💏🏿 E13.1 kiss: dark skin tone
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC ; fully-qualified     # 🧑🏻‍❤️‍💋‍🧑🏼 E13.1 kiss: person, person, light skin tone, medium-light skin tone
+1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FC      ; minimally-qualified # 🧑🏻‍❤‍💋‍🧑🏼 E13.1 kiss: person, person, light skin tone, medium-light skin tone
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD ; fully-qualified     # 🧑🏻‍❤️‍💋‍🧑🏽 E13.1 kiss: person, person, light skin tone, medium skin tone
+1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FD      ; minimally-qualified # 🧑🏻‍❤‍💋‍🧑🏽 E13.1 kiss: person, person, light skin tone, medium skin tone
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE ; fully-qualified     # 🧑🏻‍❤️‍💋‍🧑🏾 E13.1 kiss: person, person, light skin tone, medium-dark skin tone
+1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FE      ; minimally-qualified # 🧑🏻‍❤‍💋‍🧑🏾 E13.1 kiss: person, person, light skin tone, medium-dark skin tone
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF ; fully-qualified     # 🧑🏻‍❤️‍💋‍🧑🏿 E13.1 kiss: person, person, light skin tone, dark skin tone
+1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FF      ; minimally-qualified # 🧑🏻‍❤‍💋‍🧑🏿 E13.1 kiss: person, person, light skin tone, dark skin tone
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB ; fully-qualified     # 🧑🏼‍❤️‍💋‍🧑🏻 E13.1 kiss: person, person, medium-light skin tone, light skin tone
+1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FB      ; minimally-qualified # 🧑🏼‍❤‍💋‍🧑🏻 E13.1 kiss: person, person, medium-light skin tone, light skin tone
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD ; fully-qualified     # 🧑🏼‍❤️‍💋‍🧑🏽 E13.1 kiss: person, person, medium-light skin tone, medium skin tone
+1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FD      ; minimally-qualified # 🧑🏼‍❤‍💋‍🧑🏽 E13.1 kiss: person, person, medium-light skin tone, medium skin tone
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE ; fully-qualified     # 🧑🏼‍❤️‍💋‍🧑🏾 E13.1 kiss: person, person, medium-light skin tone, medium-dark skin tone
+1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FE      ; minimally-qualified # 🧑🏼‍❤‍💋‍🧑🏾 E13.1 kiss: person, person, medium-light skin tone, medium-dark skin tone
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF ; fully-qualified     # 🧑🏼‍❤️‍💋‍🧑🏿 E13.1 kiss: person, person, medium-light skin tone, dark skin tone
+1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FF      ; minimally-qualified # 🧑🏼‍❤‍💋‍🧑🏿 E13.1 kiss: person, person, medium-light skin tone, dark skin tone
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB ; fully-qualified     # 🧑🏽‍❤️‍💋‍🧑🏻 E13.1 kiss: person, person, medium skin tone, light skin tone
+1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FB      ; minimally-qualified # 🧑🏽‍❤‍💋‍🧑🏻 E13.1 kiss: person, person, medium skin tone, light skin tone
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC ; fully-qualified     # 🧑🏽‍❤️‍💋‍🧑🏼 E13.1 kiss: person, person, medium skin tone, medium-light skin tone
+1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FC      ; minimally-qualified # 🧑🏽‍❤‍💋‍🧑🏼 E13.1 kiss: person, person, medium skin tone, medium-light skin tone
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE ; fully-qualified     # 🧑🏽‍❤️‍💋‍🧑🏾 E13.1 kiss: person, person, medium skin tone, medium-dark skin tone
+1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FE      ; minimally-qualified # 🧑🏽‍❤‍💋‍🧑🏾 E13.1 kiss: person, person, medium skin tone, medium-dark skin tone
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF ; fully-qualified     # 🧑🏽‍❤️‍💋‍🧑🏿 E13.1 kiss: person, person, medium skin tone, dark skin tone
+1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FF      ; minimally-qualified # 🧑🏽‍❤‍💋‍🧑🏿 E13.1 kiss: person, person, medium skin tone, dark skin tone
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB ; fully-qualified     # 🧑🏾‍❤️‍💋‍🧑🏻 E13.1 kiss: person, person, medium-dark skin tone, light skin tone
+1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FB      ; minimally-qualified # 🧑🏾‍❤‍💋‍🧑🏻 E13.1 kiss: person, person, medium-dark skin tone, light skin tone
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC ; fully-qualified     # 🧑🏾‍❤️‍💋‍🧑🏼 E13.1 kiss: person, person, medium-dark skin tone, medium-light skin tone
+1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FC      ; minimally-qualified # 🧑🏾‍❤‍💋‍🧑🏼 E13.1 kiss: person, person, medium-dark skin tone, medium-light skin tone
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD ; fully-qualified     # 🧑🏾‍❤️‍💋‍🧑🏽 E13.1 kiss: person, person, medium-dark skin tone, medium skin tone
+1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FD      ; minimally-qualified # 🧑🏾‍❤‍💋‍🧑🏽 E13.1 kiss: person, person, medium-dark skin tone, medium skin tone
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF ; fully-qualified     # 🧑🏾‍❤️‍💋‍🧑🏿 E13.1 kiss: person, person, medium-dark skin tone, dark skin tone
+1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FF      ; minimally-qualified # 🧑🏾‍❤‍💋‍🧑🏿 E13.1 kiss: person, person, medium-dark skin tone, dark skin tone
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB ; fully-qualified     # 🧑🏿‍❤️‍💋‍🧑🏻 E13.1 kiss: person, person, dark skin tone, light skin tone
+1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FB      ; minimally-qualified # 🧑🏿‍❤‍💋‍🧑🏻 E13.1 kiss: person, person, dark skin tone, light skin tone
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC ; fully-qualified     # 🧑🏿‍❤️‍💋‍🧑🏼 E13.1 kiss: person, person, dark skin tone, medium-light skin tone
+1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FC      ; minimally-qualified # 🧑🏿‍❤‍💋‍🧑🏼 E13.1 kiss: person, person, dark skin tone, medium-light skin tone
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD ; fully-qualified     # 🧑🏿‍❤️‍💋‍🧑🏽 E13.1 kiss: person, person, dark skin tone, medium skin tone
+1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FD      ; minimally-qualified # 🧑🏿‍❤‍💋‍🧑🏽 E13.1 kiss: person, person, dark skin tone, medium skin tone
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE ; fully-qualified     # 🧑🏿‍❤️‍💋‍🧑🏾 E13.1 kiss: person, person, dark skin tone, medium-dark skin tone
+1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FE      ; minimally-qualified # 🧑🏿‍❤‍💋‍🧑🏾 E13.1 kiss: person, person, dark skin tone, medium-dark skin tone
+1F469 200D 2764 FE0F 200D 1F48B 200D 1F468             ; fully-qualified     # 👩‍❤️‍💋‍👨 E2.0 kiss: woman, man
+1F469 200D 2764 200D 1F48B 200D 1F468                  ; minimally-qualified # 👩‍❤‍💋‍👨 E2.0 kiss: woman, man
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified     # 👩🏻‍❤️‍💋‍👨🏻 E13.1 kiss: woman, man, light skin tone
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FB      ; minimally-qualified # 👩🏻‍❤‍💋‍👨🏻 E13.1 kiss: woman, man, light skin tone
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified     # 👩🏻‍❤️‍💋‍👨🏼 E13.1 kiss: woman, man, light skin tone, medium-light skin tone
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FC      ; minimally-qualified # 👩🏻‍❤‍💋‍👨🏼 E13.1 kiss: woman, man, light skin tone, medium-light skin tone
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified     # 👩🏻‍❤️‍💋‍👨🏽 E13.1 kiss: woman, man, light skin tone, medium skin tone
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FD      ; minimally-qualified # 👩🏻‍❤‍💋‍👨🏽 E13.1 kiss: woman, man, light skin tone, medium skin tone
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified     # 👩🏻‍❤️‍💋‍👨🏾 E13.1 kiss: woman, man, light skin tone, medium-dark skin tone
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FE      ; minimally-qualified # 👩🏻‍❤‍💋‍👨🏾 E13.1 kiss: woman, man, light skin tone, medium-dark skin tone
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified     # 👩🏻‍❤️‍💋‍👨🏿 E13.1 kiss: woman, man, light skin tone, dark skin tone
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FF      ; minimally-qualified # 👩🏻‍❤‍💋‍👨🏿 E13.1 kiss: woman, man, light skin tone, dark skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified     # 👩🏼‍❤️‍💋‍👨🏻 E13.1 kiss: woman, man, medium-light skin tone, light skin tone
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FB      ; minimally-qualified # 👩🏼‍❤‍💋‍👨🏻 E13.1 kiss: woman, man, medium-light skin tone, light skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified     # 👩🏼‍❤️‍💋‍👨🏼 E13.1 kiss: woman, man, medium-light skin tone
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FC      ; minimally-qualified # 👩🏼‍❤‍💋‍👨🏼 E13.1 kiss: woman, man, medium-light skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified     # 👩🏼‍❤️‍💋‍👨🏽 E13.1 kiss: woman, man, medium-light skin tone, medium skin tone
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FD      ; minimally-qualified # 👩🏼‍❤‍💋‍👨🏽 E13.1 kiss: woman, man, medium-light skin tone, medium skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified     # 👩🏼‍❤️‍💋‍👨🏾 E13.1 kiss: woman, man, medium-light skin tone, medium-dark skin tone
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FE      ; minimally-qualified # 👩🏼‍❤‍💋‍👨🏾 E13.1 kiss: woman, man, medium-light skin tone, medium-dark skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified     # 👩🏼‍❤️‍💋‍👨🏿 E13.1 kiss: woman, man, medium-light skin tone, dark skin tone
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FF      ; minimally-qualified # 👩🏼‍❤‍💋‍👨🏿 E13.1 kiss: woman, man, medium-light skin tone, dark skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified     # 👩🏽‍❤️‍💋‍👨🏻 E13.1 kiss: woman, man, medium skin tone, light skin tone
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FB      ; minimally-qualified # 👩🏽‍❤‍💋‍👨🏻 E13.1 kiss: woman, man, medium skin tone, light skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified     # 👩🏽‍❤️‍💋‍👨🏼 E13.1 kiss: woman, man, medium skin tone, medium-light skin tone
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FC      ; minimally-qualified # 👩🏽‍❤‍💋‍👨🏼 E13.1 kiss: woman, man, medium skin tone, medium-light skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified     # 👩🏽‍❤️‍💋‍👨🏽 E13.1 kiss: woman, man, medium skin tone
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FD      ; minimally-qualified # 👩🏽‍❤‍💋‍👨🏽 E13.1 kiss: woman, man, medium skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified     # 👩🏽‍❤️‍💋‍👨🏾 E13.1 kiss: woman, man, medium skin tone, medium-dark skin tone
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FE      ; minimally-qualified # 👩🏽‍❤‍💋‍👨🏾 E13.1 kiss: woman, man, medium skin tone, medium-dark skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified     # 👩🏽‍❤️‍💋‍👨🏿 E13.1 kiss: woman, man, medium skin tone, dark skin tone
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FF      ; minimally-qualified # 👩🏽‍❤‍💋‍👨🏿 E13.1 kiss: woman, man, medium skin tone, dark skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified     # 👩🏾‍❤️‍💋‍👨🏻 E13.1 kiss: woman, man, medium-dark skin tone, light skin tone
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FB      ; minimally-qualified # 👩🏾‍❤‍💋‍👨🏻 E13.1 kiss: woman, man, medium-dark skin tone, light skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified     # 👩🏾‍❤️‍💋‍👨🏼 E13.1 kiss: woman, man, medium-dark skin tone, medium-light skin tone
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FC      ; minimally-qualified # 👩🏾‍❤‍💋‍👨🏼 E13.1 kiss: woman, man, medium-dark skin tone, medium-light skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified     # 👩🏾‍❤️‍💋‍👨🏽 E13.1 kiss: woman, man, medium-dark skin tone, medium skin tone
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FD      ; minimally-qualified # 👩🏾‍❤‍💋‍👨🏽 E13.1 kiss: woman, man, medium-dark skin tone, medium skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified     # 👩🏾‍❤️‍💋‍👨🏾 E13.1 kiss: woman, man, medium-dark skin tone
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FE      ; minimally-qualified # 👩🏾‍❤‍💋‍👨🏾 E13.1 kiss: woman, man, medium-dark skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified     # 👩🏾‍❤️‍💋‍👨🏿 E13.1 kiss: woman, man, medium-dark skin tone, dark skin tone
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FF      ; minimally-qualified # 👩🏾‍❤‍💋‍👨🏿 E13.1 kiss: woman, man, medium-dark skin tone, dark skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified     # 👩🏿‍❤️‍💋‍👨🏻 E13.1 kiss: woman, man, dark skin tone, light skin tone
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FB      ; minimally-qualified # 👩🏿‍❤‍💋‍👨🏻 E13.1 kiss: woman, man, dark skin tone, light skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified     # 👩🏿‍❤️‍💋‍👨🏼 E13.1 kiss: woman, man, dark skin tone, medium-light skin tone
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FC      ; minimally-qualified # 👩🏿‍❤‍💋‍👨🏼 E13.1 kiss: woman, man, dark skin tone, medium-light skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified     # 👩🏿‍❤️‍💋‍👨🏽 E13.1 kiss: woman, man, dark skin tone, medium skin tone
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FD      ; minimally-qualified # 👩🏿‍❤‍💋‍👨🏽 E13.1 kiss: woman, man, dark skin tone, medium skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified     # 👩🏿‍❤️‍💋‍👨🏾 E13.1 kiss: woman, man, dark skin tone, medium-dark skin tone
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FE      ; minimally-qualified # 👩🏿‍❤‍💋‍👨🏾 E13.1 kiss: woman, man, dark skin tone, medium-dark skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified     # 👩🏿‍❤️‍💋‍👨🏿 E13.1 kiss: woman, man, dark skin tone
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FF      ; minimally-qualified # 👩🏿‍❤‍💋‍👨🏿 E13.1 kiss: woman, man, dark skin tone
+1F468 200D 2764 FE0F 200D 1F48B 200D 1F468             ; fully-qualified     # 👨‍❤️‍💋‍👨 E2.0 kiss: man, man
+1F468 200D 2764 200D 1F48B 200D 1F468                  ; minimally-qualified # 👨‍❤‍💋‍👨 E2.0 kiss: man, man
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified     # 👨🏻‍❤️‍💋‍👨🏻 E13.1 kiss: man, man, light skin tone
+1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FB      ; minimally-qualified # 👨🏻‍❤‍💋‍👨🏻 E13.1 kiss: man, man, light skin tone
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified     # 👨🏻‍❤️‍💋‍👨🏼 E13.1 kiss: man, man, light skin tone, medium-light skin tone
+1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FC      ; minimally-qualified # 👨🏻‍❤‍💋‍👨🏼 E13.1 kiss: man, man, light skin tone, medium-light skin tone
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified     # 👨🏻‍❤️‍💋‍👨🏽 E13.1 kiss: man, man, light skin tone, medium skin tone
+1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FD      ; minimally-qualified # 👨🏻‍❤‍💋‍👨🏽 E13.1 kiss: man, man, light skin tone, medium skin tone
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified     # 👨🏻‍❤️‍💋‍👨🏾 E13.1 kiss: man, man, light skin tone, medium-dark skin tone
+1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FE      ; minimally-qualified # 👨🏻‍❤‍💋‍👨🏾 E13.1 kiss: man, man, light skin tone, medium-dark skin tone
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified     # 👨🏻‍❤️‍💋‍👨🏿 E13.1 kiss: man, man, light skin tone, dark skin tone
+1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FF      ; minimally-qualified # 👨🏻‍❤‍💋‍👨🏿 E13.1 kiss: man, man, light skin tone, dark skin tone
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified     # 👨🏼‍❤️‍💋‍👨🏻 E13.1 kiss: man, man, medium-light skin tone, light skin tone
+1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FB      ; minimally-qualified # 👨🏼‍❤‍💋‍👨🏻 E13.1 kiss: man, man, medium-light skin tone, light skin tone
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified     # 👨🏼‍❤️‍💋‍👨🏼 E13.1 kiss: man, man, medium-light skin tone
+1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FC      ; minimally-qualified # 👨🏼‍❤‍💋‍👨🏼 E13.1 kiss: man, man, medium-light skin tone
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified     # 👨🏼‍❤️‍💋‍👨🏽 E13.1 kiss: man, man, medium-light skin tone, medium skin tone
+1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FD      ; minimally-qualified # 👨🏼‍❤‍💋‍👨🏽 E13.1 kiss: man, man, medium-light skin tone, medium skin tone
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified     # 👨🏼‍❤️‍💋‍👨🏾 E13.1 kiss: man, man, medium-light skin tone, medium-dark skin tone
+1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FE      ; minimally-qualified # 👨🏼‍❤‍💋‍👨🏾 E13.1 kiss: man, man, medium-light skin tone, medium-dark skin tone
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified     # 👨🏼‍❤️‍💋‍👨🏿 E13.1 kiss: man, man, medium-light skin tone, dark skin tone
+1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FF      ; minimally-qualified # 👨🏼‍❤‍💋‍👨🏿 E13.1 kiss: man, man, medium-light skin tone, dark skin tone
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified     # 👨🏽‍❤️‍💋‍👨🏻 E13.1 kiss: man, man, medium skin tone, light skin tone
+1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FB      ; minimally-qualified # 👨🏽‍❤‍💋‍👨🏻 E13.1 kiss: man, man, medium skin tone, light skin tone
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified     # 👨🏽‍❤️‍💋‍👨🏼 E13.1 kiss: man, man, medium skin tone, medium-light skin tone
+1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FC      ; minimally-qualified # 👨🏽‍❤‍💋‍👨🏼 E13.1 kiss: man, man, medium skin tone, medium-light skin tone
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified     # 👨🏽‍❤️‍💋‍👨🏽 E13.1 kiss: man, man, medium skin tone
+1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FD      ; minimally-qualified # 👨🏽‍❤‍💋‍👨🏽 E13.1 kiss: man, man, medium skin tone
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified     # 👨🏽‍❤️‍💋‍👨🏾 E13.1 kiss: man, man, medium skin tone, medium-dark skin tone
+1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FE      ; minimally-qualified # 👨🏽‍❤‍💋‍👨🏾 E13.1 kiss: man, man, medium skin tone, medium-dark skin tone
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified     # 👨🏽‍❤️‍💋‍👨🏿 E13.1 kiss: man, man, medium skin tone, dark skin tone
+1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FF      ; minimally-qualified # 👨🏽‍❤‍💋‍👨🏿 E13.1 kiss: man, man, medium skin tone, dark skin tone
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified     # 👨🏾‍❤️‍💋‍👨🏻 E13.1 kiss: man, man, medium-dark skin tone, light skin tone
+1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FB      ; minimally-qualified # 👨🏾‍❤‍💋‍👨🏻 E13.1 kiss: man, man, medium-dark skin tone, light skin tone
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified     # 👨🏾‍❤️‍💋‍👨🏼 E13.1 kiss: man, man, medium-dark skin tone, medium-light skin tone
+1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FC      ; minimally-qualified # 👨🏾‍❤‍💋‍👨🏼 E13.1 kiss: man, man, medium-dark skin tone, medium-light skin tone
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified     # 👨🏾‍❤️‍💋‍👨🏽 E13.1 kiss: man, man, medium-dark skin tone, medium skin tone
+1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FD      ; minimally-qualified # 👨🏾‍❤‍💋‍👨🏽 E13.1 kiss: man, man, medium-dark skin tone, medium skin tone
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified     # 👨🏾‍❤️‍💋‍👨🏾 E13.1 kiss: man, man, medium-dark skin tone
+1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FE      ; minimally-qualified # 👨🏾‍❤‍💋‍👨🏾 E13.1 kiss: man, man, medium-dark skin tone
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified     # 👨🏾‍❤️‍💋‍👨🏿 E13.1 kiss: man, man, medium-dark skin tone, dark skin tone
+1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FF      ; minimally-qualified # 👨🏾‍❤‍💋‍👨🏿 E13.1 kiss: man, man, medium-dark skin tone, dark skin tone
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified     # 👨🏿‍❤️‍💋‍👨🏻 E13.1 kiss: man, man, dark skin tone, light skin tone
+1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FB      ; minimally-qualified # 👨🏿‍❤‍💋‍👨🏻 E13.1 kiss: man, man, dark skin tone, light skin tone
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified     # 👨🏿‍❤️‍💋‍👨🏼 E13.1 kiss: man, man, dark skin tone, medium-light skin tone
+1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FC      ; minimally-qualified # 👨🏿‍❤‍💋‍👨🏼 E13.1 kiss: man, man, dark skin tone, medium-light skin tone
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified     # 👨🏿‍❤️‍💋‍👨🏽 E13.1 kiss: man, man, dark skin tone, medium skin tone
+1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FD      ; minimally-qualified # 👨🏿‍❤‍💋‍👨🏽 E13.1 kiss: man, man, dark skin tone, medium skin tone
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified     # 👨🏿‍❤️‍💋‍👨🏾 E13.1 kiss: man, man, dark skin tone, medium-dark skin tone
+1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FE      ; minimally-qualified # 👨🏿‍❤‍💋‍👨🏾 E13.1 kiss: man, man, dark skin tone, medium-dark skin tone
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified     # 👨🏿‍❤️‍💋‍👨🏿 E13.1 kiss: man, man, dark skin tone
+1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FF      ; minimally-qualified # 👨🏿‍❤‍💋‍👨🏿 E13.1 kiss: man, man, dark skin tone
+1F469 200D 2764 FE0F 200D 1F48B 200D 1F469             ; fully-qualified     # 👩‍❤️‍💋‍👩 E2.0 kiss: woman, woman
+1F469 200D 2764 200D 1F48B 200D 1F469                  ; minimally-qualified # 👩‍❤‍💋‍👩 E2.0 kiss: woman, woman
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB ; fully-qualified     # 👩🏻‍❤️‍💋‍👩🏻 E13.1 kiss: woman, woman, light skin tone
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FB      ; minimally-qualified # 👩🏻‍❤‍💋‍👩🏻 E13.1 kiss: woman, woman, light skin tone
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC ; fully-qualified     # 👩🏻‍❤️‍💋‍👩🏼 E13.1 kiss: woman, woman, light skin tone, medium-light skin tone
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FC      ; minimally-qualified # 👩🏻‍❤‍💋‍👩🏼 E13.1 kiss: woman, woman, light skin tone, medium-light skin tone
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD ; fully-qualified     # 👩🏻‍❤️‍💋‍👩🏽 E13.1 kiss: woman, woman, light skin tone, medium skin tone
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FD      ; minimally-qualified # 👩🏻‍❤‍💋‍👩🏽 E13.1 kiss: woman, woman, light skin tone, medium skin tone
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE ; fully-qualified     # 👩🏻‍❤️‍💋‍👩🏾 E13.1 kiss: woman, woman, light skin tone, medium-dark skin tone
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FE      ; minimally-qualified # 👩🏻‍❤‍💋‍👩🏾 E13.1 kiss: woman, woman, light skin tone, medium-dark skin tone
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF ; fully-qualified     # 👩🏻‍❤️‍💋‍👩🏿 E13.1 kiss: woman, woman, light skin tone, dark skin tone
+1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FF      ; minimally-qualified # 👩🏻‍❤‍💋‍👩🏿 E13.1 kiss: woman, woman, light skin tone, dark skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB ; fully-qualified     # 👩🏼‍❤️‍💋‍👩🏻 E13.1 kiss: woman, woman, medium-light skin tone, light skin tone
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FB      ; minimally-qualified # 👩🏼‍❤‍💋‍👩🏻 E13.1 kiss: woman, woman, medium-light skin tone, light skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC ; fully-qualified     # 👩🏼‍❤️‍💋‍👩🏼 E13.1 kiss: woman, woman, medium-light skin tone
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FC      ; minimally-qualified # 👩🏼‍❤‍💋‍👩🏼 E13.1 kiss: woman, woman, medium-light skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD ; fully-qualified     # 👩🏼‍❤️‍💋‍👩🏽 E13.1 kiss: woman, woman, medium-light skin tone, medium skin tone
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FD      ; minimally-qualified # 👩🏼‍❤‍💋‍👩🏽 E13.1 kiss: woman, woman, medium-light skin tone, medium skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE ; fully-qualified     # 👩🏼‍❤️‍💋‍👩🏾 E13.1 kiss: woman, woman, medium-light skin tone, medium-dark skin tone
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FE      ; minimally-qualified # 👩🏼‍❤‍💋‍👩🏾 E13.1 kiss: woman, woman, medium-light skin tone, medium-dark skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF ; fully-qualified     # 👩🏼‍❤️‍💋‍👩🏿 E13.1 kiss: woman, woman, medium-light skin tone, dark skin tone
+1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FF      ; minimally-qualified # 👩🏼‍❤‍💋‍👩🏿 E13.1 kiss: woman, woman, medium-light skin tone, dark skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB ; fully-qualified     # 👩🏽‍❤️‍💋‍👩🏻 E13.1 kiss: woman, woman, medium skin tone, light skin tone
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FB      ; minimally-qualified # 👩🏽‍❤‍💋‍👩🏻 E13.1 kiss: woman, woman, medium skin tone, light skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC ; fully-qualified     # 👩🏽‍❤️‍💋‍👩🏼 E13.1 kiss: woman, woman, medium skin tone, medium-light skin tone
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FC      ; minimally-qualified # 👩🏽‍❤‍💋‍👩🏼 E13.1 kiss: woman, woman, medium skin tone, medium-light skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD ; fully-qualified     # 👩🏽‍❤️‍💋‍👩🏽 E13.1 kiss: woman, woman, medium skin tone
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FD      ; minimally-qualified # 👩🏽‍❤‍💋‍👩🏽 E13.1 kiss: woman, woman, medium skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE ; fully-qualified     # 👩🏽‍❤️‍💋‍👩🏾 E13.1 kiss: woman, woman, medium skin tone, medium-dark skin tone
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FE      ; minimally-qualified # 👩🏽‍❤‍💋‍👩🏾 E13.1 kiss: woman, woman, medium skin tone, medium-dark skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF ; fully-qualified     # 👩🏽‍❤️‍💋‍👩🏿 E13.1 kiss: woman, woman, medium skin tone, dark skin tone
+1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FF      ; minimally-qualified # 👩🏽‍❤‍💋‍👩🏿 E13.1 kiss: woman, woman, medium skin tone, dark skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB ; fully-qualified     # 👩🏾‍❤️‍💋‍👩🏻 E13.1 kiss: woman, woman, medium-dark skin tone, light skin tone
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FB      ; minimally-qualified # 👩🏾‍❤‍💋‍👩🏻 E13.1 kiss: woman, woman, medium-dark skin tone, light skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC ; fully-qualified     # 👩🏾‍❤️‍💋‍👩🏼 E13.1 kiss: woman, woman, medium-dark skin tone, medium-light skin tone
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FC      ; minimally-qualified # 👩🏾‍❤‍💋‍👩🏼 E13.1 kiss: woman, woman, medium-dark skin tone, medium-light skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD ; fully-qualified     # 👩🏾‍❤️‍💋‍👩🏽 E13.1 kiss: woman, woman, medium-dark skin tone, medium skin tone
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FD      ; minimally-qualified # 👩🏾‍❤‍💋‍👩🏽 E13.1 kiss: woman, woman, medium-dark skin tone, medium skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE ; fully-qualified     # 👩🏾‍❤️‍💋‍👩🏾 E13.1 kiss: woman, woman, medium-dark skin tone
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FE      ; minimally-qualified # 👩🏾‍❤‍💋‍👩🏾 E13.1 kiss: woman, woman, medium-dark skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF ; fully-qualified     # 👩🏾‍❤️‍💋‍👩🏿 E13.1 kiss: woman, woman, medium-dark skin tone, dark skin tone
+1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FF      ; minimally-qualified # 👩🏾‍❤‍💋‍👩🏿 E13.1 kiss: woman, woman, medium-dark skin tone, dark skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB ; fully-qualified     # 👩🏿‍❤️‍💋‍👩🏻 E13.1 kiss: woman, woman, dark skin tone, light skin tone
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FB      ; minimally-qualified # 👩🏿‍❤‍💋‍👩🏻 E13.1 kiss: woman, woman, dark skin tone, light skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC ; fully-qualified     # 👩🏿‍❤️‍💋‍👩🏼 E13.1 kiss: woman, woman, dark skin tone, medium-light skin tone
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FC      ; minimally-qualified # 👩🏿‍❤‍💋‍👩🏼 E13.1 kiss: woman, woman, dark skin tone, medium-light skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD ; fully-qualified     # 👩🏿‍❤️‍💋‍👩🏽 E13.1 kiss: woman, woman, dark skin tone, medium skin tone
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FD      ; minimally-qualified # 👩🏿‍❤‍💋‍👩🏽 E13.1 kiss: woman, woman, dark skin tone, medium skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE ; fully-qualified     # 👩🏿‍❤️‍💋‍👩🏾 E13.1 kiss: woman, woman, dark skin tone, medium-dark skin tone
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FE      ; minimally-qualified # 👩🏿‍❤‍💋‍👩🏾 E13.1 kiss: woman, woman, dark skin tone, medium-dark skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF ; fully-qualified     # 👩🏿‍❤️‍💋‍👩🏿 E13.1 kiss: woman, woman, dark skin tone
+1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FF      ; minimally-qualified # 👩🏿‍❤‍💋‍👩🏿 E13.1 kiss: woman, woman, dark skin tone
+1F491                                                  ; fully-qualified     # 💑 E0.6 couple with heart
+1F491 1F3FB                                            ; fully-qualified     # 💑🏻 E13.1 couple with heart: light skin tone
+1F491 1F3FC                                            ; fully-qualified     # 💑🏼 E13.1 couple with heart: medium-light skin tone
+1F491 1F3FD                                            ; fully-qualified     # 💑🏽 E13.1 couple with heart: medium skin tone
+1F491 1F3FE                                            ; fully-qualified     # 💑🏾 E13.1 couple with heart: medium-dark skin tone
+1F491 1F3FF                                            ; fully-qualified     # 💑🏿 E13.1 couple with heart: dark skin tone
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FC            ; fully-qualified     # 🧑🏻‍❤️‍🧑🏼 E13.1 couple with heart: person, person, light skin tone, medium-light skin tone
+1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FC                 ; minimally-qualified # 🧑🏻‍❤‍🧑🏼 E13.1 couple with heart: person, person, light skin tone, medium-light skin tone
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FD            ; fully-qualified     # 🧑🏻‍❤️‍🧑🏽 E13.1 couple with heart: person, person, light skin tone, medium skin tone
+1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FD                 ; minimally-qualified # 🧑🏻‍❤‍🧑🏽 E13.1 couple with heart: person, person, light skin tone, medium skin tone
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FE            ; fully-qualified     # 🧑🏻‍❤️‍🧑🏾 E13.1 couple with heart: person, person, light skin tone, medium-dark skin tone
+1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FE                 ; minimally-qualified # 🧑🏻‍❤‍🧑🏾 E13.1 couple with heart: person, person, light skin tone, medium-dark skin tone
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FF            ; fully-qualified     # 🧑🏻‍❤️‍🧑🏿 E13.1 couple with heart: person, person, light skin tone, dark skin tone
+1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FF                 ; minimally-qualified # 🧑🏻‍❤‍🧑🏿 E13.1 couple with heart: person, person, light skin tone, dark skin tone
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FB            ; fully-qualified     # 🧑🏼‍❤️‍🧑🏻 E13.1 couple with heart: person, person, medium-light skin tone, light skin tone
+1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FB                 ; minimally-qualified # 🧑🏼‍❤‍🧑🏻 E13.1 couple with heart: person, person, medium-light skin tone, light skin tone
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FD            ; fully-qualified     # 🧑🏼‍❤️‍🧑🏽 E13.1 couple with heart: person, person, medium-light skin tone, medium skin tone
+1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FD                 ; minimally-qualified # 🧑🏼‍❤‍🧑🏽 E13.1 couple with heart: person, person, medium-light skin tone, medium skin tone
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FE            ; fully-qualified     # 🧑🏼‍❤️‍🧑🏾 E13.1 couple with heart: person, person, medium-light skin tone, medium-dark skin tone
+1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FE                 ; minimally-qualified # 🧑🏼‍❤‍🧑🏾 E13.1 couple with heart: person, person, medium-light skin tone, medium-dark skin tone
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FF            ; fully-qualified     # 🧑🏼‍❤️‍🧑🏿 E13.1 couple with heart: person, person, medium-light skin tone, dark skin tone
+1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FF                 ; minimally-qualified # 🧑🏼‍❤‍🧑🏿 E13.1 couple with heart: person, person, medium-light skin tone, dark skin tone
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FB            ; fully-qualified     # 🧑🏽‍❤️‍🧑🏻 E13.1 couple with heart: person, person, medium skin tone, light skin tone
+1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FB                 ; minimally-qualified # 🧑🏽‍❤‍🧑🏻 E13.1 couple with heart: person, person, medium skin tone, light skin tone
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FC            ; fully-qualified     # 🧑🏽‍❤️‍🧑🏼 E13.1 couple with heart: person, person, medium skin tone, medium-light skin tone
+1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FC                 ; minimally-qualified # 🧑🏽‍❤‍🧑🏼 E13.1 couple with heart: person, person, medium skin tone, medium-light skin tone
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FE            ; fully-qualified     # 🧑🏽‍❤️‍🧑🏾 E13.1 couple with heart: person, person, medium skin tone, medium-dark skin tone
+1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FE                 ; minimally-qualified # 🧑🏽‍❤‍🧑🏾 E13.1 couple with heart: person, person, medium skin tone, medium-dark skin tone
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FF            ; fully-qualified     # 🧑🏽‍❤️‍🧑🏿 E13.1 couple with heart: person, person, medium skin tone, dark skin tone
+1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FF                 ; minimally-qualified # 🧑🏽‍❤‍🧑🏿 E13.1 couple with heart: person, person, medium skin tone, dark skin tone
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FB            ; fully-qualified     # 🧑🏾‍❤️‍🧑🏻 E13.1 couple with heart: person, person, medium-dark skin tone, light skin tone
+1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FB                 ; minimally-qualified # 🧑🏾‍❤‍🧑🏻 E13.1 couple with heart: person, person, medium-dark skin tone, light skin tone
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FC            ; fully-qualified     # 🧑🏾‍❤️‍🧑🏼 E13.1 couple with heart: person, person, medium-dark skin tone, medium-light skin tone
+1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FC                 ; minimally-qualified # 🧑🏾‍❤‍🧑🏼 E13.1 couple with heart: person, person, medium-dark skin tone, medium-light skin tone
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FD            ; fully-qualified     # 🧑🏾‍❤️‍🧑🏽 E13.1 couple with heart: person, person, medium-dark skin tone, medium skin tone
+1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FD                 ; minimally-qualified # 🧑🏾‍❤‍🧑🏽 E13.1 couple with heart: person, person, medium-dark skin tone, medium skin tone
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FF            ; fully-qualified     # 🧑🏾‍❤️‍🧑🏿 E13.1 couple with heart: person, person, medium-dark skin tone, dark skin tone
+1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FF                 ; minimally-qualified # 🧑🏾‍❤‍🧑🏿 E13.1 couple with heart: person, person, medium-dark skin tone, dark skin tone
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FB            ; fully-qualified     # 🧑🏿‍❤️‍🧑🏻 E13.1 couple with heart: person, person, dark skin tone, light skin tone
+1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FB                 ; minimally-qualified # 🧑🏿‍❤‍🧑🏻 E13.1 couple with heart: person, person, dark skin tone, light skin tone
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FC            ; fully-qualified     # 🧑🏿‍❤️‍🧑🏼 E13.1 couple with heart: person, person, dark skin tone, medium-light skin tone
+1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FC                 ; minimally-qualified # 🧑🏿‍❤‍🧑🏼 E13.1 couple with heart: person, person, dark skin tone, medium-light skin tone
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FD            ; fully-qualified     # 🧑🏿‍❤️‍🧑🏽 E13.1 couple with heart: person, person, dark skin tone, medium skin tone
+1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FD                 ; minimally-qualified # 🧑🏿‍❤‍🧑🏽 E13.1 couple with heart: person, person, dark skin tone, medium skin tone
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FE            ; fully-qualified     # 🧑🏿‍❤️‍🧑🏾 E13.1 couple with heart: person, person, dark skin tone, medium-dark skin tone
+1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FE                 ; minimally-qualified # 🧑🏿‍❤‍🧑🏾 E13.1 couple with heart: person, person, dark skin tone, medium-dark skin tone
+1F469 200D 2764 FE0F 200D 1F468                        ; fully-qualified     # 👩‍❤️‍👨 E2.0 couple with heart: woman, man
+1F469 200D 2764 200D 1F468                             ; minimally-qualified # 👩‍❤‍👨 E2.0 couple with heart: woman, man
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB            ; fully-qualified     # 👩🏻‍❤️‍👨🏻 E13.1 couple with heart: woman, man, light skin tone
+1F469 1F3FB 200D 2764 200D 1F468 1F3FB                 ; minimally-qualified # 👩🏻‍❤‍👨🏻 E13.1 couple with heart: woman, man, light skin tone
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC            ; fully-qualified     # 👩🏻‍❤️‍👨🏼 E13.1 couple with heart: woman, man, light skin tone, medium-light skin tone
+1F469 1F3FB 200D 2764 200D 1F468 1F3FC                 ; minimally-qualified # 👩🏻‍❤‍👨🏼 E13.1 couple with heart: woman, man, light skin tone, medium-light skin tone
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD            ; fully-qualified     # 👩🏻‍❤️‍👨🏽 E13.1 couple with heart: woman, man, light skin tone, medium skin tone
+1F469 1F3FB 200D 2764 200D 1F468 1F3FD                 ; minimally-qualified # 👩🏻‍❤‍👨🏽 E13.1 couple with heart: woman, man, light skin tone, medium skin tone
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE            ; fully-qualified     # 👩🏻‍❤️‍👨🏾 E13.1 couple with heart: woman, man, light skin tone, medium-dark skin tone
+1F469 1F3FB 200D 2764 200D 1F468 1F3FE                 ; minimally-qualified # 👩🏻‍❤‍👨🏾 E13.1 couple with heart: woman, man, light skin tone, medium-dark skin tone
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF            ; fully-qualified     # 👩🏻‍❤️‍👨🏿 E13.1 couple with heart: woman, man, light skin tone, dark skin tone
+1F469 1F3FB 200D 2764 200D 1F468 1F3FF                 ; minimally-qualified # 👩🏻‍❤‍👨🏿 E13.1 couple with heart: woman, man, light skin tone, dark skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB            ; fully-qualified     # 👩🏼‍❤️‍👨🏻 E13.1 couple with heart: woman, man, medium-light skin tone, light skin tone
+1F469 1F3FC 200D 2764 200D 1F468 1F3FB                 ; minimally-qualified # 👩🏼‍❤‍👨🏻 E13.1 couple with heart: woman, man, medium-light skin tone, light skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC            ; fully-qualified     # 👩🏼‍❤️‍👨🏼 E13.1 couple with heart: woman, man, medium-light skin tone
+1F469 1F3FC 200D 2764 200D 1F468 1F3FC                 ; minimally-qualified # 👩🏼‍❤‍👨🏼 E13.1 couple with heart: woman, man, medium-light skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD            ; fully-qualified     # 👩🏼‍❤️‍👨🏽 E13.1 couple with heart: woman, man, medium-light skin tone, medium skin tone
+1F469 1F3FC 200D 2764 200D 1F468 1F3FD                 ; minimally-qualified # 👩🏼‍❤‍👨🏽 E13.1 couple with heart: woman, man, medium-light skin tone, medium skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE            ; fully-qualified     # 👩🏼‍❤️‍👨🏾 E13.1 couple with heart: woman, man, medium-light skin tone, medium-dark skin tone
+1F469 1F3FC 200D 2764 200D 1F468 1F3FE                 ; minimally-qualified # 👩🏼‍❤‍👨🏾 E13.1 couple with heart: woman, man, medium-light skin tone, medium-dark skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF            ; fully-qualified     # 👩🏼‍❤️‍👨🏿 E13.1 couple with heart: woman, man, medium-light skin tone, dark skin tone
+1F469 1F3FC 200D 2764 200D 1F468 1F3FF                 ; minimally-qualified # 👩🏼‍❤‍👨🏿 E13.1 couple with heart: woman, man, medium-light skin tone, dark skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB            ; fully-qualified     # 👩🏽‍❤️‍👨🏻 E13.1 couple with heart: woman, man, medium skin tone, light skin tone
+1F469 1F3FD 200D 2764 200D 1F468 1F3FB                 ; minimally-qualified # 👩🏽‍❤‍👨🏻 E13.1 couple with heart: woman, man, medium skin tone, light skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC            ; fully-qualified     # 👩🏽‍❤️‍👨🏼 E13.1 couple with heart: woman, man, medium skin tone, medium-light skin tone
+1F469 1F3FD 200D 2764 200D 1F468 1F3FC                 ; minimally-qualified # 👩🏽‍❤‍👨🏼 E13.1 couple with heart: woman, man, medium skin tone, medium-light skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD            ; fully-qualified     # 👩🏽‍❤️‍👨🏽 E13.1 couple with heart: woman, man, medium skin tone
+1F469 1F3FD 200D 2764 200D 1F468 1F3FD                 ; minimally-qualified # 👩🏽‍❤‍👨🏽 E13.1 couple with heart: woman, man, medium skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE            ; fully-qualified     # 👩🏽‍❤️‍👨🏾 E13.1 couple with heart: woman, man, medium skin tone, medium-dark skin tone
+1F469 1F3FD 200D 2764 200D 1F468 1F3FE                 ; minimally-qualified # 👩🏽‍❤‍👨🏾 E13.1 couple with heart: woman, man, medium skin tone, medium-dark skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF            ; fully-qualified     # 👩🏽‍❤️‍👨🏿 E13.1 couple with heart: woman, man, medium skin tone, dark skin tone
+1F469 1F3FD 200D 2764 200D 1F468 1F3FF                 ; minimally-qualified # 👩🏽‍❤‍👨🏿 E13.1 couple with heart: woman, man, medium skin tone, dark skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB            ; fully-qualified     # 👩🏾‍❤️‍👨🏻 E13.1 couple with heart: woman, man, medium-dark skin tone, light skin tone
+1F469 1F3FE 200D 2764 200D 1F468 1F3FB                 ; minimally-qualified # 👩🏾‍❤‍👨🏻 E13.1 couple with heart: woman, man, medium-dark skin tone, light skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC            ; fully-qualified     # 👩🏾‍❤️‍👨🏼 E13.1 couple with heart: woman, man, medium-dark skin tone, medium-light skin tone
+1F469 1F3FE 200D 2764 200D 1F468 1F3FC                 ; minimally-qualified # 👩🏾‍❤‍👨🏼 E13.1 couple with heart: woman, man, medium-dark skin tone, medium-light skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD            ; fully-qualified     # 👩🏾‍❤️‍👨🏽 E13.1 couple with heart: woman, man, medium-dark skin tone, medium skin tone
+1F469 1F3FE 200D 2764 200D 1F468 1F3FD                 ; minimally-qualified # 👩🏾‍❤‍👨🏽 E13.1 couple with heart: woman, man, medium-dark skin tone, medium skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE            ; fully-qualified     # 👩🏾‍❤️‍👨🏾 E13.1 couple with heart: woman, man, medium-dark skin tone
+1F469 1F3FE 200D 2764 200D 1F468 1F3FE                 ; minimally-qualified # 👩🏾‍❤‍👨🏾 E13.1 couple with heart: woman, man, medium-dark skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF            ; fully-qualified     # 👩🏾‍❤️‍👨🏿 E13.1 couple with heart: woman, man, medium-dark skin tone, dark skin tone
+1F469 1F3FE 200D 2764 200D 1F468 1F3FF                 ; minimally-qualified # 👩🏾‍❤‍👨🏿 E13.1 couple with heart: woman, man, medium-dark skin tone, dark skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB            ; fully-qualified     # 👩🏿‍❤️‍👨🏻 E13.1 couple with heart: woman, man, dark skin tone, light skin tone
+1F469 1F3FF 200D 2764 200D 1F468 1F3FB                 ; minimally-qualified # 👩🏿‍❤‍👨🏻 E13.1 couple with heart: woman, man, dark skin tone, light skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC            ; fully-qualified     # 👩🏿‍❤️‍👨🏼 E13.1 couple with heart: woman, man, dark skin tone, medium-light skin tone
+1F469 1F3FF 200D 2764 200D 1F468 1F3FC                 ; minimally-qualified # 👩🏿‍❤‍👨🏼 E13.1 couple with heart: woman, man, dark skin tone, medium-light skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD            ; fully-qualified     # 👩🏿‍❤️‍👨🏽 E13.1 couple with heart: woman, man, dark skin tone, medium skin tone
+1F469 1F3FF 200D 2764 200D 1F468 1F3FD                 ; minimally-qualified # 👩🏿‍❤‍👨🏽 E13.1 couple with heart: woman, man, dark skin tone, medium skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE            ; fully-qualified     # 👩🏿‍❤️‍👨🏾 E13.1 couple with heart: woman, man, dark skin tone, medium-dark skin tone
+1F469 1F3FF 200D 2764 200D 1F468 1F3FE                 ; minimally-qualified # 👩🏿‍❤‍👨🏾 E13.1 couple with heart: woman, man, dark skin tone, medium-dark skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF            ; fully-qualified     # 👩🏿‍❤️‍👨🏿 E13.1 couple with heart: woman, man, dark skin tone
+1F469 1F3FF 200D 2764 200D 1F468 1F3FF                 ; minimally-qualified # 👩🏿‍❤‍👨🏿 E13.1 couple with heart: woman, man, dark skin tone
+1F468 200D 2764 FE0F 200D 1F468                        ; fully-qualified     # 👨‍❤️‍👨 E2.0 couple with heart: man, man
+1F468 200D 2764 200D 1F468                             ; minimally-qualified # 👨‍❤‍👨 E2.0 couple with heart: man, man
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB            ; fully-qualified     # 👨🏻‍❤️‍👨🏻 E13.1 couple with heart: man, man, light skin tone
+1F468 1F3FB 200D 2764 200D 1F468 1F3FB                 ; minimally-qualified # 👨🏻‍❤‍👨🏻 E13.1 couple with heart: man, man, light skin tone
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC            ; fully-qualified     # 👨🏻‍❤️‍👨🏼 E13.1 couple with heart: man, man, light skin tone, medium-light skin tone
+1F468 1F3FB 200D 2764 200D 1F468 1F3FC                 ; minimally-qualified # 👨🏻‍❤‍👨🏼 E13.1 couple with heart: man, man, light skin tone, medium-light skin tone
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD            ; fully-qualified     # 👨🏻‍❤️‍👨🏽 E13.1 couple with heart: man, man, light skin tone, medium skin tone
+1F468 1F3FB 200D 2764 200D 1F468 1F3FD                 ; minimally-qualified # 👨🏻‍❤‍👨🏽 E13.1 couple with heart: man, man, light skin tone, medium skin tone
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE            ; fully-qualified     # 👨🏻‍❤️‍👨🏾 E13.1 couple with heart: man, man, light skin tone, medium-dark skin tone
+1F468 1F3FB 200D 2764 200D 1F468 1F3FE                 ; minimally-qualified # 👨🏻‍❤‍👨🏾 E13.1 couple with heart: man, man, light skin tone, medium-dark skin tone
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF            ; fully-qualified     # 👨🏻‍❤️‍👨🏿 E13.1 couple with heart: man, man, light skin tone, dark skin tone
+1F468 1F3FB 200D 2764 200D 1F468 1F3FF                 ; minimally-qualified # 👨🏻‍❤‍👨🏿 E13.1 couple with heart: man, man, light skin tone, dark skin tone
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB            ; fully-qualified     # 👨🏼‍❤️‍👨🏻 E13.1 couple with heart: man, man, medium-light skin tone, light skin tone
+1F468 1F3FC 200D 2764 200D 1F468 1F3FB                 ; minimally-qualified # 👨🏼‍❤‍👨🏻 E13.1 couple with heart: man, man, medium-light skin tone, light skin tone
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC            ; fully-qualified     # 👨🏼‍❤️‍👨🏼 E13.1 couple with heart: man, man, medium-light skin tone
+1F468 1F3FC 200D 2764 200D 1F468 1F3FC                 ; minimally-qualified # 👨🏼‍❤‍👨🏼 E13.1 couple with heart: man, man, medium-light skin tone
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD            ; fully-qualified     # 👨🏼‍❤️‍👨🏽 E13.1 couple with heart: man, man, medium-light skin tone, medium skin tone
+1F468 1F3FC 200D 2764 200D 1F468 1F3FD                 ; minimally-qualified # 👨🏼‍❤‍👨🏽 E13.1 couple with heart: man, man, medium-light skin tone, medium skin tone
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE            ; fully-qualified     # 👨🏼‍❤️‍👨🏾 E13.1 couple with heart: man, man, medium-light skin tone, medium-dark skin tone
+1F468 1F3FC 200D 2764 200D 1F468 1F3FE                 ; minimally-qualified # 👨🏼‍❤‍👨🏾 E13.1 couple with heart: man, man, medium-light skin tone, medium-dark skin tone
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF            ; fully-qualified     # 👨🏼‍❤️‍👨🏿 E13.1 couple with heart: man, man, medium-light skin tone, dark skin tone
+1F468 1F3FC 200D 2764 200D 1F468 1F3FF                 ; minimally-qualified # 👨🏼‍❤‍👨🏿 E13.1 couple with heart: man, man, medium-light skin tone, dark skin tone
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB            ; fully-qualified     # 👨🏽‍❤️‍👨🏻 E13.1 couple with heart: man, man, medium skin tone, light skin tone
+1F468 1F3FD 200D 2764 200D 1F468 1F3FB                 ; minimally-qualified # 👨🏽‍❤‍👨🏻 E13.1 couple with heart: man, man, medium skin tone, light skin tone
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC            ; fully-qualified     # 👨🏽‍❤️‍👨🏼 E13.1 couple with heart: man, man, medium skin tone, medium-light skin tone
+1F468 1F3FD 200D 2764 200D 1F468 1F3FC                 ; minimally-qualified # 👨🏽‍❤‍👨🏼 E13.1 couple with heart: man, man, medium skin tone, medium-light skin tone
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD            ; fully-qualified     # 👨🏽‍❤️‍👨🏽 E13.1 couple with heart: man, man, medium skin tone
+1F468 1F3FD 200D 2764 200D 1F468 1F3FD                 ; minimally-qualified # 👨🏽‍❤‍👨🏽 E13.1 couple with heart: man, man, medium skin tone
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE            ; fully-qualified     # 👨🏽‍❤️‍👨🏾 E13.1 couple with heart: man, man, medium skin tone, medium-dark skin tone
+1F468 1F3FD 200D 2764 200D 1F468 1F3FE                 ; minimally-qualified # 👨🏽‍❤‍👨🏾 E13.1 couple with heart: man, man, medium skin tone, medium-dark skin tone
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF            ; fully-qualified     # 👨🏽‍❤️‍👨🏿 E13.1 couple with heart: man, man, medium skin tone, dark skin tone
+1F468 1F3FD 200D 2764 200D 1F468 1F3FF                 ; minimally-qualified # 👨🏽‍❤‍👨🏿 E13.1 couple with heart: man, man, medium skin tone, dark skin tone
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB            ; fully-qualified     # 👨🏾‍❤️‍👨🏻 E13.1 couple with heart: man, man, medium-dark skin tone, light skin tone
+1F468 1F3FE 200D 2764 200D 1F468 1F3FB                 ; minimally-qualified # 👨🏾‍❤‍👨🏻 E13.1 couple with heart: man, man, medium-dark skin tone, light skin tone
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC            ; fully-qualified     # 👨🏾‍❤️‍👨🏼 E13.1 couple with heart: man, man, medium-dark skin tone, medium-light skin tone
+1F468 1F3FE 200D 2764 200D 1F468 1F3FC                 ; minimally-qualified # 👨🏾‍❤‍👨🏼 E13.1 couple with heart: man, man, medium-dark skin tone, medium-light skin tone
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD            ; fully-qualified     # 👨🏾‍❤️‍👨🏽 E13.1 couple with heart: man, man, medium-dark skin tone, medium skin tone
+1F468 1F3FE 200D 2764 200D 1F468 1F3FD                 ; minimally-qualified # 👨🏾‍❤‍👨🏽 E13.1 couple with heart: man, man, medium-dark skin tone, medium skin tone
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE            ; fully-qualified     # 👨🏾‍❤️‍👨🏾 E13.1 couple with heart: man, man, medium-dark skin tone
+1F468 1F3FE 200D 2764 200D 1F468 1F3FE                 ; minimally-qualified # 👨🏾‍❤‍👨🏾 E13.1 couple with heart: man, man, medium-dark skin tone
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF            ; fully-qualified     # 👨🏾‍❤️‍👨🏿 E13.1 couple with heart: man, man, medium-dark skin tone, dark skin tone
+1F468 1F3FE 200D 2764 200D 1F468 1F3FF                 ; minimally-qualified # 👨🏾‍❤‍👨🏿 E13.1 couple with heart: man, man, medium-dark skin tone, dark skin tone
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB            ; fully-qualified     # 👨🏿‍❤️‍👨🏻 E13.1 couple with heart: man, man, dark skin tone, light skin tone
+1F468 1F3FF 200D 2764 200D 1F468 1F3FB                 ; minimally-qualified # 👨🏿‍❤‍👨🏻 E13.1 couple with heart: man, man, dark skin tone, light skin tone
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC            ; fully-qualified     # 👨🏿‍❤️‍👨🏼 E13.1 couple with heart: man, man, dark skin tone, medium-light skin tone
+1F468 1F3FF 200D 2764 200D 1F468 1F3FC                 ; minimally-qualified # 👨🏿‍❤‍👨🏼 E13.1 couple with heart: man, man, dark skin tone, medium-light skin tone
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD            ; fully-qualified     # 👨🏿‍❤️‍👨🏽 E13.1 couple with heart: man, man, dark skin tone, medium skin tone
+1F468 1F3FF 200D 2764 200D 1F468 1F3FD                 ; minimally-qualified # 👨🏿‍❤‍👨🏽 E13.1 couple with heart: man, man, dark skin tone, medium skin tone
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE            ; fully-qualified     # 👨🏿‍❤️‍👨🏾 E13.1 couple with heart: man, man, dark skin tone, medium-dark skin tone
+1F468 1F3FF 200D 2764 200D 1F468 1F3FE                 ; minimally-qualified # 👨🏿‍❤‍👨🏾 E13.1 couple with heart: man, man, dark skin tone, medium-dark skin tone
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF            ; fully-qualified     # 👨🏿‍❤️‍👨🏿 E13.1 couple with heart: man, man, dark skin tone
+1F468 1F3FF 200D 2764 200D 1F468 1F3FF                 ; minimally-qualified # 👨🏿‍❤‍👨🏿 E13.1 couple with heart: man, man, dark skin tone
+1F469 200D 2764 FE0F 200D 1F469                        ; fully-qualified     # 👩‍❤️‍👩 E2.0 couple with heart: woman, woman
+1F469 200D 2764 200D 1F469                             ; minimally-qualified # 👩‍❤‍👩 E2.0 couple with heart: woman, woman
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FB            ; fully-qualified     # 👩🏻‍❤️‍👩🏻 E13.1 couple with heart: woman, woman, light skin tone
+1F469 1F3FB 200D 2764 200D 1F469 1F3FB                 ; minimally-qualified # 👩🏻‍❤‍👩🏻 E13.1 couple with heart: woman, woman, light skin tone
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FC            ; fully-qualified     # 👩🏻‍❤️‍👩🏼 E13.1 couple with heart: woman, woman, light skin tone, medium-light skin tone
+1F469 1F3FB 200D 2764 200D 1F469 1F3FC                 ; minimally-qualified # 👩🏻‍❤‍👩🏼 E13.1 couple with heart: woman, woman, light skin tone, medium-light skin tone
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FD            ; fully-qualified     # 👩🏻‍❤️‍👩🏽 E13.1 couple with heart: woman, woman, light skin tone, medium skin tone
+1F469 1F3FB 200D 2764 200D 1F469 1F3FD                 ; minimally-qualified # 👩🏻‍❤‍👩🏽 E13.1 couple with heart: woman, woman, light skin tone, medium skin tone
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FE            ; fully-qualified     # 👩🏻‍❤️‍👩🏾 E13.1 couple with heart: woman, woman, light skin tone, medium-dark skin tone
+1F469 1F3FB 200D 2764 200D 1F469 1F3FE                 ; minimally-qualified # 👩🏻‍❤‍👩🏾 E13.1 couple with heart: woman, woman, light skin tone, medium-dark skin tone
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FF            ; fully-qualified     # 👩🏻‍❤️‍👩🏿 E13.1 couple with heart: woman, woman, light skin tone, dark skin tone
+1F469 1F3FB 200D 2764 200D 1F469 1F3FF                 ; minimally-qualified # 👩🏻‍❤‍👩🏿 E13.1 couple with heart: woman, woman, light skin tone, dark skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FB            ; fully-qualified     # 👩🏼‍❤️‍👩🏻 E13.1 couple with heart: woman, woman, medium-light skin tone, light skin tone
+1F469 1F3FC 200D 2764 200D 1F469 1F3FB                 ; minimally-qualified # 👩🏼‍❤‍👩🏻 E13.1 couple with heart: woman, woman, medium-light skin tone, light skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FC            ; fully-qualified     # 👩🏼‍❤️‍👩🏼 E13.1 couple with heart: woman, woman, medium-light skin tone
+1F469 1F3FC 200D 2764 200D 1F469 1F3FC                 ; minimally-qualified # 👩🏼‍❤‍👩🏼 E13.1 couple with heart: woman, woman, medium-light skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FD            ; fully-qualified     # 👩🏼‍❤️‍👩🏽 E13.1 couple with heart: woman, woman, medium-light skin tone, medium skin tone
+1F469 1F3FC 200D 2764 200D 1F469 1F3FD                 ; minimally-qualified # 👩🏼‍❤‍👩🏽 E13.1 couple with heart: woman, woman, medium-light skin tone, medium skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FE            ; fully-qualified     # 👩🏼‍❤️‍👩🏾 E13.1 couple with heart: woman, woman, medium-light skin tone, medium-dark skin tone
+1F469 1F3FC 200D 2764 200D 1F469 1F3FE                 ; minimally-qualified # 👩🏼‍❤‍👩🏾 E13.1 couple with heart: woman, woman, medium-light skin tone, medium-dark skin tone
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FF            ; fully-qualified     # 👩🏼‍❤️‍👩🏿 E13.1 couple with heart: woman, woman, medium-light skin tone, dark skin tone
+1F469 1F3FC 200D 2764 200D 1F469 1F3FF                 ; minimally-qualified # 👩🏼‍❤‍👩🏿 E13.1 couple with heart: woman, woman, medium-light skin tone, dark skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FB            ; fully-qualified     # 👩🏽‍❤️‍👩🏻 E13.1 couple with heart: woman, woman, medium skin tone, light skin tone
+1F469 1F3FD 200D 2764 200D 1F469 1F3FB                 ; minimally-qualified # 👩🏽‍❤‍👩🏻 E13.1 couple with heart: woman, woman, medium skin tone, light skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FC            ; fully-qualified     # 👩🏽‍❤️‍👩🏼 E13.1 couple with heart: woman, woman, medium skin tone, medium-light skin tone
+1F469 1F3FD 200D 2764 200D 1F469 1F3FC                 ; minimally-qualified # 👩🏽‍❤‍👩🏼 E13.1 couple with heart: woman, woman, medium skin tone, medium-light skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FD            ; fully-qualified     # 👩🏽‍❤️‍👩🏽 E13.1 couple with heart: woman, woman, medium skin tone
+1F469 1F3FD 200D 2764 200D 1F469 1F3FD                 ; minimally-qualified # 👩🏽‍❤‍👩🏽 E13.1 couple with heart: woman, woman, medium skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FE            ; fully-qualified     # 👩🏽‍❤️‍👩🏾 E13.1 couple with heart: woman, woman, medium skin tone, medium-dark skin tone
+1F469 1F3FD 200D 2764 200D 1F469 1F3FE                 ; minimally-qualified # 👩🏽‍❤‍👩🏾 E13.1 couple with heart: woman, woman, medium skin tone, medium-dark skin tone
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FF            ; fully-qualified     # 👩🏽‍❤️‍👩🏿 E13.1 couple with heart: woman, woman, medium skin tone, dark skin tone
+1F469 1F3FD 200D 2764 200D 1F469 1F3FF                 ; minimally-qualified # 👩🏽‍❤‍👩🏿 E13.1 couple with heart: woman, woman, medium skin tone, dark skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FB            ; fully-qualified     # 👩🏾‍❤️‍👩🏻 E13.1 couple with heart: woman, woman, medium-dark skin tone, light skin tone
+1F469 1F3FE 200D 2764 200D 1F469 1F3FB                 ; minimally-qualified # 👩🏾‍❤‍👩🏻 E13.1 couple with heart: woman, woman, medium-dark skin tone, light skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FC            ; fully-qualified     # 👩🏾‍❤️‍👩🏼 E13.1 couple with heart: woman, woman, medium-dark skin tone, medium-light skin tone
+1F469 1F3FE 200D 2764 200D 1F469 1F3FC                 ; minimally-qualified # 👩🏾‍❤‍👩🏼 E13.1 couple with heart: woman, woman, medium-dark skin tone, medium-light skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FD            ; fully-qualified     # 👩🏾‍❤️‍👩🏽 E13.1 couple with heart: woman, woman, medium-dark skin tone, medium skin tone
+1F469 1F3FE 200D 2764 200D 1F469 1F3FD                 ; minimally-qualified # 👩🏾‍❤‍👩🏽 E13.1 couple with heart: woman, woman, medium-dark skin tone, medium skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FE            ; fully-qualified     # 👩🏾‍❤️‍👩🏾 E13.1 couple with heart: woman, woman, medium-dark skin tone
+1F469 1F3FE 200D 2764 200D 1F469 1F3FE                 ; minimally-qualified # 👩🏾‍❤‍👩🏾 E13.1 couple with heart: woman, woman, medium-dark skin tone
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FF            ; fully-qualified     # 👩🏾‍❤️‍👩🏿 E13.1 couple with heart: woman, woman, medium-dark skin tone, dark skin tone
+1F469 1F3FE 200D 2764 200D 1F469 1F3FF                 ; minimally-qualified # 👩🏾‍❤‍👩🏿 E13.1 couple with heart: woman, woman, medium-dark skin tone, dark skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FB            ; fully-qualified     # 👩🏿‍❤️‍👩🏻 E13.1 couple with heart: woman, woman, dark skin tone, light skin tone
+1F469 1F3FF 200D 2764 200D 1F469 1F3FB                 ; minimally-qualified # 👩🏿‍❤‍👩🏻 E13.1 couple with heart: woman, woman, dark skin tone, light skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FC            ; fully-qualified     # 👩🏿‍❤️‍👩🏼 E13.1 couple with heart: woman, woman, dark skin tone, medium-light skin tone
+1F469 1F3FF 200D 2764 200D 1F469 1F3FC                 ; minimally-qualified # 👩🏿‍❤‍👩🏼 E13.1 couple with heart: woman, woman, dark skin tone, medium-light skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FD            ; fully-qualified     # 👩🏿‍❤️‍👩🏽 E13.1 couple with heart: woman, woman, dark skin tone, medium skin tone
+1F469 1F3FF 200D 2764 200D 1F469 1F3FD                 ; minimally-qualified # 👩🏿‍❤‍👩🏽 E13.1 couple with heart: woman, woman, dark skin tone, medium skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FE            ; fully-qualified     # 👩🏿‍❤️‍👩🏾 E13.1 couple with heart: woman, woman, dark skin tone, medium-dark skin tone
+1F469 1F3FF 200D 2764 200D 1F469 1F3FE                 ; minimally-qualified # 👩🏿‍❤‍👩🏾 E13.1 couple with heart: woman, woman, dark skin tone, medium-dark skin tone
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FF            ; fully-qualified     # 👩🏿‍❤️‍👩🏿 E13.1 couple with heart: woman, woman, dark skin tone
+1F469 1F3FF 200D 2764 200D 1F469 1F3FF                 ; minimally-qualified # 👩🏿‍❤‍👩🏿 E13.1 couple with heart: woman, woman, dark skin tone
+1F46A                                                  ; fully-qualified     # 👪 E0.6 family
+1F468 200D 1F469 200D 1F466                            ; fully-qualified     # 👨‍👩‍👦 E2.0 family: man, woman, boy
+1F468 200D 1F469 200D 1F467                            ; fully-qualified     # 👨‍👩‍👧 E2.0 family: man, woman, girl
+1F468 200D 1F469 200D 1F467 200D 1F466                 ; fully-qualified     # 👨‍👩‍👧‍👦 E2.0 family: man, woman, girl, boy
+1F468 200D 1F469 200D 1F466 200D 1F466                 ; fully-qualified     # 👨‍👩‍👦‍👦 E2.0 family: man, woman, boy, boy
+1F468 200D 1F469 200D 1F467 200D 1F467                 ; fully-qualified     # 👨‍👩‍👧‍👧 E2.0 family: man, woman, girl, girl
+1F468 200D 1F468 200D 1F466                            ; fully-qualified     # 👨‍👨‍👦 E2.0 family: man, man, boy
+1F468 200D 1F468 200D 1F467                            ; fully-qualified     # 👨‍👨‍👧 E2.0 family: man, man, girl
+1F468 200D 1F468 200D 1F467 200D 1F466                 ; fully-qualified     # 👨‍👨‍👧‍👦 E2.0 family: man, man, girl, boy
+1F468 200D 1F468 200D 1F466 200D 1F466                 ; fully-qualified     # 👨‍👨‍👦‍👦 E2.0 family: man, man, boy, boy
+1F468 200D 1F468 200D 1F467 200D 1F467                 ; fully-qualified     # 👨‍👨‍👧‍👧 E2.0 family: man, man, girl, girl
+1F469 200D 1F469 200D 1F466                            ; fully-qualified     # 👩‍👩‍👦 E2.0 family: woman, woman, boy
+1F469 200D 1F469 200D 1F467                            ; fully-qualified     # 👩‍👩‍👧 E2.0 family: woman, woman, girl
+1F469 200D 1F469 200D 1F467 200D 1F466                 ; fully-qualified     # 👩‍👩‍👧‍👦 E2.0 family: woman, woman, girl, boy
+1F469 200D 1F469 200D 1F466 200D 1F466                 ; fully-qualified     # 👩‍👩‍👦‍👦 E2.0 family: woman, woman, boy, boy
+1F469 200D 1F469 200D 1F467 200D 1F467                 ; fully-qualified     # 👩‍👩‍👧‍👧 E2.0 family: woman, woman, girl, girl
+1F468 200D 1F466                                       ; fully-qualified     # 👨‍👦 E4.0 family: man, boy
+1F468 200D 1F466 200D 1F466                            ; fully-qualified     # 👨‍👦‍👦 E4.0 family: man, boy, boy
+1F468 200D 1F467                                       ; fully-qualified     # 👨‍👧 E4.0 family: man, girl
+1F468 200D 1F467 200D 1F466                            ; fully-qualified     # 👨‍👧‍👦 E4.0 family: man, girl, boy
+1F468 200D 1F467 200D 1F467                            ; fully-qualified     # 👨‍👧‍👧 E4.0 family: man, girl, girl
+1F469 200D 1F466                                       ; fully-qualified     # 👩‍👦 E4.0 family: woman, boy
+1F469 200D 1F466 200D 1F466                            ; fully-qualified     # 👩‍👦‍👦 E4.0 family: woman, boy, boy
+1F469 200D 1F467                                       ; fully-qualified     # 👩‍👧 E4.0 family: woman, girl
+1F469 200D 1F467 200D 1F466                            ; fully-qualified     # 👩‍👧‍👦 E4.0 family: woman, girl, boy
+1F469 200D 1F467 200D 1F467                            ; fully-qualified     # 👩‍👧‍👧 E4.0 family: woman, girl, girl
 
 # subgroup: person-symbol
-1F5E3 FE0F                                 ; fully-qualified     # 🗣️ E0.7 speaking head
-1F5E3                                      ; unqualified         # 🗣 E0.7 speaking head
-1F464                                      ; fully-qualified     # 👤 E0.6 bust in silhouette
-1F465                                      ; fully-qualified     # 👥 E1.0 busts in silhouette
-1FAC2                                      ; fully-qualified     # 🫂 E13.0 people hugging
-1F463                                      ; fully-qualified     # 👣 E0.6 footprints
+1F5E3 FE0F                                             ; fully-qualified     # 🗣️ E0.7 speaking head
+1F5E3                                                  ; unqualified         # 🗣 E0.7 speaking head
+1F464                                                  ; fully-qualified     # 👤 E0.6 bust in silhouette
+1F465                                                  ; fully-qualified     # 👥 E1.0 busts in silhouette
+1FAC2                                                  ; fully-qualified     # 🫂 E13.0 people hugging
+1F463                                                  ; fully-qualified     # 👣 E0.6 footprints
 
-# People & Body subtotal:		2485
-# People & Body subtotal:		490	w/o modifiers
+# People & Body subtotal:		2899
+# People & Body subtotal:		494	w/o modifiers
 
 # group: Component
 
 # subgroup: skin-tone
-1F3FB                                      ; component           # 🏻 E1.0 light skin tone
-1F3FC                                      ; component           # 🏼 E1.0 medium-light skin tone
-1F3FD                                      ; component           # 🏽 E1.0 medium skin tone
-1F3FE                                      ; component           # 🏾 E1.0 medium-dark skin tone
-1F3FF                                      ; component           # 🏿 E1.0 dark skin tone
+1F3FB                                                  ; component           # 🏻 E1.0 light skin tone
+1F3FC                                                  ; component           # 🏼 E1.0 medium-light skin tone
+1F3FD                                                  ; component           # 🏽 E1.0 medium skin tone
+1F3FE                                                  ; component           # 🏾 E1.0 medium-dark skin tone
+1F3FF                                                  ; component           # 🏿 E1.0 dark skin tone
 
 # subgroup: hair-style
-1F9B0                                      ; component           # 🦰 E11.0 red hair
-1F9B1                                      ; component           # 🦱 E11.0 curly hair
-1F9B3                                      ; component           # 🦳 E11.0 white hair
-1F9B2                                      ; component           # 🦲 E11.0 bald
+1F9B0                                                  ; component           # 🦰 E11.0 red hair
+1F9B1                                                  ; component           # 🦱 E11.0 curly hair
+1F9B3                                                  ; component           # 🦳 E11.0 white hair
+1F9B2                                                  ; component           # 🦲 E11.0 bald
 
 # Component subtotal:		9
 # Component subtotal:		4	w/o modifiers
@@ -2770,167 +3192,167 @@
 # group: Animals & Nature
 
 # subgroup: animal-mammal
-1F435                                      ; fully-qualified     # 🐵 E0.6 monkey face
-1F412                                      ; fully-qualified     # 🐒 E0.6 monkey
-1F98D                                      ; fully-qualified     # 🦍 E3.0 gorilla
-1F9A7                                      ; fully-qualified     # 🦧 E12.0 orangutan
-1F436                                      ; fully-qualified     # 🐶 E0.6 dog face
-1F415                                      ; fully-qualified     # 🐕 E0.7 dog
-1F9AE                                      ; fully-qualified     # 🦮 E12.0 guide dog
-1F415 200D 1F9BA                           ; fully-qualified     # 🐕‍🦺 E12.0 service dog
-1F429                                      ; fully-qualified     # 🐩 E0.6 poodle
-1F43A                                      ; fully-qualified     # 🐺 E0.6 wolf
-1F98A                                      ; fully-qualified     # 🦊 E3.0 fox
-1F99D                                      ; fully-qualified     # 🦝 E11.0 raccoon
-1F431                                      ; fully-qualified     # 🐱 E0.6 cat face
-1F408                                      ; fully-qualified     # 🐈 E0.7 cat
-1F408 200D 2B1B                            ; fully-qualified     # 🐈‍⬛ E13.0 black cat
-1F981                                      ; fully-qualified     # 🦁 E1.0 lion
-1F42F                                      ; fully-qualified     # 🐯 E0.6 tiger face
-1F405                                      ; fully-qualified     # 🐅 E1.0 tiger
-1F406                                      ; fully-qualified     # 🐆 E1.0 leopard
-1F434                                      ; fully-qualified     # 🐴 E0.6 horse face
-1F40E                                      ; fully-qualified     # 🐎 E0.6 horse
-1F984                                      ; fully-qualified     # 🦄 E1.0 unicorn
-1F993                                      ; fully-qualified     # 🦓 E5.0 zebra
-1F98C                                      ; fully-qualified     # 🦌 E3.0 deer
-1F9AC                                      ; fully-qualified     # 🦬 E13.0 bison
-1F42E                                      ; fully-qualified     # 🐮 E0.6 cow face
-1F402                                      ; fully-qualified     # 🐂 E1.0 ox
-1F403                                      ; fully-qualified     # 🐃 E1.0 water buffalo
-1F404                                      ; fully-qualified     # 🐄 E1.0 cow
-1F437                                      ; fully-qualified     # 🐷 E0.6 pig face
-1F416                                      ; fully-qualified     # 🐖 E1.0 pig
-1F417                                      ; fully-qualified     # 🐗 E0.6 boar
-1F43D                                      ; fully-qualified     # 🐽 E0.6 pig nose
-1F40F                                      ; fully-qualified     # 🐏 E1.0 ram
-1F411                                      ; fully-qualified     # 🐑 E0.6 ewe
-1F410                                      ; fully-qualified     # 🐐 E1.0 goat
-1F42A                                      ; fully-qualified     # 🐪 E1.0 camel
-1F42B                                      ; fully-qualified     # 🐫 E0.6 two-hump camel
-1F999                                      ; fully-qualified     # 🦙 E11.0 llama
-1F992                                      ; fully-qualified     # 🦒 E5.0 giraffe
-1F418                                      ; fully-qualified     # 🐘 E0.6 elephant
-1F9A3                                      ; fully-qualified     # 🦣 E13.0 mammoth
-1F98F                                      ; fully-qualified     # 🦏 E3.0 rhinoceros
-1F99B                                      ; fully-qualified     # 🦛 E11.0 hippopotamus
-1F42D                                      ; fully-qualified     # 🐭 E0.6 mouse face
-1F401                                      ; fully-qualified     # 🐁 E1.0 mouse
-1F400                                      ; fully-qualified     # 🐀 E1.0 rat
-1F439                                      ; fully-qualified     # 🐹 E0.6 hamster
-1F430                                      ; fully-qualified     # 🐰 E0.6 rabbit face
-1F407                                      ; fully-qualified     # 🐇 E1.0 rabbit
-1F43F FE0F                                 ; fully-qualified     # 🐿️ E0.7 chipmunk
-1F43F                                      ; unqualified         # 🐿 E0.7 chipmunk
-1F9AB                                      ; fully-qualified     # 🦫 E13.0 beaver
-1F994                                      ; fully-qualified     # 🦔 E5.0 hedgehog
-1F987                                      ; fully-qualified     # 🦇 E3.0 bat
-1F43B                                      ; fully-qualified     # 🐻 E0.6 bear
-1F43B 200D 2744 FE0F                       ; fully-qualified     # 🐻‍❄️ E13.0 polar bear
-1F43B 200D 2744                            ; minimally-qualified # 🐻‍❄ E13.0 polar bear
-1F428                                      ; fully-qualified     # 🐨 E0.6 koala
-1F43C                                      ; fully-qualified     # 🐼 E0.6 panda
-1F9A5                                      ; fully-qualified     # 🦥 E12.0 sloth
-1F9A6                                      ; fully-qualified     # 🦦 E12.0 otter
-1F9A8                                      ; fully-qualified     # 🦨 E12.0 skunk
-1F998                                      ; fully-qualified     # 🦘 E11.0 kangaroo
-1F9A1                                      ; fully-qualified     # 🦡 E11.0 badger
-1F43E                                      ; fully-qualified     # 🐾 E0.6 paw prints
+1F435                                                  ; fully-qualified     # 🐵 E0.6 monkey face
+1F412                                                  ; fully-qualified     # 🐒 E0.6 monkey
+1F98D                                                  ; fully-qualified     # 🦍 E3.0 gorilla
+1F9A7                                                  ; fully-qualified     # 🦧 E12.0 orangutan
+1F436                                                  ; fully-qualified     # 🐶 E0.6 dog face
+1F415                                                  ; fully-qualified     # 🐕 E0.7 dog
+1F9AE                                                  ; fully-qualified     # 🦮 E12.0 guide dog
+1F415 200D 1F9BA                                       ; fully-qualified     # 🐕‍🦺 E12.0 service dog
+1F429                                                  ; fully-qualified     # 🐩 E0.6 poodle
+1F43A                                                  ; fully-qualified     # 🐺 E0.6 wolf
+1F98A                                                  ; fully-qualified     # 🦊 E3.0 fox
+1F99D                                                  ; fully-qualified     # 🦝 E11.0 raccoon
+1F431                                                  ; fully-qualified     # 🐱 E0.6 cat face
+1F408                                                  ; fully-qualified     # 🐈 E0.7 cat
+1F408 200D 2B1B                                        ; fully-qualified     # 🐈‍⬛ E13.0 black cat
+1F981                                                  ; fully-qualified     # 🦁 E1.0 lion
+1F42F                                                  ; fully-qualified     # 🐯 E0.6 tiger face
+1F405                                                  ; fully-qualified     # 🐅 E1.0 tiger
+1F406                                                  ; fully-qualified     # 🐆 E1.0 leopard
+1F434                                                  ; fully-qualified     # 🐴 E0.6 horse face
+1F40E                                                  ; fully-qualified     # 🐎 E0.6 horse
+1F984                                                  ; fully-qualified     # 🦄 E1.0 unicorn
+1F993                                                  ; fully-qualified     # 🦓 E5.0 zebra
+1F98C                                                  ; fully-qualified     # 🦌 E3.0 deer
+1F9AC                                                  ; fully-qualified     # 🦬 E13.0 bison
+1F42E                                                  ; fully-qualified     # 🐮 E0.6 cow face
+1F402                                                  ; fully-qualified     # 🐂 E1.0 ox
+1F403                                                  ; fully-qualified     # 🐃 E1.0 water buffalo
+1F404                                                  ; fully-qualified     # 🐄 E1.0 cow
+1F437                                                  ; fully-qualified     # 🐷 E0.6 pig face
+1F416                                                  ; fully-qualified     # 🐖 E1.0 pig
+1F417                                                  ; fully-qualified     # 🐗 E0.6 boar
+1F43D                                                  ; fully-qualified     # 🐽 E0.6 pig nose
+1F40F                                                  ; fully-qualified     # 🐏 E1.0 ram
+1F411                                                  ; fully-qualified     # 🐑 E0.6 ewe
+1F410                                                  ; fully-qualified     # 🐐 E1.0 goat
+1F42A                                                  ; fully-qualified     # 🐪 E1.0 camel
+1F42B                                                  ; fully-qualified     # 🐫 E0.6 two-hump camel
+1F999                                                  ; fully-qualified     # 🦙 E11.0 llama
+1F992                                                  ; fully-qualified     # 🦒 E5.0 giraffe
+1F418                                                  ; fully-qualified     # 🐘 E0.6 elephant
+1F9A3                                                  ; fully-qualified     # 🦣 E13.0 mammoth
+1F98F                                                  ; fully-qualified     # 🦏 E3.0 rhinoceros
+1F99B                                                  ; fully-qualified     # 🦛 E11.0 hippopotamus
+1F42D                                                  ; fully-qualified     # 🐭 E0.6 mouse face
+1F401                                                  ; fully-qualified     # 🐁 E1.0 mouse
+1F400                                                  ; fully-qualified     # 🐀 E1.0 rat
+1F439                                                  ; fully-qualified     # 🐹 E0.6 hamster
+1F430                                                  ; fully-qualified     # 🐰 E0.6 rabbit face
+1F407                                                  ; fully-qualified     # 🐇 E1.0 rabbit
+1F43F FE0F                                             ; fully-qualified     # 🐿️ E0.7 chipmunk
+1F43F                                                  ; unqualified         # 🐿 E0.7 chipmunk
+1F9AB                                                  ; fully-qualified     # 🦫 E13.0 beaver
+1F994                                                  ; fully-qualified     # 🦔 E5.0 hedgehog
+1F987                                                  ; fully-qualified     # 🦇 E3.0 bat
+1F43B                                                  ; fully-qualified     # 🐻 E0.6 bear
+1F43B 200D 2744 FE0F                                   ; fully-qualified     # 🐻‍❄️ E13.0 polar bear
+1F43B 200D 2744                                        ; minimally-qualified # 🐻‍❄ E13.0 polar bear
+1F428                                                  ; fully-qualified     # 🐨 E0.6 koala
+1F43C                                                  ; fully-qualified     # 🐼 E0.6 panda
+1F9A5                                                  ; fully-qualified     # 🦥 E12.0 sloth
+1F9A6                                                  ; fully-qualified     # 🦦 E12.0 otter
+1F9A8                                                  ; fully-qualified     # 🦨 E12.0 skunk
+1F998                                                  ; fully-qualified     # 🦘 E11.0 kangaroo
+1F9A1                                                  ; fully-qualified     # 🦡 E11.0 badger
+1F43E                                                  ; fully-qualified     # 🐾 E0.6 paw prints
 
 # subgroup: animal-bird
-1F983                                      ; fully-qualified     # 🦃 E1.0 turkey
-1F414                                      ; fully-qualified     # 🐔 E0.6 chicken
-1F413                                      ; fully-qualified     # 🐓 E1.0 rooster
-1F423                                      ; fully-qualified     # 🐣 E0.6 hatching chick
-1F424                                      ; fully-qualified     # 🐤 E0.6 baby chick
-1F425                                      ; fully-qualified     # 🐥 E0.6 front-facing baby chick
-1F426                                      ; fully-qualified     # 🐦 E0.6 bird
-1F427                                      ; fully-qualified     # 🐧 E0.6 penguin
-1F54A FE0F                                 ; fully-qualified     # 🕊️ E0.7 dove
-1F54A                                      ; unqualified         # 🕊 E0.7 dove
-1F985                                      ; fully-qualified     # 🦅 E3.0 eagle
-1F986                                      ; fully-qualified     # 🦆 E3.0 duck
-1F9A2                                      ; fully-qualified     # 🦢 E11.0 swan
-1F989                                      ; fully-qualified     # 🦉 E3.0 owl
-1F9A4                                      ; fully-qualified     # 🦤 E13.0 dodo
-1FAB6                                      ; fully-qualified     # 🪶 E13.0 feather
-1F9A9                                      ; fully-qualified     # 🦩 E12.0 flamingo
-1F99A                                      ; fully-qualified     # 🦚 E11.0 peacock
-1F99C                                      ; fully-qualified     # 🦜 E11.0 parrot
+1F983                                                  ; fully-qualified     # 🦃 E1.0 turkey
+1F414                                                  ; fully-qualified     # 🐔 E0.6 chicken
+1F413                                                  ; fully-qualified     # 🐓 E1.0 rooster
+1F423                                                  ; fully-qualified     # 🐣 E0.6 hatching chick
+1F424                                                  ; fully-qualified     # 🐤 E0.6 baby chick
+1F425                                                  ; fully-qualified     # 🐥 E0.6 front-facing baby chick
+1F426                                                  ; fully-qualified     # 🐦 E0.6 bird
+1F427                                                  ; fully-qualified     # 🐧 E0.6 penguin
+1F54A FE0F                                             ; fully-qualified     # 🕊️ E0.7 dove
+1F54A                                                  ; unqualified         # 🕊 E0.7 dove
+1F985                                                  ; fully-qualified     # 🦅 E3.0 eagle
+1F986                                                  ; fully-qualified     # 🦆 E3.0 duck
+1F9A2                                                  ; fully-qualified     # 🦢 E11.0 swan
+1F989                                                  ; fully-qualified     # 🦉 E3.0 owl
+1F9A4                                                  ; fully-qualified     # 🦤 E13.0 dodo
+1FAB6                                                  ; fully-qualified     # 🪶 E13.0 feather
+1F9A9                                                  ; fully-qualified     # 🦩 E12.0 flamingo
+1F99A                                                  ; fully-qualified     # 🦚 E11.0 peacock
+1F99C                                                  ; fully-qualified     # 🦜 E11.0 parrot
 
 # subgroup: animal-amphibian
-1F438                                      ; fully-qualified     # 🐸 E0.6 frog
+1F438                                                  ; fully-qualified     # 🐸 E0.6 frog
 
 # subgroup: animal-reptile
-1F40A                                      ; fully-qualified     # 🐊 E1.0 crocodile
-1F422                                      ; fully-qualified     # 🐢 E0.6 turtle
-1F98E                                      ; fully-qualified     # 🦎 E3.0 lizard
-1F40D                                      ; fully-qualified     # 🐍 E0.6 snake
-1F432                                      ; fully-qualified     # 🐲 E0.6 dragon face
-1F409                                      ; fully-qualified     # 🐉 E1.0 dragon
-1F995                                      ; fully-qualified     # 🦕 E5.0 sauropod
-1F996                                      ; fully-qualified     # 🦖 E5.0 T-Rex
+1F40A                                                  ; fully-qualified     # 🐊 E1.0 crocodile
+1F422                                                  ; fully-qualified     # 🐢 E0.6 turtle
+1F98E                                                  ; fully-qualified     # 🦎 E3.0 lizard
+1F40D                                                  ; fully-qualified     # 🐍 E0.6 snake
+1F432                                                  ; fully-qualified     # 🐲 E0.6 dragon face
+1F409                                                  ; fully-qualified     # 🐉 E1.0 dragon
+1F995                                                  ; fully-qualified     # 🦕 E5.0 sauropod
+1F996                                                  ; fully-qualified     # 🦖 E5.0 T-Rex
 
 # subgroup: animal-marine
-1F433                                      ; fully-qualified     # 🐳 E0.6 spouting whale
-1F40B                                      ; fully-qualified     # 🐋 E1.0 whale
-1F42C                                      ; fully-qualified     # 🐬 E0.6 dolphin
-1F9AD                                      ; fully-qualified     # 🦭 E13.0 seal
-1F41F                                      ; fully-qualified     # 🐟 E0.6 fish
-1F420                                      ; fully-qualified     # 🐠 E0.6 tropical fish
-1F421                                      ; fully-qualified     # 🐡 E0.6 blowfish
-1F988                                      ; fully-qualified     # 🦈 E3.0 shark
-1F419                                      ; fully-qualified     # 🐙 E0.6 octopus
-1F41A                                      ; fully-qualified     # 🐚 E0.6 spiral shell
+1F433                                                  ; fully-qualified     # 🐳 E0.6 spouting whale
+1F40B                                                  ; fully-qualified     # 🐋 E1.0 whale
+1F42C                                                  ; fully-qualified     # 🐬 E0.6 dolphin
+1F9AD                                                  ; fully-qualified     # 🦭 E13.0 seal
+1F41F                                                  ; fully-qualified     # 🐟 E0.6 fish
+1F420                                                  ; fully-qualified     # 🐠 E0.6 tropical fish
+1F421                                                  ; fully-qualified     # 🐡 E0.6 blowfish
+1F988                                                  ; fully-qualified     # 🦈 E3.0 shark
+1F419                                                  ; fully-qualified     # 🐙 E0.6 octopus
+1F41A                                                  ; fully-qualified     # 🐚 E0.6 spiral shell
 
 # subgroup: animal-bug
-1F40C                                      ; fully-qualified     # 🐌 E0.6 snail
-1F98B                                      ; fully-qualified     # 🦋 E3.0 butterfly
-1F41B                                      ; fully-qualified     # 🐛 E0.6 bug
-1F41C                                      ; fully-qualified     # 🐜 E0.6 ant
-1F41D                                      ; fully-qualified     # 🐝 E0.6 honeybee
-1FAB2                                      ; fully-qualified     # 🪲 E13.0 beetle
-1F41E                                      ; fully-qualified     # 🐞 E0.6 lady beetle
-1F997                                      ; fully-qualified     # 🦗 E5.0 cricket
-1FAB3                                      ; fully-qualified     # 🪳 E13.0 cockroach
-1F577 FE0F                                 ; fully-qualified     # 🕷️ E0.7 spider
-1F577                                      ; unqualified         # 🕷 E0.7 spider
-1F578 FE0F                                 ; fully-qualified     # 🕸️ E0.7 spider web
-1F578                                      ; unqualified         # 🕸 E0.7 spider web
-1F982                                      ; fully-qualified     # 🦂 E1.0 scorpion
-1F99F                                      ; fully-qualified     # 🦟 E11.0 mosquito
-1FAB0                                      ; fully-qualified     # 🪰 E13.0 fly
-1FAB1                                      ; fully-qualified     # 🪱 E13.0 worm
-1F9A0                                      ; fully-qualified     # 🦠 E11.0 microbe
+1F40C                                                  ; fully-qualified     # 🐌 E0.6 snail
+1F98B                                                  ; fully-qualified     # 🦋 E3.0 butterfly
+1F41B                                                  ; fully-qualified     # 🐛 E0.6 bug
+1F41C                                                  ; fully-qualified     # 🐜 E0.6 ant
+1F41D                                                  ; fully-qualified     # 🐝 E0.6 honeybee
+1FAB2                                                  ; fully-qualified     # 🪲 E13.0 beetle
+1F41E                                                  ; fully-qualified     # 🐞 E0.6 lady beetle
+1F997                                                  ; fully-qualified     # 🦗 E5.0 cricket
+1FAB3                                                  ; fully-qualified     # 🪳 E13.0 cockroach
+1F577 FE0F                                             ; fully-qualified     # 🕷️ E0.7 spider
+1F577                                                  ; unqualified         # 🕷 E0.7 spider
+1F578 FE0F                                             ; fully-qualified     # 🕸️ E0.7 spider web
+1F578                                                  ; unqualified         # 🕸 E0.7 spider web
+1F982                                                  ; fully-qualified     # 🦂 E1.0 scorpion
+1F99F                                                  ; fully-qualified     # 🦟 E11.0 mosquito
+1FAB0                                                  ; fully-qualified     # 🪰 E13.0 fly
+1FAB1                                                  ; fully-qualified     # 🪱 E13.0 worm
+1F9A0                                                  ; fully-qualified     # 🦠 E11.0 microbe
 
 # subgroup: plant-flower
-1F490                                      ; fully-qualified     # 💐 E0.6 bouquet
-1F338                                      ; fully-qualified     # 🌸 E0.6 cherry blossom
-1F4AE                                      ; fully-qualified     # 💮 E0.6 white flower
-1F3F5 FE0F                                 ; fully-qualified     # 🏵️ E0.7 rosette
-1F3F5                                      ; unqualified         # 🏵 E0.7 rosette
-1F339                                      ; fully-qualified     # 🌹 E0.6 rose
-1F940                                      ; fully-qualified     # 🥀 E3.0 wilted flower
-1F33A                                      ; fully-qualified     # 🌺 E0.6 hibiscus
-1F33B                                      ; fully-qualified     # 🌻 E0.6 sunflower
-1F33C                                      ; fully-qualified     # 🌼 E0.6 blossom
-1F337                                      ; fully-qualified     # 🌷 E0.6 tulip
+1F490                                                  ; fully-qualified     # 💐 E0.6 bouquet
+1F338                                                  ; fully-qualified     # 🌸 E0.6 cherry blossom
+1F4AE                                                  ; fully-qualified     # 💮 E0.6 white flower
+1F3F5 FE0F                                             ; fully-qualified     # 🏵️ E0.7 rosette
+1F3F5                                                  ; unqualified         # 🏵 E0.7 rosette
+1F339                                                  ; fully-qualified     # 🌹 E0.6 rose
+1F940                                                  ; fully-qualified     # 🥀 E3.0 wilted flower
+1F33A                                                  ; fully-qualified     # 🌺 E0.6 hibiscus
+1F33B                                                  ; fully-qualified     # 🌻 E0.6 sunflower
+1F33C                                                  ; fully-qualified     # 🌼 E0.6 blossom
+1F337                                                  ; fully-qualified     # 🌷 E0.6 tulip
 
 # subgroup: plant-other
-1F331                                      ; fully-qualified     # 🌱 E0.6 seedling
-1FAB4                                      ; fully-qualified     # 🪴 E13.0 potted plant
-1F332                                      ; fully-qualified     # 🌲 E1.0 evergreen tree
-1F333                                      ; fully-qualified     # 🌳 E1.0 deciduous tree
-1F334                                      ; fully-qualified     # 🌴 E0.6 palm tree
-1F335                                      ; fully-qualified     # 🌵 E0.6 cactus
-1F33E                                      ; fully-qualified     # 🌾 E0.6 sheaf of rice
-1F33F                                      ; fully-qualified     # 🌿 E0.6 herb
-2618 FE0F                                  ; fully-qualified     # ☘️ E1.0 shamrock
-2618                                       ; unqualified         # ☘ E1.0 shamrock
-1F340                                      ; fully-qualified     # 🍀 E0.6 four leaf clover
-1F341                                      ; fully-qualified     # 🍁 E0.6 maple leaf
-1F342                                      ; fully-qualified     # 🍂 E0.6 fallen leaf
-1F343                                      ; fully-qualified     # 🍃 E0.6 leaf fluttering in wind
+1F331                                                  ; fully-qualified     # 🌱 E0.6 seedling
+1FAB4                                                  ; fully-qualified     # 🪴 E13.0 potted plant
+1F332                                                  ; fully-qualified     # 🌲 E1.0 evergreen tree
+1F333                                                  ; fully-qualified     # 🌳 E1.0 deciduous tree
+1F334                                                  ; fully-qualified     # 🌴 E0.6 palm tree
+1F335                                                  ; fully-qualified     # 🌵 E0.6 cactus
+1F33E                                                  ; fully-qualified     # 🌾 E0.6 sheaf of rice
+1F33F                                                  ; fully-qualified     # 🌿 E0.6 herb
+2618 FE0F                                              ; fully-qualified     # ☘️ E1.0 shamrock
+2618                                                   ; unqualified         # ☘ E1.0 shamrock
+1F340                                                  ; fully-qualified     # 🍀 E0.6 four leaf clover
+1F341                                                  ; fully-qualified     # 🍁 E0.6 maple leaf
+1F342                                                  ; fully-qualified     # 🍂 E0.6 fallen leaf
+1F343                                                  ; fully-qualified     # 🍃 E0.6 leaf fluttering in wind
 
 # Animals & Nature subtotal:		147
 # Animals & Nature subtotal:		147	w/o modifiers
@@ -2938,151 +3360,151 @@
 # group: Food & Drink
 
 # subgroup: food-fruit
-1F347                                      ; fully-qualified     # 🍇 E0.6 grapes
-1F348                                      ; fully-qualified     # 🍈 E0.6 melon
-1F349                                      ; fully-qualified     # 🍉 E0.6 watermelon
-1F34A                                      ; fully-qualified     # 🍊 E0.6 tangerine
-1F34B                                      ; fully-qualified     # 🍋 E1.0 lemon
-1F34C                                      ; fully-qualified     # 🍌 E0.6 banana
-1F34D                                      ; fully-qualified     # 🍍 E0.6 pineapple
-1F96D                                      ; fully-qualified     # 🥭 E11.0 mango
-1F34E                                      ; fully-qualified     # 🍎 E0.6 red apple
-1F34F                                      ; fully-qualified     # 🍏 E0.6 green apple
-1F350                                      ; fully-qualified     # 🍐 E1.0 pear
-1F351                                      ; fully-qualified     # 🍑 E0.6 peach
-1F352                                      ; fully-qualified     # 🍒 E0.6 cherries
-1F353                                      ; fully-qualified     # 🍓 E0.6 strawberry
-1FAD0                                      ; fully-qualified     # 🫐 E13.0 blueberries
-1F95D                                      ; fully-qualified     # 🥝 E3.0 kiwi fruit
-1F345                                      ; fully-qualified     # 🍅 E0.6 tomato
-1FAD2                                      ; fully-qualified     # 🫒 E13.0 olive
-1F965                                      ; fully-qualified     # 🥥 E5.0 coconut
+1F347                                                  ; fully-qualified     # 🍇 E0.6 grapes
+1F348                                                  ; fully-qualified     # 🍈 E0.6 melon
+1F349                                                  ; fully-qualified     # 🍉 E0.6 watermelon
+1F34A                                                  ; fully-qualified     # 🍊 E0.6 tangerine
+1F34B                                                  ; fully-qualified     # 🍋 E1.0 lemon
+1F34C                                                  ; fully-qualified     # 🍌 E0.6 banana
+1F34D                                                  ; fully-qualified     # 🍍 E0.6 pineapple
+1F96D                                                  ; fully-qualified     # 🥭 E11.0 mango
+1F34E                                                  ; fully-qualified     # 🍎 E0.6 red apple
+1F34F                                                  ; fully-qualified     # 🍏 E0.6 green apple
+1F350                                                  ; fully-qualified     # 🍐 E1.0 pear
+1F351                                                  ; fully-qualified     # 🍑 E0.6 peach
+1F352                                                  ; fully-qualified     # 🍒 E0.6 cherries
+1F353                                                  ; fully-qualified     # 🍓 E0.6 strawberry
+1FAD0                                                  ; fully-qualified     # 🫐 E13.0 blueberries
+1F95D                                                  ; fully-qualified     # 🥝 E3.0 kiwi fruit
+1F345                                                  ; fully-qualified     # 🍅 E0.6 tomato
+1FAD2                                                  ; fully-qualified     # 🫒 E13.0 olive
+1F965                                                  ; fully-qualified     # 🥥 E5.0 coconut
 
 # subgroup: food-vegetable
-1F951                                      ; fully-qualified     # 🥑 E3.0 avocado
-1F346                                      ; fully-qualified     # 🍆 E0.6 eggplant
-1F954                                      ; fully-qualified     # 🥔 E3.0 potato
-1F955                                      ; fully-qualified     # 🥕 E3.0 carrot
-1F33D                                      ; fully-qualified     # 🌽 E0.6 ear of corn
-1F336 FE0F                                 ; fully-qualified     # 🌶️ E0.7 hot pepper
-1F336                                      ; unqualified         # 🌶 E0.7 hot pepper
-1FAD1                                      ; fully-qualified     # 🫑 E13.0 bell pepper
-1F952                                      ; fully-qualified     # 🥒 E3.0 cucumber
-1F96C                                      ; fully-qualified     # 🥬 E11.0 leafy green
-1F966                                      ; fully-qualified     # 🥦 E5.0 broccoli
-1F9C4                                      ; fully-qualified     # 🧄 E12.0 garlic
-1F9C5                                      ; fully-qualified     # 🧅 E12.0 onion
-1F344                                      ; fully-qualified     # 🍄 E0.6 mushroom
-1F95C                                      ; fully-qualified     # 🥜 E3.0 peanuts
-1F330                                      ; fully-qualified     # 🌰 E0.6 chestnut
+1F951                                                  ; fully-qualified     # 🥑 E3.0 avocado
+1F346                                                  ; fully-qualified     # 🍆 E0.6 eggplant
+1F954                                                  ; fully-qualified     # 🥔 E3.0 potato
+1F955                                                  ; fully-qualified     # 🥕 E3.0 carrot
+1F33D                                                  ; fully-qualified     # 🌽 E0.6 ear of corn
+1F336 FE0F                                             ; fully-qualified     # 🌶️ E0.7 hot pepper
+1F336                                                  ; unqualified         # 🌶 E0.7 hot pepper
+1FAD1                                                  ; fully-qualified     # 🫑 E13.0 bell pepper
+1F952                                                  ; fully-qualified     # 🥒 E3.0 cucumber
+1F96C                                                  ; fully-qualified     # 🥬 E11.0 leafy green
+1F966                                                  ; fully-qualified     # 🥦 E5.0 broccoli
+1F9C4                                                  ; fully-qualified     # 🧄 E12.0 garlic
+1F9C5                                                  ; fully-qualified     # 🧅 E12.0 onion
+1F344                                                  ; fully-qualified     # 🍄 E0.6 mushroom
+1F95C                                                  ; fully-qualified     # 🥜 E3.0 peanuts
+1F330                                                  ; fully-qualified     # 🌰 E0.6 chestnut
 
 # subgroup: food-prepared
-1F35E                                      ; fully-qualified     # 🍞 E0.6 bread
-1F950                                      ; fully-qualified     # 🥐 E3.0 croissant
-1F956                                      ; fully-qualified     # 🥖 E3.0 baguette bread
-1FAD3                                      ; fully-qualified     # 🫓 E13.0 flatbread
-1F968                                      ; fully-qualified     # 🥨 E5.0 pretzel
-1F96F                                      ; fully-qualified     # 🥯 E11.0 bagel
-1F95E                                      ; fully-qualified     # 🥞 E3.0 pancakes
-1F9C7                                      ; fully-qualified     # 🧇 E12.0 waffle
-1F9C0                                      ; fully-qualified     # 🧀 E1.0 cheese wedge
-1F356                                      ; fully-qualified     # 🍖 E0.6 meat on bone
-1F357                                      ; fully-qualified     # 🍗 E0.6 poultry leg
-1F969                                      ; fully-qualified     # 🥩 E5.0 cut of meat
-1F953                                      ; fully-qualified     # 🥓 E3.0 bacon
-1F354                                      ; fully-qualified     # 🍔 E0.6 hamburger
-1F35F                                      ; fully-qualified     # 🍟 E0.6 french fries
-1F355                                      ; fully-qualified     # 🍕 E0.6 pizza
-1F32D                                      ; fully-qualified     # 🌭 E1.0 hot dog
-1F96A                                      ; fully-qualified     # 🥪 E5.0 sandwich
-1F32E                                      ; fully-qualified     # 🌮 E1.0 taco
-1F32F                                      ; fully-qualified     # 🌯 E1.0 burrito
-1FAD4                                      ; fully-qualified     # 🫔 E13.0 tamale
-1F959                                      ; fully-qualified     # 🥙 E3.0 stuffed flatbread
-1F9C6                                      ; fully-qualified     # 🧆 E12.0 falafel
-1F95A                                      ; fully-qualified     # 🥚 E3.0 egg
-1F373                                      ; fully-qualified     # 🍳 E0.6 cooking
-1F958                                      ; fully-qualified     # 🥘 E3.0 shallow pan of food
-1F372                                      ; fully-qualified     # 🍲 E0.6 pot of food
-1FAD5                                      ; fully-qualified     # 🫕 E13.0 fondue
-1F963                                      ; fully-qualified     # 🥣 E5.0 bowl with spoon
-1F957                                      ; fully-qualified     # 🥗 E3.0 green salad
-1F37F                                      ; fully-qualified     # 🍿 E1.0 popcorn
-1F9C8                                      ; fully-qualified     # 🧈 E12.0 butter
-1F9C2                                      ; fully-qualified     # 🧂 E11.0 salt
-1F96B                                      ; fully-qualified     # 🥫 E5.0 canned food
+1F35E                                                  ; fully-qualified     # 🍞 E0.6 bread
+1F950                                                  ; fully-qualified     # 🥐 E3.0 croissant
+1F956                                                  ; fully-qualified     # 🥖 E3.0 baguette bread
+1FAD3                                                  ; fully-qualified     # 🫓 E13.0 flatbread
+1F968                                                  ; fully-qualified     # 🥨 E5.0 pretzel
+1F96F                                                  ; fully-qualified     # 🥯 E11.0 bagel
+1F95E                                                  ; fully-qualified     # 🥞 E3.0 pancakes
+1F9C7                                                  ; fully-qualified     # 🧇 E12.0 waffle
+1F9C0                                                  ; fully-qualified     # 🧀 E1.0 cheese wedge
+1F356                                                  ; fully-qualified     # 🍖 E0.6 meat on bone
+1F357                                                  ; fully-qualified     # 🍗 E0.6 poultry leg
+1F969                                                  ; fully-qualified     # 🥩 E5.0 cut of meat
+1F953                                                  ; fully-qualified     # 🥓 E3.0 bacon
+1F354                                                  ; fully-qualified     # 🍔 E0.6 hamburger
+1F35F                                                  ; fully-qualified     # 🍟 E0.6 french fries
+1F355                                                  ; fully-qualified     # 🍕 E0.6 pizza
+1F32D                                                  ; fully-qualified     # 🌭 E1.0 hot dog
+1F96A                                                  ; fully-qualified     # 🥪 E5.0 sandwich
+1F32E                                                  ; fully-qualified     # 🌮 E1.0 taco
+1F32F                                                  ; fully-qualified     # 🌯 E1.0 burrito
+1FAD4                                                  ; fully-qualified     # 🫔 E13.0 tamale
+1F959                                                  ; fully-qualified     # 🥙 E3.0 stuffed flatbread
+1F9C6                                                  ; fully-qualified     # 🧆 E12.0 falafel
+1F95A                                                  ; fully-qualified     # 🥚 E3.0 egg
+1F373                                                  ; fully-qualified     # 🍳 E0.6 cooking
+1F958                                                  ; fully-qualified     # 🥘 E3.0 shallow pan of food
+1F372                                                  ; fully-qualified     # 🍲 E0.6 pot of food
+1FAD5                                                  ; fully-qualified     # 🫕 E13.0 fondue
+1F963                                                  ; fully-qualified     # 🥣 E5.0 bowl with spoon
+1F957                                                  ; fully-qualified     # 🥗 E3.0 green salad
+1F37F                                                  ; fully-qualified     # 🍿 E1.0 popcorn
+1F9C8                                                  ; fully-qualified     # 🧈 E12.0 butter
+1F9C2                                                  ; fully-qualified     # 🧂 E11.0 salt
+1F96B                                                  ; fully-qualified     # 🥫 E5.0 canned food
 
 # subgroup: food-asian
-1F371                                      ; fully-qualified     # 🍱 E0.6 bento box
-1F358                                      ; fully-qualified     # 🍘 E0.6 rice cracker
-1F359                                      ; fully-qualified     # 🍙 E0.6 rice ball
-1F35A                                      ; fully-qualified     # 🍚 E0.6 cooked rice
-1F35B                                      ; fully-qualified     # 🍛 E0.6 curry rice
-1F35C                                      ; fully-qualified     # 🍜 E0.6 steaming bowl
-1F35D                                      ; fully-qualified     # 🍝 E0.6 spaghetti
-1F360                                      ; fully-qualified     # 🍠 E0.6 roasted sweet potato
-1F362                                      ; fully-qualified     # 🍢 E0.6 oden
-1F363                                      ; fully-qualified     # 🍣 E0.6 sushi
-1F364                                      ; fully-qualified     # 🍤 E0.6 fried shrimp
-1F365                                      ; fully-qualified     # 🍥 E0.6 fish cake with swirl
-1F96E                                      ; fully-qualified     # 🥮 E11.0 moon cake
-1F361                                      ; fully-qualified     # 🍡 E0.6 dango
-1F95F                                      ; fully-qualified     # 🥟 E5.0 dumpling
-1F960                                      ; fully-qualified     # 🥠 E5.0 fortune cookie
-1F961                                      ; fully-qualified     # 🥡 E5.0 takeout box
+1F371                                                  ; fully-qualified     # 🍱 E0.6 bento box
+1F358                                                  ; fully-qualified     # 🍘 E0.6 rice cracker
+1F359                                                  ; fully-qualified     # 🍙 E0.6 rice ball
+1F35A                                                  ; fully-qualified     # 🍚 E0.6 cooked rice
+1F35B                                                  ; fully-qualified     # 🍛 E0.6 curry rice
+1F35C                                                  ; fully-qualified     # 🍜 E0.6 steaming bowl
+1F35D                                                  ; fully-qualified     # 🍝 E0.6 spaghetti
+1F360                                                  ; fully-qualified     # 🍠 E0.6 roasted sweet potato
+1F362                                                  ; fully-qualified     # 🍢 E0.6 oden
+1F363                                                  ; fully-qualified     # 🍣 E0.6 sushi
+1F364                                                  ; fully-qualified     # 🍤 E0.6 fried shrimp
+1F365                                                  ; fully-qualified     # 🍥 E0.6 fish cake with swirl
+1F96E                                                  ; fully-qualified     # 🥮 E11.0 moon cake
+1F361                                                  ; fully-qualified     # 🍡 E0.6 dango
+1F95F                                                  ; fully-qualified     # 🥟 E5.0 dumpling
+1F960                                                  ; fully-qualified     # 🥠 E5.0 fortune cookie
+1F961                                                  ; fully-qualified     # 🥡 E5.0 takeout box
 
 # subgroup: food-marine
-1F980                                      ; fully-qualified     # 🦀 E1.0 crab
-1F99E                                      ; fully-qualified     # 🦞 E11.0 lobster
-1F990                                      ; fully-qualified     # 🦐 E3.0 shrimp
-1F991                                      ; fully-qualified     # 🦑 E3.0 squid
-1F9AA                                      ; fully-qualified     # 🦪 E12.0 oyster
+1F980                                                  ; fully-qualified     # 🦀 E1.0 crab
+1F99E                                                  ; fully-qualified     # 🦞 E11.0 lobster
+1F990                                                  ; fully-qualified     # 🦐 E3.0 shrimp
+1F991                                                  ; fully-qualified     # 🦑 E3.0 squid
+1F9AA                                                  ; fully-qualified     # 🦪 E12.0 oyster
 
 # subgroup: food-sweet
-1F366                                      ; fully-qualified     # 🍦 E0.6 soft ice cream
-1F367                                      ; fully-qualified     # 🍧 E0.6 shaved ice
-1F368                                      ; fully-qualified     # 🍨 E0.6 ice cream
-1F369                                      ; fully-qualified     # 🍩 E0.6 doughnut
-1F36A                                      ; fully-qualified     # 🍪 E0.6 cookie
-1F382                                      ; fully-qualified     # 🎂 E0.6 birthday cake
-1F370                                      ; fully-qualified     # 🍰 E0.6 shortcake
-1F9C1                                      ; fully-qualified     # 🧁 E11.0 cupcake
-1F967                                      ; fully-qualified     # 🥧 E5.0 pie
-1F36B                                      ; fully-qualified     # 🍫 E0.6 chocolate bar
-1F36C                                      ; fully-qualified     # 🍬 E0.6 candy
-1F36D                                      ; fully-qualified     # 🍭 E0.6 lollipop
-1F36E                                      ; fully-qualified     # 🍮 E0.6 custard
-1F36F                                      ; fully-qualified     # 🍯 E0.6 honey pot
+1F366                                                  ; fully-qualified     # 🍦 E0.6 soft ice cream
+1F367                                                  ; fully-qualified     # 🍧 E0.6 shaved ice
+1F368                                                  ; fully-qualified     # 🍨 E0.6 ice cream
+1F369                                                  ; fully-qualified     # 🍩 E0.6 doughnut
+1F36A                                                  ; fully-qualified     # 🍪 E0.6 cookie
+1F382                                                  ; fully-qualified     # 🎂 E0.6 birthday cake
+1F370                                                  ; fully-qualified     # 🍰 E0.6 shortcake
+1F9C1                                                  ; fully-qualified     # 🧁 E11.0 cupcake
+1F967                                                  ; fully-qualified     # 🥧 E5.0 pie
+1F36B                                                  ; fully-qualified     # 🍫 E0.6 chocolate bar
+1F36C                                                  ; fully-qualified     # 🍬 E0.6 candy
+1F36D                                                  ; fully-qualified     # 🍭 E0.6 lollipop
+1F36E                                                  ; fully-qualified     # 🍮 E0.6 custard
+1F36F                                                  ; fully-qualified     # 🍯 E0.6 honey pot
 
 # subgroup: drink
-1F37C                                      ; fully-qualified     # 🍼 E1.0 baby bottle
-1F95B                                      ; fully-qualified     # 🥛 E3.0 glass of milk
-2615                                       ; fully-qualified     # ☕ E0.6 hot beverage
-1FAD6                                      ; fully-qualified     # 🫖 E13.0 teapot
-1F375                                      ; fully-qualified     # 🍵 E0.6 teacup without handle
-1F376                                      ; fully-qualified     # 🍶 E0.6 sake
-1F37E                                      ; fully-qualified     # 🍾 E1.0 bottle with popping cork
-1F377                                      ; fully-qualified     # 🍷 E0.6 wine glass
-1F378                                      ; fully-qualified     # 🍸 E0.6 cocktail glass
-1F379                                      ; fully-qualified     # 🍹 E0.6 tropical drink
-1F37A                                      ; fully-qualified     # 🍺 E0.6 beer mug
-1F37B                                      ; fully-qualified     # 🍻 E0.6 clinking beer mugs
-1F942                                      ; fully-qualified     # 🥂 E3.0 clinking glasses
-1F943                                      ; fully-qualified     # 🥃 E3.0 tumbler glass
-1F964                                      ; fully-qualified     # 🥤 E5.0 cup with straw
-1F9CB                                      ; fully-qualified     # 🧋 E13.0 bubble tea
-1F9C3                                      ; fully-qualified     # 🧃 E12.0 beverage box
-1F9C9                                      ; fully-qualified     # 🧉 E12.0 mate
-1F9CA                                      ; fully-qualified     # 🧊 E12.0 ice
+1F37C                                                  ; fully-qualified     # 🍼 E1.0 baby bottle
+1F95B                                                  ; fully-qualified     # 🥛 E3.0 glass of milk
+2615                                                   ; fully-qualified     # ☕ E0.6 hot beverage
+1FAD6                                                  ; fully-qualified     # 🫖 E13.0 teapot
+1F375                                                  ; fully-qualified     # 🍵 E0.6 teacup without handle
+1F376                                                  ; fully-qualified     # 🍶 E0.6 sake
+1F37E                                                  ; fully-qualified     # 🍾 E1.0 bottle with popping cork
+1F377                                                  ; fully-qualified     # 🍷 E0.6 wine glass
+1F378                                                  ; fully-qualified     # 🍸 E0.6 cocktail glass
+1F379                                                  ; fully-qualified     # 🍹 E0.6 tropical drink
+1F37A                                                  ; fully-qualified     # 🍺 E0.6 beer mug
+1F37B                                                  ; fully-qualified     # 🍻 E0.6 clinking beer mugs
+1F942                                                  ; fully-qualified     # 🥂 E3.0 clinking glasses
+1F943                                                  ; fully-qualified     # 🥃 E3.0 tumbler glass
+1F964                                                  ; fully-qualified     # 🥤 E5.0 cup with straw
+1F9CB                                                  ; fully-qualified     # 🧋 E13.0 bubble tea
+1F9C3                                                  ; fully-qualified     # 🧃 E12.0 beverage box
+1F9C9                                                  ; fully-qualified     # 🧉 E12.0 mate
+1F9CA                                                  ; fully-qualified     # 🧊 E12.0 ice
 
 # subgroup: dishware
-1F962                                      ; fully-qualified     # 🥢 E5.0 chopsticks
-1F37D FE0F                                 ; fully-qualified     # 🍽️ E0.7 fork and knife with plate
-1F37D                                      ; unqualified         # 🍽 E0.7 fork and knife with plate
-1F374                                      ; fully-qualified     # 🍴 E0.6 fork and knife
-1F944                                      ; fully-qualified     # 🥄 E3.0 spoon
-1F52A                                      ; fully-qualified     # 🔪 E0.6 kitchen knife
-1F3FA                                      ; fully-qualified     # 🏺 E1.0 amphora
+1F962                                                  ; fully-qualified     # 🥢 E5.0 chopsticks
+1F37D FE0F                                             ; fully-qualified     # 🍽️ E0.7 fork and knife with plate
+1F37D                                                  ; unqualified         # 🍽 E0.7 fork and knife with plate
+1F374                                                  ; fully-qualified     # 🍴 E0.6 fork and knife
+1F944                                                  ; fully-qualified     # 🥄 E3.0 spoon
+1F52A                                                  ; fully-qualified     # 🔪 E0.6 kitchen knife
+1F3FA                                                  ; fully-qualified     # 🏺 E1.0 amphora
 
 # Food & Drink subtotal:		131
 # Food & Drink subtotal:		131	w/o modifiers
@@ -3090,290 +3512,290 @@
 # group: Travel & Places
 
 # subgroup: place-map
-1F30D                                      ; fully-qualified     # 🌍 E0.7 globe showing Europe-Africa
-1F30E                                      ; fully-qualified     # 🌎 E0.7 globe showing Americas
-1F30F                                      ; fully-qualified     # 🌏 E0.6 globe showing Asia-Australia
-1F310                                      ; fully-qualified     # 🌐 E1.0 globe with meridians
-1F5FA FE0F                                 ; fully-qualified     # 🗺️ E0.7 world map
-1F5FA                                      ; unqualified         # 🗺 E0.7 world map
-1F5FE                                      ; fully-qualified     # 🗾 E0.6 map of Japan
-1F9ED                                      ; fully-qualified     # 🧭 E11.0 compass
+1F30D                                                  ; fully-qualified     # 🌍 E0.7 globe showing Europe-Africa
+1F30E                                                  ; fully-qualified     # 🌎 E0.7 globe showing Americas
+1F30F                                                  ; fully-qualified     # 🌏 E0.6 globe showing Asia-Australia
+1F310                                                  ; fully-qualified     # 🌐 E1.0 globe with meridians
+1F5FA FE0F                                             ; fully-qualified     # 🗺️ E0.7 world map
+1F5FA                                                  ; unqualified         # 🗺 E0.7 world map
+1F5FE                                                  ; fully-qualified     # 🗾 E0.6 map of Japan
+1F9ED                                                  ; fully-qualified     # 🧭 E11.0 compass
 
 # subgroup: place-geographic
-1F3D4 FE0F                                 ; fully-qualified     # 🏔️ E0.7 snow-capped mountain
-1F3D4                                      ; unqualified         # 🏔 E0.7 snow-capped mountain
-26F0 FE0F                                  ; fully-qualified     # ⛰️ E0.7 mountain
-26F0                                       ; unqualified         # ⛰ E0.7 mountain
-1F30B                                      ; fully-qualified     # 🌋 E0.6 volcano
-1F5FB                                      ; fully-qualified     # 🗻 E0.6 mount fuji
-1F3D5 FE0F                                 ; fully-qualified     # 🏕️ E0.7 camping
-1F3D5                                      ; unqualified         # 🏕 E0.7 camping
-1F3D6 FE0F                                 ; fully-qualified     # 🏖️ E0.7 beach with umbrella
-1F3D6                                      ; unqualified         # 🏖 E0.7 beach with umbrella
-1F3DC FE0F                                 ; fully-qualified     # 🏜️ E0.7 desert
-1F3DC                                      ; unqualified         # 🏜 E0.7 desert
-1F3DD FE0F                                 ; fully-qualified     # 🏝️ E0.7 desert island
-1F3DD                                      ; unqualified         # 🏝 E0.7 desert island
-1F3DE FE0F                                 ; fully-qualified     # 🏞️ E0.7 national park
-1F3DE                                      ; unqualified         # 🏞 E0.7 national park
+1F3D4 FE0F                                             ; fully-qualified     # 🏔️ E0.7 snow-capped mountain
+1F3D4                                                  ; unqualified         # 🏔 E0.7 snow-capped mountain
+26F0 FE0F                                              ; fully-qualified     # ⛰️ E0.7 mountain
+26F0                                                   ; unqualified         # ⛰ E0.7 mountain
+1F30B                                                  ; fully-qualified     # 🌋 E0.6 volcano
+1F5FB                                                  ; fully-qualified     # 🗻 E0.6 mount fuji
+1F3D5 FE0F                                             ; fully-qualified     # 🏕️ E0.7 camping
+1F3D5                                                  ; unqualified         # 🏕 E0.7 camping
+1F3D6 FE0F                                             ; fully-qualified     # 🏖️ E0.7 beach with umbrella
+1F3D6                                                  ; unqualified         # 🏖 E0.7 beach with umbrella
+1F3DC FE0F                                             ; fully-qualified     # 🏜️ E0.7 desert
+1F3DC                                                  ; unqualified         # 🏜 E0.7 desert
+1F3DD FE0F                                             ; fully-qualified     # 🏝️ E0.7 desert island
+1F3DD                                                  ; unqualified         # 🏝 E0.7 desert island
+1F3DE FE0F                                             ; fully-qualified     # 🏞️ E0.7 national park
+1F3DE                                                  ; unqualified         # 🏞 E0.7 national park
 
 # subgroup: place-building
-1F3DF FE0F                                 ; fully-qualified     # 🏟️ E0.7 stadium
-1F3DF                                      ; unqualified         # 🏟 E0.7 stadium
-1F3DB FE0F                                 ; fully-qualified     # 🏛️ E0.7 classical building
-1F3DB                                      ; unqualified         # 🏛 E0.7 classical building
-1F3D7 FE0F                                 ; fully-qualified     # 🏗️ E0.7 building construction
-1F3D7                                      ; unqualified         # 🏗 E0.7 building construction
-1F9F1                                      ; fully-qualified     # 🧱 E11.0 brick
-1FAA8                                      ; fully-qualified     # 🪨 E13.0 rock
-1FAB5                                      ; fully-qualified     # 🪵 E13.0 wood
-1F6D6                                      ; fully-qualified     # 🛖 E13.0 hut
-1F3D8 FE0F                                 ; fully-qualified     # 🏘️ E0.7 houses
-1F3D8                                      ; unqualified         # 🏘 E0.7 houses
-1F3DA FE0F                                 ; fully-qualified     # 🏚️ E0.7 derelict house
-1F3DA                                      ; unqualified         # 🏚 E0.7 derelict house
-1F3E0                                      ; fully-qualified     # 🏠 E0.6 house
-1F3E1                                      ; fully-qualified     # 🏡 E0.6 house with garden
-1F3E2                                      ; fully-qualified     # 🏢 E0.6 office building
-1F3E3                                      ; fully-qualified     # 🏣 E0.6 Japanese post office
-1F3E4                                      ; fully-qualified     # 🏤 E1.0 post office
-1F3E5                                      ; fully-qualified     # 🏥 E0.6 hospital
-1F3E6                                      ; fully-qualified     # 🏦 E0.6 bank
-1F3E8                                      ; fully-qualified     # 🏨 E0.6 hotel
-1F3E9                                      ; fully-qualified     # 🏩 E0.6 love hotel
-1F3EA                                      ; fully-qualified     # 🏪 E0.6 convenience store
-1F3EB                                      ; fully-qualified     # 🏫 E0.6 school
-1F3EC                                      ; fully-qualified     # 🏬 E0.6 department store
-1F3ED                                      ; fully-qualified     # 🏭 E0.6 factory
-1F3EF                                      ; fully-qualified     # 🏯 E0.6 Japanese castle
-1F3F0                                      ; fully-qualified     # 🏰 E0.6 castle
-1F492                                      ; fully-qualified     # 💒 E0.6 wedding
-1F5FC                                      ; fully-qualified     # 🗼 E0.6 Tokyo tower
-1F5FD                                      ; fully-qualified     # 🗽 E0.6 Statue of Liberty
+1F3DF FE0F                                             ; fully-qualified     # 🏟️ E0.7 stadium
+1F3DF                                                  ; unqualified         # 🏟 E0.7 stadium
+1F3DB FE0F                                             ; fully-qualified     # 🏛️ E0.7 classical building
+1F3DB                                                  ; unqualified         # 🏛 E0.7 classical building
+1F3D7 FE0F                                             ; fully-qualified     # 🏗️ E0.7 building construction
+1F3D7                                                  ; unqualified         # 🏗 E0.7 building construction
+1F9F1                                                  ; fully-qualified     # 🧱 E11.0 brick
+1FAA8                                                  ; fully-qualified     # 🪨 E13.0 rock
+1FAB5                                                  ; fully-qualified     # 🪵 E13.0 wood
+1F6D6                                                  ; fully-qualified     # 🛖 E13.0 hut
+1F3D8 FE0F                                             ; fully-qualified     # 🏘️ E0.7 houses
+1F3D8                                                  ; unqualified         # 🏘 E0.7 houses
+1F3DA FE0F                                             ; fully-qualified     # 🏚️ E0.7 derelict house
+1F3DA                                                  ; unqualified         # 🏚 E0.7 derelict house
+1F3E0                                                  ; fully-qualified     # 🏠 E0.6 house
+1F3E1                                                  ; fully-qualified     # 🏡 E0.6 house with garden
+1F3E2                                                  ; fully-qualified     # 🏢 E0.6 office building
+1F3E3                                                  ; fully-qualified     # 🏣 E0.6 Japanese post office
+1F3E4                                                  ; fully-qualified     # 🏤 E1.0 post office
+1F3E5                                                  ; fully-qualified     # 🏥 E0.6 hospital
+1F3E6                                                  ; fully-qualified     # 🏦 E0.6 bank
+1F3E8                                                  ; fully-qualified     # 🏨 E0.6 hotel
+1F3E9                                                  ; fully-qualified     # 🏩 E0.6 love hotel
+1F3EA                                                  ; fully-qualified     # 🏪 E0.6 convenience store
+1F3EB                                                  ; fully-qualified     # 🏫 E0.6 school
+1F3EC                                                  ; fully-qualified     # 🏬 E0.6 department store
+1F3ED                                                  ; fully-qualified     # 🏭 E0.6 factory
+1F3EF                                                  ; fully-qualified     # 🏯 E0.6 Japanese castle
+1F3F0                                                  ; fully-qualified     # 🏰 E0.6 castle
+1F492                                                  ; fully-qualified     # 💒 E0.6 wedding
+1F5FC                                                  ; fully-qualified     # 🗼 E0.6 Tokyo tower
+1F5FD                                                  ; fully-qualified     # 🗽 E0.6 Statue of Liberty
 
 # subgroup: place-religious
-26EA                                       ; fully-qualified     # ⛪ E0.6 church
-1F54C                                      ; fully-qualified     # 🕌 E1.0 mosque
-1F6D5                                      ; fully-qualified     # 🛕 E12.0 hindu temple
-1F54D                                      ; fully-qualified     # 🕍 E1.0 synagogue
-26E9 FE0F                                  ; fully-qualified     # ⛩️ E0.7 shinto shrine
-26E9                                       ; unqualified         # ⛩ E0.7 shinto shrine
-1F54B                                      ; fully-qualified     # 🕋 E1.0 kaaba
+26EA                                                   ; fully-qualified     # ⛪ E0.6 church
+1F54C                                                  ; fully-qualified     # 🕌 E1.0 mosque
+1F6D5                                                  ; fully-qualified     # 🛕 E12.0 hindu temple
+1F54D                                                  ; fully-qualified     # 🕍 E1.0 synagogue
+26E9 FE0F                                              ; fully-qualified     # ⛩️ E0.7 shinto shrine
+26E9                                                   ; unqualified         # ⛩ E0.7 shinto shrine
+1F54B                                                  ; fully-qualified     # 🕋 E1.0 kaaba
 
 # subgroup: place-other
-26F2                                       ; fully-qualified     # ⛲ E0.6 fountain
-26FA                                       ; fully-qualified     # ⛺ E0.6 tent
-1F301                                      ; fully-qualified     # 🌁 E0.6 foggy
-1F303                                      ; fully-qualified     # 🌃 E0.6 night with stars
-1F3D9 FE0F                                 ; fully-qualified     # 🏙️ E0.7 cityscape
-1F3D9                                      ; unqualified         # 🏙 E0.7 cityscape
-1F304                                      ; fully-qualified     # 🌄 E0.6 sunrise over mountains
-1F305                                      ; fully-qualified     # 🌅 E0.6 sunrise
-1F306                                      ; fully-qualified     # 🌆 E0.6 cityscape at dusk
-1F307                                      ; fully-qualified     # 🌇 E0.6 sunset
-1F309                                      ; fully-qualified     # 🌉 E0.6 bridge at night
-2668 FE0F                                  ; fully-qualified     # ♨️ E0.6 hot springs
-2668                                       ; unqualified         # ♨ E0.6 hot springs
-1F3A0                                      ; fully-qualified     # 🎠 E0.6 carousel horse
-1F3A1                                      ; fully-qualified     # 🎡 E0.6 ferris wheel
-1F3A2                                      ; fully-qualified     # 🎢 E0.6 roller coaster
-1F488                                      ; fully-qualified     # 💈 E0.6 barber pole
-1F3AA                                      ; fully-qualified     # 🎪 E0.6 circus tent
+26F2                                                   ; fully-qualified     # ⛲ E0.6 fountain
+26FA                                                   ; fully-qualified     # ⛺ E0.6 tent
+1F301                                                  ; fully-qualified     # 🌁 E0.6 foggy
+1F303                                                  ; fully-qualified     # 🌃 E0.6 night with stars
+1F3D9 FE0F                                             ; fully-qualified     # 🏙️ E0.7 cityscape
+1F3D9                                                  ; unqualified         # 🏙 E0.7 cityscape
+1F304                                                  ; fully-qualified     # 🌄 E0.6 sunrise over mountains
+1F305                                                  ; fully-qualified     # 🌅 E0.6 sunrise
+1F306                                                  ; fully-qualified     # 🌆 E0.6 cityscape at dusk
+1F307                                                  ; fully-qualified     # 🌇 E0.6 sunset
+1F309                                                  ; fully-qualified     # 🌉 E0.6 bridge at night
+2668 FE0F                                              ; fully-qualified     # ♨️ E0.6 hot springs
+2668                                                   ; unqualified         # ♨ E0.6 hot springs
+1F3A0                                                  ; fully-qualified     # 🎠 E0.6 carousel horse
+1F3A1                                                  ; fully-qualified     # 🎡 E0.6 ferris wheel
+1F3A2                                                  ; fully-qualified     # 🎢 E0.6 roller coaster
+1F488                                                  ; fully-qualified     # 💈 E0.6 barber pole
+1F3AA                                                  ; fully-qualified     # 🎪 E0.6 circus tent
 
 # subgroup: transport-ground
-1F682                                      ; fully-qualified     # 🚂 E1.0 locomotive
-1F683                                      ; fully-qualified     # 🚃 E0.6 railway car
-1F684                                      ; fully-qualified     # 🚄 E0.6 high-speed train
-1F685                                      ; fully-qualified     # 🚅 E0.6 bullet train
-1F686                                      ; fully-qualified     # 🚆 E1.0 train
-1F687                                      ; fully-qualified     # 🚇 E0.6 metro
-1F688                                      ; fully-qualified     # 🚈 E1.0 light rail
-1F689                                      ; fully-qualified     # 🚉 E0.6 station
-1F68A                                      ; fully-qualified     # 🚊 E1.0 tram
-1F69D                                      ; fully-qualified     # 🚝 E1.0 monorail
-1F69E                                      ; fully-qualified     # 🚞 E1.0 mountain railway
-1F68B                                      ; fully-qualified     # 🚋 E1.0 tram car
-1F68C                                      ; fully-qualified     # 🚌 E0.6 bus
-1F68D                                      ; fully-qualified     # 🚍 E0.7 oncoming bus
-1F68E                                      ; fully-qualified     # 🚎 E1.0 trolleybus
-1F690                                      ; fully-qualified     # 🚐 E1.0 minibus
-1F691                                      ; fully-qualified     # 🚑 E0.6 ambulance
-1F692                                      ; fully-qualified     # 🚒 E0.6 fire engine
-1F693                                      ; fully-qualified     # 🚓 E0.6 police car
-1F694                                      ; fully-qualified     # 🚔 E0.7 oncoming police car
-1F695                                      ; fully-qualified     # 🚕 E0.6 taxi
-1F696                                      ; fully-qualified     # 🚖 E1.0 oncoming taxi
-1F697                                      ; fully-qualified     # 🚗 E0.6 automobile
-1F698                                      ; fully-qualified     # 🚘 E0.7 oncoming automobile
-1F699                                      ; fully-qualified     # 🚙 E0.6 sport utility vehicle
-1F6FB                                      ; fully-qualified     # 🛻 E13.0 pickup truck
-1F69A                                      ; fully-qualified     # 🚚 E0.6 delivery truck
-1F69B                                      ; fully-qualified     # 🚛 E1.0 articulated lorry
-1F69C                                      ; fully-qualified     # 🚜 E1.0 tractor
-1F3CE FE0F                                 ; fully-qualified     # 🏎️ E0.7 racing car
-1F3CE                                      ; unqualified         # 🏎 E0.7 racing car
-1F3CD FE0F                                 ; fully-qualified     # 🏍️ E0.7 motorcycle
-1F3CD                                      ; unqualified         # 🏍 E0.7 motorcycle
-1F6F5                                      ; fully-qualified     # 🛵 E3.0 motor scooter
-1F9BD                                      ; fully-qualified     # 🦽 E12.0 manual wheelchair
-1F9BC                                      ; fully-qualified     # 🦼 E12.0 motorized wheelchair
-1F6FA                                      ; fully-qualified     # 🛺 E12.0 auto rickshaw
-1F6B2                                      ; fully-qualified     # 🚲 E0.6 bicycle
-1F6F4                                      ; fully-qualified     # 🛴 E3.0 kick scooter
-1F6F9                                      ; fully-qualified     # 🛹 E11.0 skateboard
-1F6FC                                      ; fully-qualified     # 🛼 E13.0 roller skate
-1F68F                                      ; fully-qualified     # 🚏 E0.6 bus stop
-1F6E3 FE0F                                 ; fully-qualified     # 🛣️ E0.7 motorway
-1F6E3                                      ; unqualified         # 🛣 E0.7 motorway
-1F6E4 FE0F                                 ; fully-qualified     # 🛤️ E0.7 railway track
-1F6E4                                      ; unqualified         # 🛤 E0.7 railway track
-1F6E2 FE0F                                 ; fully-qualified     # 🛢️ E0.7 oil drum
-1F6E2                                      ; unqualified         # 🛢 E0.7 oil drum
-26FD                                       ; fully-qualified     # ⛽ E0.6 fuel pump
-1F6A8                                      ; fully-qualified     # 🚨 E0.6 police car light
-1F6A5                                      ; fully-qualified     # 🚥 E0.6 horizontal traffic light
-1F6A6                                      ; fully-qualified     # 🚦 E1.0 vertical traffic light
-1F6D1                                      ; fully-qualified     # 🛑 E3.0 stop sign
-1F6A7                                      ; fully-qualified     # 🚧 E0.6 construction
+1F682                                                  ; fully-qualified     # 🚂 E1.0 locomotive
+1F683                                                  ; fully-qualified     # 🚃 E0.6 railway car
+1F684                                                  ; fully-qualified     # 🚄 E0.6 high-speed train
+1F685                                                  ; fully-qualified     # 🚅 E0.6 bullet train
+1F686                                                  ; fully-qualified     # 🚆 E1.0 train
+1F687                                                  ; fully-qualified     # 🚇 E0.6 metro
+1F688                                                  ; fully-qualified     # 🚈 E1.0 light rail
+1F689                                                  ; fully-qualified     # 🚉 E0.6 station
+1F68A                                                  ; fully-qualified     # 🚊 E1.0 tram
+1F69D                                                  ; fully-qualified     # 🚝 E1.0 monorail
+1F69E                                                  ; fully-qualified     # 🚞 E1.0 mountain railway
+1F68B                                                  ; fully-qualified     # 🚋 E1.0 tram car
+1F68C                                                  ; fully-qualified     # 🚌 E0.6 bus
+1F68D                                                  ; fully-qualified     # 🚍 E0.7 oncoming bus
+1F68E                                                  ; fully-qualified     # 🚎 E1.0 trolleybus
+1F690                                                  ; fully-qualified     # 🚐 E1.0 minibus
+1F691                                                  ; fully-qualified     # 🚑 E0.6 ambulance
+1F692                                                  ; fully-qualified     # 🚒 E0.6 fire engine
+1F693                                                  ; fully-qualified     # 🚓 E0.6 police car
+1F694                                                  ; fully-qualified     # 🚔 E0.7 oncoming police car
+1F695                                                  ; fully-qualified     # 🚕 E0.6 taxi
+1F696                                                  ; fully-qualified     # 🚖 E1.0 oncoming taxi
+1F697                                                  ; fully-qualified     # 🚗 E0.6 automobile
+1F698                                                  ; fully-qualified     # 🚘 E0.7 oncoming automobile
+1F699                                                  ; fully-qualified     # 🚙 E0.6 sport utility vehicle
+1F6FB                                                  ; fully-qualified     # 🛻 E13.0 pickup truck
+1F69A                                                  ; fully-qualified     # 🚚 E0.6 delivery truck
+1F69B                                                  ; fully-qualified     # 🚛 E1.0 articulated lorry
+1F69C                                                  ; fully-qualified     # 🚜 E1.0 tractor
+1F3CE FE0F                                             ; fully-qualified     # 🏎️ E0.7 racing car
+1F3CE                                                  ; unqualified         # 🏎 E0.7 racing car
+1F3CD FE0F                                             ; fully-qualified     # 🏍️ E0.7 motorcycle
+1F3CD                                                  ; unqualified         # 🏍 E0.7 motorcycle
+1F6F5                                                  ; fully-qualified     # 🛵 E3.0 motor scooter
+1F9BD                                                  ; fully-qualified     # 🦽 E12.0 manual wheelchair
+1F9BC                                                  ; fully-qualified     # 🦼 E12.0 motorized wheelchair
+1F6FA                                                  ; fully-qualified     # 🛺 E12.0 auto rickshaw
+1F6B2                                                  ; fully-qualified     # 🚲 E0.6 bicycle
+1F6F4                                                  ; fully-qualified     # 🛴 E3.0 kick scooter
+1F6F9                                                  ; fully-qualified     # 🛹 E11.0 skateboard
+1F6FC                                                  ; fully-qualified     # 🛼 E13.0 roller skate
+1F68F                                                  ; fully-qualified     # 🚏 E0.6 bus stop
+1F6E3 FE0F                                             ; fully-qualified     # 🛣️ E0.7 motorway
+1F6E3                                                  ; unqualified         # 🛣 E0.7 motorway
+1F6E4 FE0F                                             ; fully-qualified     # 🛤️ E0.7 railway track
+1F6E4                                                  ; unqualified         # 🛤 E0.7 railway track
+1F6E2 FE0F                                             ; fully-qualified     # 🛢️ E0.7 oil drum
+1F6E2                                                  ; unqualified         # 🛢 E0.7 oil drum
+26FD                                                   ; fully-qualified     # ⛽ E0.6 fuel pump
+1F6A8                                                  ; fully-qualified     # 🚨 E0.6 police car light
+1F6A5                                                  ; fully-qualified     # 🚥 E0.6 horizontal traffic light
+1F6A6                                                  ; fully-qualified     # 🚦 E1.0 vertical traffic light
+1F6D1                                                  ; fully-qualified     # 🛑 E3.0 stop sign
+1F6A7                                                  ; fully-qualified     # 🚧 E0.6 construction
 
 # subgroup: transport-water
-2693                                       ; fully-qualified     # ⚓ E0.6 anchor
-26F5                                       ; fully-qualified     # ⛵ E0.6 sailboat
-1F6F6                                      ; fully-qualified     # 🛶 E3.0 canoe
-1F6A4                                      ; fully-qualified     # 🚤 E0.6 speedboat
-1F6F3 FE0F                                 ; fully-qualified     # 🛳️ E0.7 passenger ship
-1F6F3                                      ; unqualified         # 🛳 E0.7 passenger ship
-26F4 FE0F                                  ; fully-qualified     # ⛴️ E0.7 ferry
-26F4                                       ; unqualified         # ⛴ E0.7 ferry
-1F6E5 FE0F                                 ; fully-qualified     # 🛥️ E0.7 motor boat
-1F6E5                                      ; unqualified         # 🛥 E0.7 motor boat
-1F6A2                                      ; fully-qualified     # 🚢 E0.6 ship
+2693                                                   ; fully-qualified     # ⚓ E0.6 anchor
+26F5                                                   ; fully-qualified     # ⛵ E0.6 sailboat
+1F6F6                                                  ; fully-qualified     # 🛶 E3.0 canoe
+1F6A4                                                  ; fully-qualified     # 🚤 E0.6 speedboat
+1F6F3 FE0F                                             ; fully-qualified     # 🛳️ E0.7 passenger ship
+1F6F3                                                  ; unqualified         # 🛳 E0.7 passenger ship
+26F4 FE0F                                              ; fully-qualified     # ⛴️ E0.7 ferry
+26F4                                                   ; unqualified         # ⛴ E0.7 ferry
+1F6E5 FE0F                                             ; fully-qualified     # 🛥️ E0.7 motor boat
+1F6E5                                                  ; unqualified         # 🛥 E0.7 motor boat
+1F6A2                                                  ; fully-qualified     # 🚢 E0.6 ship
 
 # subgroup: transport-air
-2708 FE0F                                  ; fully-qualified     # ✈️ E0.6 airplane
-2708                                       ; unqualified         # ✈ E0.6 airplane
-1F6E9 FE0F                                 ; fully-qualified     # 🛩️ E0.7 small airplane
-1F6E9                                      ; unqualified         # 🛩 E0.7 small airplane
-1F6EB                                      ; fully-qualified     # 🛫 E1.0 airplane departure
-1F6EC                                      ; fully-qualified     # 🛬 E1.0 airplane arrival
-1FA82                                      ; fully-qualified     # 🪂 E12.0 parachute
-1F4BA                                      ; fully-qualified     # 💺 E0.6 seat
-1F681                                      ; fully-qualified     # 🚁 E1.0 helicopter
-1F69F                                      ; fully-qualified     # 🚟 E1.0 suspension railway
-1F6A0                                      ; fully-qualified     # 🚠 E1.0 mountain cableway
-1F6A1                                      ; fully-qualified     # 🚡 E1.0 aerial tramway
-1F6F0 FE0F                                 ; fully-qualified     # 🛰️ E0.7 satellite
-1F6F0                                      ; unqualified         # 🛰 E0.7 satellite
-1F680                                      ; fully-qualified     # 🚀 E0.6 rocket
-1F6F8                                      ; fully-qualified     # 🛸 E5.0 flying saucer
+2708 FE0F                                              ; fully-qualified     # ✈️ E0.6 airplane
+2708                                                   ; unqualified         # ✈ E0.6 airplane
+1F6E9 FE0F                                             ; fully-qualified     # 🛩️ E0.7 small airplane
+1F6E9                                                  ; unqualified         # 🛩 E0.7 small airplane
+1F6EB                                                  ; fully-qualified     # 🛫 E1.0 airplane departure
+1F6EC                                                  ; fully-qualified     # 🛬 E1.0 airplane arrival
+1FA82                                                  ; fully-qualified     # 🪂 E12.0 parachute
+1F4BA                                                  ; fully-qualified     # 💺 E0.6 seat
+1F681                                                  ; fully-qualified     # 🚁 E1.0 helicopter
+1F69F                                                  ; fully-qualified     # 🚟 E1.0 suspension railway
+1F6A0                                                  ; fully-qualified     # 🚠 E1.0 mountain cableway
+1F6A1                                                  ; fully-qualified     # 🚡 E1.0 aerial tramway
+1F6F0 FE0F                                             ; fully-qualified     # 🛰️ E0.7 satellite
+1F6F0                                                  ; unqualified         # 🛰 E0.7 satellite
+1F680                                                  ; fully-qualified     # 🚀 E0.6 rocket
+1F6F8                                                  ; fully-qualified     # 🛸 E5.0 flying saucer
 
 # subgroup: hotel
-1F6CE FE0F                                 ; fully-qualified     # 🛎️ E0.7 bellhop bell
-1F6CE                                      ; unqualified         # 🛎 E0.7 bellhop bell
-1F9F3                                      ; fully-qualified     # 🧳 E11.0 luggage
+1F6CE FE0F                                             ; fully-qualified     # 🛎️ E0.7 bellhop bell
+1F6CE                                                  ; unqualified         # 🛎 E0.7 bellhop bell
+1F9F3                                                  ; fully-qualified     # 🧳 E11.0 luggage
 
 # subgroup: time
-231B                                       ; fully-qualified     # ⌛ E0.6 hourglass done
-23F3                                       ; fully-qualified     # ⏳ E0.6 hourglass not done
-231A                                       ; fully-qualified     # ⌚ E0.6 watch
-23F0                                       ; fully-qualified     # ⏰ E0.6 alarm clock
-23F1 FE0F                                  ; fully-qualified     # ⏱️ E1.0 stopwatch
-23F1                                       ; unqualified         # ⏱ E1.0 stopwatch
-23F2 FE0F                                  ; fully-qualified     # ⏲️ E1.0 timer clock
-23F2                                       ; unqualified         # ⏲ E1.0 timer clock
-1F570 FE0F                                 ; fully-qualified     # 🕰️ E0.7 mantelpiece clock
-1F570                                      ; unqualified         # 🕰 E0.7 mantelpiece clock
-1F55B                                      ; fully-qualified     # 🕛 E0.6 twelve o’clock
-1F567                                      ; fully-qualified     # 🕧 E0.7 twelve-thirty
-1F550                                      ; fully-qualified     # 🕐 E0.6 one o’clock
-1F55C                                      ; fully-qualified     # 🕜 E0.7 one-thirty
-1F551                                      ; fully-qualified     # 🕑 E0.6 two o’clock
-1F55D                                      ; fully-qualified     # 🕝 E0.7 two-thirty
-1F552                                      ; fully-qualified     # 🕒 E0.6 three o’clock
-1F55E                                      ; fully-qualified     # 🕞 E0.7 three-thirty
-1F553                                      ; fully-qualified     # 🕓 E0.6 four o’clock
-1F55F                                      ; fully-qualified     # 🕟 E0.7 four-thirty
-1F554                                      ; fully-qualified     # 🕔 E0.6 five o’clock
-1F560                                      ; fully-qualified     # 🕠 E0.7 five-thirty
-1F555                                      ; fully-qualified     # 🕕 E0.6 six o’clock
-1F561                                      ; fully-qualified     # 🕡 E0.7 six-thirty
-1F556                                      ; fully-qualified     # 🕖 E0.6 seven o’clock
-1F562                                      ; fully-qualified     # 🕢 E0.7 seven-thirty
-1F557                                      ; fully-qualified     # 🕗 E0.6 eight o’clock
-1F563                                      ; fully-qualified     # 🕣 E0.7 eight-thirty
-1F558                                      ; fully-qualified     # 🕘 E0.6 nine o’clock
-1F564                                      ; fully-qualified     # 🕤 E0.7 nine-thirty
-1F559                                      ; fully-qualified     # 🕙 E0.6 ten o’clock
-1F565                                      ; fully-qualified     # 🕥 E0.7 ten-thirty
-1F55A                                      ; fully-qualified     # 🕚 E0.6 eleven o’clock
-1F566                                      ; fully-qualified     # 🕦 E0.7 eleven-thirty
+231B                                                   ; fully-qualified     # ⌛ E0.6 hourglass done
+23F3                                                   ; fully-qualified     # ⏳ E0.6 hourglass not done
+231A                                                   ; fully-qualified     # ⌚ E0.6 watch
+23F0                                                   ; fully-qualified     # ⏰ E0.6 alarm clock
+23F1 FE0F                                              ; fully-qualified     # ⏱️ E1.0 stopwatch
+23F1                                                   ; unqualified         # ⏱ E1.0 stopwatch
+23F2 FE0F                                              ; fully-qualified     # ⏲️ E1.0 timer clock
+23F2                                                   ; unqualified         # ⏲ E1.0 timer clock
+1F570 FE0F                                             ; fully-qualified     # 🕰️ E0.7 mantelpiece clock
+1F570                                                  ; unqualified         # 🕰 E0.7 mantelpiece clock
+1F55B                                                  ; fully-qualified     # 🕛 E0.6 twelve o’clock
+1F567                                                  ; fully-qualified     # 🕧 E0.7 twelve-thirty
+1F550                                                  ; fully-qualified     # 🕐 E0.6 one o’clock
+1F55C                                                  ; fully-qualified     # 🕜 E0.7 one-thirty
+1F551                                                  ; fully-qualified     # 🕑 E0.6 two o’clock
+1F55D                                                  ; fully-qualified     # 🕝 E0.7 two-thirty
+1F552                                                  ; fully-qualified     # 🕒 E0.6 three o’clock
+1F55E                                                  ; fully-qualified     # 🕞 E0.7 three-thirty
+1F553                                                  ; fully-qualified     # 🕓 E0.6 four o’clock
+1F55F                                                  ; fully-qualified     # 🕟 E0.7 four-thirty
+1F554                                                  ; fully-qualified     # 🕔 E0.6 five o’clock
+1F560                                                  ; fully-qualified     # 🕠 E0.7 five-thirty
+1F555                                                  ; fully-qualified     # 🕕 E0.6 six o’clock
+1F561                                                  ; fully-qualified     # 🕡 E0.7 six-thirty
+1F556                                                  ; fully-qualified     # 🕖 E0.6 seven o’clock
+1F562                                                  ; fully-qualified     # 🕢 E0.7 seven-thirty
+1F557                                                  ; fully-qualified     # 🕗 E0.6 eight o’clock
+1F563                                                  ; fully-qualified     # 🕣 E0.7 eight-thirty
+1F558                                                  ; fully-qualified     # 🕘 E0.6 nine o’clock
+1F564                                                  ; fully-qualified     # 🕤 E0.7 nine-thirty
+1F559                                                  ; fully-qualified     # 🕙 E0.6 ten o’clock
+1F565                                                  ; fully-qualified     # 🕥 E0.7 ten-thirty
+1F55A                                                  ; fully-qualified     # 🕚 E0.6 eleven o’clock
+1F566                                                  ; fully-qualified     # 🕦 E0.7 eleven-thirty
 
 # subgroup: sky & weather
-1F311                                      ; fully-qualified     # 🌑 E0.6 new moon
-1F312                                      ; fully-qualified     # 🌒 E1.0 waxing crescent moon
-1F313                                      ; fully-qualified     # 🌓 E0.6 first quarter moon
-1F314                                      ; fully-qualified     # 🌔 E0.6 waxing gibbous moon
-1F315                                      ; fully-qualified     # 🌕 E0.6 full moon
-1F316                                      ; fully-qualified     # 🌖 E1.0 waning gibbous moon
-1F317                                      ; fully-qualified     # 🌗 E1.0 last quarter moon
-1F318                                      ; fully-qualified     # 🌘 E1.0 waning crescent moon
-1F319                                      ; fully-qualified     # 🌙 E0.6 crescent moon
-1F31A                                      ; fully-qualified     # 🌚 E1.0 new moon face
-1F31B                                      ; fully-qualified     # 🌛 E0.6 first quarter moon face
-1F31C                                      ; fully-qualified     # 🌜 E0.7 last quarter moon face
-1F321 FE0F                                 ; fully-qualified     # 🌡️ E0.7 thermometer
-1F321                                      ; unqualified         # 🌡 E0.7 thermometer
-2600 FE0F                                  ; fully-qualified     # ☀️ E0.6 sun
-2600                                       ; unqualified         # ☀ E0.6 sun
-1F31D                                      ; fully-qualified     # 🌝 E1.0 full moon face
-1F31E                                      ; fully-qualified     # 🌞 E1.0 sun with face
-1FA90                                      ; fully-qualified     # 🪐 E12.0 ringed planet
-2B50                                       ; fully-qualified     # ⭐ E0.6 star
-1F31F                                      ; fully-qualified     # 🌟 E0.6 glowing star
-1F320                                      ; fully-qualified     # 🌠 E0.6 shooting star
-1F30C                                      ; fully-qualified     # 🌌 E0.6 milky way
-2601 FE0F                                  ; fully-qualified     # ☁️ E0.6 cloud
-2601                                       ; unqualified         # ☁ E0.6 cloud
-26C5                                       ; fully-qualified     # ⛅ E0.6 sun behind cloud
-26C8 FE0F                                  ; fully-qualified     # ⛈️ E0.7 cloud with lightning and rain
-26C8                                       ; unqualified         # ⛈ E0.7 cloud with lightning and rain
-1F324 FE0F                                 ; fully-qualified     # 🌤️ E0.7 sun behind small cloud
-1F324                                      ; unqualified         # 🌤 E0.7 sun behind small cloud
-1F325 FE0F                                 ; fully-qualified     # 🌥️ E0.7 sun behind large cloud
-1F325                                      ; unqualified         # 🌥 E0.7 sun behind large cloud
-1F326 FE0F                                 ; fully-qualified     # 🌦️ E0.7 sun behind rain cloud
-1F326                                      ; unqualified         # 🌦 E0.7 sun behind rain cloud
-1F327 FE0F                                 ; fully-qualified     # 🌧️ E0.7 cloud with rain
-1F327                                      ; unqualified         # 🌧 E0.7 cloud with rain
-1F328 FE0F                                 ; fully-qualified     # 🌨️ E0.7 cloud with snow
-1F328                                      ; unqualified         # 🌨 E0.7 cloud with snow
-1F329 FE0F                                 ; fully-qualified     # 🌩️ E0.7 cloud with lightning
-1F329                                      ; unqualified         # 🌩 E0.7 cloud with lightning
-1F32A FE0F                                 ; fully-qualified     # 🌪️ E0.7 tornado
-1F32A                                      ; unqualified         # 🌪 E0.7 tornado
-1F32B FE0F                                 ; fully-qualified     # 🌫️ E0.7 fog
-1F32B                                      ; unqualified         # 🌫 E0.7 fog
-1F32C FE0F                                 ; fully-qualified     # 🌬️ E0.7 wind face
-1F32C                                      ; unqualified         # 🌬 E0.7 wind face
-1F300                                      ; fully-qualified     # 🌀 E0.6 cyclone
-1F308                                      ; fully-qualified     # 🌈 E0.6 rainbow
-1F302                                      ; fully-qualified     # 🌂 E0.6 closed umbrella
-2602 FE0F                                  ; fully-qualified     # ☂️ E0.7 umbrella
-2602                                       ; unqualified         # ☂ E0.7 umbrella
-2614                                       ; fully-qualified     # ☔ E0.6 umbrella with rain drops
-26F1 FE0F                                  ; fully-qualified     # ⛱️ E0.7 umbrella on ground
-26F1                                       ; unqualified         # ⛱ E0.7 umbrella on ground
-26A1                                       ; fully-qualified     # ⚡ E0.6 high voltage
-2744 FE0F                                  ; fully-qualified     # ❄️ E0.6 snowflake
-2744                                       ; unqualified         # ❄ E0.6 snowflake
-2603 FE0F                                  ; fully-qualified     # ☃️ E0.7 snowman
-2603                                       ; unqualified         # ☃ E0.7 snowman
-26C4                                       ; fully-qualified     # ⛄ E0.6 snowman without snow
-2604 FE0F                                  ; fully-qualified     # ☄️ E1.0 comet
-2604                                       ; unqualified         # ☄ E1.0 comet
-1F525                                      ; fully-qualified     # 🔥 E0.6 fire
-1F4A7                                      ; fully-qualified     # 💧 E0.6 droplet
-1F30A                                      ; fully-qualified     # 🌊 E0.6 water wave
+1F311                                                  ; fully-qualified     # 🌑 E0.6 new moon
+1F312                                                  ; fully-qualified     # 🌒 E1.0 waxing crescent moon
+1F313                                                  ; fully-qualified     # 🌓 E0.6 first quarter moon
+1F314                                                  ; fully-qualified     # 🌔 E0.6 waxing gibbous moon
+1F315                                                  ; fully-qualified     # 🌕 E0.6 full moon
+1F316                                                  ; fully-qualified     # 🌖 E1.0 waning gibbous moon
+1F317                                                  ; fully-qualified     # 🌗 E1.0 last quarter moon
+1F318                                                  ; fully-qualified     # 🌘 E1.0 waning crescent moon
+1F319                                                  ; fully-qualified     # 🌙 E0.6 crescent moon
+1F31A                                                  ; fully-qualified     # 🌚 E1.0 new moon face
+1F31B                                                  ; fully-qualified     # 🌛 E0.6 first quarter moon face
+1F31C                                                  ; fully-qualified     # 🌜 E0.7 last quarter moon face
+1F321 FE0F                                             ; fully-qualified     # 🌡️ E0.7 thermometer
+1F321                                                  ; unqualified         # 🌡 E0.7 thermometer
+2600 FE0F                                              ; fully-qualified     # ☀️ E0.6 sun
+2600                                                   ; unqualified         # ☀ E0.6 sun
+1F31D                                                  ; fully-qualified     # 🌝 E1.0 full moon face
+1F31E                                                  ; fully-qualified     # 🌞 E1.0 sun with face
+1FA90                                                  ; fully-qualified     # 🪐 E12.0 ringed planet
+2B50                                                   ; fully-qualified     # ⭐ E0.6 star
+1F31F                                                  ; fully-qualified     # 🌟 E0.6 glowing star
+1F320                                                  ; fully-qualified     # 🌠 E0.6 shooting star
+1F30C                                                  ; fully-qualified     # 🌌 E0.6 milky way
+2601 FE0F                                              ; fully-qualified     # ☁️ E0.6 cloud
+2601                                                   ; unqualified         # ☁ E0.6 cloud
+26C5                                                   ; fully-qualified     # ⛅ E0.6 sun behind cloud
+26C8 FE0F                                              ; fully-qualified     # ⛈️ E0.7 cloud with lightning and rain
+26C8                                                   ; unqualified         # ⛈ E0.7 cloud with lightning and rain
+1F324 FE0F                                             ; fully-qualified     # 🌤️ E0.7 sun behind small cloud
+1F324                                                  ; unqualified         # 🌤 E0.7 sun behind small cloud
+1F325 FE0F                                             ; fully-qualified     # 🌥️ E0.7 sun behind large cloud
+1F325                                                  ; unqualified         # 🌥 E0.7 sun behind large cloud
+1F326 FE0F                                             ; fully-qualified     # 🌦️ E0.7 sun behind rain cloud
+1F326                                                  ; unqualified         # 🌦 E0.7 sun behind rain cloud
+1F327 FE0F                                             ; fully-qualified     # 🌧️ E0.7 cloud with rain
+1F327                                                  ; unqualified         # 🌧 E0.7 cloud with rain
+1F328 FE0F                                             ; fully-qualified     # 🌨️ E0.7 cloud with snow
+1F328                                                  ; unqualified         # 🌨 E0.7 cloud with snow
+1F329 FE0F                                             ; fully-qualified     # 🌩️ E0.7 cloud with lightning
+1F329                                                  ; unqualified         # 🌩 E0.7 cloud with lightning
+1F32A FE0F                                             ; fully-qualified     # 🌪️ E0.7 tornado
+1F32A                                                  ; unqualified         # 🌪 E0.7 tornado
+1F32B FE0F                                             ; fully-qualified     # 🌫️ E0.7 fog
+1F32B                                                  ; unqualified         # 🌫 E0.7 fog
+1F32C FE0F                                             ; fully-qualified     # 🌬️ E0.7 wind face
+1F32C                                                  ; unqualified         # 🌬 E0.7 wind face
+1F300                                                  ; fully-qualified     # 🌀 E0.6 cyclone
+1F308                                                  ; fully-qualified     # 🌈 E0.6 rainbow
+1F302                                                  ; fully-qualified     # 🌂 E0.6 closed umbrella
+2602 FE0F                                              ; fully-qualified     # ☂️ E0.7 umbrella
+2602                                                   ; unqualified         # ☂ E0.7 umbrella
+2614                                                   ; fully-qualified     # ☔ E0.6 umbrella with rain drops
+26F1 FE0F                                              ; fully-qualified     # ⛱️ E0.7 umbrella on ground
+26F1                                                   ; unqualified         # ⛱ E0.7 umbrella on ground
+26A1                                                   ; fully-qualified     # ⚡ E0.6 high voltage
+2744 FE0F                                              ; fully-qualified     # ❄️ E0.6 snowflake
+2744                                                   ; unqualified         # ❄ E0.6 snowflake
+2603 FE0F                                              ; fully-qualified     # ☃️ E0.7 snowman
+2603                                                   ; unqualified         # ☃ E0.7 snowman
+26C4                                                   ; fully-qualified     # ⛄ E0.6 snowman without snow
+2604 FE0F                                              ; fully-qualified     # ☄️ E1.0 comet
+2604                                                   ; unqualified         # ☄ E1.0 comet
+1F525                                                  ; fully-qualified     # 🔥 E0.6 fire
+1F4A7                                                  ; fully-qualified     # 💧 E0.6 droplet
+1F30A                                                  ; fully-qualified     # 🌊 E0.6 water wave
 
 # Travel & Places subtotal:		264
 # Travel & Places subtotal:		264	w/o modifiers
@@ -3381,109 +3803,109 @@
 # group: Activities
 
 # subgroup: event
-1F383                                      ; fully-qualified     # 🎃 E0.6 jack-o-lantern
-1F384                                      ; fully-qualified     # 🎄 E0.6 Christmas tree
-1F386                                      ; fully-qualified     # 🎆 E0.6 fireworks
-1F387                                      ; fully-qualified     # 🎇 E0.6 sparkler
-1F9E8                                      ; fully-qualified     # 🧨 E11.0 firecracker
-2728                                       ; fully-qualified     # ✨ E0.6 sparkles
-1F388                                      ; fully-qualified     # 🎈 E0.6 balloon
-1F389                                      ; fully-qualified     # 🎉 E0.6 party popper
-1F38A                                      ; fully-qualified     # 🎊 E0.6 confetti ball
-1F38B                                      ; fully-qualified     # 🎋 E0.6 tanabata tree
-1F38D                                      ; fully-qualified     # 🎍 E0.6 pine decoration
-1F38E                                      ; fully-qualified     # 🎎 E0.6 Japanese dolls
-1F38F                                      ; fully-qualified     # 🎏 E0.6 carp streamer
-1F390                                      ; fully-qualified     # 🎐 E0.6 wind chime
-1F391                                      ; fully-qualified     # 🎑 E0.6 moon viewing ceremony
-1F9E7                                      ; fully-qualified     # 🧧 E11.0 red envelope
-1F380                                      ; fully-qualified     # 🎀 E0.6 ribbon
-1F381                                      ; fully-qualified     # 🎁 E0.6 wrapped gift
-1F397 FE0F                                 ; fully-qualified     # 🎗️ E0.7 reminder ribbon
-1F397                                      ; unqualified         # 🎗 E0.7 reminder ribbon
-1F39F FE0F                                 ; fully-qualified     # 🎟️ E0.7 admission tickets
-1F39F                                      ; unqualified         # 🎟 E0.7 admission tickets
-1F3AB                                      ; fully-qualified     # 🎫 E0.6 ticket
+1F383                                                  ; fully-qualified     # 🎃 E0.6 jack-o-lantern
+1F384                                                  ; fully-qualified     # 🎄 E0.6 Christmas tree
+1F386                                                  ; fully-qualified     # 🎆 E0.6 fireworks
+1F387                                                  ; fully-qualified     # 🎇 E0.6 sparkler
+1F9E8                                                  ; fully-qualified     # 🧨 E11.0 firecracker
+2728                                                   ; fully-qualified     # ✨ E0.6 sparkles
+1F388                                                  ; fully-qualified     # 🎈 E0.6 balloon
+1F389                                                  ; fully-qualified     # 🎉 E0.6 party popper
+1F38A                                                  ; fully-qualified     # 🎊 E0.6 confetti ball
+1F38B                                                  ; fully-qualified     # 🎋 E0.6 tanabata tree
+1F38D                                                  ; fully-qualified     # 🎍 E0.6 pine decoration
+1F38E                                                  ; fully-qualified     # 🎎 E0.6 Japanese dolls
+1F38F                                                  ; fully-qualified     # 🎏 E0.6 carp streamer
+1F390                                                  ; fully-qualified     # 🎐 E0.6 wind chime
+1F391                                                  ; fully-qualified     # 🎑 E0.6 moon viewing ceremony
+1F9E7                                                  ; fully-qualified     # 🧧 E11.0 red envelope
+1F380                                                  ; fully-qualified     # 🎀 E0.6 ribbon
+1F381                                                  ; fully-qualified     # 🎁 E0.6 wrapped gift
+1F397 FE0F                                             ; fully-qualified     # 🎗️ E0.7 reminder ribbon
+1F397                                                  ; unqualified         # 🎗 E0.7 reminder ribbon
+1F39F FE0F                                             ; fully-qualified     # 🎟️ E0.7 admission tickets
+1F39F                                                  ; unqualified         # 🎟 E0.7 admission tickets
+1F3AB                                                  ; fully-qualified     # 🎫 E0.6 ticket
 
 # subgroup: award-medal
-1F396 FE0F                                 ; fully-qualified     # 🎖️ E0.7 military medal
-1F396                                      ; unqualified         # 🎖 E0.7 military medal
-1F3C6                                      ; fully-qualified     # 🏆 E0.6 trophy
-1F3C5                                      ; fully-qualified     # 🏅 E1.0 sports medal
-1F947                                      ; fully-qualified     # 🥇 E3.0 1st place medal
-1F948                                      ; fully-qualified     # 🥈 E3.0 2nd place medal
-1F949                                      ; fully-qualified     # 🥉 E3.0 3rd place medal
+1F396 FE0F                                             ; fully-qualified     # 🎖️ E0.7 military medal
+1F396                                                  ; unqualified         # 🎖 E0.7 military medal
+1F3C6                                                  ; fully-qualified     # 🏆 E0.6 trophy
+1F3C5                                                  ; fully-qualified     # 🏅 E1.0 sports medal
+1F947                                                  ; fully-qualified     # 🥇 E3.0 1st place medal
+1F948                                                  ; fully-qualified     # 🥈 E3.0 2nd place medal
+1F949                                                  ; fully-qualified     # 🥉 E3.0 3rd place medal
 
 # subgroup: sport
-26BD                                       ; fully-qualified     # ⚽ E0.6 soccer ball
-26BE                                       ; fully-qualified     # ⚾ E0.6 baseball
-1F94E                                      ; fully-qualified     # 🥎 E11.0 softball
-1F3C0                                      ; fully-qualified     # 🏀 E0.6 basketball
-1F3D0                                      ; fully-qualified     # 🏐 E1.0 volleyball
-1F3C8                                      ; fully-qualified     # 🏈 E0.6 american football
-1F3C9                                      ; fully-qualified     # 🏉 E1.0 rugby football
-1F3BE                                      ; fully-qualified     # 🎾 E0.6 tennis
-1F94F                                      ; fully-qualified     # 🥏 E11.0 flying disc
-1F3B3                                      ; fully-qualified     # 🎳 E0.6 bowling
-1F3CF                                      ; fully-qualified     # 🏏 E1.0 cricket game
-1F3D1                                      ; fully-qualified     # 🏑 E1.0 field hockey
-1F3D2                                      ; fully-qualified     # 🏒 E1.0 ice hockey
-1F94D                                      ; fully-qualified     # 🥍 E11.0 lacrosse
-1F3D3                                      ; fully-qualified     # 🏓 E1.0 ping pong
-1F3F8                                      ; fully-qualified     # 🏸 E1.0 badminton
-1F94A                                      ; fully-qualified     # 🥊 E3.0 boxing glove
-1F94B                                      ; fully-qualified     # 🥋 E3.0 martial arts uniform
-1F945                                      ; fully-qualified     # 🥅 E3.0 goal net
-26F3                                       ; fully-qualified     # ⛳ E0.6 flag in hole
-26F8 FE0F                                  ; fully-qualified     # ⛸️ E0.7 ice skate
-26F8                                       ; unqualified         # ⛸ E0.7 ice skate
-1F3A3                                      ; fully-qualified     # 🎣 E0.6 fishing pole
-1F93F                                      ; fully-qualified     # 🤿 E12.0 diving mask
-1F3BD                                      ; fully-qualified     # 🎽 E0.6 running shirt
-1F3BF                                      ; fully-qualified     # 🎿 E0.6 skis
-1F6F7                                      ; fully-qualified     # 🛷 E5.0 sled
-1F94C                                      ; fully-qualified     # 🥌 E5.0 curling stone
+26BD                                                   ; fully-qualified     # ⚽ E0.6 soccer ball
+26BE                                                   ; fully-qualified     # ⚾ E0.6 baseball
+1F94E                                                  ; fully-qualified     # 🥎 E11.0 softball
+1F3C0                                                  ; fully-qualified     # 🏀 E0.6 basketball
+1F3D0                                                  ; fully-qualified     # 🏐 E1.0 volleyball
+1F3C8                                                  ; fully-qualified     # 🏈 E0.6 american football
+1F3C9                                                  ; fully-qualified     # 🏉 E1.0 rugby football
+1F3BE                                                  ; fully-qualified     # 🎾 E0.6 tennis
+1F94F                                                  ; fully-qualified     # 🥏 E11.0 flying disc
+1F3B3                                                  ; fully-qualified     # 🎳 E0.6 bowling
+1F3CF                                                  ; fully-qualified     # 🏏 E1.0 cricket game
+1F3D1                                                  ; fully-qualified     # 🏑 E1.0 field hockey
+1F3D2                                                  ; fully-qualified     # 🏒 E1.0 ice hockey
+1F94D                                                  ; fully-qualified     # 🥍 E11.0 lacrosse
+1F3D3                                                  ; fully-qualified     # 🏓 E1.0 ping pong
+1F3F8                                                  ; fully-qualified     # 🏸 E1.0 badminton
+1F94A                                                  ; fully-qualified     # 🥊 E3.0 boxing glove
+1F94B                                                  ; fully-qualified     # 🥋 E3.0 martial arts uniform
+1F945                                                  ; fully-qualified     # 🥅 E3.0 goal net
+26F3                                                   ; fully-qualified     # ⛳ E0.6 flag in hole
+26F8 FE0F                                              ; fully-qualified     # ⛸️ E0.7 ice skate
+26F8                                                   ; unqualified         # ⛸ E0.7 ice skate
+1F3A3                                                  ; fully-qualified     # 🎣 E0.6 fishing pole
+1F93F                                                  ; fully-qualified     # 🤿 E12.0 diving mask
+1F3BD                                                  ; fully-qualified     # 🎽 E0.6 running shirt
+1F3BF                                                  ; fully-qualified     # 🎿 E0.6 skis
+1F6F7                                                  ; fully-qualified     # 🛷 E5.0 sled
+1F94C                                                  ; fully-qualified     # 🥌 E5.0 curling stone
 
 # subgroup: game
-1F3AF                                      ; fully-qualified     # 🎯 E0.6 direct hit
-1FA80                                      ; fully-qualified     # 🪀 E12.0 yo-yo
-1FA81                                      ; fully-qualified     # 🪁 E12.0 kite
-1F3B1                                      ; fully-qualified     # 🎱 E0.6 pool 8 ball
-1F52E                                      ; fully-qualified     # 🔮 E0.6 crystal ball
-1FA84                                      ; fully-qualified     # 🪄 E13.0 magic wand
-1F9FF                                      ; fully-qualified     # 🧿 E11.0 nazar amulet
-1F3AE                                      ; fully-qualified     # 🎮 E0.6 video game
-1F579 FE0F                                 ; fully-qualified     # 🕹️ E0.7 joystick
-1F579                                      ; unqualified         # 🕹 E0.7 joystick
-1F3B0                                      ; fully-qualified     # 🎰 E0.6 slot machine
-1F3B2                                      ; fully-qualified     # 🎲 E0.6 game die
-1F9E9                                      ; fully-qualified     # 🧩 E11.0 puzzle piece
-1F9F8                                      ; fully-qualified     # 🧸 E11.0 teddy bear
-1FA85                                      ; fully-qualified     # 🪅 E13.0 piñata
-1FA86                                      ; fully-qualified     # 🪆 E13.0 nesting dolls
-2660 FE0F                                  ; fully-qualified     # ♠️ E0.6 spade suit
-2660                                       ; unqualified         # ♠ E0.6 spade suit
-2665 FE0F                                  ; fully-qualified     # ♥️ E0.6 heart suit
-2665                                       ; unqualified         # ♥ E0.6 heart suit
-2666 FE0F                                  ; fully-qualified     # ♦️ E0.6 diamond suit
-2666                                       ; unqualified         # ♦ E0.6 diamond suit
-2663 FE0F                                  ; fully-qualified     # ♣️ E0.6 club suit
-2663                                       ; unqualified         # ♣ E0.6 club suit
-265F FE0F                                  ; fully-qualified     # ♟️ E11.0 chess pawn
-265F                                       ; unqualified         # ♟ E11.0 chess pawn
-1F0CF                                      ; fully-qualified     # 🃏 E0.6 joker
-1F004                                      ; fully-qualified     # 🀄 E0.6 mahjong red dragon
-1F3B4                                      ; fully-qualified     # 🎴 E0.6 flower playing cards
+1F3AF                                                  ; fully-qualified     # 🎯 E0.6 bullseye
+1FA80                                                  ; fully-qualified     # 🪀 E12.0 yo-yo
+1FA81                                                  ; fully-qualified     # 🪁 E12.0 kite
+1F3B1                                                  ; fully-qualified     # 🎱 E0.6 pool 8 ball
+1F52E                                                  ; fully-qualified     # 🔮 E0.6 crystal ball
+1FA84                                                  ; fully-qualified     # 🪄 E13.0 magic wand
+1F9FF                                                  ; fully-qualified     # 🧿 E11.0 nazar amulet
+1F3AE                                                  ; fully-qualified     # 🎮 E0.6 video game
+1F579 FE0F                                             ; fully-qualified     # 🕹️ E0.7 joystick
+1F579                                                  ; unqualified         # 🕹 E0.7 joystick
+1F3B0                                                  ; fully-qualified     # 🎰 E0.6 slot machine
+1F3B2                                                  ; fully-qualified     # 🎲 E0.6 game die
+1F9E9                                                  ; fully-qualified     # 🧩 E11.0 puzzle piece
+1F9F8                                                  ; fully-qualified     # 🧸 E11.0 teddy bear
+1FA85                                                  ; fully-qualified     # 🪅 E13.0 piñata
+1FA86                                                  ; fully-qualified     # 🪆 E13.0 nesting dolls
+2660 FE0F                                              ; fully-qualified     # ♠️ E0.6 spade suit
+2660                                                   ; unqualified         # ♠ E0.6 spade suit
+2665 FE0F                                              ; fully-qualified     # ♥️ E0.6 heart suit
+2665                                                   ; unqualified         # ♥ E0.6 heart suit
+2666 FE0F                                              ; fully-qualified     # ♦️ E0.6 diamond suit
+2666                                                   ; unqualified         # ♦ E0.6 diamond suit
+2663 FE0F                                              ; fully-qualified     # ♣️ E0.6 club suit
+2663                                                   ; unqualified         # ♣ E0.6 club suit
+265F FE0F                                              ; fully-qualified     # ♟️ E11.0 chess pawn
+265F                                                   ; unqualified         # ♟ E11.0 chess pawn
+1F0CF                                                  ; fully-qualified     # 🃏 E0.6 joker
+1F004                                                  ; fully-qualified     # 🀄 E0.6 mahjong red dragon
+1F3B4                                                  ; fully-qualified     # 🎴 E0.6 flower playing cards
 
 # subgroup: arts & crafts
-1F3AD                                      ; fully-qualified     # 🎭 E0.6 performing arts
-1F5BC FE0F                                 ; fully-qualified     # 🖼️ E0.7 framed picture
-1F5BC                                      ; unqualified         # 🖼 E0.7 framed picture
-1F3A8                                      ; fully-qualified     # 🎨 E0.6 artist palette
-1F9F5                                      ; fully-qualified     # 🧵 E11.0 thread
-1FAA1                                      ; fully-qualified     # 🪡 E13.0 sewing needle
-1F9F6                                      ; fully-qualified     # 🧶 E11.0 yarn
-1FAA2                                      ; fully-qualified     # 🪢 E13.0 knot
+1F3AD                                                  ; fully-qualified     # 🎭 E0.6 performing arts
+1F5BC FE0F                                             ; fully-qualified     # 🖼️ E0.7 framed picture
+1F5BC                                                  ; unqualified         # 🖼 E0.7 framed picture
+1F3A8                                                  ; fully-qualified     # 🎨 E0.6 artist palette
+1F9F5                                                  ; fully-qualified     # 🧵 E11.0 thread
+1FAA1                                                  ; fully-qualified     # 🪡 E13.0 sewing needle
+1F9F6                                                  ; fully-qualified     # 🧶 E11.0 yarn
+1FAA2                                                  ; fully-qualified     # 🪢 E13.0 knot
 
 # Activities subtotal:		95
 # Activities subtotal:		95	w/o modifiers
@@ -3491,339 +3913,339 @@
 # group: Objects
 
 # subgroup: clothing
-1F453                                      ; fully-qualified     # 👓 E0.6 glasses
-1F576 FE0F                                 ; fully-qualified     # 🕶️ E0.7 sunglasses
-1F576                                      ; unqualified         # 🕶 E0.7 sunglasses
-1F97D                                      ; fully-qualified     # 🥽 E11.0 goggles
-1F97C                                      ; fully-qualified     # 🥼 E11.0 lab coat
-1F9BA                                      ; fully-qualified     # 🦺 E12.0 safety vest
-1F454                                      ; fully-qualified     # 👔 E0.6 necktie
-1F455                                      ; fully-qualified     # 👕 E0.6 t-shirt
-1F456                                      ; fully-qualified     # 👖 E0.6 jeans
-1F9E3                                      ; fully-qualified     # 🧣 E5.0 scarf
-1F9E4                                      ; fully-qualified     # 🧤 E5.0 gloves
-1F9E5                                      ; fully-qualified     # 🧥 E5.0 coat
-1F9E6                                      ; fully-qualified     # 🧦 E5.0 socks
-1F457                                      ; fully-qualified     # 👗 E0.6 dress
-1F458                                      ; fully-qualified     # 👘 E0.6 kimono
-1F97B                                      ; fully-qualified     # 🥻 E12.0 sari
-1FA71                                      ; fully-qualified     # 🩱 E12.0 one-piece swimsuit
-1FA72                                      ; fully-qualified     # 🩲 E12.0 briefs
-1FA73                                      ; fully-qualified     # 🩳 E12.0 shorts
-1F459                                      ; fully-qualified     # 👙 E0.6 bikini
-1F45A                                      ; fully-qualified     # 👚 E0.6 woman’s clothes
-1F45B                                      ; fully-qualified     # 👛 E0.6 purse
-1F45C                                      ; fully-qualified     # 👜 E0.6 handbag
-1F45D                                      ; fully-qualified     # 👝 E0.6 clutch bag
-1F6CD FE0F                                 ; fully-qualified     # 🛍️ E0.7 shopping bags
-1F6CD                                      ; unqualified         # 🛍 E0.7 shopping bags
-1F392                                      ; fully-qualified     # 🎒 E0.6 backpack
-1FA74                                      ; fully-qualified     # 🩴 E13.0 thong sandal
-1F45E                                      ; fully-qualified     # 👞 E0.6 man’s shoe
-1F45F                                      ; fully-qualified     # 👟 E0.6 running shoe
-1F97E                                      ; fully-qualified     # 🥾 E11.0 hiking boot
-1F97F                                      ; fully-qualified     # 🥿 E11.0 flat shoe
-1F460                                      ; fully-qualified     # 👠 E0.6 high-heeled shoe
-1F461                                      ; fully-qualified     # 👡 E0.6 woman’s sandal
-1FA70                                      ; fully-qualified     # 🩰 E12.0 ballet shoes
-1F462                                      ; fully-qualified     # 👢 E0.6 woman’s boot
-1F451                                      ; fully-qualified     # 👑 E0.6 crown
-1F452                                      ; fully-qualified     # 👒 E0.6 woman’s hat
-1F3A9                                      ; fully-qualified     # 🎩 E0.6 top hat
-1F393                                      ; fully-qualified     # 🎓 E0.6 graduation cap
-1F9E2                                      ; fully-qualified     # 🧢 E5.0 billed cap
-1FA96                                      ; fully-qualified     # 🪖 E13.0 military helmet
-26D1 FE0F                                  ; fully-qualified     # ⛑️ E0.7 rescue worker’s helmet
-26D1                                       ; unqualified         # ⛑ E0.7 rescue worker’s helmet
-1F4FF                                      ; fully-qualified     # 📿 E1.0 prayer beads
-1F484                                      ; fully-qualified     # 💄 E0.6 lipstick
-1F48D                                      ; fully-qualified     # 💍 E0.6 ring
-1F48E                                      ; fully-qualified     # 💎 E0.6 gem stone
+1F453                                                  ; fully-qualified     # 👓 E0.6 glasses
+1F576 FE0F                                             ; fully-qualified     # 🕶️ E0.7 sunglasses
+1F576                                                  ; unqualified         # 🕶 E0.7 sunglasses
+1F97D                                                  ; fully-qualified     # 🥽 E11.0 goggles
+1F97C                                                  ; fully-qualified     # 🥼 E11.0 lab coat
+1F9BA                                                  ; fully-qualified     # 🦺 E12.0 safety vest
+1F454                                                  ; fully-qualified     # 👔 E0.6 necktie
+1F455                                                  ; fully-qualified     # 👕 E0.6 t-shirt
+1F456                                                  ; fully-qualified     # 👖 E0.6 jeans
+1F9E3                                                  ; fully-qualified     # 🧣 E5.0 scarf
+1F9E4                                                  ; fully-qualified     # 🧤 E5.0 gloves
+1F9E5                                                  ; fully-qualified     # 🧥 E5.0 coat
+1F9E6                                                  ; fully-qualified     # 🧦 E5.0 socks
+1F457                                                  ; fully-qualified     # 👗 E0.6 dress
+1F458                                                  ; fully-qualified     # 👘 E0.6 kimono
+1F97B                                                  ; fully-qualified     # 🥻 E12.0 sari
+1FA71                                                  ; fully-qualified     # 🩱 E12.0 one-piece swimsuit
+1FA72                                                  ; fully-qualified     # 🩲 E12.0 briefs
+1FA73                                                  ; fully-qualified     # 🩳 E12.0 shorts
+1F459                                                  ; fully-qualified     # 👙 E0.6 bikini
+1F45A                                                  ; fully-qualified     # 👚 E0.6 woman’s clothes
+1F45B                                                  ; fully-qualified     # 👛 E0.6 purse
+1F45C                                                  ; fully-qualified     # 👜 E0.6 handbag
+1F45D                                                  ; fully-qualified     # 👝 E0.6 clutch bag
+1F6CD FE0F                                             ; fully-qualified     # 🛍️ E0.7 shopping bags
+1F6CD                                                  ; unqualified         # 🛍 E0.7 shopping bags
+1F392                                                  ; fully-qualified     # 🎒 E0.6 backpack
+1FA74                                                  ; fully-qualified     # 🩴 E13.0 thong sandal
+1F45E                                                  ; fully-qualified     # 👞 E0.6 man’s shoe
+1F45F                                                  ; fully-qualified     # 👟 E0.6 running shoe
+1F97E                                                  ; fully-qualified     # 🥾 E11.0 hiking boot
+1F97F                                                  ; fully-qualified     # 🥿 E11.0 flat shoe
+1F460                                                  ; fully-qualified     # 👠 E0.6 high-heeled shoe
+1F461                                                  ; fully-qualified     # 👡 E0.6 woman’s sandal
+1FA70                                                  ; fully-qualified     # 🩰 E12.0 ballet shoes
+1F462                                                  ; fully-qualified     # 👢 E0.6 woman’s boot
+1F451                                                  ; fully-qualified     # 👑 E0.6 crown
+1F452                                                  ; fully-qualified     # 👒 E0.6 woman’s hat
+1F3A9                                                  ; fully-qualified     # 🎩 E0.6 top hat
+1F393                                                  ; fully-qualified     # 🎓 E0.6 graduation cap
+1F9E2                                                  ; fully-qualified     # 🧢 E5.0 billed cap
+1FA96                                                  ; fully-qualified     # 🪖 E13.0 military helmet
+26D1 FE0F                                              ; fully-qualified     # ⛑️ E0.7 rescue worker’s helmet
+26D1                                                   ; unqualified         # ⛑ E0.7 rescue worker’s helmet
+1F4FF                                                  ; fully-qualified     # 📿 E1.0 prayer beads
+1F484                                                  ; fully-qualified     # 💄 E0.6 lipstick
+1F48D                                                  ; fully-qualified     # 💍 E0.6 ring
+1F48E                                                  ; fully-qualified     # 💎 E0.6 gem stone
 
 # subgroup: sound
-1F507                                      ; fully-qualified     # 🔇 E1.0 muted speaker
-1F508                                      ; fully-qualified     # 🔈 E0.7 speaker low volume
-1F509                                      ; fully-qualified     # 🔉 E1.0 speaker medium volume
-1F50A                                      ; fully-qualified     # 🔊 E0.6 speaker high volume
-1F4E2                                      ; fully-qualified     # 📢 E0.6 loudspeaker
-1F4E3                                      ; fully-qualified     # 📣 E0.6 megaphone
-1F4EF                                      ; fully-qualified     # 📯 E1.0 postal horn
-1F514                                      ; fully-qualified     # 🔔 E0.6 bell
-1F515                                      ; fully-qualified     # 🔕 E1.0 bell with slash
+1F507                                                  ; fully-qualified     # 🔇 E1.0 muted speaker
+1F508                                                  ; fully-qualified     # 🔈 E0.7 speaker low volume
+1F509                                                  ; fully-qualified     # 🔉 E1.0 speaker medium volume
+1F50A                                                  ; fully-qualified     # 🔊 E0.6 speaker high volume
+1F4E2                                                  ; fully-qualified     # 📢 E0.6 loudspeaker
+1F4E3                                                  ; fully-qualified     # 📣 E0.6 megaphone
+1F4EF                                                  ; fully-qualified     # 📯 E1.0 postal horn
+1F514                                                  ; fully-qualified     # 🔔 E0.6 bell
+1F515                                                  ; fully-qualified     # 🔕 E1.0 bell with slash
 
 # subgroup: music
-1F3BC                                      ; fully-qualified     # 🎼 E0.6 musical score
-1F3B5                                      ; fully-qualified     # 🎵 E0.6 musical note
-1F3B6                                      ; fully-qualified     # 🎶 E0.6 musical notes
-1F399 FE0F                                 ; fully-qualified     # 🎙️ E0.7 studio microphone
-1F399                                      ; unqualified         # 🎙 E0.7 studio microphone
-1F39A FE0F                                 ; fully-qualified     # 🎚️ E0.7 level slider
-1F39A                                      ; unqualified         # 🎚 E0.7 level slider
-1F39B FE0F                                 ; fully-qualified     # 🎛️ E0.7 control knobs
-1F39B                                      ; unqualified         # 🎛 E0.7 control knobs
-1F3A4                                      ; fully-qualified     # 🎤 E0.6 microphone
-1F3A7                                      ; fully-qualified     # 🎧 E0.6 headphone
-1F4FB                                      ; fully-qualified     # 📻 E0.6 radio
+1F3BC                                                  ; fully-qualified     # 🎼 E0.6 musical score
+1F3B5                                                  ; fully-qualified     # 🎵 E0.6 musical note
+1F3B6                                                  ; fully-qualified     # 🎶 E0.6 musical notes
+1F399 FE0F                                             ; fully-qualified     # 🎙️ E0.7 studio microphone
+1F399                                                  ; unqualified         # 🎙 E0.7 studio microphone
+1F39A FE0F                                             ; fully-qualified     # 🎚️ E0.7 level slider
+1F39A                                                  ; unqualified         # 🎚 E0.7 level slider
+1F39B FE0F                                             ; fully-qualified     # 🎛️ E0.7 control knobs
+1F39B                                                  ; unqualified         # 🎛 E0.7 control knobs
+1F3A4                                                  ; fully-qualified     # 🎤 E0.6 microphone
+1F3A7                                                  ; fully-qualified     # 🎧 E0.6 headphone
+1F4FB                                                  ; fully-qualified     # 📻 E0.6 radio
 
 # subgroup: musical-instrument
-1F3B7                                      ; fully-qualified     # 🎷 E0.6 saxophone
-1FA97                                      ; fully-qualified     # 🪗 E13.0 accordion
-1F3B8                                      ; fully-qualified     # 🎸 E0.6 guitar
-1F3B9                                      ; fully-qualified     # 🎹 E0.6 musical keyboard
-1F3BA                                      ; fully-qualified     # 🎺 E0.6 trumpet
-1F3BB                                      ; fully-qualified     # 🎻 E0.6 violin
-1FA95                                      ; fully-qualified     # 🪕 E12.0 banjo
-1F941                                      ; fully-qualified     # 🥁 E3.0 drum
-1FA98                                      ; fully-qualified     # 🪘 E13.0 long drum
+1F3B7                                                  ; fully-qualified     # 🎷 E0.6 saxophone
+1FA97                                                  ; fully-qualified     # 🪗 E13.0 accordion
+1F3B8                                                  ; fully-qualified     # 🎸 E0.6 guitar
+1F3B9                                                  ; fully-qualified     # 🎹 E0.6 musical keyboard
+1F3BA                                                  ; fully-qualified     # 🎺 E0.6 trumpet
+1F3BB                                                  ; fully-qualified     # 🎻 E0.6 violin
+1FA95                                                  ; fully-qualified     # 🪕 E12.0 banjo
+1F941                                                  ; fully-qualified     # 🥁 E3.0 drum
+1FA98                                                  ; fully-qualified     # 🪘 E13.0 long drum
 
 # subgroup: phone
-1F4F1                                      ; fully-qualified     # 📱 E0.6 mobile phone
-1F4F2                                      ; fully-qualified     # 📲 E0.6 mobile phone with arrow
-260E FE0F                                  ; fully-qualified     # ☎️ E0.6 telephone
-260E                                       ; unqualified         # ☎ E0.6 telephone
-1F4DE                                      ; fully-qualified     # 📞 E0.6 telephone receiver
-1F4DF                                      ; fully-qualified     # 📟 E0.6 pager
-1F4E0                                      ; fully-qualified     # 📠 E0.6 fax machine
+1F4F1                                                  ; fully-qualified     # 📱 E0.6 mobile phone
+1F4F2                                                  ; fully-qualified     # 📲 E0.6 mobile phone with arrow
+260E FE0F                                              ; fully-qualified     # ☎️ E0.6 telephone
+260E                                                   ; unqualified         # ☎ E0.6 telephone
+1F4DE                                                  ; fully-qualified     # 📞 E0.6 telephone receiver
+1F4DF                                                  ; fully-qualified     # 📟 E0.6 pager
+1F4E0                                                  ; fully-qualified     # 📠 E0.6 fax machine
 
 # subgroup: computer
-1F50B                                      ; fully-qualified     # 🔋 E0.6 battery
-1F50C                                      ; fully-qualified     # 🔌 E0.6 electric plug
-1F4BB                                      ; fully-qualified     # 💻 E0.6 laptop
-1F5A5 FE0F                                 ; fully-qualified     # 🖥️ E0.7 desktop computer
-1F5A5                                      ; unqualified         # 🖥 E0.7 desktop computer
-1F5A8 FE0F                                 ; fully-qualified     # 🖨️ E0.7 printer
-1F5A8                                      ; unqualified         # 🖨 E0.7 printer
-2328 FE0F                                  ; fully-qualified     # ⌨️ E1.0 keyboard
-2328                                       ; unqualified         # ⌨ E1.0 keyboard
-1F5B1 FE0F                                 ; fully-qualified     # 🖱️ E0.7 computer mouse
-1F5B1                                      ; unqualified         # 🖱 E0.7 computer mouse
-1F5B2 FE0F                                 ; fully-qualified     # 🖲️ E0.7 trackball
-1F5B2                                      ; unqualified         # 🖲 E0.7 trackball
-1F4BD                                      ; fully-qualified     # 💽 E0.6 computer disk
-1F4BE                                      ; fully-qualified     # 💾 E0.6 floppy disk
-1F4BF                                      ; fully-qualified     # 💿 E0.6 optical disk
-1F4C0                                      ; fully-qualified     # 📀 E0.6 dvd
-1F9EE                                      ; fully-qualified     # 🧮 E11.0 abacus
+1F50B                                                  ; fully-qualified     # 🔋 E0.6 battery
+1F50C                                                  ; fully-qualified     # 🔌 E0.6 electric plug
+1F4BB                                                  ; fully-qualified     # 💻 E0.6 laptop
+1F5A5 FE0F                                             ; fully-qualified     # 🖥️ E0.7 desktop computer
+1F5A5                                                  ; unqualified         # 🖥 E0.7 desktop computer
+1F5A8 FE0F                                             ; fully-qualified     # 🖨️ E0.7 printer
+1F5A8                                                  ; unqualified         # 🖨 E0.7 printer
+2328 FE0F                                              ; fully-qualified     # ⌨️ E1.0 keyboard
+2328                                                   ; unqualified         # ⌨ E1.0 keyboard
+1F5B1 FE0F                                             ; fully-qualified     # 🖱️ E0.7 computer mouse
+1F5B1                                                  ; unqualified         # 🖱 E0.7 computer mouse
+1F5B2 FE0F                                             ; fully-qualified     # 🖲️ E0.7 trackball
+1F5B2                                                  ; unqualified         # 🖲 E0.7 trackball
+1F4BD                                                  ; fully-qualified     # 💽 E0.6 computer disk
+1F4BE                                                  ; fully-qualified     # 💾 E0.6 floppy disk
+1F4BF                                                  ; fully-qualified     # 💿 E0.6 optical disk
+1F4C0                                                  ; fully-qualified     # 📀 E0.6 dvd
+1F9EE                                                  ; fully-qualified     # 🧮 E11.0 abacus
 
 # subgroup: light & video
-1F3A5                                      ; fully-qualified     # 🎥 E0.6 movie camera
-1F39E FE0F                                 ; fully-qualified     # 🎞️ E0.7 film frames
-1F39E                                      ; unqualified         # 🎞 E0.7 film frames
-1F4FD FE0F                                 ; fully-qualified     # 📽️ E0.7 film projector
-1F4FD                                      ; unqualified         # 📽 E0.7 film projector
-1F3AC                                      ; fully-qualified     # 🎬 E0.6 clapper board
-1F4FA                                      ; fully-qualified     # 📺 E0.6 television
-1F4F7                                      ; fully-qualified     # 📷 E0.6 camera
-1F4F8                                      ; fully-qualified     # 📸 E1.0 camera with flash
-1F4F9                                      ; fully-qualified     # 📹 E0.6 video camera
-1F4FC                                      ; fully-qualified     # 📼 E0.6 videocassette
-1F50D                                      ; fully-qualified     # 🔍 E0.6 magnifying glass tilted left
-1F50E                                      ; fully-qualified     # 🔎 E0.6 magnifying glass tilted right
-1F56F FE0F                                 ; fully-qualified     # 🕯️ E0.7 candle
-1F56F                                      ; unqualified         # 🕯 E0.7 candle
-1F4A1                                      ; fully-qualified     # 💡 E0.6 light bulb
-1F526                                      ; fully-qualified     # 🔦 E0.6 flashlight
-1F3EE                                      ; fully-qualified     # 🏮 E0.6 red paper lantern
-1FA94                                      ; fully-qualified     # 🪔 E12.0 diya lamp
+1F3A5                                                  ; fully-qualified     # 🎥 E0.6 movie camera
+1F39E FE0F                                             ; fully-qualified     # 🎞️ E0.7 film frames
+1F39E                                                  ; unqualified         # 🎞 E0.7 film frames
+1F4FD FE0F                                             ; fully-qualified     # 📽️ E0.7 film projector
+1F4FD                                                  ; unqualified         # 📽 E0.7 film projector
+1F3AC                                                  ; fully-qualified     # 🎬 E0.6 clapper board
+1F4FA                                                  ; fully-qualified     # 📺 E0.6 television
+1F4F7                                                  ; fully-qualified     # 📷 E0.6 camera
+1F4F8                                                  ; fully-qualified     # 📸 E1.0 camera with flash
+1F4F9                                                  ; fully-qualified     # 📹 E0.6 video camera
+1F4FC                                                  ; fully-qualified     # 📼 E0.6 videocassette
+1F50D                                                  ; fully-qualified     # 🔍 E0.6 magnifying glass tilted left
+1F50E                                                  ; fully-qualified     # 🔎 E0.6 magnifying glass tilted right
+1F56F FE0F                                             ; fully-qualified     # 🕯️ E0.7 candle
+1F56F                                                  ; unqualified         # 🕯 E0.7 candle
+1F4A1                                                  ; fully-qualified     # 💡 E0.6 light bulb
+1F526                                                  ; fully-qualified     # 🔦 E0.6 flashlight
+1F3EE                                                  ; fully-qualified     # 🏮 E0.6 red paper lantern
+1FA94                                                  ; fully-qualified     # 🪔 E12.0 diya lamp
 
 # subgroup: book-paper
-1F4D4                                      ; fully-qualified     # 📔 E0.6 notebook with decorative cover
-1F4D5                                      ; fully-qualified     # 📕 E0.6 closed book
-1F4D6                                      ; fully-qualified     # 📖 E0.6 open book
-1F4D7                                      ; fully-qualified     # 📗 E0.6 green book
-1F4D8                                      ; fully-qualified     # 📘 E0.6 blue book
-1F4D9                                      ; fully-qualified     # 📙 E0.6 orange book
-1F4DA                                      ; fully-qualified     # 📚 E0.6 books
-1F4D3                                      ; fully-qualified     # 📓 E0.6 notebook
-1F4D2                                      ; fully-qualified     # 📒 E0.6 ledger
-1F4C3                                      ; fully-qualified     # 📃 E0.6 page with curl
-1F4DC                                      ; fully-qualified     # 📜 E0.6 scroll
-1F4C4                                      ; fully-qualified     # 📄 E0.6 page facing up
-1F4F0                                      ; fully-qualified     # 📰 E0.6 newspaper
-1F5DE FE0F                                 ; fully-qualified     # 🗞️ E0.7 rolled-up newspaper
-1F5DE                                      ; unqualified         # 🗞 E0.7 rolled-up newspaper
-1F4D1                                      ; fully-qualified     # 📑 E0.6 bookmark tabs
-1F516                                      ; fully-qualified     # 🔖 E0.6 bookmark
-1F3F7 FE0F                                 ; fully-qualified     # 🏷️ E0.7 label
-1F3F7                                      ; unqualified         # 🏷 E0.7 label
+1F4D4                                                  ; fully-qualified     # 📔 E0.6 notebook with decorative cover
+1F4D5                                                  ; fully-qualified     # 📕 E0.6 closed book
+1F4D6                                                  ; fully-qualified     # 📖 E0.6 open book
+1F4D7                                                  ; fully-qualified     # 📗 E0.6 green book
+1F4D8                                                  ; fully-qualified     # 📘 E0.6 blue book
+1F4D9                                                  ; fully-qualified     # 📙 E0.6 orange book
+1F4DA                                                  ; fully-qualified     # 📚 E0.6 books
+1F4D3                                                  ; fully-qualified     # 📓 E0.6 notebook
+1F4D2                                                  ; fully-qualified     # 📒 E0.6 ledger
+1F4C3                                                  ; fully-qualified     # 📃 E0.6 page with curl
+1F4DC                                                  ; fully-qualified     # 📜 E0.6 scroll
+1F4C4                                                  ; fully-qualified     # 📄 E0.6 page facing up
+1F4F0                                                  ; fully-qualified     # 📰 E0.6 newspaper
+1F5DE FE0F                                             ; fully-qualified     # 🗞️ E0.7 rolled-up newspaper
+1F5DE                                                  ; unqualified         # 🗞 E0.7 rolled-up newspaper
+1F4D1                                                  ; fully-qualified     # 📑 E0.6 bookmark tabs
+1F516                                                  ; fully-qualified     # 🔖 E0.6 bookmark
+1F3F7 FE0F                                             ; fully-qualified     # 🏷️ E0.7 label
+1F3F7                                                  ; unqualified         # 🏷 E0.7 label
 
 # subgroup: money
-1F4B0                                      ; fully-qualified     # 💰 E0.6 money bag
-1FA99                                      ; fully-qualified     # 🪙 E13.0 coin
-1F4B4                                      ; fully-qualified     # 💴 E0.6 yen banknote
-1F4B5                                      ; fully-qualified     # 💵 E0.6 dollar banknote
-1F4B6                                      ; fully-qualified     # 💶 E1.0 euro banknote
-1F4B7                                      ; fully-qualified     # 💷 E1.0 pound banknote
-1F4B8                                      ; fully-qualified     # 💸 E0.6 money with wings
-1F4B3                                      ; fully-qualified     # 💳 E0.6 credit card
-1F9FE                                      ; fully-qualified     # 🧾 E11.0 receipt
-1F4B9                                      ; fully-qualified     # 💹 E0.6 chart increasing with yen
+1F4B0                                                  ; fully-qualified     # 💰 E0.6 money bag
+1FA99                                                  ; fully-qualified     # 🪙 E13.0 coin
+1F4B4                                                  ; fully-qualified     # 💴 E0.6 yen banknote
+1F4B5                                                  ; fully-qualified     # 💵 E0.6 dollar banknote
+1F4B6                                                  ; fully-qualified     # 💶 E1.0 euro banknote
+1F4B7                                                  ; fully-qualified     # 💷 E1.0 pound banknote
+1F4B8                                                  ; fully-qualified     # 💸 E0.6 money with wings
+1F4B3                                                  ; fully-qualified     # 💳 E0.6 credit card
+1F9FE                                                  ; fully-qualified     # 🧾 E11.0 receipt
+1F4B9                                                  ; fully-qualified     # 💹 E0.6 chart increasing with yen
 
 # subgroup: mail
-2709 FE0F                                  ; fully-qualified     # ✉️ E0.6 envelope
-2709                                       ; unqualified         # ✉ E0.6 envelope
-1F4E7                                      ; fully-qualified     # 📧 E0.6 e-mail
-1F4E8                                      ; fully-qualified     # 📨 E0.6 incoming envelope
-1F4E9                                      ; fully-qualified     # 📩 E0.6 envelope with arrow
-1F4E4                                      ; fully-qualified     # 📤 E0.6 outbox tray
-1F4E5                                      ; fully-qualified     # 📥 E0.6 inbox tray
-1F4E6                                      ; fully-qualified     # 📦 E0.6 package
-1F4EB                                      ; fully-qualified     # 📫 E0.6 closed mailbox with raised flag
-1F4EA                                      ; fully-qualified     # 📪 E0.6 closed mailbox with lowered flag
-1F4EC                                      ; fully-qualified     # 📬 E0.7 open mailbox with raised flag
-1F4ED                                      ; fully-qualified     # 📭 E0.7 open mailbox with lowered flag
-1F4EE                                      ; fully-qualified     # 📮 E0.6 postbox
-1F5F3 FE0F                                 ; fully-qualified     # 🗳️ E0.7 ballot box with ballot
-1F5F3                                      ; unqualified         # 🗳 E0.7 ballot box with ballot
+2709 FE0F                                              ; fully-qualified     # ✉️ E0.6 envelope
+2709                                                   ; unqualified         # ✉ E0.6 envelope
+1F4E7                                                  ; fully-qualified     # 📧 E0.6 e-mail
+1F4E8                                                  ; fully-qualified     # 📨 E0.6 incoming envelope
+1F4E9                                                  ; fully-qualified     # 📩 E0.6 envelope with arrow
+1F4E4                                                  ; fully-qualified     # 📤 E0.6 outbox tray
+1F4E5                                                  ; fully-qualified     # 📥 E0.6 inbox tray
+1F4E6                                                  ; fully-qualified     # 📦 E0.6 package
+1F4EB                                                  ; fully-qualified     # 📫 E0.6 closed mailbox with raised flag
+1F4EA                                                  ; fully-qualified     # 📪 E0.6 closed mailbox with lowered flag
+1F4EC                                                  ; fully-qualified     # 📬 E0.7 open mailbox with raised flag
+1F4ED                                                  ; fully-qualified     # 📭 E0.7 open mailbox with lowered flag
+1F4EE                                                  ; fully-qualified     # 📮 E0.6 postbox
+1F5F3 FE0F                                             ; fully-qualified     # 🗳️ E0.7 ballot box with ballot
+1F5F3                                                  ; unqualified         # 🗳 E0.7 ballot box with ballot
 
 # subgroup: writing
-270F FE0F                                  ; fully-qualified     # ✏️ E0.6 pencil
-270F                                       ; unqualified         # ✏ E0.6 pencil
-2712 FE0F                                  ; fully-qualified     # ✒️ E0.6 black nib
-2712                                       ; unqualified         # ✒ E0.6 black nib
-1F58B FE0F                                 ; fully-qualified     # 🖋️ E0.7 fountain pen
-1F58B                                      ; unqualified         # 🖋 E0.7 fountain pen
-1F58A FE0F                                 ; fully-qualified     # 🖊️ E0.7 pen
-1F58A                                      ; unqualified         # 🖊 E0.7 pen
-1F58C FE0F                                 ; fully-qualified     # 🖌️ E0.7 paintbrush
-1F58C                                      ; unqualified         # 🖌 E0.7 paintbrush
-1F58D FE0F                                 ; fully-qualified     # 🖍️ E0.7 crayon
-1F58D                                      ; unqualified         # 🖍 E0.7 crayon
-1F4DD                                      ; fully-qualified     # 📝 E0.6 memo
+270F FE0F                                              ; fully-qualified     # ✏️ E0.6 pencil
+270F                                                   ; unqualified         # ✏ E0.6 pencil
+2712 FE0F                                              ; fully-qualified     # ✒️ E0.6 black nib
+2712                                                   ; unqualified         # ✒ E0.6 black nib
+1F58B FE0F                                             ; fully-qualified     # 🖋️ E0.7 fountain pen
+1F58B                                                  ; unqualified         # 🖋 E0.7 fountain pen
+1F58A FE0F                                             ; fully-qualified     # 🖊️ E0.7 pen
+1F58A                                                  ; unqualified         # 🖊 E0.7 pen
+1F58C FE0F                                             ; fully-qualified     # 🖌️ E0.7 paintbrush
+1F58C                                                  ; unqualified         # 🖌 E0.7 paintbrush
+1F58D FE0F                                             ; fully-qualified     # 🖍️ E0.7 crayon
+1F58D                                                  ; unqualified         # 🖍 E0.7 crayon
+1F4DD                                                  ; fully-qualified     # 📝 E0.6 memo
 
 # subgroup: office
-1F4BC                                      ; fully-qualified     # 💼 E0.6 briefcase
-1F4C1                                      ; fully-qualified     # 📁 E0.6 file folder
-1F4C2                                      ; fully-qualified     # 📂 E0.6 open file folder
-1F5C2 FE0F                                 ; fully-qualified     # 🗂️ E0.7 card index dividers
-1F5C2                                      ; unqualified         # 🗂 E0.7 card index dividers
-1F4C5                                      ; fully-qualified     # 📅 E0.6 calendar
-1F4C6                                      ; fully-qualified     # 📆 E0.6 tear-off calendar
-1F5D2 FE0F                                 ; fully-qualified     # 🗒️ E0.7 spiral notepad
-1F5D2                                      ; unqualified         # 🗒 E0.7 spiral notepad
-1F5D3 FE0F                                 ; fully-qualified     # 🗓️ E0.7 spiral calendar
-1F5D3                                      ; unqualified         # 🗓 E0.7 spiral calendar
-1F4C7                                      ; fully-qualified     # 📇 E0.6 card index
-1F4C8                                      ; fully-qualified     # 📈 E0.6 chart increasing
-1F4C9                                      ; fully-qualified     # 📉 E0.6 chart decreasing
-1F4CA                                      ; fully-qualified     # 📊 E0.6 bar chart
-1F4CB                                      ; fully-qualified     # 📋 E0.6 clipboard
-1F4CC                                      ; fully-qualified     # 📌 E0.6 pushpin
-1F4CD                                      ; fully-qualified     # 📍 E0.6 round pushpin
-1F4CE                                      ; fully-qualified     # 📎 E0.6 paperclip
-1F587 FE0F                                 ; fully-qualified     # 🖇️ E0.7 linked paperclips
-1F587                                      ; unqualified         # 🖇 E0.7 linked paperclips
-1F4CF                                      ; fully-qualified     # 📏 E0.6 straight ruler
-1F4D0                                      ; fully-qualified     # 📐 E0.6 triangular ruler
-2702 FE0F                                  ; fully-qualified     # ✂️ E0.6 scissors
-2702                                       ; unqualified         # ✂ E0.6 scissors
-1F5C3 FE0F                                 ; fully-qualified     # 🗃️ E0.7 card file box
-1F5C3                                      ; unqualified         # 🗃 E0.7 card file box
-1F5C4 FE0F                                 ; fully-qualified     # 🗄️ E0.7 file cabinet
-1F5C4                                      ; unqualified         # 🗄 E0.7 file cabinet
-1F5D1 FE0F                                 ; fully-qualified     # 🗑️ E0.7 wastebasket
-1F5D1                                      ; unqualified         # 🗑 E0.7 wastebasket
+1F4BC                                                  ; fully-qualified     # 💼 E0.6 briefcase
+1F4C1                                                  ; fully-qualified     # 📁 E0.6 file folder
+1F4C2                                                  ; fully-qualified     # 📂 E0.6 open file folder
+1F5C2 FE0F                                             ; fully-qualified     # 🗂️ E0.7 card index dividers
+1F5C2                                                  ; unqualified         # 🗂 E0.7 card index dividers
+1F4C5                                                  ; fully-qualified     # 📅 E0.6 calendar
+1F4C6                                                  ; fully-qualified     # 📆 E0.6 tear-off calendar
+1F5D2 FE0F                                             ; fully-qualified     # 🗒️ E0.7 spiral notepad
+1F5D2                                                  ; unqualified         # 🗒 E0.7 spiral notepad
+1F5D3 FE0F                                             ; fully-qualified     # 🗓️ E0.7 spiral calendar
+1F5D3                                                  ; unqualified         # 🗓 E0.7 spiral calendar
+1F4C7                                                  ; fully-qualified     # 📇 E0.6 card index
+1F4C8                                                  ; fully-qualified     # 📈 E0.6 chart increasing
+1F4C9                                                  ; fully-qualified     # 📉 E0.6 chart decreasing
+1F4CA                                                  ; fully-qualified     # 📊 E0.6 bar chart
+1F4CB                                                  ; fully-qualified     # 📋 E0.6 clipboard
+1F4CC                                                  ; fully-qualified     # 📌 E0.6 pushpin
+1F4CD                                                  ; fully-qualified     # 📍 E0.6 round pushpin
+1F4CE                                                  ; fully-qualified     # 📎 E0.6 paperclip
+1F587 FE0F                                             ; fully-qualified     # 🖇️ E0.7 linked paperclips
+1F587                                                  ; unqualified         # 🖇 E0.7 linked paperclips
+1F4CF                                                  ; fully-qualified     # 📏 E0.6 straight ruler
+1F4D0                                                  ; fully-qualified     # 📐 E0.6 triangular ruler
+2702 FE0F                                              ; fully-qualified     # ✂️ E0.6 scissors
+2702                                                   ; unqualified         # ✂ E0.6 scissors
+1F5C3 FE0F                                             ; fully-qualified     # 🗃️ E0.7 card file box
+1F5C3                                                  ; unqualified         # 🗃 E0.7 card file box
+1F5C4 FE0F                                             ; fully-qualified     # 🗄️ E0.7 file cabinet
+1F5C4                                                  ; unqualified         # 🗄 E0.7 file cabinet
+1F5D1 FE0F                                             ; fully-qualified     # 🗑️ E0.7 wastebasket
+1F5D1                                                  ; unqualified         # 🗑 E0.7 wastebasket
 
 # subgroup: lock
-1F512                                      ; fully-qualified     # 🔒 E0.6 locked
-1F513                                      ; fully-qualified     # 🔓 E0.6 unlocked
-1F50F                                      ; fully-qualified     # 🔏 E0.6 locked with pen
-1F510                                      ; fully-qualified     # 🔐 E0.6 locked with key
-1F511                                      ; fully-qualified     # 🔑 E0.6 key
-1F5DD FE0F                                 ; fully-qualified     # 🗝️ E0.7 old key
-1F5DD                                      ; unqualified         # 🗝 E0.7 old key
+1F512                                                  ; fully-qualified     # 🔒 E0.6 locked
+1F513                                                  ; fully-qualified     # 🔓 E0.6 unlocked
+1F50F                                                  ; fully-qualified     # 🔏 E0.6 locked with pen
+1F510                                                  ; fully-qualified     # 🔐 E0.6 locked with key
+1F511                                                  ; fully-qualified     # 🔑 E0.6 key
+1F5DD FE0F                                             ; fully-qualified     # 🗝️ E0.7 old key
+1F5DD                                                  ; unqualified         # 🗝 E0.7 old key
 
 # subgroup: tool
-1F528                                      ; fully-qualified     # 🔨 E0.6 hammer
-1FA93                                      ; fully-qualified     # 🪓 E12.0 axe
-26CF FE0F                                  ; fully-qualified     # ⛏️ E0.7 pick
-26CF                                       ; unqualified         # ⛏ E0.7 pick
-2692 FE0F                                  ; fully-qualified     # ⚒️ E1.0 hammer and pick
-2692                                       ; unqualified         # ⚒ E1.0 hammer and pick
-1F6E0 FE0F                                 ; fully-qualified     # 🛠️ E0.7 hammer and wrench
-1F6E0                                      ; unqualified         # 🛠 E0.7 hammer and wrench
-1F5E1 FE0F                                 ; fully-qualified     # 🗡️ E0.7 dagger
-1F5E1                                      ; unqualified         # 🗡 E0.7 dagger
-2694 FE0F                                  ; fully-qualified     # ⚔️ E1.0 crossed swords
-2694                                       ; unqualified         # ⚔ E1.0 crossed swords
-1F52B                                      ; fully-qualified     # 🔫 E0.6 pistol
-1FA83                                      ; fully-qualified     # 🪃 E13.0 boomerang
-1F3F9                                      ; fully-qualified     # 🏹 E1.0 bow and arrow
-1F6E1 FE0F                                 ; fully-qualified     # 🛡️ E0.7 shield
-1F6E1                                      ; unqualified         # 🛡 E0.7 shield
-1FA9A                                      ; fully-qualified     # 🪚 E13.0 carpentry saw
-1F527                                      ; fully-qualified     # 🔧 E0.6 wrench
-1FA9B                                      ; fully-qualified     # 🪛 E13.0 screwdriver
-1F529                                      ; fully-qualified     # 🔩 E0.6 nut and bolt
-2699 FE0F                                  ; fully-qualified     # ⚙️ E1.0 gear
-2699                                       ; unqualified         # ⚙ E1.0 gear
-1F5DC FE0F                                 ; fully-qualified     # 🗜️ E0.7 clamp
-1F5DC                                      ; unqualified         # 🗜 E0.7 clamp
-2696 FE0F                                  ; fully-qualified     # ⚖️ E1.0 balance scale
-2696                                       ; unqualified         # ⚖ E1.0 balance scale
-1F9AF                                      ; fully-qualified     # 🦯 E12.0 white cane
-1F517                                      ; fully-qualified     # 🔗 E0.6 link
-26D3 FE0F                                  ; fully-qualified     # ⛓️ E0.7 chains
-26D3                                       ; unqualified         # ⛓ E0.7 chains
-1FA9D                                      ; fully-qualified     # 🪝 E13.0 hook
-1F9F0                                      ; fully-qualified     # 🧰 E11.0 toolbox
-1F9F2                                      ; fully-qualified     # 🧲 E11.0 magnet
-1FA9C                                      ; fully-qualified     # 🪜 E13.0 ladder
+1F528                                                  ; fully-qualified     # 🔨 E0.6 hammer
+1FA93                                                  ; fully-qualified     # 🪓 E12.0 axe
+26CF FE0F                                              ; fully-qualified     # ⛏️ E0.7 pick
+26CF                                                   ; unqualified         # ⛏ E0.7 pick
+2692 FE0F                                              ; fully-qualified     # ⚒️ E1.0 hammer and pick
+2692                                                   ; unqualified         # ⚒ E1.0 hammer and pick
+1F6E0 FE0F                                             ; fully-qualified     # 🛠️ E0.7 hammer and wrench
+1F6E0                                                  ; unqualified         # 🛠 E0.7 hammer and wrench
+1F5E1 FE0F                                             ; fully-qualified     # 🗡️ E0.7 dagger
+1F5E1                                                  ; unqualified         # 🗡 E0.7 dagger
+2694 FE0F                                              ; fully-qualified     # ⚔️ E1.0 crossed swords
+2694                                                   ; unqualified         # ⚔ E1.0 crossed swords
+1F52B                                                  ; fully-qualified     # 🔫 E0.6 water pistol
+1FA83                                                  ; fully-qualified     # 🪃 E13.0 boomerang
+1F3F9                                                  ; fully-qualified     # 🏹 E1.0 bow and arrow
+1F6E1 FE0F                                             ; fully-qualified     # 🛡️ E0.7 shield
+1F6E1                                                  ; unqualified         # 🛡 E0.7 shield
+1FA9A                                                  ; fully-qualified     # 🪚 E13.0 carpentry saw
+1F527                                                  ; fully-qualified     # 🔧 E0.6 wrench
+1FA9B                                                  ; fully-qualified     # 🪛 E13.0 screwdriver
+1F529                                                  ; fully-qualified     # 🔩 E0.6 nut and bolt
+2699 FE0F                                              ; fully-qualified     # ⚙️ E1.0 gear
+2699                                                   ; unqualified         # ⚙ E1.0 gear
+1F5DC FE0F                                             ; fully-qualified     # 🗜️ E0.7 clamp
+1F5DC                                                  ; unqualified         # 🗜 E0.7 clamp
+2696 FE0F                                              ; fully-qualified     # ⚖️ E1.0 balance scale
+2696                                                   ; unqualified         # ⚖ E1.0 balance scale
+1F9AF                                                  ; fully-qualified     # 🦯 E12.0 white cane
+1F517                                                  ; fully-qualified     # 🔗 E0.6 link
+26D3 FE0F                                              ; fully-qualified     # ⛓️ E0.7 chains
+26D3                                                   ; unqualified         # ⛓ E0.7 chains
+1FA9D                                                  ; fully-qualified     # 🪝 E13.0 hook
+1F9F0                                                  ; fully-qualified     # 🧰 E11.0 toolbox
+1F9F2                                                  ; fully-qualified     # 🧲 E11.0 magnet
+1FA9C                                                  ; fully-qualified     # 🪜 E13.0 ladder
 
 # subgroup: science
-2697 FE0F                                  ; fully-qualified     # ⚗️ E1.0 alembic
-2697                                       ; unqualified         # ⚗ E1.0 alembic
-1F9EA                                      ; fully-qualified     # 🧪 E11.0 test tube
-1F9EB                                      ; fully-qualified     # 🧫 E11.0 petri dish
-1F9EC                                      ; fully-qualified     # 🧬 E11.0 dna
-1F52C                                      ; fully-qualified     # 🔬 E1.0 microscope
-1F52D                                      ; fully-qualified     # 🔭 E1.0 telescope
-1F4E1                                      ; fully-qualified     # 📡 E0.6 satellite antenna
+2697 FE0F                                              ; fully-qualified     # ⚗️ E1.0 alembic
+2697                                                   ; unqualified         # ⚗ E1.0 alembic
+1F9EA                                                  ; fully-qualified     # 🧪 E11.0 test tube
+1F9EB                                                  ; fully-qualified     # 🧫 E11.0 petri dish
+1F9EC                                                  ; fully-qualified     # 🧬 E11.0 dna
+1F52C                                                  ; fully-qualified     # 🔬 E1.0 microscope
+1F52D                                                  ; fully-qualified     # 🔭 E1.0 telescope
+1F4E1                                                  ; fully-qualified     # 📡 E0.6 satellite antenna
 
 # subgroup: medical
-1F489                                      ; fully-qualified     # 💉 E0.6 syringe
-1FA78                                      ; fully-qualified     # 🩸 E12.0 drop of blood
-1F48A                                      ; fully-qualified     # 💊 E0.6 pill
-1FA79                                      ; fully-qualified     # 🩹 E12.0 adhesive bandage
-1FA7A                                      ; fully-qualified     # 🩺 E12.0 stethoscope
+1F489                                                  ; fully-qualified     # 💉 E0.6 syringe
+1FA78                                                  ; fully-qualified     # 🩸 E12.0 drop of blood
+1F48A                                                  ; fully-qualified     # 💊 E0.6 pill
+1FA79                                                  ; fully-qualified     # 🩹 E12.0 adhesive bandage
+1FA7A                                                  ; fully-qualified     # 🩺 E12.0 stethoscope
 
 # subgroup: household
-1F6AA                                      ; fully-qualified     # 🚪 E0.6 door
-1F6D7                                      ; fully-qualified     # 🛗 E13.0 elevator
-1FA9E                                      ; fully-qualified     # 🪞 E13.0 mirror
-1FA9F                                      ; fully-qualified     # 🪟 E13.0 window
-1F6CF FE0F                                 ; fully-qualified     # 🛏️ E0.7 bed
-1F6CF                                      ; unqualified         # 🛏 E0.7 bed
-1F6CB FE0F                                 ; fully-qualified     # 🛋️ E0.7 couch and lamp
-1F6CB                                      ; unqualified         # 🛋 E0.7 couch and lamp
-1FA91                                      ; fully-qualified     # 🪑 E12.0 chair
-1F6BD                                      ; fully-qualified     # 🚽 E0.6 toilet
-1FAA0                                      ; fully-qualified     # 🪠 E13.0 plunger
-1F6BF                                      ; fully-qualified     # 🚿 E1.0 shower
-1F6C1                                      ; fully-qualified     # 🛁 E1.0 bathtub
-1FAA4                                      ; fully-qualified     # 🪤 E13.0 mouse trap
-1FA92                                      ; fully-qualified     # 🪒 E12.0 razor
-1F9F4                                      ; fully-qualified     # 🧴 E11.0 lotion bottle
-1F9F7                                      ; fully-qualified     # 🧷 E11.0 safety pin
-1F9F9                                      ; fully-qualified     # 🧹 E11.0 broom
-1F9FA                                      ; fully-qualified     # 🧺 E11.0 basket
-1F9FB                                      ; fully-qualified     # 🧻 E11.0 roll of paper
-1FAA3                                      ; fully-qualified     # 🪣 E13.0 bucket
-1F9FC                                      ; fully-qualified     # 🧼 E11.0 soap
-1FAA5                                      ; fully-qualified     # 🪥 E13.0 toothbrush
-1F9FD                                      ; fully-qualified     # 🧽 E11.0 sponge
-1F9EF                                      ; fully-qualified     # 🧯 E11.0 fire extinguisher
-1F6D2                                      ; fully-qualified     # 🛒 E3.0 shopping cart
+1F6AA                                                  ; fully-qualified     # 🚪 E0.6 door
+1F6D7                                                  ; fully-qualified     # 🛗 E13.0 elevator
+1FA9E                                                  ; fully-qualified     # 🪞 E13.0 mirror
+1FA9F                                                  ; fully-qualified     # 🪟 E13.0 window
+1F6CF FE0F                                             ; fully-qualified     # 🛏️ E0.7 bed
+1F6CF                                                  ; unqualified         # 🛏 E0.7 bed
+1F6CB FE0F                                             ; fully-qualified     # 🛋️ E0.7 couch and lamp
+1F6CB                                                  ; unqualified         # 🛋 E0.7 couch and lamp
+1FA91                                                  ; fully-qualified     # 🪑 E12.0 chair
+1F6BD                                                  ; fully-qualified     # 🚽 E0.6 toilet
+1FAA0                                                  ; fully-qualified     # 🪠 E13.0 plunger
+1F6BF                                                  ; fully-qualified     # 🚿 E1.0 shower
+1F6C1                                                  ; fully-qualified     # 🛁 E1.0 bathtub
+1FAA4                                                  ; fully-qualified     # 🪤 E13.0 mouse trap
+1FA92                                                  ; fully-qualified     # 🪒 E12.0 razor
+1F9F4                                                  ; fully-qualified     # 🧴 E11.0 lotion bottle
+1F9F7                                                  ; fully-qualified     # 🧷 E11.0 safety pin
+1F9F9                                                  ; fully-qualified     # 🧹 E11.0 broom
+1F9FA                                                  ; fully-qualified     # 🧺 E11.0 basket
+1F9FB                                                  ; fully-qualified     # 🧻 E11.0 roll of paper
+1FAA3                                                  ; fully-qualified     # 🪣 E13.0 bucket
+1F9FC                                                  ; fully-qualified     # 🧼 E11.0 soap
+1FAA5                                                  ; fully-qualified     # 🪥 E13.0 toothbrush
+1F9FD                                                  ; fully-qualified     # 🧽 E11.0 sponge
+1F9EF                                                  ; fully-qualified     # 🧯 E11.0 fire extinguisher
+1F6D2                                                  ; fully-qualified     # 🛒 E3.0 shopping cart
 
 # subgroup: other-object
-1F6AC                                      ; fully-qualified     # 🚬 E0.6 cigarette
-26B0 FE0F                                  ; fully-qualified     # ⚰️ E1.0 coffin
-26B0                                       ; unqualified         # ⚰ E1.0 coffin
-1FAA6                                      ; fully-qualified     # 🪦 E13.0 headstone
-26B1 FE0F                                  ; fully-qualified     # ⚱️ E1.0 funeral urn
-26B1                                       ; unqualified         # ⚱ E1.0 funeral urn
-1F5FF                                      ; fully-qualified     # 🗿 E0.6 moai
-1FAA7                                      ; fully-qualified     # 🪧 E13.0 placard
+1F6AC                                                  ; fully-qualified     # 🚬 E0.6 cigarette
+26B0 FE0F                                              ; fully-qualified     # ⚰️ E1.0 coffin
+26B0                                                   ; unqualified         # ⚰ E1.0 coffin
+1FAA6                                                  ; fully-qualified     # 🪦 E13.0 headstone
+26B1 FE0F                                              ; fully-qualified     # ⚱️ E1.0 funeral urn
+26B1                                                   ; unqualified         # ⚱ E1.0 funeral urn
+1F5FF                                                  ; fully-qualified     # 🗿 E0.6 moai
+1FAA7                                                  ; fully-qualified     # 🪧 E13.0 placard
 
 # Objects subtotal:		299
 # Objects subtotal:		299	w/o modifiers
@@ -3831,333 +4253,333 @@
 # group: Symbols
 
 # subgroup: transport-sign
-1F3E7                                      ; fully-qualified     # 🏧 E0.6 ATM sign
-1F6AE                                      ; fully-qualified     # 🚮 E1.0 litter in bin sign
-1F6B0                                      ; fully-qualified     # 🚰 E1.0 potable water
-267F                                       ; fully-qualified     # ♿ E0.6 wheelchair symbol
-1F6B9                                      ; fully-qualified     # 🚹 E0.6 men’s room
-1F6BA                                      ; fully-qualified     # 🚺 E0.6 women’s room
-1F6BB                                      ; fully-qualified     # 🚻 E0.6 restroom
-1F6BC                                      ; fully-qualified     # 🚼 E0.6 baby symbol
-1F6BE                                      ; fully-qualified     # 🚾 E0.6 water closet
-1F6C2                                      ; fully-qualified     # 🛂 E1.0 passport control
-1F6C3                                      ; fully-qualified     # 🛃 E1.0 customs
-1F6C4                                      ; fully-qualified     # 🛄 E1.0 baggage claim
-1F6C5                                      ; fully-qualified     # 🛅 E1.0 left luggage
+1F3E7                                                  ; fully-qualified     # 🏧 E0.6 ATM sign
+1F6AE                                                  ; fully-qualified     # 🚮 E1.0 litter in bin sign
+1F6B0                                                  ; fully-qualified     # 🚰 E1.0 potable water
+267F                                                   ; fully-qualified     # ♿ E0.6 wheelchair symbol
+1F6B9                                                  ; fully-qualified     # 🚹 E0.6 men’s room
+1F6BA                                                  ; fully-qualified     # 🚺 E0.6 women’s room
+1F6BB                                                  ; fully-qualified     # 🚻 E0.6 restroom
+1F6BC                                                  ; fully-qualified     # 🚼 E0.6 baby symbol
+1F6BE                                                  ; fully-qualified     # 🚾 E0.6 water closet
+1F6C2                                                  ; fully-qualified     # 🛂 E1.0 passport control
+1F6C3                                                  ; fully-qualified     # 🛃 E1.0 customs
+1F6C4                                                  ; fully-qualified     # 🛄 E1.0 baggage claim
+1F6C5                                                  ; fully-qualified     # 🛅 E1.0 left luggage
 
 # subgroup: warning
-26A0 FE0F                                  ; fully-qualified     # ⚠️ E0.6 warning
-26A0                                       ; unqualified         # ⚠ E0.6 warning
-1F6B8                                      ; fully-qualified     # 🚸 E1.0 children crossing
-26D4                                       ; fully-qualified     # ⛔ E0.6 no entry
-1F6AB                                      ; fully-qualified     # 🚫 E0.6 prohibited
-1F6B3                                      ; fully-qualified     # 🚳 E1.0 no bicycles
-1F6AD                                      ; fully-qualified     # 🚭 E0.6 no smoking
-1F6AF                                      ; fully-qualified     # 🚯 E1.0 no littering
-1F6B1                                      ; fully-qualified     # 🚱 E1.0 non-potable water
-1F6B7                                      ; fully-qualified     # 🚷 E1.0 no pedestrians
-1F4F5                                      ; fully-qualified     # 📵 E1.0 no mobile phones
-1F51E                                      ; fully-qualified     # 🔞 E0.6 no one under eighteen
-2622 FE0F                                  ; fully-qualified     # ☢️ E1.0 radioactive
-2622                                       ; unqualified         # ☢ E1.0 radioactive
-2623 FE0F                                  ; fully-qualified     # ☣️ E1.0 biohazard
-2623                                       ; unqualified         # ☣ E1.0 biohazard
+26A0 FE0F                                              ; fully-qualified     # ⚠️ E0.6 warning
+26A0                                                   ; unqualified         # ⚠ E0.6 warning
+1F6B8                                                  ; fully-qualified     # 🚸 E1.0 children crossing
+26D4                                                   ; fully-qualified     # ⛔ E0.6 no entry
+1F6AB                                                  ; fully-qualified     # 🚫 E0.6 prohibited
+1F6B3                                                  ; fully-qualified     # 🚳 E1.0 no bicycles
+1F6AD                                                  ; fully-qualified     # 🚭 E0.6 no smoking
+1F6AF                                                  ; fully-qualified     # 🚯 E1.0 no littering
+1F6B1                                                  ; fully-qualified     # 🚱 E1.0 non-potable water
+1F6B7                                                  ; fully-qualified     # 🚷 E1.0 no pedestrians
+1F4F5                                                  ; fully-qualified     # 📵 E1.0 no mobile phones
+1F51E                                                  ; fully-qualified     # 🔞 E0.6 no one under eighteen
+2622 FE0F                                              ; fully-qualified     # ☢️ E1.0 radioactive
+2622                                                   ; unqualified         # ☢ E1.0 radioactive
+2623 FE0F                                              ; fully-qualified     # ☣️ E1.0 biohazard
+2623                                                   ; unqualified         # ☣ E1.0 biohazard
 
 # subgroup: arrow
-2B06 FE0F                                  ; fully-qualified     # ⬆️ E0.6 up arrow
-2B06                                       ; unqualified         # ⬆ E0.6 up arrow
-2197 FE0F                                  ; fully-qualified     # ↗️ E0.6 up-right arrow
-2197                                       ; unqualified         # ↗ E0.6 up-right arrow
-27A1 FE0F                                  ; fully-qualified     # ➡️ E0.6 right arrow
-27A1                                       ; unqualified         # ➡ E0.6 right arrow
-2198 FE0F                                  ; fully-qualified     # ↘️ E0.6 down-right arrow
-2198                                       ; unqualified         # ↘ E0.6 down-right arrow
-2B07 FE0F                                  ; fully-qualified     # ⬇️ E0.6 down arrow
-2B07                                       ; unqualified         # ⬇ E0.6 down arrow
-2199 FE0F                                  ; fully-qualified     # ↙️ E0.6 down-left arrow
-2199                                       ; unqualified         # ↙ E0.6 down-left arrow
-2B05 FE0F                                  ; fully-qualified     # ⬅️ E0.6 left arrow
-2B05                                       ; unqualified         # ⬅ E0.6 left arrow
-2196 FE0F                                  ; fully-qualified     # ↖️ E0.6 up-left arrow
-2196                                       ; unqualified         # ↖ E0.6 up-left arrow
-2195 FE0F                                  ; fully-qualified     # ↕️ E0.6 up-down arrow
-2195                                       ; unqualified         # ↕ E0.6 up-down arrow
-2194 FE0F                                  ; fully-qualified     # ↔️ E0.6 left-right arrow
-2194                                       ; unqualified         # ↔ E0.6 left-right arrow
-21A9 FE0F                                  ; fully-qualified     # ↩️ E0.6 right arrow curving left
-21A9                                       ; unqualified         # ↩ E0.6 right arrow curving left
-21AA FE0F                                  ; fully-qualified     # ↪️ E0.6 left arrow curving right
-21AA                                       ; unqualified         # ↪ E0.6 left arrow curving right
-2934 FE0F                                  ; fully-qualified     # ⤴️ E0.6 right arrow curving up
-2934                                       ; unqualified         # ⤴ E0.6 right arrow curving up
-2935 FE0F                                  ; fully-qualified     # ⤵️ E0.6 right arrow curving down
-2935                                       ; unqualified         # ⤵ E0.6 right arrow curving down
-1F503                                      ; fully-qualified     # 🔃 E0.6 clockwise vertical arrows
-1F504                                      ; fully-qualified     # 🔄 E1.0 counterclockwise arrows button
-1F519                                      ; fully-qualified     # 🔙 E0.6 BACK arrow
-1F51A                                      ; fully-qualified     # 🔚 E0.6 END arrow
-1F51B                                      ; fully-qualified     # 🔛 E0.6 ON! arrow
-1F51C                                      ; fully-qualified     # 🔜 E0.6 SOON arrow
-1F51D                                      ; fully-qualified     # 🔝 E0.6 TOP arrow
+2B06 FE0F                                              ; fully-qualified     # ⬆️ E0.6 up arrow
+2B06                                                   ; unqualified         # ⬆ E0.6 up arrow
+2197 FE0F                                              ; fully-qualified     # ↗️ E0.6 up-right arrow
+2197                                                   ; unqualified         # ↗ E0.6 up-right arrow
+27A1 FE0F                                              ; fully-qualified     # ➡️ E0.6 right arrow
+27A1                                                   ; unqualified         # ➡ E0.6 right arrow
+2198 FE0F                                              ; fully-qualified     # ↘️ E0.6 down-right arrow
+2198                                                   ; unqualified         # ↘ E0.6 down-right arrow
+2B07 FE0F                                              ; fully-qualified     # ⬇️ E0.6 down arrow
+2B07                                                   ; unqualified         # ⬇ E0.6 down arrow
+2199 FE0F                                              ; fully-qualified     # ↙️ E0.6 down-left arrow
+2199                                                   ; unqualified         # ↙ E0.6 down-left arrow
+2B05 FE0F                                              ; fully-qualified     # ⬅️ E0.6 left arrow
+2B05                                                   ; unqualified         # ⬅ E0.6 left arrow
+2196 FE0F                                              ; fully-qualified     # ↖️ E0.6 up-left arrow
+2196                                                   ; unqualified         # ↖ E0.6 up-left arrow
+2195 FE0F                                              ; fully-qualified     # ↕️ E0.6 up-down arrow
+2195                                                   ; unqualified         # ↕ E0.6 up-down arrow
+2194 FE0F                                              ; fully-qualified     # ↔️ E0.6 left-right arrow
+2194                                                   ; unqualified         # ↔ E0.6 left-right arrow
+21A9 FE0F                                              ; fully-qualified     # ↩️ E0.6 right arrow curving left
+21A9                                                   ; unqualified         # ↩ E0.6 right arrow curving left
+21AA FE0F                                              ; fully-qualified     # ↪️ E0.6 left arrow curving right
+21AA                                                   ; unqualified         # ↪ E0.6 left arrow curving right
+2934 FE0F                                              ; fully-qualified     # ⤴️ E0.6 right arrow curving up
+2934                                                   ; unqualified         # ⤴ E0.6 right arrow curving up
+2935 FE0F                                              ; fully-qualified     # ⤵️ E0.6 right arrow curving down
+2935                                                   ; unqualified         # ⤵ E0.6 right arrow curving down
+1F503                                                  ; fully-qualified     # 🔃 E0.6 clockwise vertical arrows
+1F504                                                  ; fully-qualified     # 🔄 E1.0 counterclockwise arrows button
+1F519                                                  ; fully-qualified     # 🔙 E0.6 BACK arrow
+1F51A                                                  ; fully-qualified     # 🔚 E0.6 END arrow
+1F51B                                                  ; fully-qualified     # 🔛 E0.6 ON! arrow
+1F51C                                                  ; fully-qualified     # 🔜 E0.6 SOON arrow
+1F51D                                                  ; fully-qualified     # 🔝 E0.6 TOP arrow
 
 # subgroup: religion
-1F6D0                                      ; fully-qualified     # 🛐 E1.0 place of worship
-269B FE0F                                  ; fully-qualified     # ⚛️ E1.0 atom symbol
-269B                                       ; unqualified         # ⚛ E1.0 atom symbol
-1F549 FE0F                                 ; fully-qualified     # 🕉️ E0.7 om
-1F549                                      ; unqualified         # 🕉 E0.7 om
-2721 FE0F                                  ; fully-qualified     # ✡️ E0.7 star of David
-2721                                       ; unqualified         # ✡ E0.7 star of David
-2638 FE0F                                  ; fully-qualified     # ☸️ E0.7 wheel of dharma
-2638                                       ; unqualified         # ☸ E0.7 wheel of dharma
-262F FE0F                                  ; fully-qualified     # ☯️ E0.7 yin yang
-262F                                       ; unqualified         # ☯ E0.7 yin yang
-271D FE0F                                  ; fully-qualified     # ✝️ E0.7 latin cross
-271D                                       ; unqualified         # ✝ E0.7 latin cross
-2626 FE0F                                  ; fully-qualified     # ☦️ E1.0 orthodox cross
-2626                                       ; unqualified         # ☦ E1.0 orthodox cross
-262A FE0F                                  ; fully-qualified     # ☪️ E0.7 star and crescent
-262A                                       ; unqualified         # ☪ E0.7 star and crescent
-262E FE0F                                  ; fully-qualified     # ☮️ E1.0 peace symbol
-262E                                       ; unqualified         # ☮ E1.0 peace symbol
-1F54E                                      ; fully-qualified     # 🕎 E1.0 menorah
-1F52F                                      ; fully-qualified     # 🔯 E0.6 dotted six-pointed star
+1F6D0                                                  ; fully-qualified     # 🛐 E1.0 place of worship
+269B FE0F                                              ; fully-qualified     # ⚛️ E1.0 atom symbol
+269B                                                   ; unqualified         # ⚛ E1.0 atom symbol
+1F549 FE0F                                             ; fully-qualified     # 🕉️ E0.7 om
+1F549                                                  ; unqualified         # 🕉 E0.7 om
+2721 FE0F                                              ; fully-qualified     # ✡️ E0.7 star of David
+2721                                                   ; unqualified         # ✡ E0.7 star of David
+2638 FE0F                                              ; fully-qualified     # ☸️ E0.7 wheel of dharma
+2638                                                   ; unqualified         # ☸ E0.7 wheel of dharma
+262F FE0F                                              ; fully-qualified     # ☯️ E0.7 yin yang
+262F                                                   ; unqualified         # ☯ E0.7 yin yang
+271D FE0F                                              ; fully-qualified     # ✝️ E0.7 latin cross
+271D                                                   ; unqualified         # ✝ E0.7 latin cross
+2626 FE0F                                              ; fully-qualified     # ☦️ E1.0 orthodox cross
+2626                                                   ; unqualified         # ☦ E1.0 orthodox cross
+262A FE0F                                              ; fully-qualified     # ☪️ E0.7 star and crescent
+262A                                                   ; unqualified         # ☪ E0.7 star and crescent
+262E FE0F                                              ; fully-qualified     # ☮️ E1.0 peace symbol
+262E                                                   ; unqualified         # ☮ E1.0 peace symbol
+1F54E                                                  ; fully-qualified     # 🕎 E1.0 menorah
+1F52F                                                  ; fully-qualified     # 🔯 E0.6 dotted six-pointed star
 
 # subgroup: zodiac
-2648                                       ; fully-qualified     # ♈ E0.6 Aries
-2649                                       ; fully-qualified     # ♉ E0.6 Taurus
-264A                                       ; fully-qualified     # ♊ E0.6 Gemini
-264B                                       ; fully-qualified     # ♋ E0.6 Cancer
-264C                                       ; fully-qualified     # ♌ E0.6 Leo
-264D                                       ; fully-qualified     # ♍ E0.6 Virgo
-264E                                       ; fully-qualified     # ♎ E0.6 Libra
-264F                                       ; fully-qualified     # ♏ E0.6 Scorpio
-2650                                       ; fully-qualified     # ♐ E0.6 Sagittarius
-2651                                       ; fully-qualified     # ♑ E0.6 Capricorn
-2652                                       ; fully-qualified     # ♒ E0.6 Aquarius
-2653                                       ; fully-qualified     # ♓ E0.6 Pisces
-26CE                                       ; fully-qualified     # ⛎ E0.6 Ophiuchus
+2648                                                   ; fully-qualified     # ♈ E0.6 Aries
+2649                                                   ; fully-qualified     # ♉ E0.6 Taurus
+264A                                                   ; fully-qualified     # ♊ E0.6 Gemini
+264B                                                   ; fully-qualified     # ♋ E0.6 Cancer
+264C                                                   ; fully-qualified     # ♌ E0.6 Leo
+264D                                                   ; fully-qualified     # ♍ E0.6 Virgo
+264E                                                   ; fully-qualified     # ♎ E0.6 Libra
+264F                                                   ; fully-qualified     # ♏ E0.6 Scorpio
+2650                                                   ; fully-qualified     # ♐ E0.6 Sagittarius
+2651                                                   ; fully-qualified     # ♑ E0.6 Capricorn
+2652                                                   ; fully-qualified     # ♒ E0.6 Aquarius
+2653                                                   ; fully-qualified     # ♓ E0.6 Pisces
+26CE                                                   ; fully-qualified     # ⛎ E0.6 Ophiuchus
 
 # subgroup: av-symbol
-1F500                                      ; fully-qualified     # 🔀 E1.0 shuffle tracks button
-1F501                                      ; fully-qualified     # 🔁 E1.0 repeat button
-1F502                                      ; fully-qualified     # 🔂 E1.0 repeat single button
-25B6 FE0F                                  ; fully-qualified     # ▶️ E0.6 play button
-25B6                                       ; unqualified         # ▶ E0.6 play button
-23E9                                       ; fully-qualified     # ⏩ E0.6 fast-forward button
-23ED FE0F                                  ; fully-qualified     # ⏭️ E0.7 next track button
-23ED                                       ; unqualified         # ⏭ E0.7 next track button
-23EF FE0F                                  ; fully-qualified     # ⏯️ E1.0 play or pause button
-23EF                                       ; unqualified         # ⏯ E1.0 play or pause button
-25C0 FE0F                                  ; fully-qualified     # ◀️ E0.6 reverse button
-25C0                                       ; unqualified         # ◀ E0.6 reverse button
-23EA                                       ; fully-qualified     # ⏪ E0.6 fast reverse button
-23EE FE0F                                  ; fully-qualified     # ⏮️ E0.7 last track button
-23EE                                       ; unqualified         # ⏮ E0.7 last track button
-1F53C                                      ; fully-qualified     # 🔼 E0.6 upwards button
-23EB                                       ; fully-qualified     # ⏫ E0.6 fast up button
-1F53D                                      ; fully-qualified     # 🔽 E0.6 downwards button
-23EC                                       ; fully-qualified     # ⏬ E0.6 fast down button
-23F8 FE0F                                  ; fully-qualified     # ⏸️ E0.7 pause button
-23F8                                       ; unqualified         # ⏸ E0.7 pause button
-23F9 FE0F                                  ; fully-qualified     # ⏹️ E0.7 stop button
-23F9                                       ; unqualified         # ⏹ E0.7 stop button
-23FA FE0F                                  ; fully-qualified     # ⏺️ E0.7 record button
-23FA                                       ; unqualified         # ⏺ E0.7 record button
-23CF FE0F                                  ; fully-qualified     # ⏏️ E1.0 eject button
-23CF                                       ; unqualified         # ⏏ E1.0 eject button
-1F3A6                                      ; fully-qualified     # 🎦 E0.6 cinema
-1F505                                      ; fully-qualified     # 🔅 E1.0 dim button
-1F506                                      ; fully-qualified     # 🔆 E1.0 bright button
-1F4F6                                      ; fully-qualified     # 📶 E0.6 antenna bars
-1F4F3                                      ; fully-qualified     # 📳 E0.6 vibration mode
-1F4F4                                      ; fully-qualified     # 📴 E0.6 mobile phone off
+1F500                                                  ; fully-qualified     # 🔀 E1.0 shuffle tracks button
+1F501                                                  ; fully-qualified     # 🔁 E1.0 repeat button
+1F502                                                  ; fully-qualified     # 🔂 E1.0 repeat single button
+25B6 FE0F                                              ; fully-qualified     # ▶️ E0.6 play button
+25B6                                                   ; unqualified         # ▶ E0.6 play button
+23E9                                                   ; fully-qualified     # ⏩ E0.6 fast-forward button
+23ED FE0F                                              ; fully-qualified     # ⏭️ E0.7 next track button
+23ED                                                   ; unqualified         # ⏭ E0.7 next track button
+23EF FE0F                                              ; fully-qualified     # ⏯️ E1.0 play or pause button
+23EF                                                   ; unqualified         # ⏯ E1.0 play or pause button
+25C0 FE0F                                              ; fully-qualified     # ◀️ E0.6 reverse button
+25C0                                                   ; unqualified         # ◀ E0.6 reverse button
+23EA                                                   ; fully-qualified     # ⏪ E0.6 fast reverse button
+23EE FE0F                                              ; fully-qualified     # ⏮️ E0.7 last track button
+23EE                                                   ; unqualified         # ⏮ E0.7 last track button
+1F53C                                                  ; fully-qualified     # 🔼 E0.6 upwards button
+23EB                                                   ; fully-qualified     # ⏫ E0.6 fast up button
+1F53D                                                  ; fully-qualified     # 🔽 E0.6 downwards button
+23EC                                                   ; fully-qualified     # ⏬ E0.6 fast down button
+23F8 FE0F                                              ; fully-qualified     # ⏸️ E0.7 pause button
+23F8                                                   ; unqualified         # ⏸ E0.7 pause button
+23F9 FE0F                                              ; fully-qualified     # ⏹️ E0.7 stop button
+23F9                                                   ; unqualified         # ⏹ E0.7 stop button
+23FA FE0F                                              ; fully-qualified     # ⏺️ E0.7 record button
+23FA                                                   ; unqualified         # ⏺ E0.7 record button
+23CF FE0F                                              ; fully-qualified     # ⏏️ E1.0 eject button
+23CF                                                   ; unqualified         # ⏏ E1.0 eject button
+1F3A6                                                  ; fully-qualified     # 🎦 E0.6 cinema
+1F505                                                  ; fully-qualified     # 🔅 E1.0 dim button
+1F506                                                  ; fully-qualified     # 🔆 E1.0 bright button
+1F4F6                                                  ; fully-qualified     # 📶 E0.6 antenna bars
+1F4F3                                                  ; fully-qualified     # 📳 E0.6 vibration mode
+1F4F4                                                  ; fully-qualified     # 📴 E0.6 mobile phone off
 
 # subgroup: gender
-2640 FE0F                                  ; fully-qualified     # ♀️ E4.0 female sign
-2640                                       ; unqualified         # ♀ E4.0 female sign
-2642 FE0F                                  ; fully-qualified     # ♂️ E4.0 male sign
-2642                                       ; unqualified         # ♂ E4.0 male sign
-26A7 FE0F                                  ; fully-qualified     # ⚧️ E13.0 transgender symbol
-26A7                                       ; unqualified         # ⚧ E13.0 transgender symbol
+2640 FE0F                                              ; fully-qualified     # ♀️ E4.0 female sign
+2640                                                   ; unqualified         # ♀ E4.0 female sign
+2642 FE0F                                              ; fully-qualified     # ♂️ E4.0 male sign
+2642                                                   ; unqualified         # ♂ E4.0 male sign
+26A7 FE0F                                              ; fully-qualified     # ⚧️ E13.0 transgender symbol
+26A7                                                   ; unqualified         # ⚧ E13.0 transgender symbol
 
 # subgroup: math
-2716 FE0F                                  ; fully-qualified     # ✖️ E0.6 multiply
-2716                                       ; unqualified         # ✖ E0.6 multiply
-2795                                       ; fully-qualified     # ➕ E0.6 plus
-2796                                       ; fully-qualified     # ➖ E0.6 minus
-2797                                       ; fully-qualified     # ➗ E0.6 divide
-267E FE0F                                  ; fully-qualified     # ♾️ E11.0 infinity
-267E                                       ; unqualified         # ♾ E11.0 infinity
+2716 FE0F                                              ; fully-qualified     # ✖️ E0.6 multiply
+2716                                                   ; unqualified         # ✖ E0.6 multiply
+2795                                                   ; fully-qualified     # ➕ E0.6 plus
+2796                                                   ; fully-qualified     # ➖ E0.6 minus
+2797                                                   ; fully-qualified     # ➗ E0.6 divide
+267E FE0F                                              ; fully-qualified     # ♾️ E11.0 infinity
+267E                                                   ; unqualified         # ♾ E11.0 infinity
 
 # subgroup: punctuation
-203C FE0F                                  ; fully-qualified     # ‼️ E0.6 double exclamation mark
-203C                                       ; unqualified         # ‼ E0.6 double exclamation mark
-2049 FE0F                                  ; fully-qualified     # ⁉️ E0.6 exclamation question mark
-2049                                       ; unqualified         # ⁉ E0.6 exclamation question mark
-2753                                       ; fully-qualified     # ❓ E0.6 question mark
-2754                                       ; fully-qualified     # ❔ E0.6 white question mark
-2755                                       ; fully-qualified     # ❕ E0.6 white exclamation mark
-2757                                       ; fully-qualified     # ❗ E0.6 exclamation mark
-3030 FE0F                                  ; fully-qualified     # 〰️ E0.6 wavy dash
-3030                                       ; unqualified         # 〰 E0.6 wavy dash
+203C FE0F                                              ; fully-qualified     # ‼️ E0.6 double exclamation mark
+203C                                                   ; unqualified         # ‼ E0.6 double exclamation mark
+2049 FE0F                                              ; fully-qualified     # ⁉️ E0.6 exclamation question mark
+2049                                                   ; unqualified         # ⁉ E0.6 exclamation question mark
+2753                                                   ; fully-qualified     # ❓ E0.6 red question mark
+2754                                                   ; fully-qualified     # ❔ E0.6 white question mark
+2755                                                   ; fully-qualified     # ❕ E0.6 white exclamation mark
+2757                                                   ; fully-qualified     # ❗ E0.6 red exclamation mark
+3030 FE0F                                              ; fully-qualified     # 〰️ E0.6 wavy dash
+3030                                                   ; unqualified         # 〰 E0.6 wavy dash
 
 # subgroup: currency
-1F4B1                                      ; fully-qualified     # 💱 E0.6 currency exchange
-1F4B2                                      ; fully-qualified     # 💲 E0.6 heavy dollar sign
+1F4B1                                                  ; fully-qualified     # 💱 E0.6 currency exchange
+1F4B2                                                  ; fully-qualified     # 💲 E0.6 heavy dollar sign
 
 # subgroup: other-symbol
-2695 FE0F                                  ; fully-qualified     # ⚕️ E4.0 medical symbol
-2695                                       ; unqualified         # ⚕ E4.0 medical symbol
-267B FE0F                                  ; fully-qualified     # ♻️ E0.6 recycling symbol
-267B                                       ; unqualified         # ♻ E0.6 recycling symbol
-269C FE0F                                  ; fully-qualified     # ⚜️ E1.0 fleur-de-lis
-269C                                       ; unqualified         # ⚜ E1.0 fleur-de-lis
-1F531                                      ; fully-qualified     # 🔱 E0.6 trident emblem
-1F4DB                                      ; fully-qualified     # 📛 E0.6 name badge
-1F530                                      ; fully-qualified     # 🔰 E0.6 Japanese symbol for beginner
-2B55                                       ; fully-qualified     # ⭕ E0.6 hollow red circle
-2705                                       ; fully-qualified     # ✅ E0.6 check mark button
-2611 FE0F                                  ; fully-qualified     # ☑️ E0.6 check box with check
-2611                                       ; unqualified         # ☑ E0.6 check box with check
-2714 FE0F                                  ; fully-qualified     # ✔️ E0.6 check mark
-2714                                       ; unqualified         # ✔ E0.6 check mark
-274C                                       ; fully-qualified     # ❌ E0.6 cross mark
-274E                                       ; fully-qualified     # ❎ E0.6 cross mark button
-27B0                                       ; fully-qualified     # ➰ E0.6 curly loop
-27BF                                       ; fully-qualified     # ➿ E1.0 double curly loop
-303D FE0F                                  ; fully-qualified     # 〽️ E0.6 part alternation mark
-303D                                       ; unqualified         # 〽 E0.6 part alternation mark
-2733 FE0F                                  ; fully-qualified     # ✳️ E0.6 eight-spoked asterisk
-2733                                       ; unqualified         # ✳ E0.6 eight-spoked asterisk
-2734 FE0F                                  ; fully-qualified     # ✴️ E0.6 eight-pointed star
-2734                                       ; unqualified         # ✴ E0.6 eight-pointed star
-2747 FE0F                                  ; fully-qualified     # ❇️ E0.6 sparkle
-2747                                       ; unqualified         # ❇ E0.6 sparkle
-00A9 FE0F                                  ; fully-qualified     # ©️ E0.6 copyright
-00A9                                       ; unqualified         # © E0.6 copyright
-00AE FE0F                                  ; fully-qualified     # ®️ E0.6 registered
-00AE                                       ; unqualified         # ® E0.6 registered
-2122 FE0F                                  ; fully-qualified     # ™️ E0.6 trade mark
-2122                                       ; unqualified         # ™ E0.6 trade mark
+2695 FE0F                                              ; fully-qualified     # ⚕️ E4.0 medical symbol
+2695                                                   ; unqualified         # ⚕ E4.0 medical symbol
+267B FE0F                                              ; fully-qualified     # ♻️ E0.6 recycling symbol
+267B                                                   ; unqualified         # ♻ E0.6 recycling symbol
+269C FE0F                                              ; fully-qualified     # ⚜️ E1.0 fleur-de-lis
+269C                                                   ; unqualified         # ⚜ E1.0 fleur-de-lis
+1F531                                                  ; fully-qualified     # 🔱 E0.6 trident emblem
+1F4DB                                                  ; fully-qualified     # 📛 E0.6 name badge
+1F530                                                  ; fully-qualified     # 🔰 E0.6 Japanese symbol for beginner
+2B55                                                   ; fully-qualified     # ⭕ E0.6 hollow red circle
+2705                                                   ; fully-qualified     # ✅ E0.6 check mark button
+2611 FE0F                                              ; fully-qualified     # ☑️ E0.6 check box with check
+2611                                                   ; unqualified         # ☑ E0.6 check box with check
+2714 FE0F                                              ; fully-qualified     # ✔️ E0.6 check mark
+2714                                                   ; unqualified         # ✔ E0.6 check mark
+274C                                                   ; fully-qualified     # ❌ E0.6 cross mark
+274E                                                   ; fully-qualified     # ❎ E0.6 cross mark button
+27B0                                                   ; fully-qualified     # ➰ E0.6 curly loop
+27BF                                                   ; fully-qualified     # ➿ E1.0 double curly loop
+303D FE0F                                              ; fully-qualified     # 〽️ E0.6 part alternation mark
+303D                                                   ; unqualified         # 〽 E0.6 part alternation mark
+2733 FE0F                                              ; fully-qualified     # ✳️ E0.6 eight-spoked asterisk
+2733                                                   ; unqualified         # ✳ E0.6 eight-spoked asterisk
+2734 FE0F                                              ; fully-qualified     # ✴️ E0.6 eight-pointed star
+2734                                                   ; unqualified         # ✴ E0.6 eight-pointed star
+2747 FE0F                                              ; fully-qualified     # ❇️ E0.6 sparkle
+2747                                                   ; unqualified         # ❇ E0.6 sparkle
+00A9 FE0F                                              ; fully-qualified     # ©️ E0.6 copyright
+00A9                                                   ; unqualified         # © E0.6 copyright
+00AE FE0F                                              ; fully-qualified     # ®️ E0.6 registered
+00AE                                                   ; unqualified         # ® E0.6 registered
+2122 FE0F                                              ; fully-qualified     # ™️ E0.6 trade mark
+2122                                                   ; unqualified         # ™ E0.6 trade mark
 
 # subgroup: keycap
-0023 FE0F 20E3                             ; fully-qualified     # #️⃣ E0.6 keycap: #
-0023 20E3                                  ; unqualified         # #⃣ E0.6 keycap: #
-002A FE0F 20E3                             ; fully-qualified     # *️⃣ E2.0 keycap: *
-002A 20E3                                  ; unqualified         # *⃣ E2.0 keycap: *
-0030 FE0F 20E3                             ; fully-qualified     # 0️⃣ E0.6 keycap: 0
-0030 20E3                                  ; unqualified         # 0⃣ E0.6 keycap: 0
-0031 FE0F 20E3                             ; fully-qualified     # 1️⃣ E0.6 keycap: 1
-0031 20E3                                  ; unqualified         # 1⃣ E0.6 keycap: 1
-0032 FE0F 20E3                             ; fully-qualified     # 2️⃣ E0.6 keycap: 2
-0032 20E3                                  ; unqualified         # 2⃣ E0.6 keycap: 2
-0033 FE0F 20E3                             ; fully-qualified     # 3️⃣ E0.6 keycap: 3
-0033 20E3                                  ; unqualified         # 3⃣ E0.6 keycap: 3
-0034 FE0F 20E3                             ; fully-qualified     # 4️⃣ E0.6 keycap: 4
-0034 20E3                                  ; unqualified         # 4⃣ E0.6 keycap: 4
-0035 FE0F 20E3                             ; fully-qualified     # 5️⃣ E0.6 keycap: 5
-0035 20E3                                  ; unqualified         # 5⃣ E0.6 keycap: 5
-0036 FE0F 20E3                             ; fully-qualified     # 6️⃣ E0.6 keycap: 6
-0036 20E3                                  ; unqualified         # 6⃣ E0.6 keycap: 6
-0037 FE0F 20E3                             ; fully-qualified     # 7️⃣ E0.6 keycap: 7
-0037 20E3                                  ; unqualified         # 7⃣ E0.6 keycap: 7
-0038 FE0F 20E3                             ; fully-qualified     # 8️⃣ E0.6 keycap: 8
-0038 20E3                                  ; unqualified         # 8⃣ E0.6 keycap: 8
-0039 FE0F 20E3                             ; fully-qualified     # 9️⃣ E0.6 keycap: 9
-0039 20E3                                  ; unqualified         # 9⃣ E0.6 keycap: 9
-1F51F                                      ; fully-qualified     # 🔟 E0.6 keycap: 10
+0023 FE0F 20E3                                         ; fully-qualified     # #️⃣ E0.6 keycap: #
+0023 20E3                                              ; unqualified         # #⃣ E0.6 keycap: #
+002A FE0F 20E3                                         ; fully-qualified     # *️⃣ E2.0 keycap: *
+002A 20E3                                              ; unqualified         # *⃣ E2.0 keycap: *
+0030 FE0F 20E3                                         ; fully-qualified     # 0️⃣ E0.6 keycap: 0
+0030 20E3                                              ; unqualified         # 0⃣ E0.6 keycap: 0
+0031 FE0F 20E3                                         ; fully-qualified     # 1️⃣ E0.6 keycap: 1
+0031 20E3                                              ; unqualified         # 1⃣ E0.6 keycap: 1
+0032 FE0F 20E3                                         ; fully-qualified     # 2️⃣ E0.6 keycap: 2
+0032 20E3                                              ; unqualified         # 2⃣ E0.6 keycap: 2
+0033 FE0F 20E3                                         ; fully-qualified     # 3️⃣ E0.6 keycap: 3
+0033 20E3                                              ; unqualified         # 3⃣ E0.6 keycap: 3
+0034 FE0F 20E3                                         ; fully-qualified     # 4️⃣ E0.6 keycap: 4
+0034 20E3                                              ; unqualified         # 4⃣ E0.6 keycap: 4
+0035 FE0F 20E3                                         ; fully-qualified     # 5️⃣ E0.6 keycap: 5
+0035 20E3                                              ; unqualified         # 5⃣ E0.6 keycap: 5
+0036 FE0F 20E3                                         ; fully-qualified     # 6️⃣ E0.6 keycap: 6
+0036 20E3                                              ; unqualified         # 6⃣ E0.6 keycap: 6
+0037 FE0F 20E3                                         ; fully-qualified     # 7️⃣ E0.6 keycap: 7
+0037 20E3                                              ; unqualified         # 7⃣ E0.6 keycap: 7
+0038 FE0F 20E3                                         ; fully-qualified     # 8️⃣ E0.6 keycap: 8
+0038 20E3                                              ; unqualified         # 8⃣ E0.6 keycap: 8
+0039 FE0F 20E3                                         ; fully-qualified     # 9️⃣ E0.6 keycap: 9
+0039 20E3                                              ; unqualified         # 9⃣ E0.6 keycap: 9
+1F51F                                                  ; fully-qualified     # 🔟 E0.6 keycap: 10
 
 # subgroup: alphanum
-1F520                                      ; fully-qualified     # 🔠 E0.6 input latin uppercase
-1F521                                      ; fully-qualified     # 🔡 E0.6 input latin lowercase
-1F522                                      ; fully-qualified     # 🔢 E0.6 input numbers
-1F523                                      ; fully-qualified     # 🔣 E0.6 input symbols
-1F524                                      ; fully-qualified     # 🔤 E0.6 input latin letters
-1F170 FE0F                                 ; fully-qualified     # 🅰️ E0.6 A button (blood type)
-1F170                                      ; unqualified         # 🅰 E0.6 A button (blood type)
-1F18E                                      ; fully-qualified     # 🆎 E0.6 AB button (blood type)
-1F171 FE0F                                 ; fully-qualified     # 🅱️ E0.6 B button (blood type)
-1F171                                      ; unqualified         # 🅱 E0.6 B button (blood type)
-1F191                                      ; fully-qualified     # 🆑 E0.6 CL button
-1F192                                      ; fully-qualified     # 🆒 E0.6 COOL button
-1F193                                      ; fully-qualified     # 🆓 E0.6 FREE button
-2139 FE0F                                  ; fully-qualified     # ℹ️ E0.6 information
-2139                                       ; unqualified         # ℹ E0.6 information
-1F194                                      ; fully-qualified     # 🆔 E0.6 ID button
-24C2 FE0F                                  ; fully-qualified     # Ⓜ️ E0.6 circled M
-24C2                                       ; unqualified         # Ⓜ E0.6 circled M
-1F195                                      ; fully-qualified     # 🆕 E0.6 NEW button
-1F196                                      ; fully-qualified     # 🆖 E0.6 NG button
-1F17E FE0F                                 ; fully-qualified     # 🅾️ E0.6 O button (blood type)
-1F17E                                      ; unqualified         # 🅾 E0.6 O button (blood type)
-1F197                                      ; fully-qualified     # 🆗 E0.6 OK button
-1F17F FE0F                                 ; fully-qualified     # 🅿️ E0.6 P button
-1F17F                                      ; unqualified         # 🅿 E0.6 P button
-1F198                                      ; fully-qualified     # 🆘 E0.6 SOS button
-1F199                                      ; fully-qualified     # 🆙 E0.6 UP! button
-1F19A                                      ; fully-qualified     # 🆚 E0.6 VS button
-1F201                                      ; fully-qualified     # 🈁 E0.6 Japanese “here” button
-1F202 FE0F                                 ; fully-qualified     # 🈂️ E0.6 Japanese “service charge” button
-1F202                                      ; unqualified         # 🈂 E0.6 Japanese “service charge” button
-1F237 FE0F                                 ; fully-qualified     # 🈷️ E0.6 Japanese “monthly amount” button
-1F237                                      ; unqualified         # 🈷 E0.6 Japanese “monthly amount” button
-1F236                                      ; fully-qualified     # 🈶 E0.6 Japanese “not free of charge” button
-1F22F                                      ; fully-qualified     # 🈯 E0.6 Japanese “reserved” button
-1F250                                      ; fully-qualified     # 🉐 E0.6 Japanese “bargain” button
-1F239                                      ; fully-qualified     # 🈹 E0.6 Japanese “discount” button
-1F21A                                      ; fully-qualified     # 🈚 E0.6 Japanese “free of charge” button
-1F232                                      ; fully-qualified     # 🈲 E0.6 Japanese “prohibited” button
-1F251                                      ; fully-qualified     # 🉑 E0.6 Japanese “acceptable” button
-1F238                                      ; fully-qualified     # 🈸 E0.6 Japanese “application” button
-1F234                                      ; fully-qualified     # 🈴 E0.6 Japanese “passing grade” button
-1F233                                      ; fully-qualified     # 🈳 E0.6 Japanese “vacancy” button
-3297 FE0F                                  ; fully-qualified     # ㊗️ E0.6 Japanese “congratulations” button
-3297                                       ; unqualified         # ㊗ E0.6 Japanese “congratulations” button
-3299 FE0F                                  ; fully-qualified     # ㊙️ E0.6 Japanese “secret” button
-3299                                       ; unqualified         # ㊙ E0.6 Japanese “secret” button
-1F23A                                      ; fully-qualified     # 🈺 E0.6 Japanese “open for business” button
-1F235                                      ; fully-qualified     # 🈵 E0.6 Japanese “no vacancy” button
+1F520                                                  ; fully-qualified     # 🔠 E0.6 input latin uppercase
+1F521                                                  ; fully-qualified     # 🔡 E0.6 input latin lowercase
+1F522                                                  ; fully-qualified     # 🔢 E0.6 input numbers
+1F523                                                  ; fully-qualified     # 🔣 E0.6 input symbols
+1F524                                                  ; fully-qualified     # 🔤 E0.6 input latin letters
+1F170 FE0F                                             ; fully-qualified     # 🅰️ E0.6 A button (blood type)
+1F170                                                  ; unqualified         # 🅰 E0.6 A button (blood type)
+1F18E                                                  ; fully-qualified     # 🆎 E0.6 AB button (blood type)
+1F171 FE0F                                             ; fully-qualified     # 🅱️ E0.6 B button (blood type)
+1F171                                                  ; unqualified         # 🅱 E0.6 B button (blood type)
+1F191                                                  ; fully-qualified     # 🆑 E0.6 CL button
+1F192                                                  ; fully-qualified     # 🆒 E0.6 COOL button
+1F193                                                  ; fully-qualified     # 🆓 E0.6 FREE button
+2139 FE0F                                              ; fully-qualified     # ℹ️ E0.6 information
+2139                                                   ; unqualified         # ℹ E0.6 information
+1F194                                                  ; fully-qualified     # 🆔 E0.6 ID button
+24C2 FE0F                                              ; fully-qualified     # Ⓜ️ E0.6 circled M
+24C2                                                   ; unqualified         # Ⓜ E0.6 circled M
+1F195                                                  ; fully-qualified     # 🆕 E0.6 NEW button
+1F196                                                  ; fully-qualified     # 🆖 E0.6 NG button
+1F17E FE0F                                             ; fully-qualified     # 🅾️ E0.6 O button (blood type)
+1F17E                                                  ; unqualified         # 🅾 E0.6 O button (blood type)
+1F197                                                  ; fully-qualified     # 🆗 E0.6 OK button
+1F17F FE0F                                             ; fully-qualified     # 🅿️ E0.6 P button
+1F17F                                                  ; unqualified         # 🅿 E0.6 P button
+1F198                                                  ; fully-qualified     # 🆘 E0.6 SOS button
+1F199                                                  ; fully-qualified     # 🆙 E0.6 UP! button
+1F19A                                                  ; fully-qualified     # 🆚 E0.6 VS button
+1F201                                                  ; fully-qualified     # 🈁 E0.6 Japanese “here” button
+1F202 FE0F                                             ; fully-qualified     # 🈂️ E0.6 Japanese “service charge” button
+1F202                                                  ; unqualified         # 🈂 E0.6 Japanese “service charge” button
+1F237 FE0F                                             ; fully-qualified     # 🈷️ E0.6 Japanese “monthly amount” button
+1F237                                                  ; unqualified         # 🈷 E0.6 Japanese “monthly amount” button
+1F236                                                  ; fully-qualified     # 🈶 E0.6 Japanese “not free of charge” button
+1F22F                                                  ; fully-qualified     # 🈯 E0.6 Japanese “reserved” button
+1F250                                                  ; fully-qualified     # 🉐 E0.6 Japanese “bargain” button
+1F239                                                  ; fully-qualified     # 🈹 E0.6 Japanese “discount” button
+1F21A                                                  ; fully-qualified     # 🈚 E0.6 Japanese “free of charge” button
+1F232                                                  ; fully-qualified     # 🈲 E0.6 Japanese “prohibited” button
+1F251                                                  ; fully-qualified     # 🉑 E0.6 Japanese “acceptable” button
+1F238                                                  ; fully-qualified     # 🈸 E0.6 Japanese “application” button
+1F234                                                  ; fully-qualified     # 🈴 E0.6 Japanese “passing grade” button
+1F233                                                  ; fully-qualified     # 🈳 E0.6 Japanese “vacancy” button
+3297 FE0F                                              ; fully-qualified     # ㊗️ E0.6 Japanese “congratulations” button
+3297                                                   ; unqualified         # ㊗ E0.6 Japanese “congratulations” button
+3299 FE0F                                              ; fully-qualified     # ㊙️ E0.6 Japanese “secret” button
+3299                                                   ; unqualified         # ㊙ E0.6 Japanese “secret” button
+1F23A                                                  ; fully-qualified     # 🈺 E0.6 Japanese “open for business” button
+1F235                                                  ; fully-qualified     # 🈵 E0.6 Japanese “no vacancy” button
 
 # subgroup: geometric
-1F534                                      ; fully-qualified     # 🔴 E0.6 red circle
-1F7E0                                      ; fully-qualified     # 🟠 E12.0 orange circle
-1F7E1                                      ; fully-qualified     # 🟡 E12.0 yellow circle
-1F7E2                                      ; fully-qualified     # 🟢 E12.0 green circle
-1F535                                      ; fully-qualified     # 🔵 E0.6 blue circle
-1F7E3                                      ; fully-qualified     # 🟣 E12.0 purple circle
-1F7E4                                      ; fully-qualified     # 🟤 E12.0 brown circle
-26AB                                       ; fully-qualified     # ⚫ E0.6 black circle
-26AA                                       ; fully-qualified     # ⚪ E0.6 white circle
-1F7E5                                      ; fully-qualified     # 🟥 E12.0 red square
-1F7E7                                      ; fully-qualified     # 🟧 E12.0 orange square
-1F7E8                                      ; fully-qualified     # 🟨 E12.0 yellow square
-1F7E9                                      ; fully-qualified     # 🟩 E12.0 green square
-1F7E6                                      ; fully-qualified     # 🟦 E12.0 blue square
-1F7EA                                      ; fully-qualified     # 🟪 E12.0 purple square
-1F7EB                                      ; fully-qualified     # 🟫 E12.0 brown square
-2B1B                                       ; fully-qualified     # ⬛ E0.6 black large square
-2B1C                                       ; fully-qualified     # ⬜ E0.6 white large square
-25FC FE0F                                  ; fully-qualified     # ◼️ E0.6 black medium square
-25FC                                       ; unqualified         # ◼ E0.6 black medium square
-25FB FE0F                                  ; fully-qualified     # ◻️ E0.6 white medium square
-25FB                                       ; unqualified         # ◻ E0.6 white medium square
-25FE                                       ; fully-qualified     # ◾ E0.6 black medium-small square
-25FD                                       ; fully-qualified     # ◽ E0.6 white medium-small square
-25AA FE0F                                  ; fully-qualified     # ▪️ E0.6 black small square
-25AA                                       ; unqualified         # ▪ E0.6 black small square
-25AB FE0F                                  ; fully-qualified     # ▫️ E0.6 white small square
-25AB                                       ; unqualified         # ▫ E0.6 white small square
-1F536                                      ; fully-qualified     # 🔶 E0.6 large orange diamond
-1F537                                      ; fully-qualified     # 🔷 E0.6 large blue diamond
-1F538                                      ; fully-qualified     # 🔸 E0.6 small orange diamond
-1F539                                      ; fully-qualified     # 🔹 E0.6 small blue diamond
-1F53A                                      ; fully-qualified     # 🔺 E0.6 red triangle pointed up
-1F53B                                      ; fully-qualified     # 🔻 E0.6 red triangle pointed down
-1F4A0                                      ; fully-qualified     # 💠 E0.6 diamond with a dot
-1F518                                      ; fully-qualified     # 🔘 E0.6 radio button
-1F533                                      ; fully-qualified     # 🔳 E0.6 white square button
-1F532                                      ; fully-qualified     # 🔲 E0.6 black square button
+1F534                                                  ; fully-qualified     # 🔴 E0.6 red circle
+1F7E0                                                  ; fully-qualified     # 🟠 E12.0 orange circle
+1F7E1                                                  ; fully-qualified     # 🟡 E12.0 yellow circle
+1F7E2                                                  ; fully-qualified     # 🟢 E12.0 green circle
+1F535                                                  ; fully-qualified     # 🔵 E0.6 blue circle
+1F7E3                                                  ; fully-qualified     # 🟣 E12.0 purple circle
+1F7E4                                                  ; fully-qualified     # 🟤 E12.0 brown circle
+26AB                                                   ; fully-qualified     # ⚫ E0.6 black circle
+26AA                                                   ; fully-qualified     # ⚪ E0.6 white circle
+1F7E5                                                  ; fully-qualified     # 🟥 E12.0 red square
+1F7E7                                                  ; fully-qualified     # 🟧 E12.0 orange square
+1F7E8                                                  ; fully-qualified     # 🟨 E12.0 yellow square
+1F7E9                                                  ; fully-qualified     # 🟩 E12.0 green square
+1F7E6                                                  ; fully-qualified     # 🟦 E12.0 blue square
+1F7EA                                                  ; fully-qualified     # 🟪 E12.0 purple square
+1F7EB                                                  ; fully-qualified     # 🟫 E12.0 brown square
+2B1B                                                   ; fully-qualified     # ⬛ E0.6 black large square
+2B1C                                                   ; fully-qualified     # ⬜ E0.6 white large square
+25FC FE0F                                              ; fully-qualified     # ◼️ E0.6 black medium square
+25FC                                                   ; unqualified         # ◼ E0.6 black medium square
+25FB FE0F                                              ; fully-qualified     # ◻️ E0.6 white medium square
+25FB                                                   ; unqualified         # ◻ E0.6 white medium square
+25FE                                                   ; fully-qualified     # ◾ E0.6 black medium-small square
+25FD                                                   ; fully-qualified     # ◽ E0.6 white medium-small square
+25AA FE0F                                              ; fully-qualified     # ▪️ E0.6 black small square
+25AA                                                   ; unqualified         # ▪ E0.6 black small square
+25AB FE0F                                              ; fully-qualified     # ▫️ E0.6 white small square
+25AB                                                   ; unqualified         # ▫ E0.6 white small square
+1F536                                                  ; fully-qualified     # 🔶 E0.6 large orange diamond
+1F537                                                  ; fully-qualified     # 🔷 E0.6 large blue diamond
+1F538                                                  ; fully-qualified     # 🔸 E0.6 small orange diamond
+1F539                                                  ; fully-qualified     # 🔹 E0.6 small blue diamond
+1F53A                                                  ; fully-qualified     # 🔺 E0.6 red triangle pointed up
+1F53B                                                  ; fully-qualified     # 🔻 E0.6 red triangle pointed down
+1F4A0                                                  ; fully-qualified     # 💠 E0.6 diamond with a dot
+1F518                                                  ; fully-qualified     # 🔘 E0.6 radio button
+1F533                                                  ; fully-qualified     # 🔳 E0.6 white square button
+1F532                                                  ; fully-qualified     # 🔲 E0.6 black square button
 
 # Symbols subtotal:		301
 # Symbols subtotal:		301	w/o modifiers
@@ -4165,293 +4587,293 @@
 # group: Flags
 
 # subgroup: flag
-1F3C1                                      ; fully-qualified     # 🏁 E0.6 chequered flag
-1F6A9                                      ; fully-qualified     # 🚩 E0.6 triangular flag
-1F38C                                      ; fully-qualified     # 🎌 E0.6 crossed flags
-1F3F4                                      ; fully-qualified     # 🏴 E1.0 black flag
-1F3F3 FE0F                                 ; fully-qualified     # 🏳️ E0.7 white flag
-1F3F3                                      ; unqualified         # 🏳 E0.7 white flag
-1F3F3 FE0F 200D 1F308                      ; fully-qualified     # 🏳️‍🌈 E4.0 rainbow flag
-1F3F3 200D 1F308                           ; unqualified         # 🏳‍🌈 E4.0 rainbow flag
-1F3F3 FE0F 200D 26A7 FE0F                  ; fully-qualified     # 🏳️‍⚧️ E13.0 transgender flag
-1F3F3 200D 26A7 FE0F                       ; unqualified         # 🏳‍⚧️ E13.0 transgender flag
-1F3F3 FE0F 200D 26A7                       ; unqualified         # 🏳️‍⚧ E13.0 transgender flag
-1F3F3 200D 26A7                            ; unqualified         # 🏳‍⚧ E13.0 transgender flag
-1F3F4 200D 2620 FE0F                       ; fully-qualified     # 🏴‍☠️ E11.0 pirate flag
-1F3F4 200D 2620                            ; minimally-qualified # 🏴‍☠ E11.0 pirate flag
+1F3C1                                                  ; fully-qualified     # 🏁 E0.6 chequered flag
+1F6A9                                                  ; fully-qualified     # 🚩 E0.6 triangular flag
+1F38C                                                  ; fully-qualified     # 🎌 E0.6 crossed flags
+1F3F4                                                  ; fully-qualified     # 🏴 E1.0 black flag
+1F3F3 FE0F                                             ; fully-qualified     # 🏳️ E0.7 white flag
+1F3F3                                                  ; unqualified         # 🏳 E0.7 white flag
+1F3F3 FE0F 200D 1F308                                  ; fully-qualified     # 🏳️‍🌈 E4.0 rainbow flag
+1F3F3 200D 1F308                                       ; unqualified         # 🏳‍🌈 E4.0 rainbow flag
+1F3F3 FE0F 200D 26A7 FE0F                              ; fully-qualified     # 🏳️‍⚧️ E13.0 transgender flag
+1F3F3 200D 26A7 FE0F                                   ; unqualified         # 🏳‍⚧️ E13.0 transgender flag
+1F3F3 FE0F 200D 26A7                                   ; unqualified         # 🏳️‍⚧ E13.0 transgender flag
+1F3F3 200D 26A7                                        ; unqualified         # 🏳‍⚧ E13.0 transgender flag
+1F3F4 200D 2620 FE0F                                   ; fully-qualified     # 🏴‍☠️ E11.0 pirate flag
+1F3F4 200D 2620                                        ; minimally-qualified # 🏴‍☠ E11.0 pirate flag
 
 # subgroup: country-flag
-1F1E6 1F1E8                                ; fully-qualified     # 🇦🇨 E2.0 flag: Ascension Island
-1F1E6 1F1E9                                ; fully-qualified     # 🇦🇩 E2.0 flag: Andorra
-1F1E6 1F1EA                                ; fully-qualified     # 🇦🇪 E2.0 flag: United Arab Emirates
-1F1E6 1F1EB                                ; fully-qualified     # 🇦🇫 E2.0 flag: Afghanistan
-1F1E6 1F1EC                                ; fully-qualified     # 🇦🇬 E2.0 flag: Antigua & Barbuda
-1F1E6 1F1EE                                ; fully-qualified     # 🇦🇮 E2.0 flag: Anguilla
-1F1E6 1F1F1                                ; fully-qualified     # 🇦🇱 E2.0 flag: Albania
-1F1E6 1F1F2                                ; fully-qualified     # 🇦🇲 E2.0 flag: Armenia
-1F1E6 1F1F4                                ; fully-qualified     # 🇦🇴 E2.0 flag: Angola
-1F1E6 1F1F6                                ; fully-qualified     # 🇦🇶 E2.0 flag: Antarctica
-1F1E6 1F1F7                                ; fully-qualified     # 🇦🇷 E2.0 flag: Argentina
-1F1E6 1F1F8                                ; fully-qualified     # 🇦🇸 E2.0 flag: American Samoa
-1F1E6 1F1F9                                ; fully-qualified     # 🇦🇹 E2.0 flag: Austria
-1F1E6 1F1FA                                ; fully-qualified     # 🇦🇺 E2.0 flag: Australia
-1F1E6 1F1FC                                ; fully-qualified     # 🇦🇼 E2.0 flag: Aruba
-1F1E6 1F1FD                                ; fully-qualified     # 🇦🇽 E2.0 flag: Åland Islands
-1F1E6 1F1FF                                ; fully-qualified     # 🇦🇿 E2.0 flag: Azerbaijan
-1F1E7 1F1E6                                ; fully-qualified     # 🇧🇦 E2.0 flag: Bosnia & Herzegovina
-1F1E7 1F1E7                                ; fully-qualified     # 🇧🇧 E2.0 flag: Barbados
-1F1E7 1F1E9                                ; fully-qualified     # 🇧🇩 E2.0 flag: Bangladesh
-1F1E7 1F1EA                                ; fully-qualified     # 🇧🇪 E2.0 flag: Belgium
-1F1E7 1F1EB                                ; fully-qualified     # 🇧🇫 E2.0 flag: Burkina Faso
-1F1E7 1F1EC                                ; fully-qualified     # 🇧🇬 E2.0 flag: Bulgaria
-1F1E7 1F1ED                                ; fully-qualified     # 🇧🇭 E2.0 flag: Bahrain
-1F1E7 1F1EE                                ; fully-qualified     # 🇧🇮 E2.0 flag: Burundi
-1F1E7 1F1EF                                ; fully-qualified     # 🇧🇯 E2.0 flag: Benin
-1F1E7 1F1F1                                ; fully-qualified     # 🇧🇱 E2.0 flag: St. Barthélemy
-1F1E7 1F1F2                                ; fully-qualified     # 🇧🇲 E2.0 flag: Bermuda
-1F1E7 1F1F3                                ; fully-qualified     # 🇧🇳 E2.0 flag: Brunei
-1F1E7 1F1F4                                ; fully-qualified     # 🇧🇴 E2.0 flag: Bolivia
-1F1E7 1F1F6                                ; fully-qualified     # 🇧🇶 E2.0 flag: Caribbean Netherlands
-1F1E7 1F1F7                                ; fully-qualified     # 🇧🇷 E2.0 flag: Brazil
-1F1E7 1F1F8                                ; fully-qualified     # 🇧🇸 E2.0 flag: Bahamas
-1F1E7 1F1F9                                ; fully-qualified     # 🇧🇹 E2.0 flag: Bhutan
-1F1E7 1F1FB                                ; fully-qualified     # 🇧🇻 E2.0 flag: Bouvet Island
-1F1E7 1F1FC                                ; fully-qualified     # 🇧🇼 E2.0 flag: Botswana
-1F1E7 1F1FE                                ; fully-qualified     # 🇧🇾 E2.0 flag: Belarus
-1F1E7 1F1FF                                ; fully-qualified     # 🇧🇿 E2.0 flag: Belize
-1F1E8 1F1E6                                ; fully-qualified     # 🇨🇦 E2.0 flag: Canada
-1F1E8 1F1E8                                ; fully-qualified     # 🇨🇨 E2.0 flag: Cocos (Keeling) Islands
-1F1E8 1F1E9                                ; fully-qualified     # 🇨🇩 E2.0 flag: Congo - Kinshasa
-1F1E8 1F1EB                                ; fully-qualified     # 🇨🇫 E2.0 flag: Central African Republic
-1F1E8 1F1EC                                ; fully-qualified     # 🇨🇬 E2.0 flag: Congo - Brazzaville
-1F1E8 1F1ED                                ; fully-qualified     # 🇨🇭 E2.0 flag: Switzerland
-1F1E8 1F1EE                                ; fully-qualified     # 🇨🇮 E2.0 flag: Côte d’Ivoire
-1F1E8 1F1F0                                ; fully-qualified     # 🇨🇰 E2.0 flag: Cook Islands
-1F1E8 1F1F1                                ; fully-qualified     # 🇨🇱 E2.0 flag: Chile
-1F1E8 1F1F2                                ; fully-qualified     # 🇨🇲 E2.0 flag: Cameroon
-1F1E8 1F1F3                                ; fully-qualified     # 🇨🇳 E0.6 flag: China
-1F1E8 1F1F4                                ; fully-qualified     # 🇨🇴 E2.0 flag: Colombia
-1F1E8 1F1F5                                ; fully-qualified     # 🇨🇵 E2.0 flag: Clipperton Island
-1F1E8 1F1F7                                ; fully-qualified     # 🇨🇷 E2.0 flag: Costa Rica
-1F1E8 1F1FA                                ; fully-qualified     # 🇨🇺 E2.0 flag: Cuba
-1F1E8 1F1FB                                ; fully-qualified     # 🇨🇻 E2.0 flag: Cape Verde
-1F1E8 1F1FC                                ; fully-qualified     # 🇨🇼 E2.0 flag: Curaçao
-1F1E8 1F1FD                                ; fully-qualified     # 🇨🇽 E2.0 flag: Christmas Island
-1F1E8 1F1FE                                ; fully-qualified     # 🇨🇾 E2.0 flag: Cyprus
-1F1E8 1F1FF                                ; fully-qualified     # 🇨🇿 E2.0 flag: Czechia
-1F1E9 1F1EA                                ; fully-qualified     # 🇩🇪 E0.6 flag: Germany
-1F1E9 1F1EC                                ; fully-qualified     # 🇩🇬 E2.0 flag: Diego Garcia
-1F1E9 1F1EF                                ; fully-qualified     # 🇩🇯 E2.0 flag: Djibouti
-1F1E9 1F1F0                                ; fully-qualified     # 🇩🇰 E2.0 flag: Denmark
-1F1E9 1F1F2                                ; fully-qualified     # 🇩🇲 E2.0 flag: Dominica
-1F1E9 1F1F4                                ; fully-qualified     # 🇩🇴 E2.0 flag: Dominican Republic
-1F1E9 1F1FF                                ; fully-qualified     # 🇩🇿 E2.0 flag: Algeria
-1F1EA 1F1E6                                ; fully-qualified     # 🇪🇦 E2.0 flag: Ceuta & Melilla
-1F1EA 1F1E8                                ; fully-qualified     # 🇪🇨 E2.0 flag: Ecuador
-1F1EA 1F1EA                                ; fully-qualified     # 🇪🇪 E2.0 flag: Estonia
-1F1EA 1F1EC                                ; fully-qualified     # 🇪🇬 E2.0 flag: Egypt
-1F1EA 1F1ED                                ; fully-qualified     # 🇪🇭 E2.0 flag: Western Sahara
-1F1EA 1F1F7                                ; fully-qualified     # 🇪🇷 E2.0 flag: Eritrea
-1F1EA 1F1F8                                ; fully-qualified     # 🇪🇸 E0.6 flag: Spain
-1F1EA 1F1F9                                ; fully-qualified     # 🇪🇹 E2.0 flag: Ethiopia
-1F1EA 1F1FA                                ; fully-qualified     # 🇪🇺 E2.0 flag: European Union
-1F1EB 1F1EE                                ; fully-qualified     # 🇫🇮 E2.0 flag: Finland
-1F1EB 1F1EF                                ; fully-qualified     # 🇫🇯 E2.0 flag: Fiji
-1F1EB 1F1F0                                ; fully-qualified     # 🇫🇰 E2.0 flag: Falkland Islands
-1F1EB 1F1F2                                ; fully-qualified     # 🇫🇲 E2.0 flag: Micronesia
-1F1EB 1F1F4                                ; fully-qualified     # 🇫🇴 E2.0 flag: Faroe Islands
-1F1EB 1F1F7                                ; fully-qualified     # 🇫🇷 E0.6 flag: France
-1F1EC 1F1E6                                ; fully-qualified     # 🇬🇦 E2.0 flag: Gabon
-1F1EC 1F1E7                                ; fully-qualified     # 🇬🇧 E0.6 flag: United Kingdom
-1F1EC 1F1E9                                ; fully-qualified     # 🇬🇩 E2.0 flag: Grenada
-1F1EC 1F1EA                                ; fully-qualified     # 🇬🇪 E2.0 flag: Georgia
-1F1EC 1F1EB                                ; fully-qualified     # 🇬🇫 E2.0 flag: French Guiana
-1F1EC 1F1EC                                ; fully-qualified     # 🇬🇬 E2.0 flag: Guernsey
-1F1EC 1F1ED                                ; fully-qualified     # 🇬🇭 E2.0 flag: Ghana
-1F1EC 1F1EE                                ; fully-qualified     # 🇬🇮 E2.0 flag: Gibraltar
-1F1EC 1F1F1                                ; fully-qualified     # 🇬🇱 E2.0 flag: Greenland
-1F1EC 1F1F2                                ; fully-qualified     # 🇬🇲 E2.0 flag: Gambia
-1F1EC 1F1F3                                ; fully-qualified     # 🇬🇳 E2.0 flag: Guinea
-1F1EC 1F1F5                                ; fully-qualified     # 🇬🇵 E2.0 flag: Guadeloupe
-1F1EC 1F1F6                                ; fully-qualified     # 🇬🇶 E2.0 flag: Equatorial Guinea
-1F1EC 1F1F7                                ; fully-qualified     # 🇬🇷 E2.0 flag: Greece
-1F1EC 1F1F8                                ; fully-qualified     # 🇬🇸 E2.0 flag: South Georgia & South Sandwich Islands
-1F1EC 1F1F9                                ; fully-qualified     # 🇬🇹 E2.0 flag: Guatemala
-1F1EC 1F1FA                                ; fully-qualified     # 🇬🇺 E2.0 flag: Guam
-1F1EC 1F1FC                                ; fully-qualified     # 🇬🇼 E2.0 flag: Guinea-Bissau
-1F1EC 1F1FE                                ; fully-qualified     # 🇬🇾 E2.0 flag: Guyana
-1F1ED 1F1F0                                ; fully-qualified     # 🇭🇰 E2.0 flag: Hong Kong SAR China
-1F1ED 1F1F2                                ; fully-qualified     # 🇭🇲 E2.0 flag: Heard & McDonald Islands
-1F1ED 1F1F3                                ; fully-qualified     # 🇭🇳 E2.0 flag: Honduras
-1F1ED 1F1F7                                ; fully-qualified     # 🇭🇷 E2.0 flag: Croatia
-1F1ED 1F1F9                                ; fully-qualified     # 🇭🇹 E2.0 flag: Haiti
-1F1ED 1F1FA                                ; fully-qualified     # 🇭🇺 E2.0 flag: Hungary
-1F1EE 1F1E8                                ; fully-qualified     # 🇮🇨 E2.0 flag: Canary Islands
-1F1EE 1F1E9                                ; fully-qualified     # 🇮🇩 E2.0 flag: Indonesia
-1F1EE 1F1EA                                ; fully-qualified     # 🇮🇪 E2.0 flag: Ireland
-1F1EE 1F1F1                                ; fully-qualified     # 🇮🇱 E2.0 flag: Israel
-1F1EE 1F1F2                                ; fully-qualified     # 🇮🇲 E2.0 flag: Isle of Man
-1F1EE 1F1F3                                ; fully-qualified     # 🇮🇳 E2.0 flag: India
-1F1EE 1F1F4                                ; fully-qualified     # 🇮🇴 E2.0 flag: British Indian Ocean Territory
-1F1EE 1F1F6                                ; fully-qualified     # 🇮🇶 E2.0 flag: Iraq
-1F1EE 1F1F7                                ; fully-qualified     # 🇮🇷 E2.0 flag: Iran
-1F1EE 1F1F8                                ; fully-qualified     # 🇮🇸 E2.0 flag: Iceland
-1F1EE 1F1F9                                ; fully-qualified     # 🇮🇹 E0.6 flag: Italy
-1F1EF 1F1EA                                ; fully-qualified     # 🇯🇪 E2.0 flag: Jersey
-1F1EF 1F1F2                                ; fully-qualified     # 🇯🇲 E2.0 flag: Jamaica
-1F1EF 1F1F4                                ; fully-qualified     # 🇯🇴 E2.0 flag: Jordan
-1F1EF 1F1F5                                ; fully-qualified     # 🇯🇵 E0.6 flag: Japan
-1F1F0 1F1EA                                ; fully-qualified     # 🇰🇪 E2.0 flag: Kenya
-1F1F0 1F1EC                                ; fully-qualified     # 🇰🇬 E2.0 flag: Kyrgyzstan
-1F1F0 1F1ED                                ; fully-qualified     # 🇰🇭 E2.0 flag: Cambodia
-1F1F0 1F1EE                                ; fully-qualified     # 🇰🇮 E2.0 flag: Kiribati
-1F1F0 1F1F2                                ; fully-qualified     # 🇰🇲 E2.0 flag: Comoros
-1F1F0 1F1F3                                ; fully-qualified     # 🇰🇳 E2.0 flag: St. Kitts & Nevis
-1F1F0 1F1F5                                ; fully-qualified     # 🇰🇵 E2.0 flag: North Korea
-1F1F0 1F1F7                                ; fully-qualified     # 🇰🇷 E0.6 flag: South Korea
-1F1F0 1F1FC                                ; fully-qualified     # 🇰🇼 E2.0 flag: Kuwait
-1F1F0 1F1FE                                ; fully-qualified     # 🇰🇾 E2.0 flag: Cayman Islands
-1F1F0 1F1FF                                ; fully-qualified     # 🇰🇿 E2.0 flag: Kazakhstan
-1F1F1 1F1E6                                ; fully-qualified     # 🇱🇦 E2.0 flag: Laos
-1F1F1 1F1E7                                ; fully-qualified     # 🇱🇧 E2.0 flag: Lebanon
-1F1F1 1F1E8                                ; fully-qualified     # 🇱🇨 E2.0 flag: St. Lucia
-1F1F1 1F1EE                                ; fully-qualified     # 🇱🇮 E2.0 flag: Liechtenstein
-1F1F1 1F1F0                                ; fully-qualified     # 🇱🇰 E2.0 flag: Sri Lanka
-1F1F1 1F1F7                                ; fully-qualified     # 🇱🇷 E2.0 flag: Liberia
-1F1F1 1F1F8                                ; fully-qualified     # 🇱🇸 E2.0 flag: Lesotho
-1F1F1 1F1F9                                ; fully-qualified     # 🇱🇹 E2.0 flag: Lithuania
-1F1F1 1F1FA                                ; fully-qualified     # 🇱🇺 E2.0 flag: Luxembourg
-1F1F1 1F1FB                                ; fully-qualified     # 🇱🇻 E2.0 flag: Latvia
-1F1F1 1F1FE                                ; fully-qualified     # 🇱🇾 E2.0 flag: Libya
-1F1F2 1F1E6                                ; fully-qualified     # 🇲🇦 E2.0 flag: Morocco
-1F1F2 1F1E8                                ; fully-qualified     # 🇲🇨 E2.0 flag: Monaco
-1F1F2 1F1E9                                ; fully-qualified     # 🇲🇩 E2.0 flag: Moldova
-1F1F2 1F1EA                                ; fully-qualified     # 🇲🇪 E2.0 flag: Montenegro
-1F1F2 1F1EB                                ; fully-qualified     # 🇲🇫 E2.0 flag: St. Martin
-1F1F2 1F1EC                                ; fully-qualified     # 🇲🇬 E2.0 flag: Madagascar
-1F1F2 1F1ED                                ; fully-qualified     # 🇲🇭 E2.0 flag: Marshall Islands
-1F1F2 1F1F0                                ; fully-qualified     # 🇲🇰 E2.0 flag: North Macedonia
-1F1F2 1F1F1                                ; fully-qualified     # 🇲🇱 E2.0 flag: Mali
-1F1F2 1F1F2                                ; fully-qualified     # 🇲🇲 E2.0 flag: Myanmar (Burma)
-1F1F2 1F1F3                                ; fully-qualified     # 🇲🇳 E2.0 flag: Mongolia
-1F1F2 1F1F4                                ; fully-qualified     # 🇲🇴 E2.0 flag: Macao SAR China
-1F1F2 1F1F5                                ; fully-qualified     # 🇲🇵 E2.0 flag: Northern Mariana Islands
-1F1F2 1F1F6                                ; fully-qualified     # 🇲🇶 E2.0 flag: Martinique
-1F1F2 1F1F7                                ; fully-qualified     # 🇲🇷 E2.0 flag: Mauritania
-1F1F2 1F1F8                                ; fully-qualified     # 🇲🇸 E2.0 flag: Montserrat
-1F1F2 1F1F9                                ; fully-qualified     # 🇲🇹 E2.0 flag: Malta
-1F1F2 1F1FA                                ; fully-qualified     # 🇲🇺 E2.0 flag: Mauritius
-1F1F2 1F1FB                                ; fully-qualified     # 🇲🇻 E2.0 flag: Maldives
-1F1F2 1F1FC                                ; fully-qualified     # 🇲🇼 E2.0 flag: Malawi
-1F1F2 1F1FD                                ; fully-qualified     # 🇲🇽 E2.0 flag: Mexico
-1F1F2 1F1FE                                ; fully-qualified     # 🇲🇾 E2.0 flag: Malaysia
-1F1F2 1F1FF                                ; fully-qualified     # 🇲🇿 E2.0 flag: Mozambique
-1F1F3 1F1E6                                ; fully-qualified     # 🇳🇦 E2.0 flag: Namibia
-1F1F3 1F1E8                                ; fully-qualified     # 🇳🇨 E2.0 flag: New Caledonia
-1F1F3 1F1EA                                ; fully-qualified     # 🇳🇪 E2.0 flag: Niger
-1F1F3 1F1EB                                ; fully-qualified     # 🇳🇫 E2.0 flag: Norfolk Island
-1F1F3 1F1EC                                ; fully-qualified     # 🇳🇬 E2.0 flag: Nigeria
-1F1F3 1F1EE                                ; fully-qualified     # 🇳🇮 E2.0 flag: Nicaragua
-1F1F3 1F1F1                                ; fully-qualified     # 🇳🇱 E2.0 flag: Netherlands
-1F1F3 1F1F4                                ; fully-qualified     # 🇳🇴 E2.0 flag: Norway
-1F1F3 1F1F5                                ; fully-qualified     # 🇳🇵 E2.0 flag: Nepal
-1F1F3 1F1F7                                ; fully-qualified     # 🇳🇷 E2.0 flag: Nauru
-1F1F3 1F1FA                                ; fully-qualified     # 🇳🇺 E2.0 flag: Niue
-1F1F3 1F1FF                                ; fully-qualified     # 🇳🇿 E2.0 flag: New Zealand
-1F1F4 1F1F2                                ; fully-qualified     # 🇴🇲 E2.0 flag: Oman
-1F1F5 1F1E6                                ; fully-qualified     # 🇵🇦 E2.0 flag: Panama
-1F1F5 1F1EA                                ; fully-qualified     # 🇵🇪 E2.0 flag: Peru
-1F1F5 1F1EB                                ; fully-qualified     # 🇵🇫 E2.0 flag: French Polynesia
-1F1F5 1F1EC                                ; fully-qualified     # 🇵🇬 E2.0 flag: Papua New Guinea
-1F1F5 1F1ED                                ; fully-qualified     # 🇵🇭 E2.0 flag: Philippines
-1F1F5 1F1F0                                ; fully-qualified     # 🇵🇰 E2.0 flag: Pakistan
-1F1F5 1F1F1                                ; fully-qualified     # 🇵🇱 E2.0 flag: Poland
-1F1F5 1F1F2                                ; fully-qualified     # 🇵🇲 E2.0 flag: St. Pierre & Miquelon
-1F1F5 1F1F3                                ; fully-qualified     # 🇵🇳 E2.0 flag: Pitcairn Islands
-1F1F5 1F1F7                                ; fully-qualified     # 🇵🇷 E2.0 flag: Puerto Rico
-1F1F5 1F1F8                                ; fully-qualified     # 🇵🇸 E2.0 flag: Palestinian Territories
-1F1F5 1F1F9                                ; fully-qualified     # 🇵🇹 E2.0 flag: Portugal
-1F1F5 1F1FC                                ; fully-qualified     # 🇵🇼 E2.0 flag: Palau
-1F1F5 1F1FE                                ; fully-qualified     # 🇵🇾 E2.0 flag: Paraguay
-1F1F6 1F1E6                                ; fully-qualified     # 🇶🇦 E2.0 flag: Qatar
-1F1F7 1F1EA                                ; fully-qualified     # 🇷🇪 E2.0 flag: Réunion
-1F1F7 1F1F4                                ; fully-qualified     # 🇷🇴 E2.0 flag: Romania
-1F1F7 1F1F8                                ; fully-qualified     # 🇷🇸 E2.0 flag: Serbia
-1F1F7 1F1FA                                ; fully-qualified     # 🇷🇺 E0.6 flag: Russia
-1F1F7 1F1FC                                ; fully-qualified     # 🇷🇼 E2.0 flag: Rwanda
-1F1F8 1F1E6                                ; fully-qualified     # 🇸🇦 E2.0 flag: Saudi Arabia
-1F1F8 1F1E7                                ; fully-qualified     # 🇸🇧 E2.0 flag: Solomon Islands
-1F1F8 1F1E8                                ; fully-qualified     # 🇸🇨 E2.0 flag: Seychelles
-1F1F8 1F1E9                                ; fully-qualified     # 🇸🇩 E2.0 flag: Sudan
-1F1F8 1F1EA                                ; fully-qualified     # 🇸🇪 E2.0 flag: Sweden
-1F1F8 1F1EC                                ; fully-qualified     # 🇸🇬 E2.0 flag: Singapore
-1F1F8 1F1ED                                ; fully-qualified     # 🇸🇭 E2.0 flag: St. Helena
-1F1F8 1F1EE                                ; fully-qualified     # 🇸🇮 E2.0 flag: Slovenia
-1F1F8 1F1EF                                ; fully-qualified     # 🇸🇯 E2.0 flag: Svalbard & Jan Mayen
-1F1F8 1F1F0                                ; fully-qualified     # 🇸🇰 E2.0 flag: Slovakia
-1F1F8 1F1F1                                ; fully-qualified     # 🇸🇱 E2.0 flag: Sierra Leone
-1F1F8 1F1F2                                ; fully-qualified     # 🇸🇲 E2.0 flag: San Marino
-1F1F8 1F1F3                                ; fully-qualified     # 🇸🇳 E2.0 flag: Senegal
-1F1F8 1F1F4                                ; fully-qualified     # 🇸🇴 E2.0 flag: Somalia
-1F1F8 1F1F7                                ; fully-qualified     # 🇸🇷 E2.0 flag: Suriname
-1F1F8 1F1F8                                ; fully-qualified     # 🇸🇸 E2.0 flag: South Sudan
-1F1F8 1F1F9                                ; fully-qualified     # 🇸🇹 E2.0 flag: São Tomé & Príncipe
-1F1F8 1F1FB                                ; fully-qualified     # 🇸🇻 E2.0 flag: El Salvador
-1F1F8 1F1FD                                ; fully-qualified     # 🇸🇽 E2.0 flag: Sint Maarten
-1F1F8 1F1FE                                ; fully-qualified     # 🇸🇾 E2.0 flag: Syria
-1F1F8 1F1FF                                ; fully-qualified     # 🇸🇿 E2.0 flag: Eswatini
-1F1F9 1F1E6                                ; fully-qualified     # 🇹🇦 E2.0 flag: Tristan da Cunha
-1F1F9 1F1E8                                ; fully-qualified     # 🇹🇨 E2.0 flag: Turks & Caicos Islands
-1F1F9 1F1E9                                ; fully-qualified     # 🇹🇩 E2.0 flag: Chad
-1F1F9 1F1EB                                ; fully-qualified     # 🇹🇫 E2.0 flag: French Southern Territories
-1F1F9 1F1EC                                ; fully-qualified     # 🇹🇬 E2.0 flag: Togo
-1F1F9 1F1ED                                ; fully-qualified     # 🇹🇭 E2.0 flag: Thailand
-1F1F9 1F1EF                                ; fully-qualified     # 🇹🇯 E2.0 flag: Tajikistan
-1F1F9 1F1F0                                ; fully-qualified     # 🇹🇰 E2.0 flag: Tokelau
-1F1F9 1F1F1                                ; fully-qualified     # 🇹🇱 E2.0 flag: Timor-Leste
-1F1F9 1F1F2                                ; fully-qualified     # 🇹🇲 E2.0 flag: Turkmenistan
-1F1F9 1F1F3                                ; fully-qualified     # 🇹🇳 E2.0 flag: Tunisia
-1F1F9 1F1F4                                ; fully-qualified     # 🇹🇴 E2.0 flag: Tonga
-1F1F9 1F1F7                                ; fully-qualified     # 🇹🇷 E2.0 flag: Turkey
-1F1F9 1F1F9                                ; fully-qualified     # 🇹🇹 E2.0 flag: Trinidad & Tobago
-1F1F9 1F1FB                                ; fully-qualified     # 🇹🇻 E2.0 flag: Tuvalu
-1F1F9 1F1FC                                ; fully-qualified     # 🇹🇼 E2.0 flag: Taiwan
-1F1F9 1F1FF                                ; fully-qualified     # 🇹🇿 E2.0 flag: Tanzania
-1F1FA 1F1E6                                ; fully-qualified     # 🇺🇦 E2.0 flag: Ukraine
-1F1FA 1F1EC                                ; fully-qualified     # 🇺🇬 E2.0 flag: Uganda
-1F1FA 1F1F2                                ; fully-qualified     # 🇺🇲 E2.0 flag: U.S. Outlying Islands
-1F1FA 1F1F3                                ; fully-qualified     # 🇺🇳 E4.0 flag: United Nations
-1F1FA 1F1F8                                ; fully-qualified     # 🇺🇸 E0.6 flag: United States
-1F1FA 1F1FE                                ; fully-qualified     # 🇺🇾 E2.0 flag: Uruguay
-1F1FA 1F1FF                                ; fully-qualified     # 🇺🇿 E2.0 flag: Uzbekistan
-1F1FB 1F1E6                                ; fully-qualified     # 🇻🇦 E2.0 flag: Vatican City
-1F1FB 1F1E8                                ; fully-qualified     # 🇻🇨 E2.0 flag: St. Vincent & Grenadines
-1F1FB 1F1EA                                ; fully-qualified     # 🇻🇪 E2.0 flag: Venezuela
-1F1FB 1F1EC                                ; fully-qualified     # 🇻🇬 E2.0 flag: British Virgin Islands
-1F1FB 1F1EE                                ; fully-qualified     # 🇻🇮 E2.0 flag: U.S. Virgin Islands
-1F1FB 1F1F3                                ; fully-qualified     # 🇻🇳 E2.0 flag: Vietnam
-1F1FB 1F1FA                                ; fully-qualified     # 🇻🇺 E2.0 flag: Vanuatu
-1F1FC 1F1EB                                ; fully-qualified     # 🇼🇫 E2.0 flag: Wallis & Futuna
-1F1FC 1F1F8                                ; fully-qualified     # 🇼🇸 E2.0 flag: Samoa
-1F1FD 1F1F0                                ; fully-qualified     # 🇽🇰 E2.0 flag: Kosovo
-1F1FE 1F1EA                                ; fully-qualified     # 🇾🇪 E2.0 flag: Yemen
-1F1FE 1F1F9                                ; fully-qualified     # 🇾🇹 E2.0 flag: Mayotte
-1F1FF 1F1E6                                ; fully-qualified     # 🇿🇦 E2.0 flag: South Africa
-1F1FF 1F1F2                                ; fully-qualified     # 🇿🇲 E2.0 flag: Zambia
-1F1FF 1F1FC                                ; fully-qualified     # 🇿🇼 E2.0 flag: Zimbabwe
+1F1E6 1F1E8                                            ; fully-qualified     # 🇦🇨 E2.0 flag: Ascension Island
+1F1E6 1F1E9                                            ; fully-qualified     # 🇦🇩 E2.0 flag: Andorra
+1F1E6 1F1EA                                            ; fully-qualified     # 🇦🇪 E2.0 flag: United Arab Emirates
+1F1E6 1F1EB                                            ; fully-qualified     # 🇦🇫 E2.0 flag: Afghanistan
+1F1E6 1F1EC                                            ; fully-qualified     # 🇦🇬 E2.0 flag: Antigua & Barbuda
+1F1E6 1F1EE                                            ; fully-qualified     # 🇦🇮 E2.0 flag: Anguilla
+1F1E6 1F1F1                                            ; fully-qualified     # 🇦🇱 E2.0 flag: Albania
+1F1E6 1F1F2                                            ; fully-qualified     # 🇦🇲 E2.0 flag: Armenia
+1F1E6 1F1F4                                            ; fully-qualified     # 🇦🇴 E2.0 flag: Angola
+1F1E6 1F1F6                                            ; fully-qualified     # 🇦🇶 E2.0 flag: Antarctica
+1F1E6 1F1F7                                            ; fully-qualified     # 🇦🇷 E2.0 flag: Argentina
+1F1E6 1F1F8                                            ; fully-qualified     # 🇦🇸 E2.0 flag: American Samoa
+1F1E6 1F1F9                                            ; fully-qualified     # 🇦🇹 E2.0 flag: Austria
+1F1E6 1F1FA                                            ; fully-qualified     # 🇦🇺 E2.0 flag: Australia
+1F1E6 1F1FC                                            ; fully-qualified     # 🇦🇼 E2.0 flag: Aruba
+1F1E6 1F1FD                                            ; fully-qualified     # 🇦🇽 E2.0 flag: Åland Islands
+1F1E6 1F1FF                                            ; fully-qualified     # 🇦🇿 E2.0 flag: Azerbaijan
+1F1E7 1F1E6                                            ; fully-qualified     # 🇧🇦 E2.0 flag: Bosnia & Herzegovina
+1F1E7 1F1E7                                            ; fully-qualified     # 🇧🇧 E2.0 flag: Barbados
+1F1E7 1F1E9                                            ; fully-qualified     # 🇧🇩 E2.0 flag: Bangladesh
+1F1E7 1F1EA                                            ; fully-qualified     # 🇧🇪 E2.0 flag: Belgium
+1F1E7 1F1EB                                            ; fully-qualified     # 🇧🇫 E2.0 flag: Burkina Faso
+1F1E7 1F1EC                                            ; fully-qualified     # 🇧🇬 E2.0 flag: Bulgaria
+1F1E7 1F1ED                                            ; fully-qualified     # 🇧🇭 E2.0 flag: Bahrain
+1F1E7 1F1EE                                            ; fully-qualified     # 🇧🇮 E2.0 flag: Burundi
+1F1E7 1F1EF                                            ; fully-qualified     # 🇧🇯 E2.0 flag: Benin
+1F1E7 1F1F1                                            ; fully-qualified     # 🇧🇱 E2.0 flag: St. Barthélemy
+1F1E7 1F1F2                                            ; fully-qualified     # 🇧🇲 E2.0 flag: Bermuda
+1F1E7 1F1F3                                            ; fully-qualified     # 🇧🇳 E2.0 flag: Brunei
+1F1E7 1F1F4                                            ; fully-qualified     # 🇧🇴 E2.0 flag: Bolivia
+1F1E7 1F1F6                                            ; fully-qualified     # 🇧🇶 E2.0 flag: Caribbean Netherlands
+1F1E7 1F1F7                                            ; fully-qualified     # 🇧🇷 E2.0 flag: Brazil
+1F1E7 1F1F8                                            ; fully-qualified     # 🇧🇸 E2.0 flag: Bahamas
+1F1E7 1F1F9                                            ; fully-qualified     # 🇧🇹 E2.0 flag: Bhutan
+1F1E7 1F1FB                                            ; fully-qualified     # 🇧🇻 E2.0 flag: Bouvet Island
+1F1E7 1F1FC                                            ; fully-qualified     # 🇧🇼 E2.0 flag: Botswana
+1F1E7 1F1FE                                            ; fully-qualified     # 🇧🇾 E2.0 flag: Belarus
+1F1E7 1F1FF                                            ; fully-qualified     # 🇧🇿 E2.0 flag: Belize
+1F1E8 1F1E6                                            ; fully-qualified     # 🇨🇦 E2.0 flag: Canada
+1F1E8 1F1E8                                            ; fully-qualified     # 🇨🇨 E2.0 flag: Cocos (Keeling) Islands
+1F1E8 1F1E9                                            ; fully-qualified     # 🇨🇩 E2.0 flag: Congo - Kinshasa
+1F1E8 1F1EB                                            ; fully-qualified     # 🇨🇫 E2.0 flag: Central African Republic
+1F1E8 1F1EC                                            ; fully-qualified     # 🇨🇬 E2.0 flag: Congo - Brazzaville
+1F1E8 1F1ED                                            ; fully-qualified     # 🇨🇭 E2.0 flag: Switzerland
+1F1E8 1F1EE                                            ; fully-qualified     # 🇨🇮 E2.0 flag: Côte d’Ivoire
+1F1E8 1F1F0                                            ; fully-qualified     # 🇨🇰 E2.0 flag: Cook Islands
+1F1E8 1F1F1                                            ; fully-qualified     # 🇨🇱 E2.0 flag: Chile
+1F1E8 1F1F2                                            ; fully-qualified     # 🇨🇲 E2.0 flag: Cameroon
+1F1E8 1F1F3                                            ; fully-qualified     # 🇨🇳 E0.6 flag: China
+1F1E8 1F1F4                                            ; fully-qualified     # 🇨🇴 E2.0 flag: Colombia
+1F1E8 1F1F5                                            ; fully-qualified     # 🇨🇵 E2.0 flag: Clipperton Island
+1F1E8 1F1F7                                            ; fully-qualified     # 🇨🇷 E2.0 flag: Costa Rica
+1F1E8 1F1FA                                            ; fully-qualified     # 🇨🇺 E2.0 flag: Cuba
+1F1E8 1F1FB                                            ; fully-qualified     # 🇨🇻 E2.0 flag: Cape Verde
+1F1E8 1F1FC                                            ; fully-qualified     # 🇨🇼 E2.0 flag: Curaçao
+1F1E8 1F1FD                                            ; fully-qualified     # 🇨🇽 E2.0 flag: Christmas Island
+1F1E8 1F1FE                                            ; fully-qualified     # 🇨🇾 E2.0 flag: Cyprus
+1F1E8 1F1FF                                            ; fully-qualified     # 🇨🇿 E2.0 flag: Czechia
+1F1E9 1F1EA                                            ; fully-qualified     # 🇩🇪 E0.6 flag: Germany
+1F1E9 1F1EC                                            ; fully-qualified     # 🇩🇬 E2.0 flag: Diego Garcia
+1F1E9 1F1EF                                            ; fully-qualified     # 🇩🇯 E2.0 flag: Djibouti
+1F1E9 1F1F0                                            ; fully-qualified     # 🇩🇰 E2.0 flag: Denmark
+1F1E9 1F1F2                                            ; fully-qualified     # 🇩🇲 E2.0 flag: Dominica
+1F1E9 1F1F4                                            ; fully-qualified     # 🇩🇴 E2.0 flag: Dominican Republic
+1F1E9 1F1FF                                            ; fully-qualified     # 🇩🇿 E2.0 flag: Algeria
+1F1EA 1F1E6                                            ; fully-qualified     # 🇪🇦 E2.0 flag: Ceuta & Melilla
+1F1EA 1F1E8                                            ; fully-qualified     # 🇪🇨 E2.0 flag: Ecuador
+1F1EA 1F1EA                                            ; fully-qualified     # 🇪🇪 E2.0 flag: Estonia
+1F1EA 1F1EC                                            ; fully-qualified     # 🇪🇬 E2.0 flag: Egypt
+1F1EA 1F1ED                                            ; fully-qualified     # 🇪🇭 E2.0 flag: Western Sahara
+1F1EA 1F1F7                                            ; fully-qualified     # 🇪🇷 E2.0 flag: Eritrea
+1F1EA 1F1F8                                            ; fully-qualified     # 🇪🇸 E0.6 flag: Spain
+1F1EA 1F1F9                                            ; fully-qualified     # 🇪🇹 E2.0 flag: Ethiopia
+1F1EA 1F1FA                                            ; fully-qualified     # 🇪🇺 E2.0 flag: European Union
+1F1EB 1F1EE                                            ; fully-qualified     # 🇫🇮 E2.0 flag: Finland
+1F1EB 1F1EF                                            ; fully-qualified     # 🇫🇯 E2.0 flag: Fiji
+1F1EB 1F1F0                                            ; fully-qualified     # 🇫🇰 E2.0 flag: Falkland Islands
+1F1EB 1F1F2                                            ; fully-qualified     # 🇫🇲 E2.0 flag: Micronesia
+1F1EB 1F1F4                                            ; fully-qualified     # 🇫🇴 E2.0 flag: Faroe Islands
+1F1EB 1F1F7                                            ; fully-qualified     # 🇫🇷 E0.6 flag: France
+1F1EC 1F1E6                                            ; fully-qualified     # 🇬🇦 E2.0 flag: Gabon
+1F1EC 1F1E7                                            ; fully-qualified     # 🇬🇧 E0.6 flag: United Kingdom
+1F1EC 1F1E9                                            ; fully-qualified     # 🇬🇩 E2.0 flag: Grenada
+1F1EC 1F1EA                                            ; fully-qualified     # 🇬🇪 E2.0 flag: Georgia
+1F1EC 1F1EB                                            ; fully-qualified     # 🇬🇫 E2.0 flag: French Guiana
+1F1EC 1F1EC                                            ; fully-qualified     # 🇬🇬 E2.0 flag: Guernsey
+1F1EC 1F1ED                                            ; fully-qualified     # 🇬🇭 E2.0 flag: Ghana
+1F1EC 1F1EE                                            ; fully-qualified     # 🇬🇮 E2.0 flag: Gibraltar
+1F1EC 1F1F1                                            ; fully-qualified     # 🇬🇱 E2.0 flag: Greenland
+1F1EC 1F1F2                                            ; fully-qualified     # 🇬🇲 E2.0 flag: Gambia
+1F1EC 1F1F3                                            ; fully-qualified     # 🇬🇳 E2.0 flag: Guinea
+1F1EC 1F1F5                                            ; fully-qualified     # 🇬🇵 E2.0 flag: Guadeloupe
+1F1EC 1F1F6                                            ; fully-qualified     # 🇬🇶 E2.0 flag: Equatorial Guinea
+1F1EC 1F1F7                                            ; fully-qualified     # 🇬🇷 E2.0 flag: Greece
+1F1EC 1F1F8                                            ; fully-qualified     # 🇬🇸 E2.0 flag: South Georgia & South Sandwich Islands
+1F1EC 1F1F9                                            ; fully-qualified     # 🇬🇹 E2.0 flag: Guatemala
+1F1EC 1F1FA                                            ; fully-qualified     # 🇬🇺 E2.0 flag: Guam
+1F1EC 1F1FC                                            ; fully-qualified     # 🇬🇼 E2.0 flag: Guinea-Bissau
+1F1EC 1F1FE                                            ; fully-qualified     # 🇬🇾 E2.0 flag: Guyana
+1F1ED 1F1F0                                            ; fully-qualified     # 🇭🇰 E2.0 flag: Hong Kong SAR China
+1F1ED 1F1F2                                            ; fully-qualified     # 🇭🇲 E2.0 flag: Heard & McDonald Islands
+1F1ED 1F1F3                                            ; fully-qualified     # 🇭🇳 E2.0 flag: Honduras
+1F1ED 1F1F7                                            ; fully-qualified     # 🇭🇷 E2.0 flag: Croatia
+1F1ED 1F1F9                                            ; fully-qualified     # 🇭🇹 E2.0 flag: Haiti
+1F1ED 1F1FA                                            ; fully-qualified     # 🇭🇺 E2.0 flag: Hungary
+1F1EE 1F1E8                                            ; fully-qualified     # 🇮🇨 E2.0 flag: Canary Islands
+1F1EE 1F1E9                                            ; fully-qualified     # 🇮🇩 E2.0 flag: Indonesia
+1F1EE 1F1EA                                            ; fully-qualified     # 🇮🇪 E2.0 flag: Ireland
+1F1EE 1F1F1                                            ; fully-qualified     # 🇮🇱 E2.0 flag: Israel
+1F1EE 1F1F2                                            ; fully-qualified     # 🇮🇲 E2.0 flag: Isle of Man
+1F1EE 1F1F3                                            ; fully-qualified     # 🇮🇳 E2.0 flag: India
+1F1EE 1F1F4                                            ; fully-qualified     # 🇮🇴 E2.0 flag: British Indian Ocean Territory
+1F1EE 1F1F6                                            ; fully-qualified     # 🇮🇶 E2.0 flag: Iraq
+1F1EE 1F1F7                                            ; fully-qualified     # 🇮🇷 E2.0 flag: Iran
+1F1EE 1F1F8                                            ; fully-qualified     # 🇮🇸 E2.0 flag: Iceland
+1F1EE 1F1F9                                            ; fully-qualified     # 🇮🇹 E0.6 flag: Italy
+1F1EF 1F1EA                                            ; fully-qualified     # 🇯🇪 E2.0 flag: Jersey
+1F1EF 1F1F2                                            ; fully-qualified     # 🇯🇲 E2.0 flag: Jamaica
+1F1EF 1F1F4                                            ; fully-qualified     # 🇯🇴 E2.0 flag: Jordan
+1F1EF 1F1F5                                            ; fully-qualified     # 🇯🇵 E0.6 flag: Japan
+1F1F0 1F1EA                                            ; fully-qualified     # 🇰🇪 E2.0 flag: Kenya
+1F1F0 1F1EC                                            ; fully-qualified     # 🇰🇬 E2.0 flag: Kyrgyzstan
+1F1F0 1F1ED                                            ; fully-qualified     # 🇰🇭 E2.0 flag: Cambodia
+1F1F0 1F1EE                                            ; fully-qualified     # 🇰🇮 E2.0 flag: Kiribati
+1F1F0 1F1F2                                            ; fully-qualified     # 🇰🇲 E2.0 flag: Comoros
+1F1F0 1F1F3                                            ; fully-qualified     # 🇰🇳 E2.0 flag: St. Kitts & Nevis
+1F1F0 1F1F5                                            ; fully-qualified     # 🇰🇵 E2.0 flag: North Korea
+1F1F0 1F1F7                                            ; fully-qualified     # 🇰🇷 E0.6 flag: South Korea
+1F1F0 1F1FC                                            ; fully-qualified     # 🇰🇼 E2.0 flag: Kuwait
+1F1F0 1F1FE                                            ; fully-qualified     # 🇰🇾 E2.0 flag: Cayman Islands
+1F1F0 1F1FF                                            ; fully-qualified     # 🇰🇿 E2.0 flag: Kazakhstan
+1F1F1 1F1E6                                            ; fully-qualified     # 🇱🇦 E2.0 flag: Laos
+1F1F1 1F1E7                                            ; fully-qualified     # 🇱🇧 E2.0 flag: Lebanon
+1F1F1 1F1E8                                            ; fully-qualified     # 🇱🇨 E2.0 flag: St. Lucia
+1F1F1 1F1EE                                            ; fully-qualified     # 🇱🇮 E2.0 flag: Liechtenstein
+1F1F1 1F1F0                                            ; fully-qualified     # 🇱🇰 E2.0 flag: Sri Lanka
+1F1F1 1F1F7                                            ; fully-qualified     # 🇱🇷 E2.0 flag: Liberia
+1F1F1 1F1F8                                            ; fully-qualified     # 🇱🇸 E2.0 flag: Lesotho
+1F1F1 1F1F9                                            ; fully-qualified     # 🇱🇹 E2.0 flag: Lithuania
+1F1F1 1F1FA                                            ; fully-qualified     # 🇱🇺 E2.0 flag: Luxembourg
+1F1F1 1F1FB                                            ; fully-qualified     # 🇱🇻 E2.0 flag: Latvia
+1F1F1 1F1FE                                            ; fully-qualified     # 🇱🇾 E2.0 flag: Libya
+1F1F2 1F1E6                                            ; fully-qualified     # 🇲🇦 E2.0 flag: Morocco
+1F1F2 1F1E8                                            ; fully-qualified     # 🇲🇨 E2.0 flag: Monaco
+1F1F2 1F1E9                                            ; fully-qualified     # 🇲🇩 E2.0 flag: Moldova
+1F1F2 1F1EA                                            ; fully-qualified     # 🇲🇪 E2.0 flag: Montenegro
+1F1F2 1F1EB                                            ; fully-qualified     # 🇲🇫 E2.0 flag: St. Martin
+1F1F2 1F1EC                                            ; fully-qualified     # 🇲🇬 E2.0 flag: Madagascar
+1F1F2 1F1ED                                            ; fully-qualified     # 🇲🇭 E2.0 flag: Marshall Islands
+1F1F2 1F1F0                                            ; fully-qualified     # 🇲🇰 E2.0 flag: North Macedonia
+1F1F2 1F1F1                                            ; fully-qualified     # 🇲🇱 E2.0 flag: Mali
+1F1F2 1F1F2                                            ; fully-qualified     # 🇲🇲 E2.0 flag: Myanmar (Burma)
+1F1F2 1F1F3                                            ; fully-qualified     # 🇲🇳 E2.0 flag: Mongolia
+1F1F2 1F1F4                                            ; fully-qualified     # 🇲🇴 E2.0 flag: Macao SAR China
+1F1F2 1F1F5                                            ; fully-qualified     # 🇲🇵 E2.0 flag: Northern Mariana Islands
+1F1F2 1F1F6                                            ; fully-qualified     # 🇲🇶 E2.0 flag: Martinique
+1F1F2 1F1F7                                            ; fully-qualified     # 🇲🇷 E2.0 flag: Mauritania
+1F1F2 1F1F8                                            ; fully-qualified     # 🇲🇸 E2.0 flag: Montserrat
+1F1F2 1F1F9                                            ; fully-qualified     # 🇲🇹 E2.0 flag: Malta
+1F1F2 1F1FA                                            ; fully-qualified     # 🇲🇺 E2.0 flag: Mauritius
+1F1F2 1F1FB                                            ; fully-qualified     # 🇲🇻 E2.0 flag: Maldives
+1F1F2 1F1FC                                            ; fully-qualified     # 🇲🇼 E2.0 flag: Malawi
+1F1F2 1F1FD                                            ; fully-qualified     # 🇲🇽 E2.0 flag: Mexico
+1F1F2 1F1FE                                            ; fully-qualified     # 🇲🇾 E2.0 flag: Malaysia
+1F1F2 1F1FF                                            ; fully-qualified     # 🇲🇿 E2.0 flag: Mozambique
+1F1F3 1F1E6                                            ; fully-qualified     # 🇳🇦 E2.0 flag: Namibia
+1F1F3 1F1E8                                            ; fully-qualified     # 🇳🇨 E2.0 flag: New Caledonia
+1F1F3 1F1EA                                            ; fully-qualified     # 🇳🇪 E2.0 flag: Niger
+1F1F3 1F1EB                                            ; fully-qualified     # 🇳🇫 E2.0 flag: Norfolk Island
+1F1F3 1F1EC                                            ; fully-qualified     # 🇳🇬 E2.0 flag: Nigeria
+1F1F3 1F1EE                                            ; fully-qualified     # 🇳🇮 E2.0 flag: Nicaragua
+1F1F3 1F1F1                                            ; fully-qualified     # 🇳🇱 E2.0 flag: Netherlands
+1F1F3 1F1F4                                            ; fully-qualified     # 🇳🇴 E2.0 flag: Norway
+1F1F3 1F1F5                                            ; fully-qualified     # 🇳🇵 E2.0 flag: Nepal
+1F1F3 1F1F7                                            ; fully-qualified     # 🇳🇷 E2.0 flag: Nauru
+1F1F3 1F1FA                                            ; fully-qualified     # 🇳🇺 E2.0 flag: Niue
+1F1F3 1F1FF                                            ; fully-qualified     # 🇳🇿 E2.0 flag: New Zealand
+1F1F4 1F1F2                                            ; fully-qualified     # 🇴🇲 E2.0 flag: Oman
+1F1F5 1F1E6                                            ; fully-qualified     # 🇵🇦 E2.0 flag: Panama
+1F1F5 1F1EA                                            ; fully-qualified     # 🇵🇪 E2.0 flag: Peru
+1F1F5 1F1EB                                            ; fully-qualified     # 🇵🇫 E2.0 flag: French Polynesia
+1F1F5 1F1EC                                            ; fully-qualified     # 🇵🇬 E2.0 flag: Papua New Guinea
+1F1F5 1F1ED                                            ; fully-qualified     # 🇵🇭 E2.0 flag: Philippines
+1F1F5 1F1F0                                            ; fully-qualified     # 🇵🇰 E2.0 flag: Pakistan
+1F1F5 1F1F1                                            ; fully-qualified     # 🇵🇱 E2.0 flag: Poland
+1F1F5 1F1F2                                            ; fully-qualified     # 🇵🇲 E2.0 flag: St. Pierre & Miquelon
+1F1F5 1F1F3                                            ; fully-qualified     # 🇵🇳 E2.0 flag: Pitcairn Islands
+1F1F5 1F1F7                                            ; fully-qualified     # 🇵🇷 E2.0 flag: Puerto Rico
+1F1F5 1F1F8                                            ; fully-qualified     # 🇵🇸 E2.0 flag: Palestinian Territories
+1F1F5 1F1F9                                            ; fully-qualified     # 🇵🇹 E2.0 flag: Portugal
+1F1F5 1F1FC                                            ; fully-qualified     # 🇵🇼 E2.0 flag: Palau
+1F1F5 1F1FE                                            ; fully-qualified     # 🇵🇾 E2.0 flag: Paraguay
+1F1F6 1F1E6                                            ; fully-qualified     # 🇶🇦 E2.0 flag: Qatar
+1F1F7 1F1EA                                            ; fully-qualified     # 🇷🇪 E2.0 flag: Réunion
+1F1F7 1F1F4                                            ; fully-qualified     # 🇷🇴 E2.0 flag: Romania
+1F1F7 1F1F8                                            ; fully-qualified     # 🇷🇸 E2.0 flag: Serbia
+1F1F7 1F1FA                                            ; fully-qualified     # 🇷🇺 E0.6 flag: Russia
+1F1F7 1F1FC                                            ; fully-qualified     # 🇷🇼 E2.0 flag: Rwanda
+1F1F8 1F1E6                                            ; fully-qualified     # 🇸🇦 E2.0 flag: Saudi Arabia
+1F1F8 1F1E7                                            ; fully-qualified     # 🇸🇧 E2.0 flag: Solomon Islands
+1F1F8 1F1E8                                            ; fully-qualified     # 🇸🇨 E2.0 flag: Seychelles
+1F1F8 1F1E9                                            ; fully-qualified     # 🇸🇩 E2.0 flag: Sudan
+1F1F8 1F1EA                                            ; fully-qualified     # 🇸🇪 E2.0 flag: Sweden
+1F1F8 1F1EC                                            ; fully-qualified     # 🇸🇬 E2.0 flag: Singapore
+1F1F8 1F1ED                                            ; fully-qualified     # 🇸🇭 E2.0 flag: St. Helena
+1F1F8 1F1EE                                            ; fully-qualified     # 🇸🇮 E2.0 flag: Slovenia
+1F1F8 1F1EF                                            ; fully-qualified     # 🇸🇯 E2.0 flag: Svalbard & Jan Mayen
+1F1F8 1F1F0                                            ; fully-qualified     # 🇸🇰 E2.0 flag: Slovakia
+1F1F8 1F1F1                                            ; fully-qualified     # 🇸🇱 E2.0 flag: Sierra Leone
+1F1F8 1F1F2                                            ; fully-qualified     # 🇸🇲 E2.0 flag: San Marino
+1F1F8 1F1F3                                            ; fully-qualified     # 🇸🇳 E2.0 flag: Senegal
+1F1F8 1F1F4                                            ; fully-qualified     # 🇸🇴 E2.0 flag: Somalia
+1F1F8 1F1F7                                            ; fully-qualified     # 🇸🇷 E2.0 flag: Suriname
+1F1F8 1F1F8                                            ; fully-qualified     # 🇸🇸 E2.0 flag: South Sudan
+1F1F8 1F1F9                                            ; fully-qualified     # 🇸🇹 E2.0 flag: São Tomé & Príncipe
+1F1F8 1F1FB                                            ; fully-qualified     # 🇸🇻 E2.0 flag: El Salvador
+1F1F8 1F1FD                                            ; fully-qualified     # 🇸🇽 E2.0 flag: Sint Maarten
+1F1F8 1F1FE                                            ; fully-qualified     # 🇸🇾 E2.0 flag: Syria
+1F1F8 1F1FF                                            ; fully-qualified     # 🇸🇿 E2.0 flag: Eswatini
+1F1F9 1F1E6                                            ; fully-qualified     # 🇹🇦 E2.0 flag: Tristan da Cunha
+1F1F9 1F1E8                                            ; fully-qualified     # 🇹🇨 E2.0 flag: Turks & Caicos Islands
+1F1F9 1F1E9                                            ; fully-qualified     # 🇹🇩 E2.0 flag: Chad
+1F1F9 1F1EB                                            ; fully-qualified     # 🇹🇫 E2.0 flag: French Southern Territories
+1F1F9 1F1EC                                            ; fully-qualified     # 🇹🇬 E2.0 flag: Togo
+1F1F9 1F1ED                                            ; fully-qualified     # 🇹🇭 E2.0 flag: Thailand
+1F1F9 1F1EF                                            ; fully-qualified     # 🇹🇯 E2.0 flag: Tajikistan
+1F1F9 1F1F0                                            ; fully-qualified     # 🇹🇰 E2.0 flag: Tokelau
+1F1F9 1F1F1                                            ; fully-qualified     # 🇹🇱 E2.0 flag: Timor-Leste
+1F1F9 1F1F2                                            ; fully-qualified     # 🇹🇲 E2.0 flag: Turkmenistan
+1F1F9 1F1F3                                            ; fully-qualified     # 🇹🇳 E2.0 flag: Tunisia
+1F1F9 1F1F4                                            ; fully-qualified     # 🇹🇴 E2.0 flag: Tonga
+1F1F9 1F1F7                                            ; fully-qualified     # 🇹🇷 E2.0 flag: Turkey
+1F1F9 1F1F9                                            ; fully-qualified     # 🇹🇹 E2.0 flag: Trinidad & Tobago
+1F1F9 1F1FB                                            ; fully-qualified     # 🇹🇻 E2.0 flag: Tuvalu
+1F1F9 1F1FC                                            ; fully-qualified     # 🇹🇼 E2.0 flag: Taiwan
+1F1F9 1F1FF                                            ; fully-qualified     # 🇹🇿 E2.0 flag: Tanzania
+1F1FA 1F1E6                                            ; fully-qualified     # 🇺🇦 E2.0 flag: Ukraine
+1F1FA 1F1EC                                            ; fully-qualified     # 🇺🇬 E2.0 flag: Uganda
+1F1FA 1F1F2                                            ; fully-qualified     # 🇺🇲 E2.0 flag: U.S. Outlying Islands
+1F1FA 1F1F3                                            ; fully-qualified     # 🇺🇳 E4.0 flag: United Nations
+1F1FA 1F1F8                                            ; fully-qualified     # 🇺🇸 E0.6 flag: United States
+1F1FA 1F1FE                                            ; fully-qualified     # 🇺🇾 E2.0 flag: Uruguay
+1F1FA 1F1FF                                            ; fully-qualified     # 🇺🇿 E2.0 flag: Uzbekistan
+1F1FB 1F1E6                                            ; fully-qualified     # 🇻🇦 E2.0 flag: Vatican City
+1F1FB 1F1E8                                            ; fully-qualified     # 🇻🇨 E2.0 flag: St. Vincent & Grenadines
+1F1FB 1F1EA                                            ; fully-qualified     # 🇻🇪 E2.0 flag: Venezuela
+1F1FB 1F1EC                                            ; fully-qualified     # 🇻🇬 E2.0 flag: British Virgin Islands
+1F1FB 1F1EE                                            ; fully-qualified     # 🇻🇮 E2.0 flag: U.S. Virgin Islands
+1F1FB 1F1F3                                            ; fully-qualified     # 🇻🇳 E2.0 flag: Vietnam
+1F1FB 1F1FA                                            ; fully-qualified     # 🇻🇺 E2.0 flag: Vanuatu
+1F1FC 1F1EB                                            ; fully-qualified     # 🇼🇫 E2.0 flag: Wallis & Futuna
+1F1FC 1F1F8                                            ; fully-qualified     # 🇼🇸 E2.0 flag: Samoa
+1F1FD 1F1F0                                            ; fully-qualified     # 🇽🇰 E2.0 flag: Kosovo
+1F1FE 1F1EA                                            ; fully-qualified     # 🇾🇪 E2.0 flag: Yemen
+1F1FE 1F1F9                                            ; fully-qualified     # 🇾🇹 E2.0 flag: Mayotte
+1F1FF 1F1E6                                            ; fully-qualified     # 🇿🇦 E2.0 flag: South Africa
+1F1FF 1F1F2                                            ; fully-qualified     # 🇿🇲 E2.0 flag: Zambia
+1F1FF 1F1FC                                            ; fully-qualified     # 🇿🇼 E2.0 flag: Zimbabwe
 
 # subgroup: subdivision-flag
-1F3F4 E0067 E0062 E0065 E006E E0067 E007F  ; fully-qualified     # 🏴󠁧󠁢󠁥󠁮󠁧󠁿 E5.0 flag: England
-1F3F4 E0067 E0062 E0073 E0063 E0074 E007F  ; fully-qualified     # 🏴󠁧󠁢󠁳󠁣󠁴󠁿 E5.0 flag: Scotland
-1F3F4 E0067 E0062 E0077 E006C E0073 E007F  ; fully-qualified     # 🏴󠁧󠁢󠁷󠁬󠁳󠁿 E5.0 flag: Wales
+1F3F4 E0067 E0062 E0065 E006E E0067 E007F              ; fully-qualified     # 🏴󠁧󠁢󠁥󠁮󠁧󠁿 E5.0 flag: England
+1F3F4 E0067 E0062 E0073 E0063 E0074 E007F              ; fully-qualified     # 🏴󠁧󠁢󠁳󠁣󠁴󠁿 E5.0 flag: Scotland
+1F3F4 E0067 E0062 E0077 E006C E0073 E007F              ; fully-qualified     # 🏴󠁧󠁢󠁷󠁬󠁳󠁿 E5.0 flag: Wales
 
 # Flags subtotal:		275
 # Flags subtotal:		275	w/o modifiers
 
 # Status Counts
-# fully-qualified : 3295
-# minimally-qualified : 614
-# unqualified : 250
+# fully-qualified : 3512
+# minimally-qualified : 817
+# unqualified : 252
 # component : 9
 
 #EOF
diff --git a/tools/java/org/unicode/cldr/util/data/europe b/tools/java/org/unicode/cldr/util/data/europe
index 2728fac..9ba686d 100644
--- a/tools/java/org/unicode/cldr/util/data/europe
+++ b/tools/java/org/unicode/cldr/util/data/europe
@@ -122,7 +122,7 @@
 # position is 51° 28' 30" N, 0° 18' 45" W. The longitude should
 # be within about ±2". The Ordnance Survey grid reference is TQ172761.
 #
-# [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.]
+# [This yields STDOFF = -0:01:15 for London LMT in the 18th century.]
 
 # From Paul Eggert (1993-11-18):
 #
@@ -388,7 +388,7 @@
 # http://www.irishstatutebook.ie/eli/1926/sro/919/made/en/print
 # http://www.irishstatutebook.ie/eli/1947/sro/71/made/en/print
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 # Summer Time Act, 1916
 Rule	GB-Eire	1916	only	-	May	21	2:00s	1:00	BST
 Rule	GB-Eire	1916	only	-	Oct	 1	2:00s	0	GMT
@@ -500,7 +500,7 @@
 #
 # Use Europe/London for Jersey, Guernsey, and the Isle of Man.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/London	-0:01:15 -	LMT	1847 Dec  1  0:00s
 			 0:00	GB-Eire	%s	1968 Oct 27
 			 1:00	-	BST	1971 Oct 31  2:00u
@@ -529,7 +529,7 @@
 # The following is like GB-Eire and EU, except with standard time in
 # summer and negative daylight saving time in winter.  It is for when
 # negative SAVE values are used.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 #Rule	Eire	1971	only	-	Oct	31	 2:00u	-1:00	-
 #Rule	Eire	1972	1980	-	Mar	Sun>=16	 2:00u	0	-
 #Rule	Eire	1972	1980	-	Oct	Sun>=23	 2:00u	-1:00	-
@@ -538,7 +538,7 @@
 #Rule	Eire	1990	1995	-	Oct	Sun>=22	 1:00u	-1:00	-
 #Rule	Eire	1996	max	-	Oct	lastSun	 1:00u	-1:00	-
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Dublin	-0:25:00 -	LMT	1880 Aug  2
 			-0:25:21 -	DMT	1916 May 21  2:00s
 			-0:25:21 1:00	IST	1916 Oct  1  2:00s
@@ -549,12 +549,13 @@
 			 0:00	1:00	IST	1947 Nov  2  2:00s
 			 0:00	-	GMT	1948 Apr 18  2:00s
 			 0:00	GB-Eire	GMT/IST	1968 Oct 27
-# The next line is for when negative SAVE values are used.
+# Vanguard section, for zic and other parsers that support negative DST.
 #			 1:00	Eire	IST/GMT
-# These three lines are for when SAVE values are always nonnegative.
+# Rearguard section, for parsers lacking negative DST; see ziguard.awk.
 			 1:00	-	IST	1971 Oct 31  2:00u
 			 0:00	GB-Eire	GMT/IST	1996
 			 0:00	EU	GMT/IST
+# End of rearguard section.
 
 
 ###############################################################################
@@ -565,7 +566,7 @@
 # predecessor organization, the European Communities.
 # For brevity they are called "EU rules" elsewhere in this file.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	EU	1977	1980	-	Apr	Sun>=1	 1:00u	1:00	S
 Rule	EU	1977	only	-	Sep	lastSun	 1:00u	0	-
 Rule	EU	1978	only	-	Oct	 1	 1:00u	0	-
@@ -605,13 +606,13 @@
 # corrected in version 2008d). The circumstantial evidence is simply the
 # tz database itself, as seen below:
 #
-# Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15  0:01
+# Zone Europe/Paris ...
 #    0:00 France WE%sT 1945 Sep 16  3:00
 #
-# Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
+# Zone Europe/Monaco ...
 #    0:00 France WE%sT 1945 Sep 16  3:00
 #
-# Zone Europe/Belgrade 1:22:00 - LMT 1884
+# Zone Europe/Belgrade ...
 #    1:00 1:00 CEST 1945 Sep 16  2:00s
 #
 # Rule France 1945 only - Sep 16  3:00 0 -
@@ -657,7 +658,7 @@
 #
 # The 1917-1921 decree URLs are from Alexander Belopolsky (2016-08-23).
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Russia	1917	only	-	Jul	 1	23:00	1:00	MST  # Moscow Summer Time
 #
 # Decree No. 142 (1917-12-22) http://istmat.info/node/28137
@@ -737,7 +738,7 @@
 
 # These are for backward compatibility with older versions.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	WET		0:00	EU	WE%sT
 Zone	CET		1:00	C-Eur	CE%sT
 Zone	MET		1:00	C-Eur	ME%sT
@@ -771,7 +772,7 @@
 
 
 # Albania
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Albania	1940	only	-	Jun	16	0:00	1:00	S
 Rule	Albania	1942	only	-	Nov	 2	3:00	0	-
 Rule	Albania	1943	only	-	Mar	29	2:00	1:00	S
@@ -797,14 +798,14 @@
 Rule	Albania	1983	only	-	Apr	18	0:00	1:00	S
 Rule	Albania	1983	only	-	Oct	 1	0:00	0	-
 Rule	Albania	1984	only	-	Apr	 1	0:00	1:00	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Tirane	1:19:20 -	LMT	1914
 			1:00	-	CET	1940 Jun 16
 			1:00	Albania	CE%sT	1984 Jul
 			1:00	EU	CE%sT
 
 # Andorra
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Andorra	0:06:04 -	LMT	1901
 			0:00	-	WET	1946 Sep 30
 			1:00	-	CET	1985 Mar 31  2:00
@@ -821,16 +822,21 @@
 # Shanks & Pottenger give 02:00, the BEV 00:00.  Go with the BEV,
 # and guess 02:00 for 1945-04-12.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# From Alois Triendl (2019-07-22):
+# In 1946 the end of DST was on Monday, 7 October 1946, at 3:00 am.
+# Shanks had this right.  Source: Die Weltpresse, 5. Oktober 1946, page 5.
+
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Austria	1920	only	-	Apr	 5	2:00s	1:00	S
 Rule	Austria	1920	only	-	Sep	13	2:00s	0	-
 Rule	Austria	1946	only	-	Apr	14	2:00s	1:00	S
-Rule	Austria	1946	1948	-	Oct	Sun>=1	2:00s	0	-
+Rule	Austria	1946	only	-	Oct	 7	2:00s	0	-
+Rule	Austria	1947	1948	-	Oct	Sun>=1	2:00s	0	-
 Rule	Austria	1947	only	-	Apr	 6	2:00s	1:00	S
 Rule	Austria	1948	only	-	Apr	18	2:00s	1:00	S
 Rule	Austria	1980	only	-	Apr	 6	0:00	1:00	S
 Rule	Austria	1980	only	-	Sep	28	0:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Vienna	1:05:21 -	LMT	1893 Apr
 			1:00	C-Eur	CE%sT	1920
 			1:00	Austria	CE%sT	1940 Apr  1  2:00s
@@ -862,7 +868,7 @@
 # Belarussian government decided against changing to winter time....
 # http://eng.belta.by/all_news/society/Belarus-decides-against-adjusting-time-in-Russias-wake_i_76335.html
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Minsk	1:50:16 -	LMT	1880
 			1:50	-	MMT	1924 May  2 # Minsk Mean Time
 			2:00	-	EET	1930 Jun 21
@@ -875,19 +881,39 @@
 
 # Belgium
 #
-# From Paul Eggert (1997-07-02):
+# From Michael Deckers (2019-08-25):
+# The exposition in the web page
+# https://www.bestor.be/wiki/index.php/Voyager_dans_le_temps._L%E2%80%99introduction_de_la_norme_de_Greenwich_en_Belgique
+# gives several contemporary sources from which one can conclude that
+# the switch in Europe/Brussels on 1892-05-01 was from 00:17:30 to 00:00:00.
+#
+# From Paul Eggert (2019-08-28):
+# This quote helps explain the late-1914 situation:
+#   In early November 1914, the Germans imposed the time zone used in central
+#   Europe and forced the inhabitants to set their watches and public clocks
+#   sixty minutes ahead.  Many were reluctant to accept "German time" and
+#   continued to use "Belgian time" among themselves.  Reflecting the spirit of
+#   resistance that arose in the population, a song made fun of this change....
+# The song ended:
+#   Putting your clock forward
+#   Will but hasten the happy hour
+#   When we kick out the Boches!
+# See: Pluvinage G. Brussels on German time. Cahiers Bruxellois -
+# Brusselse Cahiers. 2014;XLVI(1E):15-38.
+# https://www.cairn.info/revue-cahiers-bruxellois-2014-1E-page-15.htm
+#
+# Entries from 1914 through 1917 are taken from "De tijd in België"
+# <https://www.astro.oma.be/GENERAL/INFO/nli001a.html>.
 # Entries from 1918 through 1991 are taken from:
 #	Annuaire de L'Observatoire Royal de Belgique,
 #	Avenue Circulaire, 3, B-1180 BRUXELLES, CLVIIe année, 1991
 #	(Imprimerie HAYEZ, s.p.r.l., Rue Fin, 4, 1080 BRUXELLES, MCMXC),
 #	pp 8-9.
-# LMT before 1892 was 0:17:30, according to the official journal of Belgium:
-#	Moniteur Belge, Samedi 30 Avril 1892, N.121.
-# Thanks to Pascal Delmoitie for these references.
+# Thanks to Pascal Delmoitie for the 1918/1991 references.
 # The 1918 rules are listed for completeness; they apply to unoccupied Belgium.
 # Assume Brussels switched to WET in 1918 when the armistice took effect.
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Belgium	1918	only	-	Mar	 9	 0:00s	1:00	S
 Rule	Belgium	1918	1919	-	Oct	Sat>=1	23:00s	0	-
 Rule	Belgium	1919	only	-	Mar	 1	23:00s	1:00	S
@@ -926,9 +952,9 @@
 Rule	Belgium	1945	only	-	Sep	16	 2:00s	0	-
 Rule	Belgium	1946	only	-	May	19	 2:00s	1:00	S
 Rule	Belgium	1946	only	-	Oct	 7	 2:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Brussels	0:17:30 -	LMT	1880
-			0:17:30	-	BMT	1892 May  1 12:00  # Brussels MT
+			0:17:30	-	BMT	1892 May  1 00:17:30
 			0:00	-	WET	1914 Nov  8
 			1:00	-	CET	1916 May  1  0:00
 			1:00	C-Eur	CE%sT	1918 Nov 11 11:00u
@@ -947,13 +973,13 @@
 # EET -> EETDST is in 03:00 Local time in last Sunday of March ...
 # EETDST -> EET is in 04:00 Local time in last Sunday of October
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Bulg	1979	only	-	Mar	31	23:00	1:00	S
 Rule	Bulg	1979	only	-	Oct	 1	 1:00	0	-
 Rule	Bulg	1980	1982	-	Apr	Sat>=1	23:00	1:00	S
 Rule	Bulg	1980	only	-	Sep	29	 1:00	0	-
 Rule	Bulg	1981	only	-	Sep	27	 2:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Sofia	1:33:16 -	LMT	1880
 			1:56:56	-	IMT	1894 Nov 30 # Istanbul MT?
 			2:00	-	EET	1942 Nov  2  3:00
@@ -979,21 +1005,21 @@
 # We know of no English-language name for historical Czech winter time;
 # abbreviate it as "GMT", as it happened to be GMT.
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Czech	1945	only	-	Apr	Mon>=1	2:00s	1:00	S
 Rule	Czech	1945	only	-	Oct	 1	2:00s	0	-
 Rule	Czech	1946	only	-	May	 6	2:00s	1:00	S
 Rule	Czech	1946	1949	-	Oct	Sun>=1	2:00s	0	-
 Rule	Czech	1947	1948	-	Apr	Sun>=15	2:00s	1:00	S
 Rule	Czech	1949	only	-	Apr	 9	2:00s	1:00	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Prague	0:57:44 -	LMT	1850
 			0:57:44	-	PMT	1891 Oct    # Prague Mean Time
 			1:00	C-Eur	CE%sT	1945 May  9
 			1:00	Czech	CE%sT	1946 Dec  1  3:00
 # Vanguard section, for zic and other parsers that support negative DST.
 #			1:00	-1:00	GMT	1947 Feb 23  2:00
-# Rearguard section, for parsers that do not support negative DST.
+# Rearguard section, for parsers lacking negative DST; see ziguard.awk.
 			0:00	-	GMT	1947 Feb 23  2:00
 # End of rearguard section.
 			1:00	Czech	CE%sT	1979
@@ -1035,7 +1061,7 @@
 # Hence the "02:00" of the 1980 law refers to standard time, not
 # wall-clock time, and so the EU rules were in effect in 1980.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Denmark	1916	only	-	May	14	23:00	1:00	S
 Rule	Denmark	1916	only	-	Sep	30	23:00	0	-
 Rule	Denmark	1940	only	-	May	15	 0:00	1:00	S
@@ -1048,7 +1074,7 @@
 Rule	Denmark	1948	only	-	May	 9	 2:00s	1:00	S
 Rule	Denmark	1948	only	-	Aug	 8	 2:00s	0	-
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Copenhagen	 0:50:20 -	LMT	1890
 			 0:50:20 -	CMT	1894 Jan  1 # Copenhagen MT
 			 1:00	Denmark	CE%sT	1942 Nov  2  2:00s
@@ -1137,7 +1163,7 @@
 # http://naalakkersuisut.gl/~/media/Nanoq/Files/Attached%20Files/Engelske-tekster/Legislation/Executive%20Order%20National%20Park.rtf
 # It is their only National Park.
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Thule	1991	1992	-	Mar	lastSun	2:00	1:00	D
 Rule	Thule	1991	1992	-	Sep	lastSun	2:00	0	S
 Rule	Thule	1993	2006	-	Apr	Sun>=1	2:00	1:00	D
@@ -1145,19 +1171,22 @@
 Rule	Thule	2007	max	-	Mar	Sun>=8	2:00	1:00	D
 Rule	Thule	2007	max	-	Nov	Sun>=1	2:00	0	S
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Danmarkshavn -1:14:40 -	LMT	1916 Jul 28
 			-3:00	-	-03	1980 Apr  6  2:00
 			-3:00	EU	-03/-02	1996
 			0:00	-	GMT
+#
+# Use the old name Scoresbysund, as the current name Ittoqqortoormiit
+# exceeds tzdb's 14-letter limit and has no common English abbreviation.
 Zone America/Scoresbysund -1:27:52 -	LMT	1916 Jul 28 # Ittoqqortoormiit
 			-2:00	-	-02	1980 Apr  6  2:00
 			-2:00	C-Eur	-02/-01	1981 Mar 29
 			-1:00	EU	-01/+00
-Zone America/Godthab	-3:26:56 -	LMT	1916 Jul 28 # Nuuk
+Zone America/Nuuk	-3:26:56 -	LMT	1916 Jul 28 # Godthåb
 			-3:00	-	-03	1980 Apr  6  2:00
 			-3:00	EU	-03/-02
-Zone America/Thule	-4:35:08 -	LMT	1916 Jul 28 # Pituffik air base
+Zone America/Thule	-4:35:08 -	LMT	1916 Jul 28 # Pituffik
 			-4:00	Thule	A%sT
 
 # Estonia
@@ -1211,7 +1240,7 @@
 # From Urmet Jänes (2002-03-28):
 # The legislative reference is Government decree No. 84 on 2002-02-21.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Tallinn	1:39:00	-	LMT	1880
 			1:39:00	-	TMT	1918 Feb    # Tallinn Mean Time
 			1:00	C-Eur	CE%sT	1919 Jul
@@ -1265,7 +1294,7 @@
 # From Paul Eggert (2014-06-14):
 # Go with Oja over Shanks.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Finland	1942	only	-	Apr	2	24:00	1:00	S
 Rule	Finland	1942	only	-	Oct	4	1:00	0	-
 Rule	Finland	1981	1982	-	Mar	lastSun	2:00	1:00	S
@@ -1274,7 +1303,7 @@
 # Milne says Helsinki (Helsingfors) time was 1:39:49.2 (official document);
 # round to nearest.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Helsinki	1:39:49 -	LMT	1878 May 31
 			1:39:49	-	HMT	1921 May    # Helsinki Mean Time
 			2:00	Finland	EE%sT	1983
@@ -1297,10 +1326,58 @@
 # Françoise Gauquelin, Problèmes de l'heure résolus en astrologie,
 # Guy Trédaniel, Paris 1987
 
+# From Michael Deckers (2020-06-11):
+# the law of 1891 <https://gallica.bnf.fr/ark:/12148/bpt6k64415343.texteImage>
+# was published on 1891-03-15, so it could only take force on 1891-03-16.
+
+# From Michael Deckers (2020-06-10):
+# Le Gaulois, 1911-03-11, page 1/6, online at
+# https://www.retronews.fr/societe/echo-de-presse/2018/01/29/1911-change-lheure-de-paris
+# ... [ Instantly, all pressure driven clock dials halted...  Nine minutes and
+#       twenty-one seconds later the hands resumed their circular motion. ]
+# There are also precise reports about how the change was prepared in train
+# stations: all the publicly visible clocks stopped at midnight railway time
+# (or were covered), only the chief of service had a watch, labeled
+# "Heure ancienne", that he kept running until it reached 00:04:21, when
+# he announced "Heure nouvelle".  See the "Le Petit Journal 1911-03-11".
+# https://gallica.bnf.fr/ark:/12148/bpt6k6192911/f1.item.zoom
+#
+# From Michael Deckers (2020-06-12):
+# That "all French clocks stopped" for 00:09:21 is a misreading of French
+# newspapers; this sort of adjustment applies only to certain
+# remote-controlled clocks ("pendules pneumatiques", of which there existed
+# perhaps a dozen in Paris, and which simply could not be set back remotely),
+# but not to all the clocks in all French towns and villages.  For instance,
+# the following story in the "Courrier de Saône-et-Loire" 1911-03-11, page 2:
+# only works if legal time was stepped back (was not monotone): ...
+#   [One can observe that children who had been born at midnight less 5
+#    minutes and who had died at midnight of the old time, would turn out to
+#    be dead before being born, time having been set back and having
+#    suppressed 9 minutes and 25 seconds of their existence, that is, more
+#    than they could spend.]
+#
+# From Paul Eggert (2020-06-12):
+# French time in railway stations was legally five minutes behind civil time,
+# which explains why railway "old time" ran to 00:04:21 instead of to 00:09:21.
+# The law's text (which Michael Deckers noted is at
+# <https://gallica.bnf.fr/ark:/12148/bpt6k2022333z/f2>) says only that
+# at 1911-03-11 00:00 legal time was that of Paris mean time delayed by
+# nine minutes and twenty-one seconds, and does not say how the
+# transition from Paris mean time was to occur.
+#
+# tzdb has no way to represent stopped clocks.  As the railway practice
+# was to keep a watch running on "old time" to decide when to restart
+# the other clocks, this could be modeled as a transition for "old time" at
+# 00:09:21.  However, since the law was ambiguous and clocks outside railway
+# stations were probably done haphazardly with the popular impression being
+# that the transition was done at 00:00 "old time", simply leave the time
+# blank; this causes zic to default to 00:00 "old time" which is good enough.
+# Do something similar for the 1891-03-16 transition.  There are similar
+# problems in Algiers, Monaco and Tunis.
 
 #
 # Shank & Pottenger seem to use '24:00' ambiguously; resolve it with Whitman.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	France	1916	only	-	Jun	14	23:00s	1:00	S
 Rule	France	1916	1919	-	Oct	Sun>=1	23:00s	0	-
 Rule	France	1917	only	-	Mar	24	23:00s	1:00	S
@@ -1360,13 +1437,11 @@
 # go with Excoffier's 28/3/76 0hUT and 25/9/76 23hUT.
 Rule	France	1976	only	-	Mar	28	 1:00	1:00	S
 Rule	France	1976	only	-	Sep	26	 1:00	0	-
-# Shanks & Pottenger give 0:09:20 for Paris Mean Time, and Whitman 0:09:05,
-# but Howse quotes the actual French legislation as saying 0:09:21.
-# Go with Howse.  Howse writes that the time in France was officially based
+# Howse writes that the time in France was officially based
 # on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Paris	0:09:21 -	LMT	1891 Mar 15  0:01
-			0:09:21	-	PMT	1911 Mar 11  0:01 # Paris MT
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
+Zone	Europe/Paris	0:09:21 -	LMT	1891 Mar 16
+			0:09:21	-	PMT	1911 Mar 11 # Paris Mean Time
 # Shanks & Pottenger give 1940 Jun 14 0:00; go with Excoffier and Le Corre.
 			0:00	France	WE%sT	1940 Jun 14 23:00
 # Le Corre says Paris stuck with occupied-France time after the liberation;
@@ -1395,7 +1470,7 @@
 # this was equivalent to UT +03, not +04.
 
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Germany	1946	only	-	Apr	14	2:00s	1:00	S
 Rule	Germany	1946	only	-	Oct	 7	2:00s	0	-
 Rule	Germany	1947	1949	-	Oct	Sun>=1	2:00s	0	-
@@ -1412,7 +1487,7 @@
 Rule SovietZone	1945	only	-	Sep	24	3:00	1:00	S
 Rule SovietZone	1945	only	-	Nov	18	2:00s	0	-
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Berlin	0:53:28 -	LMT	1893 Apr
 			1:00	C-Eur	CE%sT	1945 May 24  2:00
 			1:00 SovietZone	CE%sT	1946
@@ -1440,14 +1515,14 @@
 # is in Europe.  Our reference location Tbilisi is in the Asian part.
 
 # Gibraltar
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Gibraltar	-0:21:24 -	LMT	1880 Aug  2  0:00s
 			0:00	GB-Eire	%s	1957 Apr 14  2:00
 			1:00	-	CET	1982
 			1:00	EU	CE%sT
 
 # Greece
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 # Whitman gives 1932 Jul 5 - Nov 1; go with Shanks & Pottenger.
 Rule	Greece	1932	only	-	Jul	 7	0:00	1:00	S
 Rule	Greece	1932	only	-	Sep	 1	0:00	0	-
@@ -1471,7 +1546,7 @@
 Rule	Greece	1979	only	-	Sep	29	2:00	0	-
 Rule	Greece	1980	only	-	Apr	 1	0:00	1:00	S
 Rule	Greece	1980	only	-	Sep	28	0:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Athens	1:34:52 -	LMT	1895 Sep 14
 			1:34:52	-	AMT	1916 Jul 28  0:01 # Athens MT
 			2:00	Greece	EE%sT	1941 Apr 30
@@ -1482,38 +1557,69 @@
 			2:00	EU	EE%sT
 
 # Hungary
-# From Paul Eggert (2014-07-15):
-# Dates for 1916-1945 are taken from:
-# Oross A. Jelen a múlt jövője: a nyári időszámítás Magyarországon 1916-1945.
-# National Archives of Hungary (2012-10-29).
-# http://mnl.gov.hu/a_het_dokumentuma/a_nyari_idoszamitas_magyarorszagon_19161945.html
-# This source does not always give times, which are taken from Shanks
-# & Pottenger (which disagree about the dates).
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Hungary	1918	only	-	Apr	 1	 3:00	1:00	S
-Rule	Hungary	1918	only	-	Sep	16	 3:00	0	-
-Rule	Hungary	1919	only	-	Apr	15	 3:00	1:00	S
-Rule	Hungary	1919	only	-	Nov	24	 3:00	0	-
+
+# From Michael Deckers (2020-06-09):
+# an Austrian encyclopedia of railroads of 1913, online at
+# http://www.zeno.org/Roell-1912/A/Eisenbahnzeit
+# says that the switch [to CET] happened on 1890-11-01.
+
+# From Géza Nyáry (2020-06-07):
+# Data for 1918-1983 are based on the archive database of Library Hungaricana.
+# The dates are collected from original, scanned governmental orders,
+# bulletins, instructions and public press.
+# [See URLs below.]
+
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
+# https://library.hungaricana.hu/hu/view/OGYK_RT_1918/?pg=238
+# https://library.hungaricana.hu/hu/view/OGYK_RT_1919/?pg=808
+# https://library.hungaricana.hu/hu/view/OGYK_RT_1920/?pg=201
+Rule	Hungary	1918	1919	-	Apr	15	 2:00	1:00	S
+Rule	Hungary	1918	1920	-	Sep	Mon>=15	 3:00	0	-
+Rule	Hungary	1920	only	-	Apr	 5	 2:00	1:00	S
+# https://library.hungaricana.hu/hu/view/OGYK_RT_1945/?pg=882
 Rule	Hungary	1945	only	-	May	 1	23:00	1:00	S
-Rule	Hungary	1945	only	-	Nov	 1	 0:00	0	-
+Rule	Hungary	1945	only	-	Nov	 1	 1:00	0	-
+# https://library.hungaricana.hu/hu/view/Delmagyarorszag_1946_03/?pg=49
 Rule	Hungary	1946	only	-	Mar	31	 2:00s	1:00	S
-Rule	Hungary	1946	1949	-	Oct	Sun>=1	 2:00s	0	-
+# https://library.hungaricana.hu/hu/view/Delmagyarorszag_1946_09/?pg=54
+Rule	Hungary	1946	only	-	Oct	 7	 2:00	0	-
+# https://library.hungaricana.hu/hu/view/KulfBelfHirek_1947_04_1__001-123/?pg=90
+# https://library.hungaricana.hu/hu/view/DunantuliNaplo_1947_09/?pg=128
+# https://library.hungaricana.hu/hu/view/KulfBelfHirek_1948_03_3__001-123/?pg=304
+# https://library.hungaricana.hu/hu/view/Zala_1948_09/?pg=64
+# https://library.hungaricana.hu/hu/view/SatoraljaujhelyiLeveltar_ZempleniNepujsag_1948/?pg=53
+# https://library.hungaricana.hu/hu/view/SatoraljaujhelyiLeveltar_ZempleniNepujsag_1948/?pg=160
+# https://library.hungaricana.hu/hu/view/Delmagyarorszag_1949_09/?pg=94
 Rule	Hungary	1947	1949	-	Apr	Sun>=4	 2:00s	1:00	S
-Rule	Hungary	1950	only	-	Apr	17	 2:00s	1:00	S
-Rule	Hungary	1950	only	-	Oct	23	 2:00s	0	-
-Rule	Hungary	1954	1955	-	May	23	 0:00	1:00	S
-Rule	Hungary	1954	1955	-	Oct	 3	 0:00	0	-
-Rule	Hungary	1956	only	-	Jun	Sun>=1	 0:00	1:00	S
-Rule	Hungary	1956	only	-	Sep	lastSun	 0:00	0	-
-Rule	Hungary	1957	only	-	Jun	Sun>=1	 1:00	1:00	S
-Rule	Hungary	1957	only	-	Sep	lastSun	 3:00	0	-
-Rule	Hungary	1980	only	-	Apr	 6	 1:00	1:00	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Budapest	1:16:20 -	LMT	1890 Oct
+Rule	Hungary	1947	1949	-	Oct	Sun>=1	 2:00s	0	-
+# https://library.hungaricana.hu/hu/view/DTT_KOZL_TanacsokKozlonye_1954/?pg=513
+Rule	Hungary	1954	only	-	May	23	 0:00	1:00	S
+Rule	Hungary	1954	only	-	Oct	 3	 0:00	0	-
+# https://library.hungaricana.hu/hu/view/DTT_KOZL_TanacsokKozlonye_1955/?pg=398
+Rule	Hungary	1955	only	-	May	22	 2:00	1:00	S
+Rule	Hungary	1955	only	-	Oct	 2	 3:00	0	-
+# https://library.hungaricana.hu/hu/view/HevesMegyeiNepujsag_1956_06/?pg=0
+# https://library.hungaricana.hu/hu/view/EszakMagyarorszag_1956_06/?pg=6
+# https://library.hungaricana.hu/hu/view/SzolnokMegyeiNeplap_1957_04/?pg=120
+# https://library.hungaricana.hu/hu/view/PestMegyeiHirlap_1957_09/?pg=143
+Rule	Hungary	1956	1957	-	Jun	Sun>=1	 2:00	1:00	S
+Rule	Hungary	1956	1957	-	Sep	lastSun	 3:00	0	-
+# https://library.hungaricana.hu/hu/view/DTT_KOZL_TanacsokKozlonye_1980/?pg=1227
+Rule	Hungary	1980	only	-	Apr	 6	 0:00	1:00	S
+Rule	Hungary	1980	only	-	Sep	28	 1:00	0	-
+# https://library.hungaricana.hu/hu/view/Delmagyarorszag_1981_01/?pg=79
+# https://library.hungaricana.hu/hu/view/DTT_KOZL_TanacsokKozlonye_1982/?pg=115
+# https://library.hungaricana.hu/hu/view/DTT_KOZL_TanacsokKozlonye_1983/?pg=85
+Rule	Hungary	1981	1983	-	Mar	lastSun	 0:00	1:00	S
+Rule	Hungary	1981	1983	-	Sep	lastSun	 1:00	0	-
+#
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
+Zone	Europe/Budapest	1:16:20 -	LMT	1890 Nov  1
 			1:00	C-Eur	CE%sT	1918
-			1:00	Hungary	CE%sT	1941 Apr  8
+# https://library.hungaricana.hu/hu/view/OGYK_RT_1941/?pg=1204
+			1:00	Hungary	CE%sT	1941 Apr  7 23:00
 			1:00	C-Eur	CE%sT	1945
-			1:00	Hungary	CE%sT	1980 Sep 28  2:00s
+			1:00	Hungary	CE%sT	1984
 			1:00	EU	CE%sT
 
 # Iceland
@@ -1527,7 +1633,7 @@
 #
 # From January 1st, 1908 the whole of Iceland was standardised at 1 hour
 # behind GMT. Previously, local mean solar time was used in different parts
-# of Iceland, the almanak had been based on Reykjavik mean solar time which
+# of Iceland, the almanak had been based on Reykjavík mean solar time which
 # was 1 hour and 28 minutes behind GMT.
 #
 # "first day of winter" referred to [below] means the first day of the 26 weeks
@@ -1549,7 +1655,7 @@
 # The information below is taken from the 1988 Almanak; see
 # http://www.almanak.hi.is/klukkan.html
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Iceland	1917	1919	-	Feb	19	23:00	1:00	-
 Rule	Iceland	1917	only	-	Oct	21	 1:00	0	-
 Rule	Iceland	1918	1919	-	Nov	16	 1:00	0	-
@@ -1569,7 +1675,7 @@
 Rule	Iceland	1949	only	-	Oct	30	 1:00s	0	-
 Rule	Iceland	1950	1966	-	Oct	Sun>=22	 1:00s	0	-
 Rule	Iceland	1967	only	-	Oct	29	 1:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Atlantic/Reykjavik	-1:28	-	LMT	1908
 			-1:00	Iceland	-01/+00	1968 Apr  7  1:00s
 			 0:00	-	GMT
@@ -1583,6 +1689,25 @@
 # But these events all occurred before the 1970 cutoff,
 # so record only the time in Rome.
 #
+# From Stephen Trainor (2019-05-06):
+# http://www.ac-ilsestante.it/MERIDIANE/ora_legale/ORA_LEGALE_ESTIVA_IN_ITALIA.htm
+# ... the [1866] law went into effect on 12 December 1866, rather than
+# the date of the decree (22 Sep 1866)
+# https://web.archive.org/web/20070824155341/http://www.iav.it/planetario/didastro/didastro/english.htm
+# ... "In Italy in 1866 there were 6 railway times (Torino, Verona, Firenze,
+# Roma, Napoli, Palermo). On that year it was decided to unify them, adopting
+# the average time of Rome (even if this city was not yet part of the
+# kingdom).  On the 12th December 1866, on the starting of the winter time
+# table, it took effect in the railways, the post office and the telegraph,
+# not only for the internal service but also for the public....  Milano set
+# the public watches on the Rome time on the same day (12th December 1866),
+# Torino and Bologna on the 1st January 1867, Venezia the 1st May 1880 and the
+# last city was Cagliari in 1886."
+#
+# From Luigi Rosa (2019-05-07):
+# this is the scan of the decree:
+# http://www.radiomarconi.com/marconi/filopanti/1866c.jpg
+#
 # From Michael Deckers (2016-10-24):
 # http://www.ac-ilsestante.it/MERIDIANE/ora_legale quotes a law of 1893-08-10
 # ... [translated as] "The preceding dispositions will enter into
@@ -1593,6 +1718,7 @@
 # The authoritative source for time in Italy is the national metrological
 # institute, which has a summary page of historical DST data at
 # http://www.inrim.it/res/tf/ora_legale_i.shtml
+# [now at http://oldsite.inrim.it/res/tf/ora_legale_i.shtml as of 2017]
 # (2016-10-24):
 # http://www.renzobaldini.it/le-ore-legali-in-italia/
 # has still different data for 1944.  It divides Italy in two, as
@@ -1607,6 +1733,13 @@
 # advanced to sixty minutes later starting at hour two on 1944-04-02; ...
 # Starting at hour three on the date 1944-09-17 standard time will be resumed.
 #
+# From Alois Triendl (2019-07-02):
+# I spent 6 Euros to buy two archive copies of Il Messaggero, a Roman paper,
+# for 1 and 2 April 1944.  The edition of 2 April has this note: "Tonight at 2
+# am, put forward the clock by one hour.  Remember that in the night between
+# today and Monday the 'ora legale' will come in force again."  That makes it
+# clear that in Rome the change was on Monday, 3 April 1944 at 2 am.
+#
 # From Paul Eggert (2016-10-27):
 # Go with INRiM for DST rules, except as corrected by Inglis for 1944
 # for the Kingdom of Italy.  This is consistent with Renzo Baldini.
@@ -1614,7 +1747,7 @@
 # to 1944-06-04; although Rome was an open city during this period, it
 # was effectively controlled by Germany.
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Italy	1916	only	-	Jun	 3	24:00	1:00	S
 Rule	Italy	1916	1917	-	Sep	30	24:00	0	-
 Rule	Italy	1917	only	-	Mar	31	24:00	1:00	S
@@ -1656,8 +1789,8 @@
 Rule	Italy	1977	1979	-	May	Sun>=22	 0:00s	1:00	S
 Rule	Italy	1978	only	-	Oct	 1	 0:00s	0	-
 Rule	Italy	1979	only	-	Sep	30	 0:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Rome	0:49:56 -	LMT	1866 Sep 22
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
+Zone	Europe/Rome	0:49:56 -	LMT	1866 Dec 12
 			0:49:56	-	RMT	1893 Oct 31 23:49:56 # Rome Mean
 			1:00	Italy	CE%sT	1943 Sep 10
 			1:00	C-Eur	CE%sT	1944 Jun  4
@@ -1724,7 +1857,7 @@
 # urged Lithuania and Estonia to adopt a similar time policy, but it
 # appears that they will not do so....
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Latvia	1989	1996	-	Mar	lastSun	 2:00s	1:00	S
 Rule	Latvia	1989	1996	-	Sep	lastSun	 2:00s	0	-
 
@@ -1732,7 +1865,7 @@
 # Byalokoz 1919 says Latvia was 1:36:34.
 # Go with Byalokoz.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Riga	1:36:34	-	LMT	1880
 			1:36:34	-	RMT	1918 Apr 15  2:00 # Riga MT
 			1:36:34	1:00	LST	1918 Sep 16  3:00 # Latvian ST
@@ -1754,15 +1887,10 @@
 # From Paul Eggert (2013-09-09):
 # Shanks & Pottenger say Vaduz is like Zurich.
 
-# From Alois Treindl (2013-09-18):
-# http://www.eliechtensteinensia.li/LIJ/1978/1938-1978/1941.pdf
-# ... confirms on p. 6 that Liechtenstein followed Switzerland in 1941 and 1942.
-# I ... translate only the last two paragraphs:
-#    ... during second world war, in the years 1941 and 1942, Liechtenstein
-#    introduced daylight saving time, adapting to Switzerland.  From 1943 on
-#    central European time was in force throughout the year.
-#    From a report of the duke's government to the high council,
-#    regarding the introduction of a time law, of 31 May 1977.
+# From Alois Treindl (2019-07-04):
+# I was able to access the online archive of the Vaduz paper Vaterland ...
+# I could confirm from the paper that Liechtenstein did in fact follow
+# the same DST in 1941 and 1942 as Switzerland did.
 
 Link Europe/Zurich Europe/Vaduz
 
@@ -1802,7 +1930,7 @@
 # http://www.lrvk.lt/nut/11/n1749.htm
 
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Vilnius	1:41:16	-	LMT	1880
 			1:24:00	-	WMT	1917        # Warsaw Mean Time
 			1:35:36	-	KMT	1919 Oct 10 # Kaunas Mean Time
@@ -1822,7 +1950,7 @@
 # Luxembourg
 # Whitman disagrees with most of these dates in minor ways;
 # go with Shanks & Pottenger.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Lux	1916	only	-	May	14	23:00	1:00	S
 Rule	Lux	1916	only	-	Oct	 1	 1:00	0	-
 Rule	Lux	1917	only	-	Apr	28	23:00	1:00	S
@@ -1846,7 +1974,7 @@
 Rule	Lux	1927	only	-	Apr	 9	23:00	1:00	S
 Rule	Lux	1928	only	-	Apr	14	23:00	1:00	S
 Rule	Lux	1929	only	-	Apr	20	23:00	1:00	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Luxembourg	0:24:36 -	LMT	1904 Jun
 			1:00	Lux	CE%sT	1918 Nov 25
 			0:00	Lux	WE%sT	1929 Oct  6  2:00s
@@ -1863,7 +1991,7 @@
 # From Paul Eggert (2016-10-21):
 # Assume 1900-1972 was like Rome, overriding Shanks.
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Malta	1973	only	-	Mar	31	0:00s	1:00	S
 Rule	Malta	1973	only	-	Sep	29	0:00s	0	-
 Rule	Malta	1974	only	-	Apr	21	0:00s	1:00	S
@@ -1871,7 +1999,7 @@
 Rule	Malta	1975	1979	-	Apr	Sun>=15	2:00	1:00	S
 Rule	Malta	1975	1980	-	Sep	Sun>=15	2:00	0	-
 Rule	Malta	1980	only	-	Mar	31	2:00	1:00	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2  0:00s # Valletta
 			1:00	Italy	CE%sT	1973 Mar 31
 			1:00	Malta	CE%sT	1981
@@ -1936,11 +2064,11 @@
 # says the 2014-03-30 spring-forward transition was at 02:00 local time.
 # Guess that since 1997 Moldova has switched one hour before the EU.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Moldova	1997	max	-	Mar	lastSun	 2:00	1:00	S
 Rule	Moldova	1997	max	-	Oct	lastSun	 3:00	0	-
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Chisinau	1:55:20 -	LMT	1880
 			1:55	-	CMT	1918 Feb 15 # Chisinau MT
 			1:44:24	-	BMT	1931 Jul 24 # Bucharest MT
@@ -1954,11 +2082,24 @@
 			2:00	Moldova	EE%sT
 
 # Monaco
-# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
-# more precise 0:09:21.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Monaco	0:29:32 -	LMT	1891 Mar 15
-			0:09:21	-	PMT	1911 Mar 11 # Paris Mean Time
+#
+# From Michael Deckers (2020-06-12):
+# In the "Journal de Monaco" of 1892-05-24, online at
+# https://journaldemonaco.gouv.mc/var/jdm/storage/original/application/b1c67c12c5af11b41ea888fb048e4fe8.pdf
+# we read: ...
+#  [In virtue of a Sovereign Ordinance of the May 13 of the current [year],
+#   legal time in the Principality will be set to, from the date of June 1,
+#   1892 onwards, to the meridian of Paris, as in France.]
+# In the "Journal de Monaco" of 1911-03-28, online at
+# https://journaldemonaco.gouv.mc/var/jdm/storage/original/application/de74ffb7db53d4f599059fe8f0ed482a.pdf
+# we read an ordinance of 1911-03-16: ...
+#  [Legal time in the Principality will be set, from the date of promulgation
+#   of the present ordinance, to legal time in France....  Consequently, legal
+#   time will be retarded by 9 minutes and 21 seconds.]
+#
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
+Zone	Europe/Monaco	0:29:32 -	LMT	1892 Jun  1
+			0:09:21	-	PMT	1911 Mar 29 # Paris Mean Time
 			0:00	France	WE%sT	1945 Sep 16  3:00
 			1:00	France	CE%sT	1977
 			1:00	EU	CE%sT
@@ -2006,7 +2147,7 @@
 # The data entries before 1945 are taken from
 # https://www.staff.science.uu.nl/~gent0113/wettijd/wettijd.htm
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Neth	1916	only	-	May	 1	0:00	1:00	NST	# Netherlands Summer Time
 Rule	Neth	1916	only	-	Oct	 1	0:00	0	AMT	# Amsterdam Mean Time
 Rule	Neth	1917	only	-	Apr	16	2:00s	1:00	NST
@@ -2031,8 +2172,8 @@
 Rule	Neth	1945	only	-	Sep	16	2:00s	0	-
 #
 # Amsterdam Mean Time was +00:19:32.13, but the .13 is omitted
-# below because the current format requires GMTOFF to be an integer.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# below because the current format requires STDOFF to be an integer.
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Amsterdam	0:19:32 -	LMT	1835
 			0:19:32	Neth	%s	1937 Jul  1
 			0:20	Neth +0020/+0120 1940 May 16  0:00
@@ -2043,7 +2184,7 @@
 # Norway
 # http://met.no/met/met_lex/q_u/sommertid.html (2004-01) agrees with Shanks &
 # Pottenger.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Norway	1916	only	-	May	22	1:00	1:00	S
 Rule	Norway	1916	only	-	Sep	30	0:00	0	-
 Rule	Norway	1945	only	-	Apr	 2	2:00s	1:00	S
@@ -2051,7 +2192,7 @@
 Rule	Norway	1959	1964	-	Mar	Sun>=15	2:00s	1:00	S
 Rule	Norway	1959	1965	-	Sep	Sun>=15	2:00s	0	-
 Rule	Norway	1965	only	-	Apr	25	2:00s	1:00	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Oslo	0:43:00 -	LMT	1895 Jan  1
 			1:00	Norway	CE%sT	1940 Aug 10 23:00
 			1:00	C-Eur	CE%sT	1945 Apr  2  2:00
@@ -2112,7 +2253,7 @@
 # The 1919 dates and times can be found in Tygodnik Urzędowy nr 1 (1919-03-20),
 # <http://www.wbc.poznan.pl/publication/32156> pp 1-2.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Poland	1918	1919	-	Sep	16	2:00s	0	-
 Rule	Poland	1919	only	-	Apr	15	2:00s	1:00	S
 Rule	Poland	1944	only	-	Apr	 3	2:00s	1:00	S
@@ -2142,7 +2283,7 @@
 Rule	Poland	1960	only	-	Apr	 3	1:00s	1:00	S
 Rule	Poland	1961	1964	-	May	lastSun	1:00s	1:00	S
 Rule	Poland	1962	1964	-	Sep	lastSun	1:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Warsaw	1:24:00 -	LMT	1880
 			1:24:00	-	WMT	1915 Aug  5 # Warsaw Mean Time
 			1:00	C-Eur	CE%sT	1918 Sep 16  3:00
@@ -2183,7 +2324,7 @@
 # Guess that the Azores changed to EU rules in 1992 (since that's when Portugal
 # harmonized with EU rules), and that they stayed +0:00 that winter.
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 # DSH writes that despite Decree 1,469 (1915), the change to the clocks was not
 # done every year, depending on what Spain did, because of railroad schedules.
 # Go with Shanks & Pottenger.
@@ -2247,7 +2388,7 @@
 Rule	Port	1981	1982	-	Mar	lastSun	 1:00s	1:00	S
 Rule	Port	1983	only	-	Mar	lastSun	 2:00s	1:00	S
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Lisbon	-0:36:45 -	LMT	1884
 			-0:36:45 -	LMT	1912 Jan  1  0:00u # Lisbon MT
 			 0:00	Port	WE%sT	1966 Apr  3  2:00
@@ -2296,7 +2437,7 @@
 # assume that Romania and Moldova switched to EU rules in 1997,
 # the same year as Bulgaria.
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Romania	1932	only	-	May	21	 0:00s	1:00	S
 Rule	Romania	1932	1939	-	Oct	Sun>=1	 0:00s	0	-
 Rule	Romania	1933	1939	-	Apr	Sun>=2	 0:00s	1:00	S
@@ -2306,7 +2447,7 @@
 Rule	Romania	1980	only	-	Sep	lastSun	 1:00	0	-
 Rule	Romania	1991	1993	-	Mar	lastSun	 0:00s	1:00	S
 Rule	Romania	1991	1993	-	Sep	lastSun	 0:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Bucharest	1:44:24 -	LMT	1891 Oct
 			1:44:24	-	BMT	1931 Jul 24 # Bucharest MT
 			2:00	Romania	EE%sT	1981 Mar 29  2:00s
@@ -2470,6 +2611,12 @@
 # Europe/Kaliningrad covers...
 # 39	RU-KGD	Kaliningrad Oblast
 
+# From Paul Eggert (2019-07-25):
+# Although Shanks lists 1945-01-01 as the date for transition from
+# +01/+02 to +02/+03, more likely this is a placeholder.  Guess that
+# the transition occurred at 1945-04-10 00:00, which is about when
+# Königsberg surrendered to Soviet troops.  (Thanks to Alois Triendl.)
+
 # From Paul Eggert (2016-03-18):
 # The 1989 transition is from USSR act No. 227 (1989-03-14).
 
@@ -2486,8 +2633,8 @@
 # Moscow on 1991-11-03, switched to Moscow-1 on 1992-01-19.
 
 Zone Europe/Kaliningrad	 1:22:00 -	LMT	1893 Apr
-			 1:00	C-Eur	CE%sT	1945
-			 2:00	Poland	CE%sT	1946
+			 1:00	C-Eur	CE%sT	1945 Apr 10
+			 2:00	Poland	EE%sT	1946 Apr  7
 			 3:00	Russia	MSK/MSD	1989 Mar 26  2:00s
 			 2:00	Russia	EE%sT	2011 Mar 27  2:00s
 			 3:00	-	+03	2014 Oct 26  2:00s
@@ -3345,7 +3492,7 @@
 # See Europe/Rome.
 
 # Serbia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Belgrade	1:22:00	-	LMT	1884
 			1:00	-	CET	1941 Apr 18 23:00
 			1:00	C-Eur	CE%sT	1945
@@ -3388,14 +3535,14 @@
 # fallback transition from the next day's 00:59... to 00:00.
 
 # From Michael Deckers (2016-12-15):
-# The Royal Decree of 1900-06-26 quoted by Planesas, online at
+# The Royal Decree of 1900-07-26 quoted by Planesas, online at
 # https://www.boe.es/datos/pdfs/BOE//1900/209/A00383-00384.pdf
 # says in its article 5 (my translation):
 # These dispositions will enter into force beginning with the
 # instant at which, according to the time indicated in article 1,
 # the 1st day of January of 1901 will begin.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Spain	1918	only	-	Apr	15	23:00	1:00	S
 Rule	Spain	1918	1919	-	Oct	 6	24:00s	0	-
 Rule	Spain	1919	only	-	Apr	 6	23:00	1:00	S
@@ -3451,7 +3598,7 @@
 Rule SpainAfrica 1977	only	-	Sep	28	 0:00	0	-
 Rule SpainAfrica 1978	only	-	Jun	 1	 0:00	1:00	S
 Rule SpainAfrica 1978	only	-	Aug	 4	 0:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Madrid	-0:14:44 -	LMT	1900 Dec 31 23:45:16
 			 0:00	Spain	WE%sT	1940 Mar 16 23:00
 			 1:00	Spain	CE%sT	1979
@@ -3519,7 +3666,7 @@
 #
 # Source: The newspaper "Dagens Nyheter", 1916-10-01, page 7 upper left.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Stockholm	1:12:12 -	LMT	1879 Jan  1
 			1:00:14	-	SET	1900 Jan  1 # Swedish Time
 			1:00	-	CET	1916 May 14 23:00
@@ -3532,7 +3679,7 @@
 # By the end of the 18th century clocks and watches became commonplace
 # and their performance improved enormously.  Communities began to keep
 # mean time in preference to apparent time - Geneva from 1780 ....
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 # From Whitman (who writes "Midnight?"):
 # Rule	Swiss	1940	only	-	Nov	 2	0:00	1:00	S
 # Rule	Swiss	1940	only	-	Dec	31	0:00	0	-
@@ -3619,10 +3766,10 @@
 # 1853-07-16, though it probably occurred at some other date in Zurich, and
 # legal civil time probably changed at still some other transition date.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Swiss	1941	1942	-	May	Mon>=1	1:00	1:00	S
 Rule	Swiss	1941	1942	-	Oct	Mon>=1	2:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Zurich	0:34:08 -	LMT	1853 Jul 16 # See above comment.
 			0:29:46	-	BMT	1894 Jun    # Bern Mean Time
 			1:00	Swiss	CE%sT	1981
@@ -3630,20 +3777,75 @@
 
 # Turkey
 
+# From Alois Treindl (2019-08-12):
+# http://www.astrolojidergisi.com/yazsaati.htm has researched the time zone
+# history of Turkey, based on newspaper archives and official documents.
+# From Paul Eggert (2019-08-28):
+# That source (Oya Vulaş, "Türkiye'de Yaz Saati Uygulamaları")
+# is used for 1940/1972, where it seems more reliable than our other
+# sources.
+
+# From Kıvanç Yazan (2019-08-12):
+# http://www.resmigazete.gov.tr/arsiv/14539.pdf#page=24
+# 1973-06-03 01:00 -> 02:00, 1973-11-04 02:00 -> 01:00
+#
+# http://www.resmigazete.gov.tr/arsiv/14829.pdf#page=1
+# 1974-03-31 02:00 -> 03:00, 1974-11-03 02:00 -> 01:00
+#
+# http://www.resmigazete.gov.tr/arsiv/15161.pdf#page=1
+# 1975-03-22 02:00 -> 03:00, 1975-11-02 02:00 -> 01:00
+#
+# http://www.resmigazete.gov.tr/arsiv/15535_1.pdf#page=1
+# 1976-03-21 02:00 -> 03:00, 1976-10-31 02:00 -> 01:00
+#
+# http://www.resmigazete.gov.tr/arsiv/15778.pdf#page=5
+# 1977-04-03 02:00 -> 03:00, 1977-10-16 02:00 -> 01:00,
+# 1978-04-02 02:00 -> 03:00 (not applied, see below)
+# 1978-10-15 02:00 -> 01:00 (not applied, see below)
+# 1979-04-01 02:00 -> 03:00 (not applied, see below)
+# 1979-10-14 02:00 -> 01:00 (not applied, see below)
+#
+# http://www.resmigazete.gov.tr/arsiv/16245.pdf#page=17
+# This cancels the previous decision, and repeats it only for 1978.
+# 1978-04-02 02:00 -> 03:00, 1978-10-15 02:00 -> 01:00
+# (not applied due to standard TZ change below)
+#
+# http://www.resmigazete.gov.tr/arsiv/16331.pdf#page=3
+# This decision changes the default longitude for Turkish time zone from 30
+# degrees East to 45 degrees East.  This means a standard TZ change, from +2
+# to +3.  This is published & applied on 1978-06-29.  At that time, Turkey was
+# already on summer time (already on 45E).  Hence, this new law just meant an
+# "continuous summer time".  Note that this was reversed in a few years.
+#
+# http://www.resmigazete.gov.tr/arsiv/18119_1.pdf#page=1
+# 1983-07-31 02:00 -> 03:00 (note that this jumps TZ to +4)
+# 1983-10-02 02:00 -> 01:00 (back to +3)
+#
+# http://www.resmigazete.gov.tr/arsiv/18561.pdf (page 1 and 34)
+# At this time, Turkey is still on +3 with no spring-forward on early
+# 1984.  This decision is published on 10/31/1984.  Page 1 declares
+# the decision of reverting the "default longitude change".  So the
+# standard time should go back to +3 (30E).  And page 34 explains when
+# that will happen: 1984-11-01 02:00 -> 01:00.  You can think of this
+# as "end of continuous summer time, change of standard time zone".
+#
+# http://www.resmigazete.gov.tr/arsiv/18713.pdf#page=1
+# 1985-04-20 01:00 -> 02:00, 1985-09-28 02:00 -> 01:00
+
 # From Kıvanç Yazan (2016-09-25):
 # 1) For 1986-2006, DST started at 01:00 local and ended at 02:00 local, with
 #    no exceptions.
 # 2) 1994's lastSun was overridden with Mar 20 ...
 # Here are official papers:
-# http://www.resmigazete.gov.tr/arsiv/19032.pdf  - page 2 for 1986
-# http://www.resmigazete.gov.tr/arsiv/19400.pdf  - page 4 for 1987
-# http://www.resmigazete.gov.tr/arsiv/19752.pdf  - page 15 for 1988
-# http://www.resmigazete.gov.tr/arsiv/20102.pdf  - page 6 for 1989
-# http://www.resmigazete.gov.tr/arsiv/20464.pdf  - page 1 for 1990 - 1992
-# http://www.resmigazete.gov.tr/arsiv/21531.pdf  - page 15 for 1993 - 1995
-# http://www.resmigazete.gov.tr/arsiv/21879.pdf  - page 1 for overriding 1994
-# http://www.resmigazete.gov.tr/arsiv/22588.pdf  - page 1 for 1996, 1997
-# http://www.resmigazete.gov.tr/arsiv/23286.pdf  - page 10 for 1998 - 2000
+# http://www.resmigazete.gov.tr/arsiv/19032.pdf#page=2 for 1986
+# http://www.resmigazete.gov.tr/arsiv/19400.pdf#page=4 for 1987
+# http://www.resmigazete.gov.tr/arsiv/19752.pdf#page=15 for 1988
+# http://www.resmigazete.gov.tr/arsiv/20102.pdf#page=6 for 1989
+# http://www.resmigazete.gov.tr/arsiv/20464.pdf#page=1 for 1990 - 1992
+# http://www.resmigazete.gov.tr/arsiv/21531.pdf#page=15 for 1993 - 1995
+# http://www.resmigazete.gov.tr/arsiv/21879.pdf#page=1 for overriding 1994
+# http://www.resmigazete.gov.tr/arsiv/22588.pdf#page=1 for 1996, 1997
+# http://www.resmigazete.gov.tr/arsiv/23286.pdf#page=10 for 1998 - 2000
 # http://www.resmigazete.gov.tr/eskiler/2001/03/20010324.htm#2  - for 2001
 # http://www.resmigazete.gov.tr/eskiler/2002/03/20020316.htm#2  - for 2002-2006
 # From Paul Eggert (2016-09-25):
@@ -3713,7 +3915,7 @@
 # Although Google Translate misfires on that source, it looks like
 # Turkey reversed last month's decision, and so will stay at +03.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Turkey	1916	only	-	May	 1	0:00	1:00	S
 Rule	Turkey	1916	only	-	Oct	 1	0:00	0	-
 Rule	Turkey	1920	only	-	Mar	28	0:00	1:00	S
@@ -3727,56 +3929,46 @@
 Rule	Turkey	1924	only	-	May	13	0:00	1:00	S
 Rule	Turkey	1924	1925	-	Oct	 1	0:00	0	-
 Rule	Turkey	1925	only	-	May	 1	0:00	1:00	S
-Rule	Turkey	1940	only	-	Jun	30	0:00	1:00	S
-Rule	Turkey	1940	only	-	Oct	 5	0:00	0	-
+Rule	Turkey	1940	only	-	Jul	 1	0:00	1:00	S
+Rule	Turkey	1940	only	-	Oct	 6	0:00	0	-
 Rule	Turkey	1940	only	-	Dec	 1	0:00	1:00	S
 Rule	Turkey	1941	only	-	Sep	21	0:00	0	-
 Rule	Turkey	1942	only	-	Apr	 1	0:00	1:00	S
-# Whitman omits the next two transition and gives 1945 Oct 1;
-# go with Shanks & Pottenger.
-Rule	Turkey	1942	only	-	Nov	 1	0:00	0	-
-Rule	Turkey	1945	only	-	Apr	 2	0:00	1:00	S
 Rule	Turkey	1945	only	-	Oct	 8	0:00	0	-
 Rule	Turkey	1946	only	-	Jun	 1	0:00	1:00	S
 Rule	Turkey	1946	only	-	Oct	 1	0:00	0	-
 Rule	Turkey	1947	1948	-	Apr	Sun>=16	0:00	1:00	S
-Rule	Turkey	1947	1950	-	Oct	Sun>=2	0:00	0	-
+Rule	Turkey	1947	1951	-	Oct	Sun>=2	0:00	0	-
 Rule	Turkey	1949	only	-	Apr	10	0:00	1:00	S
-Rule	Turkey	1950	only	-	Apr	19	0:00	1:00	S
+Rule	Turkey	1950	only	-	Apr	16	0:00	1:00	S
 Rule	Turkey	1951	only	-	Apr	22	0:00	1:00	S
-Rule	Turkey	1951	only	-	Oct	 8	0:00	0	-
+# DST for 15 months; unusual but we'll let it pass.
 Rule	Turkey	1962	only	-	Jul	15	0:00	1:00	S
-Rule	Turkey	1962	only	-	Oct	 8	0:00	0	-
+Rule	Turkey	1963	only	-	Oct	30	0:00	0	-
 Rule	Turkey	1964	only	-	May	15	0:00	1:00	S
 Rule	Turkey	1964	only	-	Oct	 1	0:00	0	-
-Rule	Turkey	1970	1972	-	May	Sun>=2	0:00	1:00	S
-Rule	Turkey	1970	1972	-	Oct	Sun>=2	0:00	0	-
 Rule	Turkey	1973	only	-	Jun	 3	1:00	1:00	S
-Rule	Turkey	1973	only	-	Nov	 4	3:00	0	-
+Rule	Turkey	1973	1976	-	Oct	Sun>=31	2:00	0	-
 Rule	Turkey	1974	only	-	Mar	31	2:00	1:00	S
-Rule	Turkey	1974	only	-	Nov	 3	5:00	0	-
-Rule	Turkey	1975	only	-	Mar	30	0:00	1:00	S
-Rule	Turkey	1975	1976	-	Oct	lastSun	0:00	0	-
-Rule	Turkey	1976	only	-	Jun	 1	0:00	1:00	S
-Rule	Turkey	1977	1978	-	Apr	Sun>=1	0:00	1:00	S
-Rule	Turkey	1977	only	-	Oct	16	0:00	0	-
-Rule	Turkey	1979	1980	-	Apr	Sun>=1	3:00	1:00	S
-Rule	Turkey	1979	1982	-	Oct	Mon>=11	0:00	0	-
-Rule	Turkey	1981	1982	-	Mar	lastSun	3:00	1:00	S
-Rule	Turkey	1983	only	-	Jul	31	0:00	1:00	S
-Rule	Turkey	1983	only	-	Oct	 2	0:00	0	-
-Rule	Turkey	1985	only	-	Apr	20	0:00	1:00	S
-Rule	Turkey	1985	only	-	Sep	28	0:00	0	-
+Rule	Turkey	1975	only	-	Mar	22	2:00	1:00	S
+Rule	Turkey	1976	only	-	Mar	21	2:00	1:00	S
+Rule	Turkey	1977	1978	-	Apr	Sun>=1	2:00	1:00	S
+Rule	Turkey	1977	1978	-	Oct	Sun>=15	2:00	0	-
+Rule	Turkey	1978	only	-	Jun	29	0:00	0	-
+Rule	Turkey	1983	only	-	Jul	31	2:00	1:00	S
+Rule	Turkey	1983	only	-	Oct	 2	2:00	0	-
+Rule	Turkey	1985	only	-	Apr	20	1:00s	1:00	S
+Rule	Turkey	1985	only	-	Sep	28	1:00s	0	-
 Rule	Turkey	1986	1993	-	Mar	lastSun	1:00s	1:00	S
 Rule	Turkey	1986	1995	-	Sep	lastSun	1:00s	0	-
 Rule	Turkey	1994	only	-	Mar	20	1:00s	1:00	S
 Rule	Turkey	1995	2006	-	Mar	lastSun	1:00s	1:00	S
 Rule	Turkey	1996	2006	-	Oct	lastSun	1:00s	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Istanbul	1:55:52 -	LMT	1880
 			1:56:56	-	IMT	1910 Oct # Istanbul Mean Time?
-			2:00	Turkey	EE%sT	1978 Oct 15
-			3:00	Turkey	+03/+04	1985 Apr 20
+			2:00	Turkey	EE%sT	1978 Jun 29
+			3:00	Turkey	+03/+04	1984 Nov  1  2:00
 			2:00	Turkey	EE%sT	2007
 			2:00	EU	EE%sT	2011 Mar 27  1:00u
 			2:00	-	EET	2011 Mar 28  1:00u
@@ -3869,16 +4061,8 @@
 # controversial, and some day "Kyiv" may become substantially more popular in
 # English; in the meantime, stick with the traditional English "Kiev" as that
 # means less disruption for our users.
-#
-# Anyway, none of the common English-language spellings (Kiev, Kyiv, Kieff,
-# Kijeff, Kijev, Kiyef, Kiyeff) do justice to the common pronunciation in
-# Ukrainian, namely [ˈkɪjiu̯] (IPA).  This pronunciation has nothing like an
-# English "v" or "f", and instead trails off with what an English-speaker
-# would call a demure "oo" sound, and it would would be better anglicized as
-# "Kuiyu".  Here's a sound file, if you would like to do as the Kuiyuvians do:
-# https://commons.wikimedia.org/wiki/File:Uk-Київ.ogg
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 # This represents most of Ukraine.  See above for the spelling of "Kiev".
 Zone Europe/Kiev	2:02:04 -	LMT	1880
 			2:02:04	-	KMT	1924 May  2 # Kiev Mean Time
@@ -3889,7 +4073,7 @@
 			2:00	1:00	EEST	1991 Sep 29  3:00
 			2:00	E-Eur	EE%sT	1995
 			2:00	EU	EE%sT
-# Ruthenia used CET 1990/1991.
+# Transcarpathia used CET 1990/1991.
 # "Uzhhorod" is the transliteration of the Rusyn/Ukrainian pronunciation, but
 # "Uzhgorod" is more common in English.
 Zone Europe/Uzhgorod	1:29:12 -	LMT	1890 Oct
diff --git a/tools/java/org/unicode/cldr/util/data/external/UnCodes.txt b/tools/java/org/unicode/cldr/util/data/external/UnCodes.txt
index 0ce17a2..31c9e15 100644
--- a/tools/java/org/unicode/cldr/util/data/external/UnCodes.txt
+++ b/tools/java/org/unicode/cldr/util/data/external/UnCodes.txt
@@ -1,250 +1,250 @@
-Global Code	Global Name	Region Code	Region Name	Sub-region Code	Sub-region Name	Intermediate Region Code	Intermediate Region Name	Country or Area	M49 Code	ISO-alpha3 Code	Least Developed Countries (LDC)	Land Locked Developing Countries (LLDC)	Small Island Developing States (SIDS)	Developed / Developing Countries
-001	World	002	Africa	015	Northern Africa			Algeria	012	DZA				Developing
-001	World	002	Africa	015	Northern Africa			Egypt	818	EGY				Developing
-001	World	002	Africa	015	Northern Africa			Libya	434	LBY				Developing
-001	World	002	Africa	015	Northern Africa			Morocco	504	MAR				Developing
-001	World	002	Africa	015	Northern Africa			Sudan	729	SDN	x			Developing
-001	World	002	Africa	015	Northern Africa			Tunisia	788	TUN				Developing
-001	World	002	Africa	015	Northern Africa			Western Sahara	732	ESH				Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	British Indian Ocean Territory	086	IOT				Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Burundi	108	BDI	x	x		Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Comoros	174	COM	x		x	Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Djibouti	262	DJI	x			Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Eritrea	232	ERI	x			Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Ethiopia	231	ETH	x	x		Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	French Southern Territories	260	ATF				Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Kenya	404	KEN				Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Madagascar	450	MDG	x			Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Malawi	454	MWI	x	x		Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Mauritius	480	MUS			x	Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Mayotte	175	MYT				Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Mozambique	508	MOZ	x			Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Réunion	638	REU				Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Rwanda	646	RWA	x	x		Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Seychelles	690	SYC			x	Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Somalia	706	SOM	x			Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	South Sudan	728	SSD	x	x		Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Uganda	800	UGA	x	x		Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	United Republic of Tanzania	834	TZA	x			Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Zambia	894	ZMB	x	x		Developing
-001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Zimbabwe	716	ZWE		x		Developing
-001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Angola	024	AGO	x			Developing
-001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Cameroon	120	CMR				Developing
-001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Central African Republic	140	CAF	x	x		Developing
-001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Chad	148	TCD	x	x		Developing
-001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Congo	178	COG				Developing
-001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Democratic Republic of the Congo	180	COD	x			Developing
-001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Equatorial Guinea	226	GNQ				Developing
-001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Gabon	266	GAB				Developing
-001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Sao Tome and Principe	678	STP	x		x	Developing
-001	World	002	Africa	202	Sub-Saharan Africa	018	Southern Africa	Botswana	072	BWA		x		Developing
-001	World	002	Africa	202	Sub-Saharan Africa	018	Southern Africa	Eswatini	748	SWZ		x		Developing
-001	World	002	Africa	202	Sub-Saharan Africa	018	Southern Africa	Lesotho	426	LSO	x	x		Developing
-001	World	002	Africa	202	Sub-Saharan Africa	018	Southern Africa	Namibia	516	NAM				Developing
-001	World	002	Africa	202	Sub-Saharan Africa	018	Southern Africa	South Africa	710	ZAF				Developing
-001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Benin	204	BEN	x			Developing
-001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Burkina Faso	854	BFA	x	x		Developing
-001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Cabo Verde	132	CPV			x	Developing
-001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Côte d’Ivoire	384	CIV				Developing
-001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Gambia	270	GMB	x			Developing
-001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Ghana	288	GHA				Developing
-001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Guinea	324	GIN	x			Developing
-001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Guinea-Bissau	624	GNB	x		x	Developing
-001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Liberia	430	LBR	x			Developing
-001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Mali	466	MLI	x	x		Developing
-001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Mauritania	478	MRT	x			Developing
-001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Niger	562	NER	x	x		Developing
-001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Nigeria	566	NGA				Developing
-001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Saint Helena	654	SHN				Developing
-001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Senegal	686	SEN	x			Developing
-001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Sierra Leone	694	SLE	x			Developing
-001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Togo	768	TGO	x			Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Anguilla	660	AIA			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Antigua and Barbuda	028	ATG			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Aruba	533	ABW			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Bahamas	044	BHS			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Barbados	052	BRB			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Bonaire, Sint Eustatius and Saba	535	BES			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	British Virgin Islands	092	VGB			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Cayman Islands	136	CYM				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Cuba	192	CUB			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Curaçao	531	CUW			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Dominica	212	DMA			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Dominican Republic	214	DOM			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Grenada	308	GRD			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Guadeloupe	312	GLP				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Haiti	332	HTI	x		x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Jamaica	388	JAM			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Martinique	474	MTQ				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Montserrat	500	MSR			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Puerto Rico	630	PRI			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Saint Barthélemy	652	BLM				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Saint Kitts and Nevis	659	KNA			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Saint Lucia	662	LCA			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Saint Martin (French Part)	663	MAF				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Saint Vincent and the Grenadines	670	VCT			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Sint Maarten (Dutch part)	534	SXM			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Trinidad and Tobago	780	TTO			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Turks and Caicos Islands	796	TCA				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	United States Virgin Islands	850	VIR			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	013	Central America	Belize	084	BLZ			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	013	Central America	Costa Rica	188	CRI				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	013	Central America	El Salvador	222	SLV				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	013	Central America	Guatemala	320	GTM				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	013	Central America	Honduras	340	HND				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	013	Central America	Mexico	484	MEX				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	013	Central America	Nicaragua	558	NIC				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	013	Central America	Panama	591	PAN				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Argentina	032	ARG				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Bolivia (Plurinational State of)	068	BOL		x		Developing
-001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Bouvet Island	074	BVT				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Brazil	076	BRA				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Chile	152	CHL				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Colombia	170	COL				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Ecuador	218	ECU				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Falkland Islands (Malvinas)	238	FLK				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	005	South America	French Guiana	254	GUF				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Guyana	328	GUY			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Paraguay	600	PRY		x		Developing
-001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Peru	604	PER				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	005	South America	South Georgia and the South Sandwich Islands	239	SGS				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Suriname	740	SUR			x	Developing
-001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Uruguay	858	URY				Developing
-001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Venezuela (Bolivarian Republic of)	862	VEN				Developing
-001	World	019	Americas	021	Northern America			Bermuda	060	BMU				Developed
-001	World	019	Americas	021	Northern America			Canada	124	CAN				Developed
-001	World	019	Americas	021	Northern America			Greenland	304	GRL				Developed
-001	World	019	Americas	021	Northern America			Saint Pierre and Miquelon	666	SPM				Developed
-001	World	019	Americas	021	Northern America			United States of America	840	USA				Developed
-001	World							Antarctica	010	ATA				
-001	World	142	Asia	143	Central Asia			Kazakhstan	398	KAZ		x		Developing
-001	World	142	Asia	143	Central Asia			Kyrgyzstan	417	KGZ		x		Developing
-001	World	142	Asia	143	Central Asia			Tajikistan	762	TJK		x		Developing
-001	World	142	Asia	143	Central Asia			Turkmenistan	795	TKM		x		Developing
-001	World	142	Asia	143	Central Asia			Uzbekistan	860	UZB		x		Developing
-001	World	142	Asia	030	Eastern Asia			China	156	CHN				Developing
-001	World	142	Asia	030	Eastern Asia			China, Hong Kong Special Administrative Region	344	HKG				Developing
-001	World	142	Asia	030	Eastern Asia			China, Macao Special Administrative Region	446	MAC				Developing
-001	World	142	Asia	030	Eastern Asia			Democratic People's Republic of Korea	408	PRK				Developing
-001	World	142	Asia	030	Eastern Asia			Japan	392	JPN				Developed
-001	World	142	Asia	030	Eastern Asia			Mongolia	496	MNG		x		Developing
-001	World	142	Asia	030	Eastern Asia			Republic of Korea	410	KOR				Developing
-001	World	142	Asia	035	South-eastern Asia			Brunei Darussalam	096	BRN				Developing
-001	World	142	Asia	035	South-eastern Asia			Cambodia	116	KHM	x			Developing
-001	World	142	Asia	035	South-eastern Asia			Indonesia	360	IDN				Developing
-001	World	142	Asia	035	South-eastern Asia			Lao People's Democratic Republic	418	LAO	x	x		Developing
-001	World	142	Asia	035	South-eastern Asia			Malaysia	458	MYS				Developing
-001	World	142	Asia	035	South-eastern Asia			Myanmar	104	MMR	x			Developing
-001	World	142	Asia	035	South-eastern Asia			Philippines	608	PHL				Developing
-001	World	142	Asia	035	South-eastern Asia			Singapore	702	SGP			x	Developing
-001	World	142	Asia	035	South-eastern Asia			Thailand	764	THA				Developing
-001	World	142	Asia	035	South-eastern Asia			Timor-Leste	626	TLS	x		x	Developing
-001	World	142	Asia	035	South-eastern Asia			Viet Nam	704	VNM				Developing
-001	World	142	Asia	034	Southern Asia			Afghanistan	004	AFG	x	x		Developing
-001	World	142	Asia	034	Southern Asia			Bangladesh	050	BGD	x			Developing
-001	World	142	Asia	034	Southern Asia			Bhutan	064	BTN	x	x		Developing
-001	World	142	Asia	034	Southern Asia			India	356	IND				Developing
-001	World	142	Asia	034	Southern Asia			Iran (Islamic Republic of)	364	IRN				Developing
-001	World	142	Asia	034	Southern Asia			Maldives	462	MDV			x	Developing
-001	World	142	Asia	034	Southern Asia			Nepal	524	NPL	x	x		Developing
-001	World	142	Asia	034	Southern Asia			Pakistan	586	PAK				Developing
-001	World	142	Asia	034	Southern Asia			Sri Lanka	144	LKA				Developing
-001	World	142	Asia	145	Western Asia			Armenia	051	ARM		x		Developing
-001	World	142	Asia	145	Western Asia			Azerbaijan	031	AZE		x		Developing
-001	World	142	Asia	145	Western Asia			Bahrain	048	BHR				Developing
-001	World	142	Asia	145	Western Asia			Cyprus	196	CYP				Developed
-001	World	142	Asia	145	Western Asia			Georgia	268	GEO				Developing
-001	World	142	Asia	145	Western Asia			Iraq	368	IRQ				Developing
-001	World	142	Asia	145	Western Asia			Israel	376	ISR				Developed
-001	World	142	Asia	145	Western Asia			Jordan	400	JOR				Developing
-001	World	142	Asia	145	Western Asia			Kuwait	414	KWT				Developing
-001	World	142	Asia	145	Western Asia			Lebanon	422	LBN				Developing
-001	World	142	Asia	145	Western Asia			Oman	512	OMN				Developing
-001	World	142	Asia	145	Western Asia			Qatar	634	QAT				Developing
-001	World	142	Asia	145	Western Asia			Saudi Arabia	682	SAU				Developing
-001	World	142	Asia	145	Western Asia			State of Palestine	275	PSE				Developing
-001	World	142	Asia	145	Western Asia			Syrian Arab Republic	760	SYR				Developing
-001	World	142	Asia	145	Western Asia			Turkey	792	TUR				Developing
-001	World	142	Asia	145	Western Asia			United Arab Emirates	784	ARE				Developing
-001	World	142	Asia	145	Western Asia			Yemen	887	YEM	x			Developing
-001	World	150	Europe	151	Eastern Europe			Belarus	112	BLR				Developed
-001	World	150	Europe	151	Eastern Europe			Bulgaria	100	BGR				Developed
-001	World	150	Europe	151	Eastern Europe			Czechia	203	CZE				Developed
-001	World	150	Europe	151	Eastern Europe			Hungary	348	HUN				Developed
-001	World	150	Europe	151	Eastern Europe			Poland	616	POL				Developed
-001	World	150	Europe	151	Eastern Europe			Republic of Moldova	498	MDA		x		Developed
-001	World	150	Europe	151	Eastern Europe			Romania	642	ROU				Developed
-001	World	150	Europe	151	Eastern Europe			Russian Federation	643	RUS				Developed
-001	World	150	Europe	151	Eastern Europe			Slovakia	703	SVK				Developed
-001	World	150	Europe	151	Eastern Europe			Ukraine	804	UKR				Developed
-001	World	150	Europe	154	Northern Europe			Åland Islands	248	ALA				Developed
-001	World	150	Europe	154	Northern Europe	830	Channel Islands	Guernsey	831	GGY				Developed
-001	World	150	Europe	154	Northern Europe	830	Channel Islands	Jersey	832	JEY				Developed
-001	World	150	Europe	154	Northern Europe	830	Channel Islands	Sark	680					Developed
-001	World	150	Europe	154	Northern Europe			Denmark	208	DNK				Developed
-001	World	150	Europe	154	Northern Europe			Estonia	233	EST				Developed
-001	World	150	Europe	154	Northern Europe			Faroe Islands	234	FRO				Developed
-001	World	150	Europe	154	Northern Europe			Finland	246	FIN				Developed
-001	World	150	Europe	154	Northern Europe			Iceland	352	ISL				Developed
-001	World	150	Europe	154	Northern Europe			Ireland	372	IRL				Developed
-001	World	150	Europe	154	Northern Europe			Isle of Man	833	IMN				Developed
-001	World	150	Europe	154	Northern Europe			Latvia	428	LVA				Developed
-001	World	150	Europe	154	Northern Europe			Lithuania	440	LTU				Developed
-001	World	150	Europe	154	Northern Europe			Norway	578	NOR				Developed
-001	World	150	Europe	154	Northern Europe			Svalbard and Jan Mayen Islands	744	SJM				Developed
-001	World	150	Europe	154	Northern Europe			Sweden	752	SWE				Developed
-001	World	150	Europe	154	Northern Europe			United Kingdom of Great Britain and Northern Ireland	826	GBR				Developed
-001	World	150	Europe	039	Southern Europe			Albania	008	ALB				Developed
-001	World	150	Europe	039	Southern Europe			Andorra	020	AND				Developed
-001	World	150	Europe	039	Southern Europe			Bosnia and Herzegovina	070	BIH				Developed
-001	World	150	Europe	039	Southern Europe			Croatia	191	HRV				Developed
-001	World	150	Europe	039	Southern Europe			Gibraltar	292	GIB				Developed
-001	World	150	Europe	039	Southern Europe			Greece	300	GRC				Developed
-001	World	150	Europe	039	Southern Europe			Holy See	336	VAT				Developed
-001	World	150	Europe	039	Southern Europe			Italy	380	ITA				Developed
-001	World	150	Europe	039	Southern Europe			Malta	470	MLT				Developed
-001	World	150	Europe	039	Southern Europe			Montenegro	499	MNE				Developed
-001	World	150	Europe	039	Southern Europe			North Macedonia	807	MKD		x		Developed
-001	World	150	Europe	039	Southern Europe			Portugal	620	PRT				Developed
-001	World	150	Europe	039	Southern Europe			San Marino	674	SMR				Developed
-001	World	150	Europe	039	Southern Europe			Serbia	688	SRB				Developed
-001	World	150	Europe	039	Southern Europe			Slovenia	705	SVN				Developed
-001	World	150	Europe	039	Southern Europe			Spain	724	ESP				Developed
-001	World	150	Europe	155	Western Europe			Austria	040	AUT				Developed
-001	World	150	Europe	155	Western Europe			Belgium	056	BEL				Developed
-001	World	150	Europe	155	Western Europe			France	250	FRA				Developed
-001	World	150	Europe	155	Western Europe			Germany	276	DEU				Developed
-001	World	150	Europe	155	Western Europe			Liechtenstein	438	LIE				Developed
-001	World	150	Europe	155	Western Europe			Luxembourg	442	LUX				Developed
-001	World	150	Europe	155	Western Europe			Monaco	492	MCO				Developed
-001	World	150	Europe	155	Western Europe			Netherlands	528	NLD				Developed
-001	World	150	Europe	155	Western Europe			Switzerland	756	CHE				Developed
-001	World	009	Oceania	053	Australia and New Zealand			Australia	036	AUS				Developed
-001	World	009	Oceania	053	Australia and New Zealand			Christmas Island	162	CXR				Developed
-001	World	009	Oceania	053	Australia and New Zealand			Cocos (Keeling) Islands	166	CCK				Developed
-001	World	009	Oceania	053	Australia and New Zealand			Heard Island and McDonald Islands	334	HMD				Developed
-001	World	009	Oceania	053	Australia and New Zealand			New Zealand	554	NZL				Developed
-001	World	009	Oceania	053	Australia and New Zealand			Norfolk Island	574	NFK				Developed
-001	World	009	Oceania	054	Melanesia			Fiji	242	FJI			x	Developing
-001	World	009	Oceania	054	Melanesia			New Caledonia	540	NCL			x	Developing
-001	World	009	Oceania	054	Melanesia			Papua New Guinea	598	PNG			x	Developing
-001	World	009	Oceania	054	Melanesia			Solomon Islands	090	SLB	x		x	Developing
-001	World	009	Oceania	054	Melanesia			Vanuatu	548	VUT	x		x	Developing
-001	World	009	Oceania	057	Micronesia			Guam	316	GUM			x	Developing
-001	World	009	Oceania	057	Micronesia			Kiribati	296	KIR	x		x	Developing
-001	World	009	Oceania	057	Micronesia			Marshall Islands	584	MHL			x	Developing
-001	World	009	Oceania	057	Micronesia			Micronesia (Federated States of)	583	FSM			x	Developing
-001	World	009	Oceania	057	Micronesia			Nauru	520	NRU			x	Developing
-001	World	009	Oceania	057	Micronesia			Northern Mariana Islands	580	MNP			x	Developing
-001	World	009	Oceania	057	Micronesia			Palau	585	PLW			x	Developing
-001	World	009	Oceania	057	Micronesia			United States Minor Outlying Islands	581	UMI				Developing
-001	World	009	Oceania	061	Polynesia			American Samoa	016	ASM			x	Developing
-001	World	009	Oceania	061	Polynesia			Cook Islands	184	COK			x	Developing
-001	World	009	Oceania	061	Polynesia			French Polynesia	258	PYF			x	Developing
-001	World	009	Oceania	061	Polynesia			Niue	570	NIU			x	Developing
-001	World	009	Oceania	061	Polynesia			Pitcairn	612	PCN				Developing
-001	World	009	Oceania	061	Polynesia			Samoa	882	WSM			x	Developing
-001	World	009	Oceania	061	Polynesia			Tokelau	772	TKL				Developing
-001	World	009	Oceania	061	Polynesia			Tonga	776	TON			x	Developing
-001	World	009	Oceania	061	Polynesia			Tuvalu	798	TUV	x		x	Developing
-001	World	009	Oceania	061	Polynesia			Wallis and Futuna Islands	876	WLF				Developing
\ No newline at end of file
+Global Code	Global Name	Region Code	Region Name	Sub-region Code	Sub-region Name	Intermediate Region Code	Intermediate Region Name	Country or Area	M49 Code	ISO-alpha2 Code	ISO-alpha3 Code	Least Developed Countries (LDC)	Land Locked Developing Countries (LLDC)	Small Island Developing States (SIDS)	Developed / Developing Countries
+001	World	002	Africa	015	Northern Africa			Algeria	012	DZ	DZA				Developing
+001	World	002	Africa	015	Northern Africa			Egypt	818	EG	EGY				Developing
+001	World	002	Africa	015	Northern Africa			Libya	434	LY	LBY				Developing
+001	World	002	Africa	015	Northern Africa			Morocco	504	MA	MAR				Developing
+001	World	002	Africa	015	Northern Africa			Sudan	729	SD	SDN	x			Developing
+001	World	002	Africa	015	Northern Africa			Tunisia	788	TN	TUN				Developing
+001	World	002	Africa	015	Northern Africa			Western Sahara	732	EH	ESH				Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	British Indian Ocean Territory	086	IO	IOT				Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Burundi	108	BI	BDI	x	x		Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Comoros	174	KM	COM	x		x	Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Djibouti	262	DJ	DJI	x			Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Eritrea	232	ER	ERI	x			Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Ethiopia	231	ET	ETH	x	x		Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	French Southern Territories	260	TF	ATF				Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Kenya	404	KE	KEN				Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Madagascar	450	MG	MDG	x			Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Malawi	454	MW	MWI	x	x		Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Mauritius	480	MU	MUS			x	Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Mayotte	175	YT	MYT				Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Mozambique	508	MZ	MOZ	x			Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Réunion	638	RE	REU				Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Rwanda	646	RW	RWA	x	x		Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Seychelles	690	SC	SYC			x	Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Somalia	706	SO	SOM	x			Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	South Sudan	728	SS	SSD	x	x		Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Uganda	800	UG	UGA	x	x		Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	United Republic of Tanzania	834	TZ	TZA	x			Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Zambia	894	ZM	ZMB	x	x		Developing
+001	World	002	Africa	202	Sub-Saharan Africa	014	Eastern Africa	Zimbabwe	716	ZW	ZWE		x		Developing
+001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Angola	024	AO	AGO	x			Developing
+001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Cameroon	120	CM	CMR				Developing
+001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Central African Republic	140	CF	CAF	x	x		Developing
+001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Chad	148	TD	TCD	x	x		Developing
+001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Congo	178	CG	COG				Developing
+001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Democratic Republic of the Congo	180	CD	COD	x			Developing
+001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Equatorial Guinea	226	GQ	GNQ				Developing
+001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Gabon	266	GA	GAB				Developing
+001	World	002	Africa	202	Sub-Saharan Africa	017	Middle Africa	Sao Tome and Principe	678	ST	STP	x		x	Developing
+001	World	002	Africa	202	Sub-Saharan Africa	018	Southern Africa	Botswana	072	BW	BWA		x		Developing
+001	World	002	Africa	202	Sub-Saharan Africa	018	Southern Africa	Eswatini	748	SZ	SWZ		x		Developing
+001	World	002	Africa	202	Sub-Saharan Africa	018	Southern Africa	Lesotho	426	LS	LSO	x	x		Developing
+001	World	002	Africa	202	Sub-Saharan Africa	018	Southern Africa	Namibia	516	NA	NAM				Developing
+001	World	002	Africa	202	Sub-Saharan Africa	018	Southern Africa	South Africa	710	ZA	ZAF				Developing
+001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Benin	204	BJ	BEN	x			Developing
+001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Burkina Faso	854	BF	BFA	x	x		Developing
+001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Cabo Verde	132	CV	CPV			x	Developing
+001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Côte d’Ivoire	384	CI	CIV				Developing
+001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Gambia	270	GM	GMB	x			Developing
+001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Ghana	288	GH	GHA				Developing
+001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Guinea	324	GN	GIN	x			Developing
+001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Guinea-Bissau	624	GW	GNB	x		x	Developing
+001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Liberia	430	LR	LBR	x			Developing
+001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Mali	466	ML	MLI	x	x		Developing
+001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Mauritania	478	MR	MRT	x			Developing
+001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Niger	562	NE	NER	x	x		Developing
+001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Nigeria	566	NG	NGA				Developing
+001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Saint Helena	654	SH	SHN				Developing
+001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Senegal	686	SN	SEN	x			Developing
+001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Sierra Leone	694	SL	SLE	x			Developing
+001	World	002	Africa	202	Sub-Saharan Africa	011	Western Africa	Togo	768	TG	TGO	x			Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Anguilla	660	AI	AIA			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Antigua and Barbuda	028	AG	ATG			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Aruba	533	AW	ABW			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Bahamas	044	BS	BHS			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Barbados	052	BB	BRB			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Bonaire, Sint Eustatius and Saba	535	BQ	BES			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	British Virgin Islands	092	VG	VGB			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Cayman Islands	136	KY	CYM				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Cuba	192	CU	CUB			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Curaçao	531	CW	CUW			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Dominica	212	DM	DMA			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Dominican Republic	214	DO	DOM			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Grenada	308	GD	GRD			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Guadeloupe	312	GP	GLP				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Haiti	332	HT	HTI	x		x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Jamaica	388	JM	JAM			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Martinique	474	MQ	MTQ				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Montserrat	500	MS	MSR			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Puerto Rico	630	PR	PRI			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Saint Barthélemy	652	BL	BLM				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Saint Kitts and Nevis	659	KN	KNA			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Saint Lucia	662	LC	LCA			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Saint Martin (French Part)	663	MF	MAF				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Saint Vincent and the Grenadines	670	VC	VCT			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Sint Maarten (Dutch part)	534	SX	SXM			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Trinidad and Tobago	780	TT	TTO			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	Turks and Caicos Islands	796	TC	TCA				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	029	Caribbean	United States Virgin Islands	850	VI	VIR			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	013	Central America	Belize	084	BZ	BLZ			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	013	Central America	Costa Rica	188	CR	CRI				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	013	Central America	El Salvador	222	SV	SLV				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	013	Central America	Guatemala	320	GT	GTM				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	013	Central America	Honduras	340	HN	HND				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	013	Central America	Mexico	484	MX	MEX				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	013	Central America	Nicaragua	558	NI	NIC				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	013	Central America	Panama	591	PA	PAN				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Argentina	032	AR	ARG				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Bolivia (Plurinational State of)	068	BO	BOL		x		Developing
+001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Bouvet Island	074	BV	BVT				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Brazil	076	BR	BRA				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Chile	152	CL	CHL				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Colombia	170	CO	COL				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Ecuador	218	EC	ECU				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Falkland Islands (Malvinas)	238	FK	FLK				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	005	South America	French Guiana	254	GF	GUF				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Guyana	328	GY	GUY			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Paraguay	600	PY	PRY		x		Developing
+001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Peru	604	PE	PER				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	005	South America	South Georgia and the South Sandwich Islands	239	GS	SGS				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Suriname	740	SR	SUR			x	Developing
+001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Uruguay	858	UY	URY				Developing
+001	World	019	Americas	419	Latin America and the Caribbean	005	South America	Venezuela (Bolivarian Republic of)	862	VE	VEN				Developing
+001	World	019	Americas	021	Northern America			Bermuda	060	BM	BMU				Developed
+001	World	019	Americas	021	Northern America			Canada	124	CA	CAN				Developed
+001	World	019	Americas	021	Northern America			Greenland	304	GL	GRL				Developed
+001	World	019	Americas	021	Northern America			Saint Pierre and Miquelon	666	PM	SPM				Developed
+001	World	019	Americas	021	Northern America			United States of America	840	US	USA				Developed
+001	World							Antarctica	010	AQ	ATA				
+001	World	142	Asia	143	Central Asia			Kazakhstan	398	KZ	KAZ		x		Developing
+001	World	142	Asia	143	Central Asia			Kyrgyzstan	417	KG	KGZ		x		Developing
+001	World	142	Asia	143	Central Asia			Tajikistan	762	TJ	TJK		x		Developing
+001	World	142	Asia	143	Central Asia			Turkmenistan	795	TM	TKM		x		Developing
+001	World	142	Asia	143	Central Asia			Uzbekistan	860	UZ	UZB		x		Developing
+001	World	142	Asia	030	Eastern Asia			China	156	CN	CHN				Developing
+001	World	142	Asia	030	Eastern Asia			China, Hong Kong Special Administrative Region	344	HK	HKG				Developing
+001	World	142	Asia	030	Eastern Asia			China, Macao Special Administrative Region	446	MO	MAC				Developing
+001	World	142	Asia	030	Eastern Asia			Democratic People's Republic of Korea	408	KP	PRK				Developing
+001	World	142	Asia	030	Eastern Asia			Japan	392	JP	JPN				Developed
+001	World	142	Asia	030	Eastern Asia			Mongolia	496	MN	MNG		x		Developing
+001	World	142	Asia	030	Eastern Asia			Republic of Korea	410	KR	KOR				Developing
+001	World	142	Asia	035	South-eastern Asia			Brunei Darussalam	096	BN	BRN				Developing
+001	World	142	Asia	035	South-eastern Asia			Cambodia	116	KH	KHM	x			Developing
+001	World	142	Asia	035	South-eastern Asia			Indonesia	360	ID	IDN				Developing
+001	World	142	Asia	035	South-eastern Asia			Lao People's Democratic Republic	418	LA	LAO	x	x		Developing
+001	World	142	Asia	035	South-eastern Asia			Malaysia	458	MY	MYS				Developing
+001	World	142	Asia	035	South-eastern Asia			Myanmar	104	MM	MMR	x			Developing
+001	World	142	Asia	035	South-eastern Asia			Philippines	608	PH	PHL				Developing
+001	World	142	Asia	035	South-eastern Asia			Singapore	702	SG	SGP			x	Developing
+001	World	142	Asia	035	South-eastern Asia			Thailand	764	TH	THA				Developing
+001	World	142	Asia	035	South-eastern Asia			Timor-Leste	626	TL	TLS	x		x	Developing
+001	World	142	Asia	035	South-eastern Asia			Viet Nam	704	VN	VNM				Developing
+001	World	142	Asia	034	Southern Asia			Afghanistan	004	AF	AFG	x	x		Developing
+001	World	142	Asia	034	Southern Asia			Bangladesh	050	BD	BGD	x			Developing
+001	World	142	Asia	034	Southern Asia			Bhutan	064	BT	BTN	x	x		Developing
+001	World	142	Asia	034	Southern Asia			India	356	IN	IND				Developing
+001	World	142	Asia	034	Southern Asia			Iran (Islamic Republic of)	364	IR	IRN				Developing
+001	World	142	Asia	034	Southern Asia			Maldives	462	MV	MDV			x	Developing
+001	World	142	Asia	034	Southern Asia			Nepal	524	NP	NPL	x	x		Developing
+001	World	142	Asia	034	Southern Asia			Pakistan	586	PK	PAK				Developing
+001	World	142	Asia	034	Southern Asia			Sri Lanka	144	LK	LKA				Developing
+001	World	142	Asia	145	Western Asia			Armenia	051	AM	ARM		x		Developing
+001	World	142	Asia	145	Western Asia			Azerbaijan	031	AZ	AZE		x		Developing
+001	World	142	Asia	145	Western Asia			Bahrain	048	BH	BHR				Developing
+001	World	142	Asia	145	Western Asia			Cyprus	196	CY	CYP				Developed
+001	World	142	Asia	145	Western Asia			Georgia	268	GE	GEO				Developing
+001	World	142	Asia	145	Western Asia			Iraq	368	IQ	IRQ				Developing
+001	World	142	Asia	145	Western Asia			Israel	376	IL	ISR				Developed
+001	World	142	Asia	145	Western Asia			Jordan	400	JO	JOR				Developing
+001	World	142	Asia	145	Western Asia			Kuwait	414	KW	KWT				Developing
+001	World	142	Asia	145	Western Asia			Lebanon	422	LB	LBN				Developing
+001	World	142	Asia	145	Western Asia			Oman	512	OM	OMN				Developing
+001	World	142	Asia	145	Western Asia			Qatar	634	QA	QAT				Developing
+001	World	142	Asia	145	Western Asia			Saudi Arabia	682	SA	SAU				Developing
+001	World	142	Asia	145	Western Asia			State of Palestine	275	PS	PSE				Developing
+001	World	142	Asia	145	Western Asia			Syrian Arab Republic	760	SY	SYR				Developing
+001	World	142	Asia	145	Western Asia			Turkey	792	TR	TUR				Developing
+001	World	142	Asia	145	Western Asia			United Arab Emirates	784	AE	ARE				Developing
+001	World	142	Asia	145	Western Asia			Yemen	887	YE	YEM	x			Developing
+001	World	150	Europe	151	Eastern Europe			Belarus	112	BY	BLR				Developed
+001	World	150	Europe	151	Eastern Europe			Bulgaria	100	BG	BGR				Developed
+001	World	150	Europe	151	Eastern Europe			Czechia	203	CZ	CZE				Developed
+001	World	150	Europe	151	Eastern Europe			Hungary	348	HU	HUN				Developed
+001	World	150	Europe	151	Eastern Europe			Poland	616	PL	POL				Developed
+001	World	150	Europe	151	Eastern Europe			Republic of Moldova	498	MD	MDA		x		Developed
+001	World	150	Europe	151	Eastern Europe			Romania	642	RO	ROU				Developed
+001	World	150	Europe	151	Eastern Europe			Russian Federation	643	RU	RUS				Developed
+001	World	150	Europe	151	Eastern Europe			Slovakia	703	SK	SVK				Developed
+001	World	150	Europe	151	Eastern Europe			Ukraine	804	UA	UKR				Developed
+001	World	150	Europe	154	Northern Europe			Åland Islands	248	AX	ALA				Developed
+001	World	150	Europe	154	Northern Europe	830	Channel Islands	Guernsey	831	GG	GGY				Developed
+001	World	150	Europe	154	Northern Europe	830	Channel Islands	Jersey	832	JE	JEY				Developed
+001	World	150	Europe	154	Northern Europe	830	Channel Islands	Sark	680						Developed
+001	World	150	Europe	154	Northern Europe			Denmark	208	DK	DNK				Developed
+001	World	150	Europe	154	Northern Europe			Estonia	233	EE	EST				Developed
+001	World	150	Europe	154	Northern Europe			Faroe Islands	234	FO	FRO				Developed
+001	World	150	Europe	154	Northern Europe			Finland	246	FI	FIN				Developed
+001	World	150	Europe	154	Northern Europe			Iceland	352	IS	ISL				Developed
+001	World	150	Europe	154	Northern Europe			Ireland	372	IE	IRL				Developed
+001	World	150	Europe	154	Northern Europe			Isle of Man	833	IM	IMN				Developed
+001	World	150	Europe	154	Northern Europe			Latvia	428	LV	LVA				Developed
+001	World	150	Europe	154	Northern Europe			Lithuania	440	LT	LTU				Developed
+001	World	150	Europe	154	Northern Europe			Norway	578	NO	NOR				Developed
+001	World	150	Europe	154	Northern Europe			Svalbard and Jan Mayen Islands	744	SJ	SJM				Developed
+001	World	150	Europe	154	Northern Europe			Sweden	752	SE	SWE				Developed
+001	World	150	Europe	154	Northern Europe			United Kingdom of Great Britain and Northern Ireland	826	GB	GBR				Developed
+001	World	150	Europe	039	Southern Europe			Albania	008	AL	ALB				Developed
+001	World	150	Europe	039	Southern Europe			Andorra	020	AD	AND				Developed
+001	World	150	Europe	039	Southern Europe			Bosnia and Herzegovina	070	BA	BIH				Developed
+001	World	150	Europe	039	Southern Europe			Croatia	191	HR	HRV				Developed
+001	World	150	Europe	039	Southern Europe			Gibraltar	292	GI	GIB				Developed
+001	World	150	Europe	039	Southern Europe			Greece	300	GR	GRC				Developed
+001	World	150	Europe	039	Southern Europe			Holy See	336	VA	VAT				Developed
+001	World	150	Europe	039	Southern Europe			Italy	380	IT	ITA				Developed
+001	World	150	Europe	039	Southern Europe			Malta	470	MT	MLT				Developed
+001	World	150	Europe	039	Southern Europe			Montenegro	499	ME	MNE				Developed
+001	World	150	Europe	039	Southern Europe			North Macedonia	807	MK	MKD		x		Developed
+001	World	150	Europe	039	Southern Europe			Portugal	620	PT	PRT				Developed
+001	World	150	Europe	039	Southern Europe			San Marino	674	SM	SMR				Developed
+001	World	150	Europe	039	Southern Europe			Serbia	688	RS	SRB				Developed
+001	World	150	Europe	039	Southern Europe			Slovenia	705	SI	SVN				Developed
+001	World	150	Europe	039	Southern Europe			Spain	724	ES	ESP				Developed
+001	World	150	Europe	155	Western Europe			Austria	040	AT	AUT				Developed
+001	World	150	Europe	155	Western Europe			Belgium	056	BE	BEL				Developed
+001	World	150	Europe	155	Western Europe			France	250	FR	FRA				Developed
+001	World	150	Europe	155	Western Europe			Germany	276	DE	DEU				Developed
+001	World	150	Europe	155	Western Europe			Liechtenstein	438	LI	LIE				Developed
+001	World	150	Europe	155	Western Europe			Luxembourg	442	LU	LUX				Developed
+001	World	150	Europe	155	Western Europe			Monaco	492	MC	MCO				Developed
+001	World	150	Europe	155	Western Europe			Netherlands	528	NL	NLD				Developed
+001	World	150	Europe	155	Western Europe			Switzerland	756	CH	CHE				Developed
+001	World	009	Oceania	053	Australia and New Zealand			Australia	036	AU	AUS				Developed
+001	World	009	Oceania	053	Australia and New Zealand			Christmas Island	162	CX	CXR				Developed
+001	World	009	Oceania	053	Australia and New Zealand			Cocos (Keeling) Islands	166	CC	CCK				Developed
+001	World	009	Oceania	053	Australia and New Zealand			Heard Island and McDonald Islands	334	HM	HMD				Developed
+001	World	009	Oceania	053	Australia and New Zealand			New Zealand	554	NZ	NZL				Developed
+001	World	009	Oceania	053	Australia and New Zealand			Norfolk Island	574	NF	NFK				Developed
+001	World	009	Oceania	054	Melanesia			Fiji	242	FJ	FJI			x	Developing
+001	World	009	Oceania	054	Melanesia			New Caledonia	540	NC	NCL			x	Developing
+001	World	009	Oceania	054	Melanesia			Papua New Guinea	598	PG	PNG			x	Developing
+001	World	009	Oceania	054	Melanesia			Solomon Islands	090	SB	SLB	x		x	Developing
+001	World	009	Oceania	054	Melanesia			Vanuatu	548	VU	VUT	x		x	Developing
+001	World	009	Oceania	057	Micronesia			Guam	316	GU	GUM			x	Developing
+001	World	009	Oceania	057	Micronesia			Kiribati	296	KI	KIR	x		x	Developing
+001	World	009	Oceania	057	Micronesia			Marshall Islands	584	MH	MHL			x	Developing
+001	World	009	Oceania	057	Micronesia			Micronesia (Federated States of)	583	FM	FSM			x	Developing
+001	World	009	Oceania	057	Micronesia			Nauru	520	NR	NRU			x	Developing
+001	World	009	Oceania	057	Micronesia			Northern Mariana Islands	580	MP	MNP			x	Developing
+001	World	009	Oceania	057	Micronesia			Palau	585	PW	PLW			x	Developing
+001	World	009	Oceania	057	Micronesia			United States Minor Outlying Islands	581	UM	UMI				Developing
+001	World	009	Oceania	061	Polynesia			American Samoa	016	AS	ASM			x	Developing
+001	World	009	Oceania	061	Polynesia			Cook Islands	184	CK	COK			x	Developing
+001	World	009	Oceania	061	Polynesia			French Polynesia	258	PF	PYF			x	Developing
+001	World	009	Oceania	061	Polynesia			Niue	570	NU	NIU			x	Developing
+001	World	009	Oceania	061	Polynesia			Pitcairn	612	PN	PCN				Developing
+001	World	009	Oceania	061	Polynesia			Samoa	882	WS	WSM			x	Developing
+001	World	009	Oceania	061	Polynesia			Tokelau	772	TK	TKL				Developing
+001	World	009	Oceania	061	Polynesia			Tonga	776	TO	TON			x	Developing
+001	World	009	Oceania	061	Polynesia			Tuvalu	798	TV	TUV	x		x	Developing
+001	World	009	Oceania	061	Polynesia			Wallis and Futuna Islands	876	WF	WLF				Developing
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/util/data/external/alternate_country_names.txt b/tools/java/org/unicode/cldr/util/data/external/alternate_country_names.txt
index 0533b45..efcfd07 100644
--- a/tools/java/org/unicode/cldr/util/data/external/alternate_country_names.txt
+++ b/tools/java/org/unicode/cldr/util/data/external/alternate_country_names.txt
@@ -46,7 +46,7 @@
 FM; Micronesia; Federated States of Micronesia
 FM; Micronesia; Micronesia, Fed. Sts.
 FM; Micronesia; Micronesia, Federated States of
-FM; ; Micronesia (Federated States of)
+FM; Micronesia; Micronesia (Federated States of)
 
 FO; Faroe Islands; Faeroe Islands
 
@@ -75,11 +75,14 @@
 KP; North Korea; Democratic People's Republic of Korea
 KP; North Korea; Korea, Dem. Rep.
 KP; North Korea; Korea, Democratic People's Republic of
+KP;	North Korea; Korea, North
+KP;	North Korea; Korea, Dem. People’s Rep.
 
 KR; South Korea; Korea, Rep.
 KR; South Korea; Korea, Republic of
 KR; South Korea; Rep. Korea
 KR; South Korea; Republic of Korea
+KR;	South Korea;	Korea, South
 
 LA; Laos; Lao PDR
 LA; Laos; Lao People's Democratic Republic
@@ -97,6 +100,7 @@
 MK; Macedonia; The Former Yugoslav Rep. of Macedonia
 MK; Macedonia; The Former Yugoslav Republic of Macedonia
 MK; Macedonia; TFYR of Macedonia
+MK;	Macedonia;	Macedonia
 
 MM; Myanmar; Burma
 
@@ -128,6 +132,7 @@
 SY; Syria; Syrian Arab Republic
 
 SZ; Eswatini; eSwatini; Swaziland 
+SZ; Eswatini;	Swaziland
 
 SH; Saint Helena; Saint Helena, Ascension, and Tristan da Cunha
 
@@ -232,3 +237,4 @@
 skip;	skip;	Sub-Saharan Africa (developing only)
 skip;	skip;	Sudan (pre-secession)
 skip;	skip;	Upper middle income
+skip;	skip;	Paracel Islands
diff --git a/tools/java/org/unicode/cldr/util/data/external/factbook_gdp_ppp.txt b/tools/java/org/unicode/cldr/util/data/external/factbook_gdp_ppp.txt
index 9ee94a0..4d86e3f 100644
--- a/tools/java/org/unicode/cldr/util/data/external/factbook_gdp_ppp.txt
+++ b/tools/java/org/unicode/cldr/util/data/external/factbook_gdp_ppp.txt
@@ -1,4 +1,4 @@
-1       China                                              $23,210,000,000,000        2017 est.
+1       China                                              $25,360,000,000,000        2018
 2       United States                                      $19,490,000,000,000        2017 est.
 3       India                                               $9,474,000,000,000        2017 est.
 4       Japan                                               $5,443,000,000,000        2017 est.
@@ -39,8 +39,8 @@
 39      Switzerland                                           $523,100,000,000        2017 est.
 40      Sweden                                                $518,000,000,000        2017 est.
 41      Romania                                               $483,400,000,000        2017 est.
-42      Kazakhstan                                            $478,600,000,000        2017 est.
-43      Hong Kong                                             $455,900,000,000        2017 est.
+42      Hong Kong                                             $480,500,000,000        2018
+43      Kazakhstan                                            $478,600,000,000        2017 est.
 44      Chile                                                 $452,100,000,000        2017 est.
 45      Austria                                               $441,000,000,000        2017 est.
 46      Peru                                                  $430,300,000,000        2017 est.
@@ -94,8 +94,8 @@
 94      Bolivia                                                $83,720,000,000        2017 est.
 95      Nepal                                                  $79,190,000,000        2017 est.
 96      Uruguay                                                $78,160,000,000        2017 est.
-97      Yemen                                                  $73,630,000,000        2017 est.
-98      Macau                                                  $71,820,000,000        2017 est.
+97      Macau                                                  $77,330,000,000        2018
+98      Yemen                                                  $73,630,000,000        2017 est.
 99      Slovenia                                               $71,230,000,000        2017 est.
 100     Bahrain                                                $71,170,000,000        2017 est.
 101     Afghanistan                                            $69,450,000,000        2017 est.
@@ -111,13 +111,13 @@
 111     Laos                                                   $49,340,000,000        2017 est.
 112     Honduras                                               $46,300,000,000        2017 est.
 113     Bosnia and Herzegovina                                 $44,830,000,000        2017 est.
-114     Trinidad and Tobago                                    $42,850,000,000        2017 est.
-115     Estonia                                                $41,650,000,000        2017 est.
-116     Mali                                                   $41,220,000,000        2017 est.
-117     Korea, North                                           $40,000,000,000        2015 est.
-118     Georgia                                                $39,850,000,000        2017 est.
-119     Madagascar                                             $39,850,000,000        2017 est.
-120     Mongolia                                               $39,730,000,000        2017 est.
+114     Mongolia                                               $43,540,000,000        2018
+115     Trinidad and Tobago                                    $42,850,000,000        2017 est.
+116     Estonia                                                $41,650,000,000        2017 est.
+117     Mali                                                   $41,220,000,000        2017 est.
+118     Korea, North                                           $40,000,000,000        2015 est.
+119     Georgia                                                $39,850,000,000        2017 est.
+120     Madagascar                                             $39,850,000,000        2017 est.
 121     Botswana                                               $39,010,000,000        2017 est.
 122     Mozambique                                             $37,090,000,000        2017 est.
 123     Gabon                                                  $36,660,000,000        2017 est.
diff --git a/tools/java/org/unicode/cldr/util/data/external/factbook_population.txt b/tools/java/org/unicode/cldr/util/data/external/factbook_population.txt
index b8ce474..c22cc85 100644
--- a/tools/java/org/unicode/cldr/util/data/external/factbook_population.txt
+++ b/tools/java/org/unicode/cldr/util/data/external/factbook_population.txt
@@ -1,238 +1,238 @@
-1       China                                                    1,384,688,986        July 2018 est.
-2       India                                                    1,296,834,042        July 2018 est.
-3       United States                                              329,256,465        July 2018 est.
-4       Indonesia                                                  262,787,403        July 2018 est.
-5       Brazil                                                     208,846,892        July 2018 est.
-6       Pakistan                                                   207,862,518        July 2018 est.
-7       Nigeria                                                    203,452,505        July 2018 est.
-8       Bangladesh                                                 159,453,001        July 2018 est.
-9       Russia                                                     142,122,776        July 2018 est.
-10      Japan                                                      126,168,156        July 2018 est.
-11      Mexico                                                     125,959,205        July 2018 est.
-12      Ethiopia                                                   108,386,391        July 2018 est.
-13      Philippines                                                105,893,381        July 2018 est.
-14      Egypt                                                       99,413,317        July 2018 est.
-15      Vietnam                                                     97,040,334        July 2018 est.
-16      Congo, Democratic Republic of the                           85,281,024        July 2018 est.
-17      Iran                                                        83,024,745        July 2018 est.
-18      Turkey                                                      81,257,239        July 2018 est.
-19      Germany                                                     80,457,737        July 2018 est.
-20      Thailand                                                    68,615,858        July 2018 est.
-21      France                                                      67,364,357        July 2018 est.
-22      United Kingdom                                              65,105,246        July 2018 est.
-23      Italy                                                       62,246,674        July 2018 est.
-24      Burma                                                       55,622,506        July 2018 est.
-25      Tanzania                                                    55,451,343        July 2018 est.
-26      South Africa                                                55,380,210        July 2018 est.
-27      Korea, South                                                51,418,097        July 2018 est.
-28      Spain                                                       49,331,076        July 2018 est.
-29      Kenya                                                       48,397,527        July 2018 est.
-30      Colombia                                                    48,168,996        July 2018 est.
-31      Argentina                                                   44,694,198        July 2018 est.
-32      Ukraine                                                     43,952,299        July 2018 est.
-33      Sudan                                                       43,120,843        July 2018 est.
-34      Algeria                                                     41,657,488        July 2018 est.
-35      Uganda                                                      40,853,749        July 2018 est.
-36      Iraq                                                        40,194,216        July 2018 est.
-37      Poland                                                      38,420,687        July 2018 est.
-38      Canada                                                      35,881,659        July 2018 est.
-39      Afghanistan                                                 34,940,837        July 2018 est.
-40      Morocco                                                     34,314,130        July 2018 est.
-41      Saudi Arabia                                                33,091,113        July 2018 est.
-42      Malaysia                                                    31,809,660        July 2018 est.
-43      Venezuela                                                   31,689,176        July 2018 est.
-44      Peru                                                        31,331,228        July 2018 est.
-45      Angola                                                      30,355,880        July 2018 est.
-46      Uzbekistan                                                  30,023,709        July 2018 est.
-47      Nepal                                                       29,717,587        July 2018 est.
-48      Yemen                                                       28,667,230        July 2018 est.
-49      Ghana                                                       28,102,471        July 2018 est.
-50      Mozambique                                                  27,233,789        July 2018 est.
-51      Cote d'Ivoire                                               26,260,582        July 2018 est.
-52      Madagascar                                                  25,683,610        July 2018 est.
-53      Cameroon                                                    25,640,965        July 2018 est.
-54      Korea, North                                                25,381,085        July 2018 est.
-55      Taiwan                                                      23,545,963        July 2018 est.
-56      Australia                                                   23,470,145        July 2018 est.
-57      Sri Lanka                                                   22,576,592        July 2018 est.
-58      Romania                                                     21,457,116        July 2018 est.
-59      Niger                                                       19,866,231        July 2018 est.
-60      Malawi                                                      19,842,560        July 2018 est.
-61      Burkina Faso                                                19,742,715        July 2018 est.
-62      Syria                                                       19,454,263        July 2018 est.
-63      Kazakhstan                                                  18,744,548        July 2018 est.
-64      Mali                                                        18,429,893        July 2018 est.
-65      Chile                                                       17,925,262        July 2018 est.
-66      Netherlands                                                 17,151,228        July 2018 est.
-67      Guatemala                                                   16,581,273        July 2018 est.
-68      Ecuador                                                     16,498,502        July 2018 est.
-69      Cambodia                                                    16,449,519        July 2018 est.
-70      Zambia                                                      16,445,079        July 2018 est.
-71      Chad                                                        15,833,116        July 2018 est.
-72      Senegal                                                     15,020,945        July 2018 est.
-73      Zimbabwe                                                    14,030,368        July 2018 est.
-74      Rwanda                                                      12,187,400        July 2018 est.
-75      Guinea                                                      11,855,411        July 2018 est.
-76      Burundi                                                     11,844,520        July 2018 est.
-77      Belgium                                                     11,570,762        July 2018 est.
-78      Tunisia                                                     11,516,189        July 2018 est.
-79      Benin                                                       11,340,504        July 2018 est.
-80      Bolivia                                                     11,306,341        July 2018 est.
-81      Somalia                                                     11,259,029        July 2018 est.
-82      Cuba                                                        11,116,396        July 2018 est.
-83      Haiti                                                       10,788,440        July 2018 est.
-84      Greece                                                      10,761,523        July 2018 est.
-85      Czechia                                                     10,686,269        July 2018 est.
-86      Jordan                                                      10,458,413        July 2018 est.
-87      Portugal                                                    10,355,493        July 2018 est.
-88      Dominican Republic                                          10,298,756        July 2018 est.
-89      South Sudan                                                 10,204,581        July 2018 est.
-90      Azerbaijan                                                  10,046,516        July 2018 est.
-91      Sweden                                                      10,040,995        July 2018 est.
-92      Hungary                                                      9,825,704        July 2018 est.
-93      United Arab Emirates                                         9,701,315        July 2018 est.
-94      Belarus                                                      9,527,543        July 2018 est.
-95      Honduras                                                     9,182,766        July 2018 est.
-96      Austria                                                      8,793,370        July 2018 est.
-97      Tajikistan                                                   8,604,882        July 2018 est.
-98      Israel                                                       8,424,904        July 2018 est.
-99      Switzerland                                                  8,292,809        July 2018 est.
-100     Togo                                                         8,176,449        July 2018 est.
-101     Laos                                                         7,234,171        July 2018 est.
-102     Hong Kong                                                    7,213,338        July 2018 est.
-103     Serbia                                                       7,078,110        July 2018 est.
-104     Bulgaria                                                     7,057,504        July 2018 est.
-105     Papua New Guinea                                             7,027,332        July 2018 est.
-106     Paraguay                                                     7,025,763        July 2018 est.
-107     Libya                                                        6,754,507        July 2018 est.
-108     Sierra Leone                                                 6,312,212        July 2018 est.
-109     El Salvador                                                  6,187,271        July 2018 est.
-110     Lebanon                                                      6,100,075        July 2018 est.
-111     Nicaragua                                                    6,085,213        July 2018 est.
-112     Singapore                                                    5,995,991        July 2018 est.
-113     Eritrea                                                      5,970,646        July 2018 est.
-114     Kyrgyzstan                                                   5,849,296        July 2018 est.
-115     Denmark                                                      5,809,502        July 2018 est.
-116     Central African Republic                                     5,745,062        July 2018 est.
-117     Finland                                                      5,537,364        July 2018 est.
-118     Slovakia                                                     5,445,040        July 2018 est.
-119     Turkmenistan                                                 5,411,012        July 2018 est.
-120     Norway                                                       5,372,191        July 2018 est.
-121     Ireland                                                      5,068,050        July 2018 est.
-122     Congo, Republic of the                                       5,062,021        July 2018 est.
-123     Costa Rica                                                   4,987,142        July 2018 est.
-124     Georgia                                                      4,926,087        July 2018 est.
-125     Liberia                                                      4,809,768        July 2018 est.
-126     New Zealand                                                  4,545,627        July 2018 est.
-127     Croatia                                                      4,270,480        July 2018 est.
-128     Bosnia and Herzegovina                                       3,849,891        July 2018 est.
-129     Mauritania                                                   3,840,429        July 2018 est.
-130     Panama                                                       3,800,644        July 2018 est.
-131     Oman                                                         3,494,116        July 2018 est.
-132     Moldova                                                      3,437,720        July 2018 est.
-133     Uruguay                                                      3,369,299        July 2018 est.
-134     Puerto Rico                                                  3,294,626        July 2018 est.
-135     Mongolia                                                     3,103,428        July 2018 est.
-136     Albania                                                      3,057,220        July 2018 est.
-137     Armenia                                                      3,038,217        July 2018 est.
-138     Kuwait                                                       2,916,467        July 2018 est.
-139     Jamaica                                                      2,812,090        July 2018 est.
-140     West Bank                                                    2,798,494        July 2018 est.
-141     Lithuania                                                    2,793,284        July 2018 est.
-142     Namibia                                                      2,533,224        July 2018 est.
-143     Qatar                                                        2,363,569        July 2018 est.
-144     Botswana                                                     2,249,104        July 2018 est.
-145     Gabon                                                        2,119,036        July 2018 est.
-146     Macedonia                                                    2,118,945        July 2018 est.
-147     Slovenia                                                     2,102,126        July 2018 est.
-148     Gambia, The                                                  2,092,731        July 2018 est.
-149     Lesotho                                                      1,962,461        July 2018 est.
-150     Latvia                                                       1,923,559        July 2018 est.
-151     Kosovo                                                       1,907,592        July 2018 est.
-152     Gaza Strip                                                   1,836,713        July 2018 est.
-153     Guinea-Bissau                                                1,833,247        July 2018 est.
-154     Bahrain                                                      1,442,659        July 2018 est.
-155     Mauritius                                                    1,364,283        July 2018 est.
-156     Timor-Leste                                                  1,321,929        July 2018 est.
-157     Estonia                                                      1,244,288        July 2018 est.
-158     Cyprus                                                       1,237,088        July 2018 est.
-159     Trinidad and Tobago                                          1,215,527        July 2018 est.
-160     Eswatini                                                     1,087,200        July 2018 est.
-161     Fiji                                                           926,276        July 2018 est.
-162     Djibouti                                                       884,017        July 2018 est.
-163     Comoros                                                        821,164        July 2018 est.
-164     Equatorial Guinea                                              797,457        July 2018 est.
-165     Bhutan                                                         766,397        July 2018 est.
-166     Guyana                                                         740,685        July 2018 est.
-167     Solomon Islands                                                660,121        July 2018 est.
-168     Western Sahara                                                 619,551        July 2018 est.
-169     Montenegro                                                     614,249        July 2018 est.
-170     Macau                                                          606,340        July 2018 est.
-171     Luxembourg                                                     605,764        July 2018 est.
-172     Suriname                                                       597,927        July 2018 est.
-173     Cabo Verde                                                     568,373        July 2018 est.
-174     Brunei                                                         450,565        July 2018 est.
-175     Malta                                                          449,043        July 2018 est.
-176     Maldives                                                       392,473        July 2018 est.
-177     Belize                                                         385,854        July 2018 est.
-178     Iceland                                                        343,518        July 2018 est.
-179     Bahamas, The                                                   332,634        July 2018 est.
-180     Barbados                                                       293,131        July 2018 est.
-181     French Polynesia                                               290,373        July 2018 est.
-182     Vanuatu                                                        288,037        July 2018 est.
-183     New Caledonia                                                  282,754        July 2018 est.
-184     Sao Tome and Principe                                          204,454        July 2018 est.
-185     Samoa                                                          201,316        July 2018 est.
-186     Guam                                                           167,772        July 2018 est.
-187     Saint Lucia                                                    165,510        July 2018 est.
-188     Curacao                                                        150,241        July 2018 est.
-189     Aruba                                                          116,576        July 2018 est.
-190     Grenada                                                        112,207        July 2018 est.
-191     Kiribati                                                       109,367        July 2018 est.
-192     Virgin Islands                                                 106,977        July 2018 est.
-193     Tonga                                                          106,398        July 2018 est.
-194     Micronesia, Federated States of                                103,643        July 2018 est.
-195     Saint Vincent and the Grenadines                               101,844        July 2018 est.
-196     Jersey                                                          99,602        July 2018 est.
-197     Antigua and Barbuda                                             95,882        July 2018 est.
-198     Seychelles                                                      94,633        July 2018 est.
-199     Isle of Man                                                     89,407        July 2018 est.
-200     Andorra                                                         85,708        July 2018 est.
-201     Marshall Islands                                                75,684        July 2018 est.
-202     Dominica                                                        74,027        July 2018 est.
-203     Bermuda                                                         71,176        July 2018 est.
-204     Guernsey                                                        66,697        July 2018 est.
-205     Cayman Islands                                                  59,613        July 2018 est.
-206     Greenland                                                       57,691        July 2018 est.
-207     Turks and Caicos Islands                                        53,701        July 2018 est.
-208     Saint Kitts and Nevis                                           53,094        July 2018 est.
-209     Northern Mariana Islands                                        51,994        July 2018 est.
-210     Faroe Islands                                                   51,018        July 2018 est.
-211     American Samoa                                                  50,826        July 2018 est.
-212     Sint Maarten                                                    42,677        July 2018 est.
-213     Liechtenstein                                                   38,547        July 2018 est.
-214     British Virgin Islands                                          35,802        July 2018 est.
-215     San Marino                                                      33,779        July 2018 est.
-216     Saint Martin                                                    32,284        July 2018 est.
-217     Monaco                                                          30,727        July 2018 est.
-218     Gibraltar                                                       29,461        July 2018 est.
-219     Palau                                                           21,516        July 2018 est.
-220     Anguilla                                                        17,422        July 2018 est.
-221     Wallis and Futuna                                               15,763        July 2018 est.
-222     Tuvalu                                                          11,147        July 2018 est.
-223     Nauru                                                            9,692        July 2018 est.
-224     Cook Islands                                                     9,038        July 2018 est.
-225     Saint Helena, Ascension, and Tristan da Cunha                    7,841        July 2018 est.
-226     Saint Barthelemy                                                 7,160        July 2018 est.
-227     Saint Pierre and Miquelon                                        5,471        July 2018 est.
-228     Montserrat                                                       5,315        July 2018 est.
+1       China                                                    1,394,015,977        July 2020 est.
+2       India                                                    1,326,093,247        July 2020 est.
+3       United States                                              332,639,102        July 2020 est.
+4       Indonesia                                                  267,026,366        July 2020 est.
+5       Pakistan                                                   233,500,636        July 2020 est.
+6       Nigeria                                                    214,028,302        July 2020 est.
+7       Brazil                                                     211,715,973        July 2020 est.
+8       Bangladesh                                                 162,650,853        July 2020 est.
+9       Russia                                                     141,722,205        July 2020 est.
+10      Mexico                                                     128,649,565        July 2020 est.
+11      Japan                                                      125,507,472        July 2020 est.
+12      Philippines                                                109,180,815        July 2020 est.
+13      Ethiopia                                                   108,113,150        July 2020 est.
+14      Egypt                                                      104,124,440        July 2020 est.
+15      Congo, Democratic Republic of the                          101,780,263        July 2020 est.
+16      Vietnam                                                     98,721,275        July 2020 est.
+17      Iran                                                        84,923,314        July 2020 est.
+18      Turkey                                                      82,017,514        July 2020 est.
+19      Germany                                                     80,159,662        July 2020 est.
+20      Thailand                                                    68,977,400        July 2020 est.
+21      France                                                      67,848,156        July 2020 est.
+22      United Kingdom                                              65,761,117        July 2020 est.
+23      Italy                                                       62,402,659        July 2020 est.
+24      Tanzania                                                    58,552,845        July 2020 est.
+25      Burma                                                       56,590,071        July 2020 est.
+26      South Africa                                                56,463,617        July 2020 est.
+27      Kenya                                                       53,527,936        July 2020 est.
+28      Korea, South                                                51,835,110        July 2020 est.
+29      Spain                                                       50,015,792        July 2020 est.
+30      Colombia                                                    49,084,841        July 2020 est.
+31      Sudan                                                       45,561,556        July 2020 est.
+32      Argentina                                                   45,479,118        July 2020 est.
+33      Ukraine                                                     43,922,939        July 2020 est.
+34      Uganda                                                      43,252,966        July 2020 est.
+35      Algeria                                                     42,972,878        July 2020 est.
+36      Iraq                                                        38,872,655        July 2020 est.
+37      Poland                                                      38,282,325        July 2020 est.
+38      Canada                                                      37,694,085        July 2020 est.
+39      Afghanistan                                                 36,643,815        July 2020 est.
+40      Morocco                                                     35,561,654        July 2020 est.
+41      Saudi Arabia                                                34,173,498        July 2020 est.
+42      Malaysia                                                    32,652,083        July 2020 est.
+43      Angola                                                      32,522,339        July 2020 est.
+44      Peru                                                        31,914,989        July 2020 est.
+45      Uzbekistan                                                  30,565,411        July 2020 est.
+46      Nepal                                                       30,327,877        July 2020 est.
+47      Mozambique                                                  30,098,197        July 2020 est.
+48      Yemen                                                       29,884,405        July 2020 est.
+49      Ghana                                                       29,340,248        July 2020 est.
+50      Venezuela                                                   28,644,603        July 2020 est.
+51      Cameroon                                                    27,744,989        July 2020 est.
+52      Cote d'Ivoire                                               27,481,086        July 2020 est.
+53      Madagascar                                                  26,955,737        July 2020 est.
+54      Korea, North                                                25,643,466        July 2020 est.
+55      Australia                                                   25,466,459        July 2020 est.
+56      Taiwan                                                      23,603,049        July 2020 est.
+57      Sri Lanka                                                   22,889,201        July 2020 est.
+58      Niger                                                       22,772,361        July 2020 est.
+59      Romania                                                     21,302,893        July 2020 est.
+60      Malawi                                                      21,196,629        July 2020 est.
+61      Burkina Faso                                                20,835,401        July 2020 est.
+62      Mali                                                        19,553,397        July 2020 est.
+63      Syria                                                       19,398,448        July 2020 est.
+64      Kazakhstan                                                  19,091,949        July 2020 est.
+65      Chile                                                       18,186,770        July 2020 est.
+66      Zambia                                                      17,426,623        July 2020 est.
+67      Netherlands                                                 17,280,397        July 2020 est.
+68      Guatemala                                                   17,153,288        July 2020 est.
+69      Cambodia                                                    16,926,984        July 2020 est.
+70      Ecuador                                                     16,904,867        July 2020 est.
+71      Chad                                                        16,877,357        July 2020 est.
+72      Senegal                                                     15,736,368        July 2020 est.
+73      Zimbabwe                                                    14,546,314        July 2020 est.
+74      Benin                                                       12,864,634        July 2020 est.
+75      Rwanda                                                      12,712,431        July 2020 est.
+76      Guinea                                                      12,527,440        July 2020 est.
+77      Burundi                                                     11,865,821        July 2020 est.
+78      Somalia                                                     11,757,124        July 2020 est.
+79      Tunisia                                                     11,721,177        July 2020 est.
+80      Belgium                                                     11,720,716        July 2020 est.
+81      Bolivia                                                     11,639,909        July 2020 est.
+82      Haiti                                                       11,067,777        July 2020 est.
+83      Cuba                                                        11,059,062        July 2020 est.
+84      Jordan                                                      10,820,644        July 2020 est.
+85      Czechia                                                     10,702,498        July 2020 est.
+86      Greece                                                      10,607,051        July 2020 est.
+87      South Sudan                                                 10,561,244        July 2020 est.
+88      Dominican Republic                                          10,499,707        July 2020 est.
+89      Portugal                                                    10,302,674        July 2020 est.
+90      Azerbaijan                                                  10,205,810        July 2020 est.
+91      Sweden                                                      10,202,491        July 2020 est.
+92      United Arab Emirates                                         9,992,083        July 2020 est.
+93      Hungary                                                      9,771,827        July 2020 est.
+94      Belarus                                                      9,477,918        July 2020 est.
+95      Honduras                                                     9,235,340        July 2020 est.
+96      Tajikistan                                                   8,873,669        July 2020 est.
+97      Austria                                                      8,859,449        July 2020 est.
+98      Israel                                                       8,675,475        July 2020 est.
+99      Togo                                                         8,608,444        July 2020 est.
+100     Switzerland                                                  8,403,994        July 2020 est.
+101     Laos                                                         7,447,396        July 2020 est.
+102     Papua New Guinea                                             7,259,456        July 2020 est.
+103     Hong Kong                                                    7,249,907        July 2020 est.
+104     Paraguay                                                     7,191,685        July 2020 est.
+105     Serbia                                                       7,012,165        July 2020 est.
+106     Bulgaria                                                     6,966,899        July 2020 est.
+107     Libya                                                        6,890,535        July 2020 est.
+108     Sierra Leone                                                 6,624,933        July 2020 est.
+109     El Salvador                                                  6,481,102        July 2020 est.
+110     Singapore                                                    6,209,660        July 2020 est.
+111     Nicaragua                                                    6,203,441        July 2020 est.
+112     Eritrea                                                      6,081,196        July 2020 est.
+113     Central African Republic                                     5,990,855        July 2020 est.
+114     Kyrgyzstan                                                   5,964,897        July 2020 est.
+115     Denmark                                                      5,869,410        July 2020 est.
+116     Finland                                                      5,571,665        July 2020 est.
+117     Turkmenistan                                                 5,528,627        July 2020 est.
+118     Lebanon                                                      5,469,612        July 2020 est.
+119     Norway                                                       5,467,439        July 2020 est.
+120     Slovakia                                                     5,440,602        July 2020 est.
+121     Congo, Republic of the                                       5,293,070        July 2020 est.
+122     Ireland                                                      5,176,569        July 2020 est.
+123     Costa Rica                                                   5,097,988        July 2020 est.
+124     Liberia                                                      5,073,296        July 2020 est.
+125     New Zealand                                                  4,925,477        July 2020 est.
+126     Oman                                                         4,664,844        December 2019 est.
+127     Croatia                                                      4,227,746        July 2020 est.
+128     Mauritania                                                   4,005,475        July 2020 est.
+129     Georgia                                                      3,997,000        2019 est. est.
+130     Panama                                                       3,894,082        July 2020 est.
+131     Bosnia and Herzegovina                                       3,835,586        July 2020 est.
+132     Uruguay                                                      3,387,605        July 2020 est.
+133     Moldova                                                      3,364,496        July 2020 est.
+134     Puerto Rico                                                  3,189,068        July 2020 est.
+135     Mongolia                                                     3,168,026        July 2020 est.
+136     Albania                                                      3,074,579        July 2020 est.
+137     Armenia                                                      3,021,324        July 2020 est.
+138     Kuwait                                                       2,993,706        July 2020 est.
+139     West Bank                                                    2,900,034        July 2020 est.
+140     Jamaica                                                      2,808,570        July 2020 est.
+141     Lithuania                                                    2,731,464        July 2020 est.
+142     Namibia                                                      2,630,073        July 2020 est.
+143     Qatar                                                        2,444,174        July 2020 est.
+144     Botswana                                                     2,317,233        July 2020 est.
+145     Gabon                                                        2,230,908        July 2020 est.
+146     Gambia, The                                                  2,173,999        July 2020 est.
+147     Macedonia                                                    2,125,971        July 2020 est.
+148     Slovenia                                                     2,102,678        July 2020 est.
+149     Lesotho                                                      1,969,334        July 2020 est.
+150     Kosovo                                                       1,932,774        July 2020 est.
+151     Guinea-Bissau                                                1,927,104        July 2020 est.
+152     Gaza Strip                                                   1,918,221        July 2020 est.
+153     Latvia                                                       1,881,232        July 2020 est.
+154     Bahrain                                                      1,505,003        July 2020 est.
+155     Timor-Leste                                                  1,383,723        July 2020 est.
+156     Mauritius                                                    1,379,365        July 2020 est.
+157     Cyprus                                                       1,266,676        July 2020 est.
+158     Estonia                                                      1,228,624        July 2020 est.
+159     Trinidad and Tobago                                          1,208,789        July 2020 est.
+160     Eswatini                                                     1,104,479        July 2020 est.
+161     Fiji                                                           935,974        July 2020 est.
+162     Djibouti                                                       921,804        July 2020 est.
+163     Comoros                                                        846,281        July 2020 est.
+164     Equatorial Guinea                                              836,178        July 2020 est.
+165     Bhutan                                                         782,318        July 2020 est.
+166     Guyana                                                         750,204        July 2020 est.
+167     Solomon Islands                                                685,097        July 2020 est.
+168     Western Sahara                                                 652,271        July 2020 est.
+169     Luxembourg                                                     628,381        July 2020 est.
+170     Macau                                                          614,458        July 2020 est.
+171     Montenegro                                                     609,859        July 2020 est.
+172     Suriname                                                       609,569        July 2020 est.
+173     Cabo Verde                                                     583,255        July 2020 est.
+174     Brunei                                                         464,478        July 2020 est.
+175     Malta                                                          457,267        July 2020 est.
+176     Belize                                                         399,598        July 2020 est.
+177     Maldives                                                       391,904        July 2020 est.
+178     Iceland                                                        350,734        July 2020 est.
+179     Bahamas, The                                                   337,721        July 2020 est.
+180     Vanuatu                                                        298,333        July 2020 est.
+181     French Polynesia                                               295,121        July 2020 est.
+182     Barbados                                                       294,560        July 2020 est.
+183     New Caledonia                                                  290,009        July 2020 est.
+184     Sao Tome and Principe                                          211,122        July 2020 est.
+185     Samoa                                                          203,774        July 2020 est.
+186     Guam                                                           168,485        July 2020 est.
+187     Saint Lucia                                                    166,487        July 2020 est.
+188     Curacao                                                        151,345        July 2020 est.
+189     Aruba                                                          119,428        July 2020 est.
+190     Grenada                                                        113,094        July 2020 est.
+191     Kiribati                                                       111,796        July 2020 est.
+192     Virgin Islands                                                 106,235        July 2020 est.
+193     Tonga                                                          106,095        July 2020 est.
+194     Micronesia, Federated States of                                102,436        July 2020 est.
+195     Saint Vincent and the Grenadines                               101,390        July 2020 est.
+196     Jersey                                                         101,073        July 2020 est.
+197     Antigua and Barbuda                                             98,179        July 2020 est.
+198     Seychelles                                                      95,981        July 2020 est.
+199     Isle of Man                                                     90,499        July 2020 est.
+200     Marshall Islands                                                77,917        July 2020 est.
+201     Andorra                                                         77,000        2019 est.
+202     Dominica                                                        74,243        July 2020 est.
+203     Bermuda                                                         71,750        July 2020 est.
+204     Guernsey                                                        67,052        July 2020 est.
+205     Cayman Islands                                                  61,944        July 2020 est.
+206     Greenland                                                       57,616        July 2020 est.
+207     Turks and Caicos Islands                                        55,926        July 2020 est.
+208     Saint Kitts and Nevis                                           53,821        July 2020 est.
+209     Faroe Islands                                                   51,628        July 2020 est.
+210     Northern Mariana Islands                                        51,433        July 2020 est.
+211     American Samoa                                                  49,437        July 2020 est.
+212     Sint Maarten                                                    43,847        July 2020 est.
+213     Liechtenstein                                                   39,137        July 2020 est.
+214     Monaco                                                          39,000        2019 est.
+215     British Virgin Islands                                          37,381        July 2020 est.
+216     San Marino                                                      34,232        July 2020 est.
+217     Saint Martin                                                    32,556        July 2020 est.
+218     Gibraltar                                                       29,581        July 2020 est.
+219     Palau                                                           21,685        July 2020 est.
+220     Anguilla                                                        18,090        July 2020 est.
+221     Wallis and Futuna                                               15,854        July 2020 est.
+222     Tuvalu                                                          11,342        July 2020 est.
+223     Nauru                                                           11,000        2019 est.
+224     Cook Islands                                                     8,574        July 2020 est.
+225     Saint Helena, Ascension, and Tristan da Cunha                    7,862        July 2020 est.
+226     Saint Barthelemy                                                 7,122        July 2020 est.
+227     Montserrat                                                       5,373        July 2020 est.
+228     Saint Pierre and Miquelon                                        5,347        July 2020 est.
 229     Falkland Islands (Islas Malvinas)                                3,198        2016 est.
-230     Svalbard                                                         2,583        July 2017 est.
-231     Christmas Island                                                 2,205        July 2016 est.
-232     Norfolk Island                                                   1,748        2016 est.
-233     Niue                                                             1,618        
-234     Paracel Islands                                                  1,440        2014 est.
-235     Tokelau                                                          1,285        2016 est.
-236     Holy See (Vatican City)                                          1,000        2017 est.
+230     Svalbard                                                         2,926        July 2019 est.
+231     Christmas Island                                                 2,205        2016 est.
+232     Niue                                                             2,000        2019
+233     Norfolk Island                                                   1,748        2016 est.
+234     Tokelau                                                          1,647        2019 est. est.
+235     Paracel Islands                                                  1,440        2014 est.
+236     Holy See (Vatican City)                                          1,000        2019 est.
 237     Cocos (Keeling) Islands                                            596        July 2014 est.
-238     Pitcairn Islands                                                    54        July 2016 est.
+238     Pitcairn Islands                                                    50        2020 est. est.
diff --git a/tools/java/org/unicode/cldr/util/data/external/world_bank_data.csv b/tools/java/org/unicode/cldr/util/data/external/world_bank_data.csv
index 6bd8cc5..21108c5 100644
--- a/tools/java/org/unicode/cldr/util/data/external/world_bank_data.csv
+++ b/tools/java/org/unicode/cldr/util/data/external/world_bank_data.csv
@@ -1,440 +1,440 @@
-﻿Country Name,Country Code,Series Name,Series Code,2000 [YR2000],2001 [YR2001],2003 [YR2003],2004 [YR2004],2005 [YR2005],2006 [YR2006],2007 [YR2007],2008 [YR2008],2009 [YR2009],2010 [YR2010],2011 [YR2011],2012 [YR2012],2013 [YR2013],2014 [YR2014],2015 [YR2015],2016 [YR2016],2017 [YR2017],2018 [YR2018]
-Afghanistan,AFG,"Population, total",SP.POP.TOTL,20779953,21606988,23680871,24726684,25654277,26433049,27100536,27722276,28394813,29185507,30117413,31161376,32269589,33370794,34413603,35383128,36296400,37172386
-Afghanistan,AFG,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,41187103443.3845,47871884293.6593,48940525323.2712,56390324156.248,60708991115.4435,63314619107.9323,65514856446.4985,67454810885.6697,70565716023.9233,73001688109.4404
-Albania,ALB,"Population, total",SP.POP.TOTL,3089027,3060173,3039616,3026939,3011487,2992547,2970017,2947314,2927519,2913021,2905195,2900401,2895092,2889104,2880703,2876101,2873457,2866376
-Albania,ALB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,12293735718.4436,13588494277.2045,15604575652.1344,16808178127.7723,18021157908.6102,20208383895.3056,22212143238.8402,24373992811.5679,25395358408.0744,27766379103.6691,29663196587.6265,30302943562.5374,31131401566.0843,32827750109.8841,33994825230.8321,34688535824.0403,37246076988.3066,..
-Algeria,DZA,"Population, total",SP.POP.TOTL,31042235,31451514,32264157,32692163,33149724,33641002,34166972,34730608,35333881,35977455,36661444,37383887,38140132,38923687,39728025,40551404,41389198,42228429
-Algeria,DZA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,240847042804.343,258953900194.902,301147404546.455,320879191791.856,347455283620.465,367577615802.966,400469724028.411,421055083319.919,430160648946.364,454249931830.917,473230115543.805,494561375122.083,515657493812.424,545163628933.778,568748825319.06,604332274131.786,622062721188.36,648218922858.433
-American Samoa,ASM,"Population, total",SP.POP.TOTL,57821,58494,59504,59681,59562,59107,58365,57492,56683,56079,55759,55667,55713,55791,55812,55741,55620,55465
-American Samoa,ASM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-Andorra,AND,"Population, total",SP.POP.TOTL,65390,67341,73182,76244,78867,80993,82684,83862,84463,84449,83747,82427,80774,79213,78011,77297,77001,77006
-Andorra,AND,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-Angola,AGO,"Population, total",SP.POP.TOTL,16395473,16945753,18121479,18758145,19433602,20149901,20905363,21695634,22514281,23356246,24220661,25107931,26015780,26941779,27884381,28842484,29816748,30809762
-Angola,AGO,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,41432320257.4578,44631778156.6396,59153300796.9656,66747074831.4785,78872049616.6002,89735714168.485,105235825479.428,114065240409.717,123862171068.308,131473655216.811,140379801774.149,156204906800.016,168450221056.073,182180193720.856,187823443879.841,184750703826.558,192229589021.421,189616871964.711
-Antigua and Barbuda,ATG,"Population, total",SP.POP.TOTL,76016,77212,79300,80336,81465,82704,84026,85397,86746,88028,89253,90409,91516,92562,93566,94527,95426,96286
-Antigua and Barbuda,ATG,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1190196203.32966,1183738882.48401,1292971253.15573,1398355511.32609,1547122519.19418,1798189500.03371,2017971153.80148,2047011174.20589,1818817783.66208,1732805664.65561,1719331908.34641,1799451907.89683,1829414708.90545,1934629256.77702,2026376153.16037,2133947696.9783,2241317343.57867,2422667897.46612
-Argentina,ARG,"Population, total",SP.POP.TOTL,36870787,37275652,38087868,38491972,38892931,39289878,39684295,40080160,40482788,40788453,41261490,41733271,42202935,42669500,43131966,43590368,44044811,44494502
-Argentina,ARG,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,427705048150.997,416872209387.703,413354380842.177,428636797132.618,479748541570.394,582662880615.78,656745628034.243,697740913973.265,657382734890.712,729853440301.322,794325172722.152,805324243204.842,841055034261.13,836246704582.003,869846606664.772,858301788492.153,894618626234.878,882055304190.25
-Armenia,ARM,"Population, total",SP.POP.TOTL,3069591,3050687,3017932,3000720,2981269,2958307,2932618,2907618,2888092,2877319,2876538,2884229,2897584,2912403,2925553,2936146,2944809,2951776
-Armenia,ARM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,7341753228.37085,8241813497.77092,11041961836.8629,12482228102.3633,14826508319.3132,17378633258.8495,20429404287.0623,22374632459.1986,19030029139.0185,19826473931.4395,20909524017.3555,22940503025.162,24612813139.5648,25619970758.8355,26603930152.0472,26413124248.1733,29470204831.5341,30874335325.4599
-Aruba,ABW,"Population, total",SP.POP.TOTL,90853,92898,97017,98737,100031,100834,101222,101358,101455,101669,102046,102560,103159,103774,104341,104872,105366,105845
-Aruba,ABW,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,2970472655.79533,2894708670.85106,2964638017.53824,3261970667.64089,2798570070.13606,3506453356.63759,3268910746.68495,3737873634.66294,3394670605.26343,3228330191.03523,3271119262.41504,3474023747.15833,3614101656.7541,3812628574.9732,3805976195.5237,3820427669.79466,3894622535.52135,..
-Australia,AUS,"Population, total",SP.POP.TOTL,19153000,19413000,19895400,20127400,20394800,20697900,20827600,21249200,21691700,22031750,22340024,22733465,23128129,23475686,23815995,24190907,24601860,24992369
-Australia,AUS,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,489711413127.625,515790788888.379,574118315219.596,612540926403.141,639679592265.961,682417462603.499,727501373533.963,763437639656.731,843523436833.383,832727650434.187,899875053935.933,943990546160.514,1035222299693.94,1071746498596.55,1079442146587.8,1117959538341,1188350232405.51,1247800981122.18
-Austria,AUT,"Population, total",SP.POP.TOTL,8011566,8042293,8121423,8171966,8227829,8268641,8295487,8321496,8343323,8363404,8391643,8429991,8479823,8546356,8642699,8736668,8797566,8847037
-Austria,AUT,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,233330541766.07,235710601203.751,260112151676.933,275367030046.229,287476798281.967,311818314868.547,326450890545.42,346680570770.484,341315238549.098,354252259996.343,374289188740.567,392030460346.489,407466618825.439,417609480255.935,426833867811.004,450782402035.056,472748078788.57,495047447918.144
-Azerbaijan,AZE,"Population, total",SP.POP.TOTL,8048600,8111200,8234100,8306500,8391850,8484550,8581300,8763400,8947243,9054332,9173082,9295784,9416801,9535079,9649341,9757812,9854033,9942334
-Azerbaijan,AZE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,27890741773.8115,31165506195.7203,38815679099.3703,42624012759.969,53573677595.1172,73926211543.0399,92409698737.5992,110454350788.85,125651565987.888,135207522670.053,134628001917.261,142008075004.82,154058450882.086,164941816041.667,166802300243.994,158856277839.449,165259398123.852,169700684215.302
-"Bahamas, The",BHS,"Population, total",SP.POP.TOTL,298051,302618,313129,318894,324859,331033,337389,343681,349604,354942,359577,363584,367168,370633,374206,377931,381761,385640
-"Bahamas, The",BHS,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,7684563693.1168,8005567844.99939,8457556517.94535,8775990074.4166,9329019111.32529,9823805270.66686,10229754525.1751,10354802856.2151,9913446535.2242,10116194477.567,10410677220.26,11030839920.1594,11189183308.9213,11232567643.069,11505214592.5499,11355346617.875,11803570163.2203,..
-Bahrain,BHR,"Population, total",SP.POP.TOTL,664611,697545,778708,829844,889164,958418,1035919,1114641,1185076,1240860,1278151,1299943,1315029,1336075,1371851,1425791,1494074,1569439
-Bahrain,BHR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,23181887375.0635,24003123098.6702,27037134374.4036,29728082326.4384,33339772771.7229,36759323081.3119,41173711008.1479,43593007828.8188,41831696735.3614,44761195892.4712,45304049174.4875,47505639506.5621,51198596069.0824,51403148391.9112,60768065805.2712,62902453486.3381,67210307748.7388,70032638646.8039
-Bangladesh,BGD,"Population, total",SP.POP.TOTL,127657854,130088702,134791603,136986432,139035505,140921167,142660376,144304167,145924797,147575430,149273778,151007807,152764676,154520167,156256276,157970840,159670593,161356039
-Bangladesh,BGD,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,177501589107.713,190216327586.122,216113480986.406,234222604385.087,257564335974.797,286339559531.355,317096154489.783,346829582234.034,367894018813.755,393543966698.122,427013979840.347,465927032727.283,500667990244.608,534156898505.168,574312825139.83,617619591394.059,665863505839.485,736277003915.318
-Barbados,BRB,"Population, total",SP.POP.TOTL,271515,272500,274329,275284,276323,277477,278700,279946,281104,282131,282987,283700,284296,284825,285324,285796,286233,286641
-Barbados,BRB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3224061100.29193,3200910462.18595,3390337536.84034,3558768447.52558,3769503903.37933,4032928099.28547,4309491564.50863,4347179603.80469,4246247449.65225,4386882087.80267,4324432732.2635,4549068289.61974,4604489527.48221,4689234033.69038,4764205811.51648,4900393376.99176,5048878591.64545,..
-Belarus,BLR,"Population, total",SP.POP.TOTL,9979610,9928549,9796749,9730146,9663915,9604924,9560953,9527985,9506765,9490583,9473172,9464495,9465997,9474511,9489616,9501534,9498264,9485386
-Belarus,BLR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,59929813931.3254,64109648059.0482,75000898339.8437,85812437786.0409,96874116606.5884,109244804609.082,121096971174.94,135510385110.53,135579675351.416,148340015342.058,159291474012.518,164758720668.099,167062368805.543,174045560441.799,166909211944.387,164070342890.35,172913552615.231,182140614647.685
-Belgium,BEL,"Population, total",SP.POP.TOTL,10251250,10286570,10376133,10421137,10478617,10547958,10625700,10709973,10796493,10895586,11038264,11106932,11159407,11209057,11274196,11331422,11375158,11422068
-Belgium,BEL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,294129706029.74,303289750923.502,328189204226.733,340404729985.064,353373783903.798,378316386285.289,396938247806.661,417983366784.322,410867772241.407,450144088430.016,460300440792.344,482866602524.883,494697245976.635,503425208756.658,511108874396.087,535606213333.871,568689904076.892,587845828049.872
-Belize,BLZ,"Population, total",SP.POP.TOTL,247315,255063,269425,276504,283800,291329,299025,306823,314655,322464,330237,338000,345715,353366,360933,368400,375769,383071
-Belize,BLZ,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1281490860.95416,1355708076.31611,1588612225.62583,1669649667.75873,1781253643.88794,1918791686.68751,1947127088.11284,2054887277.77049,2209608399.59179,2233456109.61322,2416783291.38297,2504393852.56888,2577593003.52232,2701965174.72606,2908820355.72777,2900673252.16606,2927673337.46253,3142836138.99602
-Benin,BEN,"Population, total",SP.POP.TOTL,6865951,7076733,7520555,7750004,7982225,8216897,8454793,8696921,8944708,9199259,9460830,9729248,10004588,10286842,10575952,10872067,11175204,11485048
-Benin,BEN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,9061394080.76838,9747248118.99303,10869816378.3422,11675400197.9813,12300533208.638,13144165509.9234,14273000151.0649,15362653670.1788,15791734901.1014,16263307826.579,17192949487.5054,18252516153.2901,19921245682.0448,21614299952.5185,22267074395.2321,23485800655.1569,25258969764.8654,27579396195.717
-Bermuda,BMU,"Population, total",SP.POP.TOTL,61833,62504,63325,63740,64154,64523,64888,65273,65636,65124,64564,64798,65001,65139,65239,64555,63874,63968
-Bermuda,BMU,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,4874709603.81217,4883611563.95876,4493986661.66987,4486492133.80261,4397668042.07143,4353813540.09437,4342781779.00351,..,..,..,..,..
-Bhutan,BTN,"Population, total",SP.POP.TOTL,591021,603640,627839,638815,648739,657410,664876,671613,678323,685503,693298,701583,710238,719056,727876,736709,745568,754394
-Bhutan,BTN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1612902561.929,1784628377.43451,2153573262.17452,2340616285.27569,2608204613.87499,2900795915.08911,3479598490.20946,3664847530.92176,3886195668.73874,4321727378.9197,4724439198.53529,4976425806.3104,5224337257.96111,5631169804.18937,6062828129.42368,6519439817.72226,6946174569.81108,7302869418.2261
-Bolivia,BOL,"Population, total",SP.POP.TOTL,8418264,8580235,8905823,9069039,9232306,9395446,9558439,9721454,9884781,10048590,10212954,10377676,10542376,10706517,10869730,11031813,11192854,11353142
-Bolivia,BOL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,28494081306.227,29637361230.4416,31901445380.5939,33896900159.0046,36667595010.9956,39784109142.6217,42601726576.2198,46346675902.6356,47934038028.4094,50224913689.1835,53690570370.3186,56814938219.9667,61604956111.0698,66958022381.5544,72255687987.0218,77411130756.5139,81357374859.8128,87068148574.0916
-Bosnia and Herzegovina,BIH,"Population, total",SP.POP.TOTL,3751176,3755512,3762173,3764194,3765331,3765424,3762786,3754271,3735938,3705472,3661175,3604972,3542605,3482104,3429361,3386267,3351527,3323929
-Bosnia and Herzegovina,BIH,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,18888113490.7605,19514076371.5365,21501819532.818,24455953349.6249,25415425940.303,28737385275.7294,31727090298.9963,35149198233.1417,35036973814.8711,35200562506.6536,36818771791.7234,37436148115.081,39547115491.4598,40137280767.9655,41479305385.4522,43543777810.6381,45830055122.7931,..
-Botswana,BWA,"Population, total",SP.POP.TOTL,1643334,1674678,1734398,1765527,1799078,1835908,1875459,1915639,1953498,1987105,2015402,2039551,2062536,2088614,2120716,2159944,2205128,2254126
-Botswana,BWA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,13163199317.0297,14000573201.4972,14917031257.6955,15527131343.583,17171389706.8418,19334145525.5894,21702666739.3183,23483010755.0489,22912336627.714,24654325590.0923,28287461044.4214,30328944489.6126,32793112048.4206,34939665420.1151,34938571824.1734,35957992764.8594,37910872565.5827,40501287706.2134
-Brazil,BRA,"Population, total",SP.POP.TOTL,174790340,177196054,181809246,184006481,186127103,188167356,190130443,192030362,193886508,195713635,197514534,199287296,201035903,202763735,204471769,206163058,207833831,209469333
-Brazil,BRA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1540368765613.1,1590003486350.46,1716024452202.36,1867943596031.27,1989110393890.28,2139017530786.08,2338840569873.03,2497400553648.12,2519438675896.58,2720411708683,2897463027103.88,3024656029489.04,3199962919896.06,3251231997139.54,3163684993443.51,3094875614934.33,3194803975798.16,3314554681344.12
-British Virgin Islands,VGB,"Population, total",SP.POP.TOTL,20311,20675,21672,22334,23107,24023,25047,26097,27039,27794,28319,28650,28847,28989,29152,29355,29577,29802
-British Virgin Islands,VGB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-Brunei Darussalam,BRN,"Population, total",SP.POP.TOTL,333165,340034,353293,359433,365114,370263,374965,379421,383906,388646,393688,398989,404421,409769,414907,419800,424473,428962
-Brunei Darussalam,BRN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,21757595387.5637,22844964797.462,25265534701.315,26076585574.7821,26993052436.2145,29032919656.191,30011036245.709,29962287096.1965,29689532349.4039,30442433957.6725,31606484313.1479,32602767794.1838,32900229821.7524,33072023472.3853,34940106628.1506,35203717924.4574,35983277931.6873,36798927274.4061
-Bulgaria,BGR,"Population, total",SP.POP.TOTL,8170172,8009142,7775327,7716860,7658972,7601022,7545338,7492561,7444443,7395599,7348328,7305888,7265115,7223938,7177991,7127822,7075947,7024216
-Bulgaria,BGR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,50826870581.5954,55432393585.4017,65933680994.9292,71228300825.837,78428220367.59,83849648296.7282,89549457628.4035,102780291304.429,103337997492.533,108145857341.13,111573413931.629,116829221287.698,117730165442.304,125571222595.773,127919410135.324,138633873892.367,150172396188.648,..
-Burkina Faso,BFA,"Population, total",SP.POP.TOTL,11607942,11944587,12654621,13030569,13421930,13829176,14252021,14689725,15141098,15605217,16081911,16571246,17072775,17586017,18110624,18646378,19193284,19751535
-Burkina Faso,BFA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,9832591705.75183,10728695676.5202,12520433890.8759,13429954207.0494,15086875196.4181,16571089015.8411,17938865069.3298,19621481229.7233,20345699589.3689,21187593812.4147,22811297843.1351,25190504768.1735,27182928647.3964,28551557605.0151,29876745182.078,31879121312.876,34649071647.232,37896902228.652
-Burundi,BDI,"Population, total",SP.POP.TOTL,6378871,6525545,6909154,7131693,7364862,7607849,7862214,8126102,8397668,8675602,8958406,9245988,9540289,9844297,10160030,10487998,10827024,11175378
-Burundi,BDI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3704285880.16384,3747523096.65912,3964808949.29116,4237687598.69005,4472569741.7261,4901475653.05734,5220309013.51051,5590015090.17318,5807080218.01085,6202122879.05249,6570554912.82426,7029661746.02521,7531802170.53453,7973808625.10938,7760115013.91579,7799828620.72967,7978021669.80344,8294583758.34418
-Cabo Verde,CPV,"Population, total",SP.POP.TOTL,428188,435709,449930,456617,463032,469170,475060,480842,486671,492654,498856,505235,511748,518269,524743,531146,537497,543767
-Cabo Verde,CPV,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1293207596.79089,1372286568.76007,1545701419.14703,1745905490.57991,1895391660.16033,2095644327.28678,2529662321.80392,2734701253.68021,2723304769.56356,2742020635.00969,2924904081.15014,3001893188.52943,3104527113.72626,3133475338.66371,3242034700.9723,3436136922.33445,3646923347.08359,3986161735.14087
-Cambodia,KHM,"Population, total",SP.POP.TOTL,12155239,12405408,12856163,13066469,13273354,13477709,13679962,13883834,14093604,14312212,14541423,14780454,15026332,15274503,15521436,15766293,16009414,16249798
-Cambodia,KHM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,12868479070.9558,14183970957.7662,16928137316.6049,19138828633.1319,22220648730.4693,25408076645.7823,28939842143.066,31363847750.0644,31557701852.2482,33742412860.3237,36844168821.8601,40079473097.8325,44201518188.1756,47768111054.9702,51200145872.7074,55390903969.686,60357035540.719,65982867616.5808
-Cameroon,CMR,"Population, total",SP.POP.TOTL,15513945,15928910,16800865,17259322,17733410,18223674,18730282,19252666,19789919,20341241,20906388,21485266,22077298,22681858,23298368,23926539,24566045,25216237
-Cameroon,CMR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,29784946287.2874,31489639338.7613,36692282358.0898,40778843753.0502,42717191728.8639,46196904357.7768,49292008982.3631,52362961169.8643,54538637175.3672,56734192040.501,60296571265.6458,63922317530.9718,68291651422.2592,74493977989.0852,79077043992.8754,83404598307.0597,87842575984.4576,93376236872.7406
-Canada,CAN,"Population, total",SP.POP.TOTL,30685730,31020902,31644028,31940655,32243753,32571174,32889025,33247118,33628895,34004889,34339328,34714222,35082954,35437435,35702908,36109487,36540268,37058856
-Canada,CAN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,877373999038.751,910874338016.658,998164950555.612,1059836385959.16,1147375177564.43,1221540158668.94,1281397532398.91,1322674357374.9,1285495001290.26,1336867766152.78,1403781260484.68,1442045561369.97,1530453431372.55,1595191805962.17,1570465319021.41,1609269140450.58,1691995086285.53,1752268065430.49
-Cayman Islands,CYM,"Population, total",SP.POP.TOTL,42303,43935,46632,47902,49261,50740,52280,53836,55322,56672,57878,58958,59932,60848,61724,62569,63382,64174
-Cayman Islands,CYM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,2541215495.36874,2488451119.18905,2419899586.5641,2820621361.65886,3160488838.68511,..,..
-Central African Republic,CAF,"Population, total",SP.POP.TOTL,3640427,3722018,3881181,3959875,4038382,4118069,4198010,4273366,4337625,4386768,4418636,4436415,4447942,4464175,4493170,4537687,4596028,4666377
-Central African Republic,CAF,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,2428683088.96667,2608260346.17543,2661262336.62091,2872261271.44238,2998400830.96156,3235834043.75364,3481302169.57998,3602871867.91815,3976761129.71467,4240350991.17306,4508217574.11261,4829191120.69331,3139391067.74375,3204056182.92214,3387122495.80178,3584503154.73184,3820587814.87382,4076867549.85986
-Chad,TCD,"Population, total",SP.POP.TOTL,8355654,8678051,9373916,9734767,10096633,10457124,10818024,11183588,11560147,11952136,12360989,12784750,13220424,13663559,14110975,14561666,15016773,15477751
-Chad,TCD,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,6510176644.24313,7424309539.64705,8069486532.76757,11204106940.1035,13606424993.018,13958834739.0032,15235341936.6637,15599363412.7911,18701630678.4715,21669474932.373,22309202431.6998,24801035521.5691,26089449333.1577,28485833422.9967,29990173537.8076,28769852476.2182,28595233431.7406,29783759318.1042
-Channel Islands,CHI,"Population, total",SP.POP.TOTL,148443,149097,150068,150716,151678,153008,154636,156433,158178,159734,160998,162056,163038,164100,165385,166923,168665,170499
-Channel Islands,CHI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-Chile,CHL,"Population, total",SP.POP.TOTL,15342353,15516113,15849652,16014971,16182721,16354504,16530195,16708258,16886186,17062536,17233576,17400347,17571507,17758959,17969353,18209068,18470439,18729160
-Chile,CHL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,141423037028.744,149617762745.183,161378822034.931,173667663199.091,188423173015.673,226393185292.021,248814945028.446,254260262604.88,254255791260.918,288017255793.192,329368731234.727,356585691606.824,377205694908.338,390604167246.858,395579058008.75,405214219662.615,429558689700.93,454118612950.936
-China,CHN,"Population, total",SP.POP.TOTL,1262645000,1271850000,1288400000,1296075000,1303720000,1311020000,1317885000,1324655000,1331260000,1337705000,1344130000,1350695000,1357380000,1364270000,1371220000,1378665000,1386395000,1392730000
-China,CHN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3662603190119.98,4046034590784.73,5068706002085.55,5751831145873.85,6577585539793.3,7678425081880.4,9044086945579.17,10150004548555.4,11101007524668.9,12392343555500.6,13789411919025.6,15265512570790.3,16642665962284.9,18367894560698.3,19745788935828.2,21301288667946.3,23201758384014.1,25266121027152.5
-Colombia,COL,"Population, total",SP.POP.TOTL,39629968,40255967,41483869,42075955,42647723,43200897,43737516,44254975,44750054,45222700,45663099,46076848,46497267,46969209,47520667,48171392,48901066,49648685
-Colombia,COL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,259586734057.021,268880433559.512,293466860030.716,317255941501.252,345909948770.272,380091416342.948,415298100534.322,435259797097.511,445664819593.585,467570978317.23,509202135891.139,541877098069.423,578364895671.285,620627242672.258,656167411094.747,679467444701.724,696337574182.417,719578612657.978
-Comoros,COM,"Population, total",SP.POP.TOTL,542357,555888,583211,597228,611627,626425,641620,657229,673252,689692,706569,723871,741505,759390,777424,795592,813892,832322
-Comoros,COM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1031838095.34828,1080052682.19543,1162471486.02659,1215532951.24305,1290073310.11827,1364974537.39941,1418534286.92375,1498113398.66379,1558739989.97505,1637542977.58824,1740585862.88447,1829092146.61347,1948568006.45096,2029399073.74845,2079006382.99097,2150571966.23367,2251529635.16738,2271446927.02763
-"Congo, Dem. Rep.",COD,"Population, total",SP.POP.TOTL,47105826,48428545,51425580,53068880,54785903,56578037,58453683,60411195,62448574,64563854,66755153,69020747,71358807,73767447,76244544,78789127,81398764,84068091
-"Congo, Dem. Rep.",COD,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,21034807038.348,20394707403.7056,23545611988.7085,25687895915.5444,27751186945.9311,30424080748.4762,33011910345.0108,34660101260.5643,36886758779.0323,39965060256.6331,43243275549.0054,46982673967.31,50131412017.524,56000619571.3355,61244681428.4691,66982405715.3429,70294538060.5356,75448581499.4623
-"Congo, Rep.",COG,"Population, total",SP.POP.TOTL,3127411,3217933,3406922,3510468,3622775,3745141,3876119,4011486,4145391,4273731,4394844,4510198,4622761,4736974,4856095,4980999,5110702,5244363
-"Congo, Rep.",COG,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,8125981776.29668,8590549799.36123,9814544807.28123,9617925880.2185,10408743956.4426,11356621727.5642,11954999432.4044,13830199561.487,14735234321.3174,16747992729.5368,17474371156.6628,19184494729.9999,20553002317.6684,23602638777.4551,29270450660.5801,26944286775.3179,25916389541.8866,26494709250.2471
-Costa Rica,CRI,"Population, total",SP.POP.TOTL,3962372,4034074,4164053,4225155,4285502,4345412,4404628,4463125,4520740,4577378,4633086,4688000,4742107,4795396,4847804,4899345,4949954,4999441
-Costa Rica,CRI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,29436005402.432,31130412536.7697,34678450968.4311,37304895912.9549,40152681647.7638,44750974000.0409,49875346251.8108,53570810616.763,52704716540.6093,56002520609.8941,59533347306.0666,63731636696.1587,65948353976.5911,69186596551.2043,72341900700.9045,76291513703.4709,79751485064.5815,83327166153.4076
-Cote d'Ivoire,CIV,"Population, total",SP.POP.TOTL,16454668,16853026,17599610,17970494,18354514,18754916,19171237,19605569,20059147,20532950,21028655,21547188,22087505,22647683,23226143,23822714,24437469,25069229
-Cote d'Ivoire,CIV,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,35480054292.9691,35463648912.523,34180501166.4538,37259620830.2317,42151035636.1859,44007100639.015,45993257283.9786,48213752794.0334,50085984179.8494,51790826080.2524,50433570908.0155,57303471759.6721,62643767692.1327,70853912606.2592,77570059411.2709,87057194674.6245,91977457081.0906,101097524869.228
-Croatia,HRV,"Population, total",SP.POP.TOTL,4468302,4299642,4303399,4304600,4310145,4311159,4310217,4309705,4305181,4295427,4280622,4267558,4255689,4238389,4203604,4174349,4124531,4089400
-Croatia,HRV,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,46712571361.0721,49269004466.6864,56396412998.335,61457781862.485,64523229646.6618,73333121308.7033,81659959331.0713,87346369787.3108,83484723025.6131,82587555603.4197,86432809934.0225,87590533181.6114,90916733610.9595,91712476553.0583,96090717568.439,99104675733.8454,106532253085.809,..
-Cuba,CUB,"Population, total",SP.POP.TOTL,11126430,11164667,11229183,11250365,11261582,11261248,11251122,11236971,11226709,11225832,11236670,11257101,11282720,11306902,11324781,11335109,11339259,11338138
-Cuba,CUB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-Curacao,CUW,"Population, total",SP.POP.TOTL,133860,129047,131897,134192,137658,141239,144056,145880,146833,148703,150831,152088,153822,155909,157980,159664,160175,159849
-Curacao,CUW,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,3576807867.17759,3753936937.4761,3950818825.06229,4028383214.39046,3979440641.03859,4083315886.40691,4190952876.22346,4224747984.36592,4250788721.52518,4318430855.74745,4416683751.74736,4390263974.04831,4456032332.31524,..
-Cyprus,CYP,"Population, total",SP.POP.TOTL,943290,960276,993563,1010408,1027662,1045507,1063713,1081563,1098083,1112612,1124833,1135046,1143866,1152285,1160985,1170187,1179680,1189265
-Cyprus,CYP,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,13508199013.3742,14900135043.6689,16710936982.4047,17808258546.8655,19438150076.4319,21269122586.5108,23585499461.0417,26828760166.2928,26047511325.8369,26724583726.5894,28202177534.2958,26677564030.0901,25281697880.5511,25028812233.5479,27105848270.8932,28102833113.9845,30232255651.3533,..
-Czech Republic,CZE,"Population, total",SP.POP.TOTL,10255063,10216605,10193998,10197101,10211216,10238905,10298828,10384603,10443936,10474410,10496088,10510785,10514272,10525347,10546059,10566332,10594438,10625695
-Czech Republic,CZE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,163000344162.592,174465600018.659,191474672302.247,202339797296.057,214084360418.233,228697026228.795,251865694517.321,270395387186.615,267930037450.393,268403859052.561,279370310382.565,286391051564.635,301403153675.82,316710658172.226,331373459943.474,348125885411.157,378005368627.907,402376187264.344
-Denmark,DNK,"Population, total",SP.POP.TOTL,5339616,5358783,5390574,5404523,5419432,5437272,5461438,5493621,5523095,5547683,5570572,5591572,5614932,5643475,5683483,5728010,5764980,5797446
-Denmark,DNK,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,149560708541.011,155486337804.36,164469983410.812,178074345542.071,186566260237.836,205243068258.734,213892593685.525,229296531979.344,225023089962.946,242450184707.942,252568140433.285,256181670980.004,270675551874.234,280163778604.424,287382159288.342,297792837721.213,320311725561.574,333201235810.944
-Djibouti,DJI,"Population, total",SP.POP.TOTL,717584,733015,759641,771603,783254,794563,805451,816358,827823,840198,853674,868136,883293,898696,913993,929112,944097,958920
-Djibouti,DJI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-Dominica,DMA,"Population, total",SP.POP.TOTL,69650,69661,70100,70382,70589,70718,70795,70827,70851,70878,70916,70965,71016,71085,71183,71307,71458,71625
-Dominica,DMA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,401854626.13162,430969292.907311,458398582.909263,478767669.499686,503054183.029804,566716313.577913,613740256.101501,674876230.978717,680580696.154226,699426352.369397,711041658.178211,704886225.182432,720074113.193201,763410589.590503,745317961.150396,783629128.326856,724664689.194033,764788991.62708
-Dominican Republic,DOM,"Population, total",SP.POP.TOTL,8471321,8598601,8850317,8974444,9097257,9218686,9338861,9458075,9576737,9695121,9813210,9930911,10048224,10165178,10281680,10397743,10513131,10627165
-Dominican Republic,DOM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,53481190272.1459,56010175780.0105,58385312272.7899,60475457591.4277,70258633460.8789,79369374913.6574,87413127513.4887,93243822579.6949,94972263207.1716,104077078762.039,109291187706.743,114284989019.255,120991895595.267,132394683034.872,144197222332.01,155041371100.503,164315674618.162,180204991045.454
-Ecuador,ECU,"Population, total",SP.POP.TOTL,12681123,12914667,13369678,13596388,13825847,14059384,14296557,14535739,14774424,15011117,15243883,15474102,15707474,15951838,16212020,16491115,16785361,17084357
-Ecuador,ECU,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,69280703994.4372,74939826490.499,83293244502.3108,92144751696.0842,100732038310.192,108881841131.225,114310646556.442,125934606254.109,127980486903.701,134776770005.444,148275374796.055,159839411622.691,170731099834.796,180399188092.245,182104909146.231,181651987717.823,188691065639.306,194962984646.79
-"Egypt, Arab Rep.",EGY,"Population, total",SP.POP.TOTL,68831561,70152661,72826097,74172073,75523569,76873663,78232126,79636079,81134798,82761235,84529250,86422240,88404640,90424654,92442547,94447072,96442593,98423595
-"Egypt, Arab Rep.",EGY,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,412961924858.391,437524824627.395,478069035113.576,511392198190.805,545955158075.548,605653097636.973,668709451792.424,730017558226.209,764204949234.673,796047078255.1,822212016133.083,858781638146.281,890690721696.348,935819929627.236,993888699426.081,1052381337220.99,1110453289615.67,1188986874332.94
-El Salvador,SLV,"Population, total",SP.POP.TOTL,5887936,5927006,5994077,6023797,6052123,6079399,6105810,6131764,6157686,6183875,6210568,6237923,6266070,6295128,6325124,6356143,6388122,6420744
-El Salvador,SLV,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,25731066473.5272,26521930838.5172,28012601042.5023,28980662325.8934,30692505754.9181,33199904357.5669,34744757201.8196,36366993198.4304,35515642872.3809,36935914405.5762,39093487965.8727,40532482057.3802,41975930795.1175,43465486433.9427,44945203952.4876,46366870125.1147,48095933992.8021,50384982982.5379
-Equatorial Guinea,GNQ,"Population, total",SP.POP.TOTL,606181,631666,686664,716949,749535,784496,821687,860840,901599,943639,986853,1031191,1076413,1122276,1168568,1215179,1262001,1308974
-Equatorial Guinea,GNQ,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3408755735.77416,3542649774.71665,4615157301.56908,5905936380.34294,10749871568.0903,18489395069.6507,22230972357.5893,24747690281.0513,22552090046.0557,18446060174.2367,22107638610.3946,25007608269.967,25150790163.8727,25590955292.7066,26082123067.2383,24699683680.3115,24569364957.0602,23787894046.6584
-Eritrea,ERI,"Population, total",SP.POP.TOTL,2292416,2374722,2600973,2719803,2826659,2918205,2996536,3062779,3119920,3170435,3213972,..,..,..,..,..,..,..
-Eritrea,ERI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,4536444377.15044,5022663733.88327,5169227092.41034,5370835616.33827,5710735333.76666,5834714525.94245,6087351656.9654,5581576825.76507,5841037405.2831,6035304585.65003,6697806876.39949,..,..,..,..,..,..,..
-Estonia,EST,"Population, total",SP.POP.TOTL,1396985,1388115,1370720,1362550,1354775,1346810,1340680,1337090,1334515,1331475,1327439,1322696,1317997,1314545,1315407,1315790,1317384,1320884
-Estonia,EST,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,12666789519.1477,13620908798.3207,16938221220.577,18679254764.7334,21499500921.8641,24589142619.2906,27420515302.2847,28710497105.7967,26528101753.5309,27211610932.9907,30946637998.4363,33031898254.1458,35403618516.7603,36991781965.8752,37581777179.0502,39736976808.2844,43192606524.7084,46293918876.6402
-Eswatini,SWZ,"Population, total",SP.POP.TOTL,1005435,1013609,1022802,1026286,1030579,1036092,1042652,1049945,1057467,1064837,1072032,1079288,1086839,1095021,1104044,1113984,1124753,1136191
-Eswatini,SWZ,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,5029264899.34808,5431482698.44771,5605403004.57176,6086729254.65741,7019450479.00059,7288925224.86084,7875801784.567,7987564619.30913,8014581048.60538,8158967274.51923,8915944430.94028,9529512409.33264,10469276662.0151,10797251156.7553,11037244994.8404,11374227169.1727,11622271561.2596,12136637596.5774
-Ethiopia,ETH,"Population, total",SP.POP.TOTL,66224804,68159423,72170584,74239505,76346311,78489206,80674348,82916235,85233913,87639964,90139927,92726971,95385785,98094253,100835458,103603501,106400024,109224559
-Ethiopia,ETH,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,32495282528.946,36003438063.3715,36945461559.3404,43150160761.3222,49922420935.5234,57027126353.4857,65479193349.3512,73955721823.1239,80915432771.973,91916910997.9935,104477152060.005,115683777824.005,130168120863.094,146161119852.496,162860949431.361,180317660195.581,200668362272.026,219041116378.24
-Faroe Islands,FRO,"Population, total",SP.POP.TOTL,46735,46997,47432,47600,47722,47792,47825,47820,47808,47814,47823,47843,47892,47960,48051,48173,48331,48497
-Faroe Islands,FRO,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-Fiji,FJI,"Population, total",SP.POP.TOTL,811006,813925,816076,817860,821604,827870,836190,845361,853637,859818,863449,865069,865608,866453,868627,872399,877459,883483
-Fiji,FJI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,4393254619.3207,4453051339.64807,4845200477.65203,5237640320.607,5516418557.61792,5484022989.9694,5680895104.463,5836071536.20772,5922291857.24864,6001032787.66044,6297184005.93723,6463588707.59906,7012570122.84193,7339027928.56517,7784249415.98458,8089192085.39646,8493902568.48219,9055011599.64496
-Finland,FIN,"Population, total",SP.POP.TOTL,5176209,5188008,5213014,5228172,5246096,5266268,5288720,5313399,5338871,5363352,5388272,5413971,5438972,5461512,5479531,5495303,5508214,5518050
-Finland,FIN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,137615639231.006,144016223133.926,150203416763.615,163835671564.873,168542939523.638,182667559886.062,200030992177.147,212770179525.833,204559096213.621,210577337354.589,220207155805.574,221064507784.853,225363033587.855,228549068021.737,233624314603.572,243618103865.339,256023979623.249,267593673585.704
-France,FRA,"Population, total",SP.POP.TOTL,60912500,61357430,62244886,62704895,63179351,63621381,64016225,64374984,64707040,65027507,65342780,65659809,65998687,66316100,66593366,66859768,66865144,66987244
-France,FRA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1614576023391.81,1717847289338.03,1774911405322.66,1845778056986.32,1959874975176.17,2104837447257.03,2225555202100.65,2308471504999.58,2295992878907.82,2388528957528.96,2511515152235.48,2528096970156.38,2666951479899.41,2719730721366.08,2777946746850.25,2864118350983.51,3028054653714.54,3141673740932.97
-French Polynesia,PYF,"Population, total",SP.POP.TOTL,240686,244931,252703,255992,258780,261010,262721,264061,265254,266455,267698,268998,270328,271705,273124,274575,276103,277679
-French Polynesia,PYF,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-Gabon,GAB,"Population, total",SP.POP.TOTL,1228360,1258003,1319953,1353795,1390549,1430152,1472575,1518540,1568928,1624140,1684635,1749682,1817071,1883800,1947686,2007873,2064823,2119275
-Gabon,GAB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,14743976923.0787,15903706068.4965,17082555071.2646,16793995544.0597,18906714345.9991,18263730074.5878,19532052080.7454,19433217896.8406,20183177851.5666,21430282018.2387,23271285619.8072,26046345457.1258,28088314725.5367,31336428776.4089,31824807567.0167,33038652079.9311,34357763181.5816,35128039218.2989
-"Gambia, The",GMB,"Population, total",SP.POP.TOTL,1317703,1360074,1449925,1496527,1543741,1591445,1639848,1689285,1740279,1793196,1848147,1905011,1963711,2024042,2085860,2149139,2213894,2280102
-"Gambia, The",GMB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1460305030.96115,1567713255.37819,1675037890.78028,1862654425.3019,1901965596.91495,1976755395.91392,2116489675.95252,2295235445.62075,2450299619.41391,2639734098.21677,2568312969.26981,2773695558.53477,2989457824.2978,3013357990.55311,3221997583.89106,3285983120.13955,3501293882.52496,3820914013.16318
-Georgia,GEO,"Population, total",SP.POP.TOTL,4077131,4014373,3951736,3927340,3902469,3880347,3860158,3848449,3814419,3786695,3756441,3728874,3717668,3719414,3725276,3727505,3728004,3731000
-Georgia,GEO,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,11883232471.1089,12379493447.6303,14905170087.7075,16386025523.1156,18414264662.5725,20992729768.6812,23860463088.4945,24481397760.1856,23828723929.4127,25096051756.829,27516505407.7668,30440439989.0537,31712240005.1967,34139735907.6908,34845666928.2224,35403391908.1103,37635016056.1621,40672983047.3946
-Germany,DEU,"Population, total",SP.POP.TOTL,82211508,82349925,82534176,82516260,82469422,82376451,82266372,82110097,81902307,81776930,80274983,80425823,80645605,80982500,81686611,82348669,82657002,82927922
-Germany,DEU,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,2229306920614.45,2325236478018.54,2452833554457.98,2610660824034.86,2659840888439.72,2869303616573.65,3042783013746.36,3152657054294.18,3102023577576.64,3267762589972.74,3513624912677.07,3585851182476.63,3730248688666.78,3896388130627.09,4003832048056.79,4192471673148,4437045277649.97,4627201990499.89
-Ghana,GHA,"Population, total",SP.POP.TOTL,19278856,19756928,20750299,21272323,21814642,22379055,22963946,23563825,24170940,24779619,25387710,25996449,26607642,27224472,27849205,28481946,29121471,29767108
-Ghana,GHA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,33041124698.1318,35447829634.3317,40268117260.6826,43636729883.9707,48143435859.0974,53092455658.9934,56922660249.067,63441044696.2121,67051659553.794,72238824482.4015,82867099335.8828,90428354238.5006,101805409495.635,105529255249.785,111140628609.372,115546836446.63,126358366839.609,138278565905.309
-Gibraltar,GIB,"Population, total",SP.POP.TOTL,31077,31602,32555,32928,33219,33417,33517,33559,33565,33585,33612,33646,33692,33725,33736,33737,33728,33718
-Gibraltar,GIB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-Greece,GRC,"Population, total",SP.POP.TOTL,10805808,10862132,10928070,10955141,10987314,11020362,11048473,11077841,11107017,11121341,11104899,11045011,10965211,10892413,10820883,10775971,10754679,10727668
-Greece,GRC,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,212362791183.849,229449400332.151,260110749576.068,275402356623.851,281471978035.928,308462945667.322,315293003593.82,331637075588.565,329782253257.55,306635432541.958,282370859957.681,281120340956.062,285824079577.244,294315512120.89,291510428686.154,293914047364.1,307963982617.238,317555841816.728
-Greenland,GRL,"Population, total",SP.POP.TOTL,56200,56350,56765,56911,56935,56774,56555,56328,56323,56905,56890,56810,56483,56295,56114,56186,56171,56025
-Greenland,GRL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-Grenada,GRD,"Population, total",SP.POP.TOTL,102833,103249,104005,104347,104661,104933,105190,105456,105789,106233,106796,107446,108170,108902,109599,110261,110874,111454
-Grenada,GRD,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,729811265.15908,719207633.336454,837267278.880919,832401495.777686,1046599571.84973,1034498226.37774,1112258858.89832,1147605013.5566,1045684105.2584,1086866790.28646,1130929356.42457,1136864040.03673,1193581768.79409,1230038983.89587,1288798453.88827,1386903789.0292,1482628608.61155,1590367855.17114
-Guam,GUM,"Population, total",SP.POP.TOTL,155329,156401,157717,158101,158402,158648,158847,159036,159226,159444,159692,159996,160407,161016,161853,162951,164281,165768
-Guam,GUM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-Guatemala,GTM,"Population, total",SP.POP.TOTL,11650743,11924946,12500478,12796925,13096028,13397021,13700327,14006428,14316263,14630417,14948803,15270778,15595821,15923243,16252429,16583060,16914936,17247807
-Guatemala,GTM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,55670407578.2359,58592404276.6108,63914458725.1716,67524765789.2827,71846055582.6138,77630468469.7081,84550742390.1576,89318548902.2149,90100659907.1463,93663004820.6312,99115991862.8735,105000268304.332,111062522252.135,117381193104.522,123805715663.505,129027379861.915,135651416286.548,143265987313.624
-Guinea,GIN,"Population, total",SP.POP.TOTL,8240730,8417081,8753093,8925743,9109581,9307425,9518162,9738792,9964469,10192176,10420471,10652029,10892810,11150977,11432088,11738441,12067539,12414318
-Guinea,GIN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,9714681942.18454,10223876592.2695,10793657280.2056,11310143455.9914,11738592829.3469,12702764437.6512,14019561423.5639,14572001285.1311,14469336767.5771,15564483972.121,16709591204.9151,18226230564.6896,19388743012.716,20929260871.3135,22037069336.4195,24981832527.4242,29235939634.075,30815844547.9741
-Guinea-Bissau,GNB,"Population, total",SP.POP.TOTL,1201301,1227106,1283305,1313492,1344930,1377581,1411543,1446936,1483921,1522599,1562989,1604979,1648257,1692439,1737202,1782437,1828146,1874309
-Guinea-Bissau,GNB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1303568154.81999,1351450773.91591,1417672696.40107,1501774707.87463,1614416902.49896,1719111566.4626,1830976569.57275,1905808393.40688,1991758387.90641,2125076307.89134,2368745194.2087,2371847802.79503,2431090805.80576,2640173335.44153,2801908133.752,3012345990.2243,3177784274.85024,3361320232.54189
-Guyana,GUY,"Population, total",SP.POP.TOTL,746715,745206,745143,745737,746163,746343,746474,746817,747718,749436,752028,755399,759285,763380,767432,771366,775221,779004
-Guyana,GUY,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,2574022868.95956,2660767356.67047,2809147435.49711,2983766588.80754,3065920166.23635,3507705657.38875,3818897828.95477,3920016679.67017,4092161389.32798,4252394193.28401,4576050795.78135,4925516995.187,5214463681.44254,5522469580.64164,5763653914.22797,6074741356.5651,6347780648.34287,6673977598.72941
-Haiti,HTI,"Population, total",SP.POP.TOTL,8463806,8608819,8900104,9047077,9195288,9344785,9495328,9646580,9798046,9949322,10100320,10250930,10400673,10549008,10695542,10839970,10982366,11123176
-Haiti,HTI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,11871793651.3325,11967713678.45,12330135027.7823,12239278169.7267,12782391307.2109,13585630071.2796,14416830037.4507,14828336585.8573,15418932671.4302,14761919937.5217,15929101063.5587,16734290649.9261,17692824275.928,18568600471.9952,18976764384.1355,19489166076.5331,20100047326.4725,20839429278.5109
-Honduras,HND,"Population, total",SP.POP.TOTL,6574509,6751912,7106319,7282953,7458985,7634298,7808518,7980955,8150775,8317470,8480671,8640691,8798521,8955589,9112916,9270795,9429013,9587522
-Honduras,HND,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,16745044650.4654,17527860759.1041,19452942814.8251,21071163401.126,23151121210.4402,25366517128.4012,28137057298.8321,29731089809.976,29052515217.776,30403154608.708,31919842263.2935,33394732910.8996,34746750371.4101,36163368560.6401,38507393808.5759,40381159265.7035,43055112035.1209,45874972260.0696
-"Hong Kong SAR, China",HKG,"Population, total",SP.POP.TOTL,6665000,6714300,6730800,6783500,6813200,6857100,6916300,6957800,6972800,7024200,7071600,7150100,7178900,7229500,7291300,7336600,7391700,7451000
-"Hong Kong SAR, China",HKG,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,181863075151.109,189678635096.846,206127089270.754,229105534445.727,249731534679.926,280406109927.013,309059710499.735,330153972492.621,315642283460.738,338009531468.805,363860139557.707,372426704794.752,392445199025.727,411590656586.16,425040649368.666,441897493082.683,475913471225.503,504413709964.83
-Hungary,HUN,"Population, total",SP.POP.TOTL,10210971,10187576,10129552,10107146,10087065,10071370,10055780,10038188,10022650,10000023,9971727,9920362,9893082,9866468,9843028,9814023,9787966,9768785
-Hungary,HUN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,115476509619.814,128234581482.817,149701017212.796,155564507283.733,163043381710.731,174893868356.71,178804208012.421,194929993510.571,197636041917.122,205400698171.896,217225711544.167,219991325197.41,235706216043.613,241274846603.145,247987272728.343,257095437398.458,270624996605.58,291009192490.907
-Iceland,ISL,"Population, total",SP.POP.TOTL,281205,284968,289521,292074,296734,303782,311566,317414,318499,318041,319014,320716,323764,327386,330815,335439,343400,353574
-Iceland,ISL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,8062152412.1613,8781651582.61127,9381323150.38087,10025195030.4832,10526296722.7951,11028043033.0308,12073945245.9316,10807260433.594,10700033108.4016,10229377123.8514,11022605832.7629,11766282593.5493,13631427233.6515,14240759323.4076,15376113336.7176,16880864403.5238,18591462282.2833,..
-India,IND,"Population, total",SP.POP.TOTL,1056575549,1075000085,1111523144,1129623456,1147609927,1165486291,1183209472,1200669765,1217726215,1234281170,1250288729,1265782790,1280846129,1295604184,1310152403,1324509589,1338658835,1352617328
-India,IND,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,2254497994239.14,2419864321502.12,2806869697760.35,3112043076824.13,3462656489680.63,3852594313588.19,4274711167203.71,4484328708574.98,4873764181835.93,5323989186781.73,5731191285361.23,6141496500296.88,6643581440003.42,7275510313097.29,7938517560724.76,8687007292198.3,9493084548460.84,10391783229262.5
-Indonesia,IDN,"Population, total",SP.POP.TOTL,211513823,214427417,220309469,223285676,226289470,229318262,232374245,235469762,238620563,241834215,245116206,248452413,251806402,255129004,258383256,261554226,264645886,267663435
-Indonesia,IDN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,912499951057.57,996748906491.408,1127645769819.18,1206846828606.79,1311456277050.35,1434543531179.9,1568967281843.51,1705556503990.61,1799110414075.65,1950129436855.68,2111380501435.95,2280382863217.34,2445162210216.79,2606343176808.9,2763690452519.22,2938047210877.73,3144087539232.47,3386415495500.02
-"Iran, Islamic Rep.",IRN,"Population, total",SP.POP.TOTL,65623405,66449112,68122938,68951281,69762347,70554760,71336475,72120604,72924837,73762519,74634956,75539862,76481943,77465753,78492215,79564016,80673951,81800269
-"Iran, Islamic Rep.",IRN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,690556206758.097,712169708326.653,860740196807.758,919360289229.462,978053488236.995,1060394782313.09,1180402772538.67,1207057336697.93,1224125332145.1,1310788556897.82,1373456121278.43,1304594056709.51,1324649207072.65,1406451697334.4,1402082301470.5,1608229808602.6,1698218039348.97,..
-Iraq,IRQ,"Population, total",SP.POP.TOTL,23497585,24208180,25644499,26313838,26922284,27448124,27911248,28385746,28973162,29741976,30725300,31890011,33157050,34411951,35572261,36610632,37552781,38433600
-Iraq,IRQ,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,226902159991.146,237027400829.002,154014842848.652,243897135800.009,266069273154.233,301650947119.667,314980662228.171,360045168708.816,365882657677.608,387625292654.885,420294877136.849,490956774975.036,529592015081.426,546302103233.509,564282698932.659,647723901003.798,646563104355.44,664345140348.102
-Ireland,IRL,"Population, total",SP.POP.TOTL,3805174,3866243,3996521,4070262,4159914,4273591,4398942,4489544,4535375,4560155,4580084,4599533,4623816,4657740,4701957,4755335,4807388,4853506
-Ireland,IRL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,100089405584.551,107469355619.18,124853550921.398,135840159124.082,145668071091.729,165676630536.902,177850339150.471,172166895124.872,157804241154.413,165411181538.896,166937837412.043,171626952198.593,187172886537.447,201368611217.265,249135028148.082,275448712001.61,294054946448.367,324263630749.361
-Isle of Man,IMN,"Population, total",SP.POP.TOTL,76941,77703,78884,79520,80305,81285,82408,83508,84376,84857,84886,84533,83976,83488,83234,83287,83598,84077
-Isle of Man,IMN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-Israel,ISR,"Population, total",SP.POP.TOTL,6289000,6439000,6689700,6809000,6930100,7053700,7180100,7308800,7485600,7623600,7765800,7910500,8059500,8215700,8380100,8546000,8713300,8883800
-Israel,ISR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,146891357221.145,153669223845.463,153399675971.541,166564745049.532,170449240893.779,180345200458.033,196864272630.799,196461441247.619,200933910084.109,215702839804.238,234196033247.118,244505617038.963,269867621392.626,279789763568.908,295058945359.525,317686454500.238,335193804201.287,362437028915.231
-Italy,ITA,"Population, total",SP.POP.TOTL,56942108,56974100,57313203,57685327,57969484,58143979,58438310,58826731,59095365,59277417,59379449,59539717,60233948,60789140,60730582,60627498,60536709,60431283
-Italy,ITA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1533082189484.25,1586538671240.85,1658662756415.48,1695832590542.32,1744720332016.2,1887221742001.9,1988274225959.19,2063595995375.75,2038366547193.59,2071050453316.78,2152592702919.65,2154531375588.28,2172610704748.01,2192796128948.52,2225001252547.41,2372736136365.55,2491347733670.36,2567974254467.98
-Jamaica,JAM,"Population, total",SP.POP.TOTL,2654701,2674702,2709437,2725015,2740003,2754407,2768227,2781876,2795837,2810460,2825929,2842132,2858709,2875136,2891021,2906238,2920853,2934855
-Jamaica,JAM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,16132454466.796,16547694687.474,17876474575.387,18643625969.6867,19335604200.4298,20686757639.8361,21551036065.748,22026724163.9566,20922077237.2541,21248551806.6578,22101414941.4774,22870830677.9019,23139310158.4967,23721074081.5176,23941578871.5546,24238489019.968,25314880413.8532,26213482151.1758
-Japan,JPN,"Population, total",SP.POP.TOTL,126843000,127149000,127718000,127761000,127773000,127854000,128001000,128063000,128047000,128070000,127833000,127629000,127445000,127276000,127141000,126994511,126785797,126529100
-Japan,JPN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3452930586529.41,3546345207550.25,3752540629883.33,3950154009958.02,4133438974348.17,4341515713395.91,4548813775507.34,4573202767880.07,4354890214696.97,4596530742002.53,4702730270932.62,4873844260962.84,5133797407300.4,5166025961476.02,5333311667417.55,5396926080206.59,5514385495607.58,5693329186714.86
-Jordan,JOR,"Population, total",SP.POP.TOTL,5122493,5217336,5434030,5580244,5765635,5991540,6255280,6556478,6893260,7261539,7663131,8090872,8520420,8920049,9266575,9551467,9779173,9956011
-Jordan,JOR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,29781418130.4024,32232494190.1203,36557399707.156,41060925526.7765,45797659875.1787,51186766060.0581,57386465978.9692,61817072574.4817,65515235566.7773,66222988729.5046,69281067836.4756,72233540271.4316,75770153716.5835,79474255916.8684,82257831669.9514,85133386168.5754,88831873562.4639,92628702339.1399
-Kazakhstan,KAZ,"Population, total",SP.POP.TOTL,14883626,14858335,14909018,15012985,15147029,15308084,15484192,15674000,16092822,16321872,16557201,16792089,17035550,17288285,17542806,17794055,18037776,18276499
-Kazakhstan,KAZ,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,109782273989.869,129074822591.256,160140046529.332,178384355938.742,195819542275.122,217723759594.57,241575088708.378,248231027073.925,263596957161.343,279261900779.44,301583512406.376,325435632564.894,362720166985.819,386842311951.103,414348263500.891,408008276019.153,424596357129.541,442767958630.541
-Kenya,KEN,"Population, total",SP.POP.TOTL,31964557,32848564,34678779,35635271,36624895,37649033,38705932,39791981,40901792,42030676,43178257,44343410,45519889,46699981,47878336,49051686,50221473,51393010
-Kenya,KEN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,52813995170.6039,55947811915.7323,59924694217.6918,64832513562.5916,71405468636.6949,78141195418.8126,85582764482.0683,87768971233.4377,91333029718.9188,99914764428.8247,108655317520.867,115251383514.772,123367615240.565,132001732909.451,141535003711.004,152276363203.295,162227087231.766,176420478135.16
-Kiribati,KIR,"Population, total",SP.POP.TOTL,84396,85849,88835,90499,92325,94343,96527,98761,100930,102927,104728,106370,107890,109391,110930,112524,114158,115847
-Kiribati,KIR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,217156131.679699,232653434.252912,222507516.800126,225167332.318293,231498586.867625,232628480.66327,248005509.182338,252582083.047309,243191331.126092,258637330.477255,254926735.893375,295962984.145689,345978021.428474,399192673.872255,479825866.063915,484149995.971851,498690300.698936,510549381.924241
-"Korea, Dem. People’s Rep.",PRK,"Population, total",SP.POP.TOTL,22929075,23132980,23542426,23732731,23904167,24054864,24188331,24310142,24428341,24548836,24673385,24800612,24929452,25057752,25183833,25307744,25429985,25549819
-"Korea, Dem. People’s Rep.",PRK,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-"Korea, Rep.",KOR,"Population, total",SP.POP.TOTL,47008111,47370164,47892330,48082519,48184561,48438292,48683638,49054708,49307835,49554112,49936638,50199853,50428893,50746659,51014947,51245707,51466201,51635256
-"Korea, Rep.",KOR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,843929272354.612,901776576929.781,1019822288361.57,1100600666573.17,1156781985289.3,1246052587393.16,1350379136115.63,1405611759231.35,1393348976504.33,1506236849977.5,1568631167033.9,1627811703472.46,1656512685183.14,1709830640018.39,1829299733915.32,1908538437723.28,1998202358354.7,2088780026386.59
-Kosovo,XKX,"Population, total",SP.POP.TOTL,1700000,1701154,1703466,1704622,1705780,1719536,1733404,1747383,1761474,1775680,1791000,1805200,1824100,1821800,1801800,1816200,1830700,1845300
-Kosovo,XKX,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,11333490148.2231,12745735745.0873,13178834168.8881,13366887903.8259,13972080236.1477,15064908212.123,15910577393.1932,16622579155.1294,17100206064.1015,17911461812.0703,18793325797.96,20224688998.8495,21368646478.0585
-Kuwait,KWT,"Population, total",SP.POP.TOTL,2045123,2103282,2161626,2200492,2270198,2373672,2504019,2656009,2821045,2991884,3168060,3348853,3526378,3690942,3835591,3956873,4056097,4137309
-Kuwait,KWT,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,134366986554.57,133950658454.194,157166964311.593,181616976393.264,206446429990.09,232698753156.174,253302473215.996,256215543296.024,243412517555.733,237046895717.794,261909682318.451,288203878837.211,297506214978.566,310334239041.657,319716442961.854,339888752714.972,342743643130.856,344992137141.301
-Kyrgyz Republic,KGZ,"Population, total",SP.POP.TOTL,4898400,4945100,5043300,5104700,5162600,5218400,5268400,5318700,5383300,5447900,5514600,5607200,5719600,5835500,5956900,6079500,6198200,6315800
-Kyrgyz Republic,KGZ,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,7602141456.85009,8366008139.41657,9325142721.13729,10104597978.0189,10511255443.4932,11383537453.3525,12731183780.1648,13690544980.9526,14215870379.7178,13942138178.2375,14393401502.2784,15962043776.9596,17420375928.3299,18783851119.3135,19776488545.2834,20558444178.3441,22025333361.309,23862030091.6635
-Lao PDR,LAO,"Population, total",SP.POP.TOTL,5323700,5409582,5576640,5662208,5751676,5846074,5944948,6046620,6148623,6249165,6347567,6444530,6541304,6639756,6741164,6845846,6953035,7061507
-Lao PDR,LAO,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,10107541300.8073,10944742167.1709,12496963016.2619,13866791059.5909,15585867397.6811,16884961048.5644,19055186702.5762,20685659241.1533,22845158845.7875,24175906769.4227,26541063220.8385,29473799369.3601,32601161038.6543,36112362744.3456,39137328494.4602,42409610302.7425,45704405341.0543,50094763456.8897
-Latvia,LVA,"Population, total",SP.POP.TOTL,2367550,2337170,2287955,2263122,2238799,2218357,2200325,2177322,2141669,2097555,2059709,2034319,2012647,1993782,1977527,1959537,1942248,1926542
-Latvia,LVA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,18962509797.4388,21180500225.2368,25105426714.9969,27069993124.6461,30679837261.8891,34066030259.3661,38699573363.3915,41769625912.017,38689587918.7077,37293375812.7765,40716218188.3451,42941376174.3867,45544119509.2039,47298973906.1904,48617091181.9267,50503936883.6885,54704958845.6954,..
-Lebanon,LBN,"Population, total",SP.POP.TOTL,3842778,3991001,4388375,4569378,4698763,4759753,4767344,4764741,4813026,4953061,5202343,5538634,5914621,6262410,6532678,6711121,6811873,6848925
-Lebanon,LBN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,33069608028.3763,34307414777.8157,31762931885.6568,39940911996.1475,43606658858.6349,46431223607.1029,53328612759.9013,58520968919.4407,63541981247.6059,68968538834.3693,71578309882.1387,75037729797.1026,78350884775.3785,80741563368.3889,82091107221.021,83828417819.6471,87221100692.5972,86338436893.423
-Lesotho,LSO,"Population, total",SP.POP.TOTL,2032804,2035740,2018348,2005940,1996114,1989939,1986922,1987129,1990131,1995581,2003787,2014990,2028519,2043437,2059021,2075001,2091412,2108132
-Lesotho,LSO,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3374636405.66938,4054653044.61798,4365749850.42696,4375286661.28503,4416751209.4495,4554400335.95669,5452401490.72242,5803961888.63355,5778542043.87086,6004180785.42078,6103484710.24303,6438442137.1208,6581117356.53085,6717129755.48522,7006631361.35657,7425001291.86165,7355866701.56858,7618226994.21345
-Liberia,LBR,"Population, total",SP.POP.TOTL,2848456,2953927,3077058,3135651,3218116,3329211,3461911,3607860,3754133,3891356,4017443,4135659,4248334,4359505,4472230,4586788,4702228,4818977
-Liberia,LBR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,2640595556.19249,2599118711.48849,1874637193.15939,2022760489.5612,2253700761.7781,2593071426.45679,2996032003.098,3345705050.12496,3591682233.09205,3821574855.61568,4396321822.5236,4613111881.87455,5091205724.36084,5179789064.89213,5339301968.34643,5325361708.85642,5521235843.05053,5448420408.16613
-Libya,LBY,"Population, total",SP.POP.TOTL,5357891,5443248,5620547,5710154,5798614,5886872,5974787,6058748,6133984,6197663,6247439,6285750,6320359,6362037,6418315,6492164,6580724,6678567
-Libya,LBY,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,110851580842.784,115660686294.502,133595871383.002,149945963360.283,163057953847.585,169949584037.157,170066053014.484,178982808764.256,69433530943.1827,153938014847.876,137725462934.214,108849271687.94,103084072263.745,99936446542.6964,127502666207.123,140194689272.7
-Liechtenstein,LIE,"Population, total",SP.POP.TOTL,33184,33552,34175,34452,34713,34970,35217,35471,35727,35994,36293,36615,36934,37223,37470,37658,37800,37910
-Liechtenstein,LIE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-Lithuania,LTU,"Population, total",SP.POP.TOTL,3499536,3470818,3415213,3377075,3322528,3269909,3231294,3198231,3162916,3097282,3028115,2987773,2957689,2932367,2904910,2868231,2828403,2789533
-Lithuania,LTU,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,29066641542.0027,32362015094.2703,40192899281.2295,43151528711.0143,47617999575.7175,52874111973.7666,59380024580.9173,64082365384.7112,58465472219.3645,61067979410.1967,66665174610.9159,71449836203.4754,76802302249.8664,81544930490.511,80563029769.1673,83390381426.9729,90284616069.8659,..
-Luxembourg,LUX,"Population, total",SP.POP.TOTL,436300,441525,451630,458095,465158,472637,479993,488650,497783,506953,518347,530946,543360,556319,569604,582014,596336,607728
-Luxembourg,LUX,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,21397795484.033,22205166172.3317,22110800022.7794,26867967158.084,29304952011.0148,29989597043.7305,34893624479.4315,34990188934.9977,27740237256.596,31304552603.8336,32928110626.5723,33825803107.6655,34690043272.6355,37434314552.7056,39571975823.6145,41524878233.4819,45501546147.6316,49005972521.9818
-"Macao SAR, China",MAC,"Population, total",SP.POP.TOTL,427782,437938,460165,471597,482858,493799,504511,515239,526400,538219,550832,564039,577372,590208,602085,612836,622585,631636
-"Macao SAR, China",MAC,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,13261814737.2147,15120392779.3178,18703092519.2485,23491755347.2338,25893417735.2766,29016015488.1451,37781008038.107,35772886087.6703,36985305900.8053,46054934668.0489,55491749223.7671,60786996630.9249,68078848712.2094,69700477607.8845,59258610934.6941,59302303196.3941,66384362123.0823,71048761222.4765
-Madagascar,MDG,"Population, total",SP.POP.TOTL,15766806,16260932,17279141,17802997,18336724,18880269,19433530,19996473,20569117,21151640,21743967,22346641,22961253,23589887,24234088,24894380,25570540,26262368
-Madagascar,MDG,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,17787981809.7922,19371452168.417,19187662545.1756,20664344516.4182,22343187384.259,24206345297.2602,26591230363.6127,29109530044.1563,28001757650.6127,28403846785.2973,29269019629.4989,30234305623.1348,31459323764.7446,33242122239.6743,34267948692.8519,36003225418.3941,38669145892.0113,41502374020.3303
-Malawi,MWI,"Population, total",SP.POP.TOTL,11148758,11432000,12000181,12301838,12625952,12973699,13341806,13727890,14128155,14539612,14962112,15396005,15839269,16289540,16745303,17205289,17670260,18143315
-Malawi,MWI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,7675711837.3976,7465557035.92044,8358043220.1841,9045906269.5679,9655011699.94683,10429830333.778,11794246147.5378,12948987598.5105,14059005920.6046,15107228006.2224,16190322193.7146,16674059803.5724,17724330143.8248,19143990258.0733,19877664205.5886,21000772834.135,22350074266.6398,23679251738.4444
-Malaysia,MYS,"Population, total",SP.POP.TOTL,23194257,23709119,24698819,25190652,25690611,26201961,26720370,27236006,27735040,28208035,28650955,29068159,29468872,29866559,30270962,30684804,31105028,31528585
-Malaysia,MYS,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,276511247597.855,286648241786.312,337396365587.509,370897824009.659,406000115629.869,448608785015.053,493689284107.513,522815482707.643,524162388641.605,562742398692.932,609984394638.503,646837213390.49,691621282361.017,747231627999.146,798092433362.512,840564720127.579,908209029994.026,964892167330.823
-Maldives,MDV,"Population, total",SP.POP.TOTL,279398,286306,302683,311265,319608,327487,335169,343452,353398,365734,380495,397237,415593,435015,454915,475513,496402,515696
-Maldives,MDV,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,2074724089.74808,2079421190.15457,2610105860.57456,2859849366.12669,2564550517.33916,3334540929.21807,3217434085.71816,3701329488.13027,3520151707.00356,3771091529.8934,4246953323.89474,4495964487.39301,4820801680.31486,5357002395.3425,5663753679.97491,6149402399.9939,6681140567.74926,7280531637.53956
-Mali,MLI,"Population, total",SP.POP.TOTL,10946445,11271600,11982695,12369070,12775516,13203378,13651464,14113577,14581429,15049353,15514591,15979499,16449864,16934220,17438778,17965429,18512394,19077690
-Mali,MLI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,12637675755.258,14332743018.0601,16928889171.3409,17666936572.9257,19413471971.7199,20842129194.293,22384188440.6376,24012436341.3596,25317355585.235,26558297998.0927,28098046145.1435,28258107010.4343,29651213111.356,32536272274.1027,34996054071.3443,37271364470.4048,40235949676.2657,42628405044.2918
-Malta,MLT,"Population, total",SP.POP.TOTL,390087,393028,398582,401268,403834,405308,406724,409379,412477,414508,416268,420028,425967,434558,445053,455356,467999,483530
-Malta,MLT,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,7416730354.72626,7781719999.27636,8300802305.3859,8567727845.80559,8691934651.95767,9072505167.46522,9806526578.42836,10452871326.1673,10046638184.757,10922703876.2926,11518038385.1712,11865075995.8909,12660912764.5358,13938958432.6615,15241676974.8232,16000129601.1775,17642646378.4658,..
-Marshall Islands,MHL,"Population, total",SP.POP.TOTL,50753,51422,53456,54476,55258,55767,56051,56174,56250,56366,56531,56717,56938,57179,57439,57735,58058,58413
-Marshall Islands,MHL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,159372263.682023,171375491.967875,176345019.337342,182160868.230212,194870432.571348,201190921.182381,213594156.504861,212486483.387177,209564508.968457,215837694.867121,224872243.117792,224896705.32908,242465313.505051,261405395.533568,286814875.242065,285170011.31744,297455656.308723,309152175.291262
-Mauritania,MRT,"Population, total",SP.POP.TOTL,2630219,2702400,2857148,2939247,3024194,3111906,3202517,3296238,3393409,3494195,3598648,3706554,3817494,3930896,4046301,4163534,4282574,4403319
-Mauritania,MRT,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,5994593548.77092,6029468935.30645,7077234761.4822,7677067588.67896,8574548788.36373,9950092445.36214,10573370033.5039,11033118866.5592,11221261166.6747,11541482862.3094,12159105951.5901,13023658634.3721,14091672296.703,14961212131.0017,15487710279.0572,16180049720.71,17139712310.7015,18338304392.2712
-Mauritius,MUS,"Population, total",SP.POP.TOTL,1186873,1196287,1213370,1221003,1228254,1233996,1239630,1244121,1247429,1250400,1252404,1255882,1258653,1260934,1262605,1263473,1264613,1265303
-Mauritius,MUS,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,10617515621.3045,11286709556.8228,12468928483.4984,13399035861.7567,14074783217.0636,15336823736.3582,16984504942.1612,18065054709.5941,18593829589.8139,19344371280.1605,20348324460.3273,22656735233.8577,24779578454.9634,26210178363.5307,27617418147.7797,28902816684.7503,31103660910.6077,32941433788.2864
-Mexico,MEX,"Population, total",SP.POP.TOTL,98899845,100298153,103081020,104514932,106005203,107560153,109170502,110815271,112463887,114092963,115695473,117274155,118827161,120355128,121858258,123333376,124777324,126190788
-Mexico,MEX,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1073235252932.68,1095604356342.78,1162592493945.24,1244336610909.76,1313762682229.57,1462385582249.25,1533815706563.18,1630569413184.12,1609779367702.41,1720422018790.8,1880967839882.46,1973881601912.17,2004429620594.39,2121554563909.1,2173135864192.38,2256695695490.18,2367563358669.2,2453499545623.9
-"Micronesia, Fed. Sts.",FSM,"Population, total",SP.POP.TOTL,107402,107173,106901,106625,106129,105371,104444,103543,102975,102911,103450,104506,105926,107446,108895,110215,111459,112640
-"Micronesia, Fed. Sts.",FSM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,273865306.482655,283292165.399691,298708944.111178,301010703.888955,318282975.271613,327591429.216848,331921205.890066,326769944.477178,343299138.252052,346621432.331691,363992378.548973,369353303.037803,372915897.687879,371488284.306122,433571286.999935,432601542.08109,453681439.751159,468875049.059012
-Moldova,MDA,"Population, total",SP.POP.TOTL,3639592,3631462,3612874,3603945,3595187,3585209,3576910,3570108,3565604,3562045,3559986,3559519,3558566,3556397,3554108,3551954,3549196,3545883
-Moldova,MDA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,8273919638.3622,9394464931.84608,11730953414.5939,13069543152.5556,14366282349.6957,15479698584.2789,16012376377.5953,17676694162.009,16105054622.6774,17716757058.5917,19070103890.518,19762030868.5765,21950243919.4287,23318794667.5221,22873699879.5217,24105440442.0759,25744713174.265,27239259406.8586
-Monaco,MCO,"Population, total",SP.POP.TOTL,32147,32470,33153,33500,33843,34190,34525,34872,35226,35612,36024,36460,36901,37322,37718,38070,38392,38682
-Monaco,MCO,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-Mongolia,MNG,"Population, total",SP.POP.TOTL,2397418,2419588,2468762,2496391,2526424,2558856,2593820,2631898,2673796,2719896,2770362,2824699,2881792,2940108,2998439,3056359,3113779,3170208
-Mongolia,MNG,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,8840043328.25003,9328613613.55979,10756146158.1435,12239786618.9279,13332724148.9083,15033700186.4011,16838009172.1979,18543231594.3704,18222064352.5225,18830827982.8334,22505271782.4175,25907966118.9676,30095521824.0444,32212668337.3446,33305435938.7394,34050986842.8843,34214520546.7214,38730283154.5754
-Montenegro,MNE,"Population, total",SP.POP.TOTL,604950,607389,612267,613353,614261,615025,615875,616969,618294,619428,620079,620601,621207,621810,622159,622303,622373,622345
-Montenegro,MNE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3814904119.20082,4319603258.67465,4750999723.89398,5053918086.19129,5163052137.93945,6533002239.64013,7755118395.73308,8650203872.02627,8067633322.45214,8387152628.06267,9046278024.32469,8749518176.35713,9417544509.54189,9684825043.10986,10387006821.5362,11215578351.7613,12291909178.9014,..
-Morocco,MAR,"Population, total",SP.POP.TOTL,28793679,29126330,29782884,30115214,30455561,30804683,31163673,31536811,31929087,32343389,32781850,33241898,33715693,34192347,34663603,35126296,35581294,36029138
-Morocco,MAR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,102010825249.01,112002444659.838,127309722355.802,137522691076.474,147242457886.876,163004374672.501,173633392959.661,187768902967.097,194922130959.992,204722476904.136,219272498095.561,229426454360.794,245673549341.505,254452822995.977,270023803663.464,276208170402.192,292035730876.82,307917644907.411
-Mozambique,MOZ,"Population, total",SP.POP.TOTL,17711927,18221888,19331100,19910552,20493925,21080110,21673316,22276596,22894710,23531574,24187487,24862648,25560725,26286163,27042002,27829942,28649007,29495962
-Mozambique,MOZ,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,7764008154.73268,8860708145.43318,10821137443.1884,11804290903.8941,13195412756.3488,14468111876.9882,16187632861.3213,17774921652.0909,19662755747.8563,21043557560.5127,23467220531.9072,25886687423.7055,28258643826.8721,30680589573.1927,32780627481.5208,34257053759.336,35938970153.8062,38325739237.233
-Myanmar,MMR,"Population, total",SP.POP.TOTL,46719701,47225120,48148902,48564484,48949924,49301050,49621475,49929642,50250367,50600818,50990615,51413698,51852451,52280807,52680726,53045226,53382581,53708395
-Myanmar,MMR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,47904754328.5407,54474563913.5047,71911041827.1102,83873469554.4196,98204988183.5936,114430752945.893,131611960353.816,147923721579.978,164788848094.366,182777066086.485,197034773408.762,207016903785.437,230347100703.954,251222632100.564,273608118647.366,295225416037.595,319689147106.347,348267777660.622
-Namibia,NAM,"Population, total",SP.POP.TOTL,1794571,1823672,1879117,1907745,1938320,1971317,2006514,2043394,2081044,2118874,2156701,2194784,2233510,2273430,2314904,2358041,2402603,2448255
-Namibia,NAM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,9599951926.47433,9846610950.33889,11701067394.1324,12987329785.4002,13351328384.0319,14843641575.3014,15580496587.9276,16341872671.5051,16472660655.5543,17319706741.9298,18802155661.2605,19861929395.2274,22085379921.4938,24045365505.8596,25717732943.7318,25935418136.5738,25946708005.2242,26743217645.4258
-Nauru,NRU,"Population, total",SP.POP.TOTL,10337,10215,9994,9902,9849,9828,9842,9891,9939,10005,10057,10279,10821,11853,12475,13049,12876,12704
-Nauru,NRU,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,52318624.1842833,55355429.413001,66412206.8549804,75399514.6247926,82081790.6299374,99253045.105455,138270035.31654,187764643.676273,202552414.124231,228782945.422036,245712728.953084,247430858.537037
-Nepal,NPL,"Population, total",SP.POP.TOTL,23941110,24347106,25080872,25419344,25744500,26066693,26382581,26666576,26883535,27013212,27041437,26989862,26917906,26906926,27015031,27261131,27627124,28087871
-Nepal,NPL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,29193952088.1698,31272964179.003,33499171097.0346,35948289241.3339,38585247704.4497,41287192744.9373,43957278828.3509,47525900164.5571,50165383327.5956,52971111624.854,55810345453.6615,59749932067.4397,63287990355.454,68954731000.9289,71965662508.5457,73110080061.9841,80123183958.0798,86766055438.168
-Netherlands,NLD,"Population, total",SP.POP.TOTL,15925513,16046180,16225302,16281779,16319868,16346101,16381696,16445593,16530388,16615394,16693074,16754962,16804432,16865008,16939923,17030314,17131296,17231017
-Netherlands,NLD,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,516730737050.876,530132960173.846,559362955719.681,585811906174.302,605553877381.32,674915016939.327,718773191673.703,741916192385.952,729474044118.514,750559058860.995,788764031504.728,805602323121.561,838682680044.001,828263670286.029,852766433552.616,861382557874.013,936142168836.245,988728471393.01
-New Caledonia,NCL,"Population, total",SP.POP.TOTL,213230,217324,225296,228750,232250,235750,239250,242750,245950,249750,254350,259000,263650,268050,272400,276550,280350,284060
-New Caledonia,NCL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-New Zealand,NZL,"Population, total",SP.POP.TOTL,3857700,3880500,4027200,4087500,4133900,4184600,4223800,4259800,4302600,4350700,4384000,4408100,4442100,4509700,4595700,4693200,4793900,4885500
-New Zealand,NZL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,78307273345.7529,82896112656.6419,91935081407.6595,96741486060.1028,99289747947.8827,108362075586.43,115275210779.586,117980470098.457,126673091579.436,129216413916.087,137009721215.547,139353582322.271,154545145745.547,161245340209.477,166416913074.36,177711160689.378,186322763044.727,196617826030.157
-Nicaragua,NIC,"Population, total",SP.POP.TOTL,5069302,5145366,5292118,5364935,5438690,5513763,5590055,5667432,5745526,5824065,5903039,5982526,6062454,6142733,6223240,6303974,6384855,6465513
-Nicaragua,NIC,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,13234062434.0928,13843145732.2614,14917486850.825,16201452319.1247,17591219952.4595,18717691406.3282,20312150080.2265,21424134343.2137,20774682545.1085,21997130354.4595,23889868976.4057,25877921327.3473,27631179742.4444,29604210288.398,31332291498.2149,33127839244.8432,35356006181.0361,34871068838.5647
-Niger,NER,"Population, total",SP.POP.TOTL,11331557,11751365,12647984,13125916,13624467,14143971,14685399,15250908,15843133,16464025,17114761,17795191,18504255,19240157,20001663,20788838,21602472,22442948
-Niger,NER,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,6744389137.37875,7392613882.43327,8280292530.24133,8557754003.36708,9234685029.63312,10097541732.6818,10690394636.2713,11902316049.3128,11872418864.4991,12999311944.578,13570109302.3365,15289470053.825,16300688426.7988,17963106181.4506,18889341929.1776,20027049503.986,21401512143.8106,23023299169.8065
-Nigeria,NGA,"Population, total",SP.POP.TOTL,122283850,125394046,131900631,135320422,138865016,142538308,146339977,150269623,154324933,158503197,162805071,167228767,171765769,176404902,181137448,185960289,190873311,195874740
-Nigeria,NGA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,272237365304.707,305408365488.648,383889979119.231,431032971660.202,471233785317.813,546242686740.069,583662704421.514,633952854814.733,686562919481.372,747157588327.684,801705676642.964,858362337374.682,930244490066.291,1024812945686.1,1071013376452.98,1070483907138.51,1089408631299.67,1117357615381.16
-North Macedonia,MKD,"Population, total",SP.POP.TOTL,2034819,2042842,2053426,2057048,2060273,2063131,2065426,2067313,2069039,2070741,2072487,2074278,2076067,2077775,2079328,2080745,2081996,2082958
-North Macedonia,MKD,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,12236063852.3798,12225504142.035,13190902919.4165,14473693449.0636,15708191534.0353,17640679622.7456,18199312528.9794,21277065284.6007,22422006087.6806,23019910314.3112,23634676433.2941,24026918587.3653,25647335799.7619,27256445382.969,27852689323.7841,29596869469.0366,30587985821.7142,..
-Northern Mariana Islands,MNP,"Population, total",SP.POP.TOTL,57453,58321,57947,57246,56542,55882,55219,54625,54193,53971,54012,54311,54784,55305,55780,56188,56562,56882
-Northern Mariana Islands,MNP,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-Norway,NOR,"Population, total",SP.POP.TOTL,4490967,4513751,4564855,4591910,4623291,4660677,4709153,4768212,4828726,4889252,4953088,5018573,5079623,5137232,5188607,5234519,5276968,5314336
-Norway,NOR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,163770504415.98,170709729197.097,176973690998.335,195461164599.457,223283670197.81,252226786011.118,262412431409.036,293138235484.347,269175461487.219,286431243846.263,310701643205.307,331152578513.979,344244308199.849,349842613934.341,327034783599.997,317190195930.174,341753036923.303,352806336064.975
-Oman,OMN,"Population, total",SP.POP.TOTL,2267973,2294962,2386166,2445517,2511251,2580758,2657158,2750963,2876186,3041434,3251108,3498029,3764805,4027260,4267348,4479219,4665935,4829483
-Oman,OMN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,76283995660.358,81639141689.4553,81915434447.1139,86072244892.9401,89183913382.4279,89919769043.441,105477843075.077,113743500323.404,119697824073.202,126815582623.35,128052701201.132,143101833937.005,155059396184.617,159802582988.165,175204865563.217,186721282734.978,189867271106.12,199129993013.676
-Pakistan,PAK,"Population, total",SP.POP.TOTL,142343578,145978402,153093373,156664697,160304008,164022627,167808105,171648986,175525609,179424641,183340592,187281475,191262919,195306825,199426964,203627284,207896686,212215030
-Pakistan,PAK,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,380414596368.088,396302237157.834,463599143835.025,506665049113.847,561744793404.374,613026119699.131,659148244378.884,685135435873.558,714498766609.023,742921165303.42,784383239309.486,832836990634.807,884900125558.411,948146857713.489,1007691153841.51,1075305111567.42,1150857602740.17,1238655718492.63
-Palau,PLW,"Population, total",SP.POP.TOTL,19105,19386,19809,19867,19781,19540,19158,18704,18285,17955,17745,17640,17606,17626,17665,17725,17808,17907
-Palau,PLW,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,173413557.025324,188508988.13951,199579454.576896,218349988.939459,242651950.848121,238875786.456385,248185736.216059,234956338.382056,236297200.545431,238010632.943729,257474030.810622,267939252.910452,259794738.458722,280628664.342167,302761816.939988,312943012.969342,313253091.031982,337001831.266009
-Panama,PAN,"Population, total",SP.POP.TOTL,3030328,3089648,3209048,3269356,3330217,3391666,3453675,3516204,3579215,3642687,3706483,3770624,3835437,3901315,3968487,4037078,4106771,4176873
-Panama,PAN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,24617236333.936,25167687790.4057,27803738205.8466,30218367611.6983,33275968165.8457,37285308381.053,42382458725.1339,47800780271.9796,48550680173.3423,50664513340.7021,59623957560.3279,66256672071.4167,71406876954.0465,74409207116.9117,79521692323.7662,84328335987.2376,91132004593.2409,98209495824.7493
-Papua New Guinea,PNG,"Population, total",SP.POP.TOTL,5847586,5974629,6223377,6354245,6494903,6646895,6808514,6976201,7144776,7310507,7472200,7631002,7788379,7946731,8107775,8271760,8438029,8606316
-Papua New Guinea,PNG,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,11415714885.1077,11417153953.2986,11603412689.3502,12533849227.3034,14111808452.9516,14433547778.0271,16858638313.14,17509587093.666,18874284567.7519,20433885499.141,21528235915.6271,22921528062.1084,22885506360.5583,29131887801.4752,32371739387.867,34024536289.4017,34947446232.5309,35686201002.1286
-Paraguay,PRY,"Population, total",SP.POP.TOTL,5323201,5428444,5632983,5730549,5824096,5913209,5998427,6081296,6163972,6248020,6333976,6421512,6510276,6599526,6688746,6777872,6867062,6956071
-Paraguay,PRY,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,29566734715.991,30548438942.8955,31465899563.8046,34257928507.6827,36296493301.7347,40524409849.0054,45944518023.2786,50423143771.835,50502917058.4348,56781915635.9032,61234461362.9057,61551132363.3546,68120922210.6357,73054362969.0075,76017250450.8179,79908793399.4092,86329284684.2607,91673690186.5964
-Peru,PER,"Population, total",SP.POP.TOTL,26459944,26799285,27372226,27624213,27866145,28102056,28333052,28562317,28792655,29027674,29264318,29506788,29773987,30090359,30470734,30926032,31444297,31989256
-Peru,PER,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,132311065806.754,136898967225.551,153154594809.028,161871902838.188,175238918143.11,190272895163.564,212837005886.272,238926210073.83,245136398715.501,265434336951.343,288011099798.528,315202339931.674,343655000797.249,360875207358.153,380941499360.719,397350638004.847,413067177906.791,441729721115.06
-Philippines,PHL,"Population, total",SP.POP.TOTL,77991755,79672873,83051971,84710542,86326250,87888675,89405482,90901965,92414158,93966780,95570047,97212638,98871552,100513138,102113212,103663927,105173264,106651922
-Philippines,PHL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,307266905874.579,325644530880.963,366464266539.535,400660232558.19,435530290054.878,469124496785.035,510438160400.225,543507816982.147,572567297191.892,619360884922.166,651365770270.708,712508653943.462,782590070514.536,844227037625.567,903327817907.275,971348273329.357,1054684160650.47,1143475479908.14
-Poland,POL,"Population, total",SP.POP.TOTL,38258629,38248076,38204570,38182222,38165445,38141267,38120560,38125759,38151603,38042794,38063255,38063164,38040196,38011735,37986412,37970087,37974826,37978548
-Poland,POL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,405837268783.226,423263782652.58,463748003006.976,493170877112.912,521089422492.564,565363690053.952,618483086700.698,685875316122.792,712241133620.83,772076263228.14,838338447805.736,873280227684.715,908791205672.954,937524545282.722,983075896937.794,1011543377920.57,1089328331985.86,1181683639597.3
-Portugal,PRT,"Population, total",SP.POP.TOTL,10289898,10362722,10458821,10483861,10503330,10522288,10542964,10558177,10568247,10573100,10557560,10514844,10457295,10401062,10358076,10325452,10300300,10281762
-Portugal,PRT,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,190642521300.286,198431114549.93,215235219375.429,221775640807.786,235163261619.338,251189099608.159,262377471649.97,270235611838.754,269489654831.545,279021597568.569,277286324614.859,271419092894.261,287821374657.946,293878003275.358,299027088356.504,313124513364.535,327996402375.673,341311554070.018
-Puerto Rico,PRI,"Population, total",SP.POP.TOTL,3810605,3818774,3826095,3826878,3821362,3805214,3782995,3760866,3740410,3721525,3678732,3634488,3593077,3534874,3473166,3406495,3325001,3195153
-Puerto Rico,PRI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,63110527870.4644,65008338839.8526,67711280858.8863,76894233182.4255,78743928423.7732,81097374980.9148,84108128240.9035,83198037782.9508,81018565089.8033,80818766544.2656,82384682729.5865,85972407212.1532,87550251997.3456,87959882648.7313,88195802406.3875,87703351105.7796,87085696075.7118,84860222430.7098
-Qatar,QAT,"Population, total",SP.POP.TOTL,592468,615012,681788,753334,865416,1022711,1218434,1436665,1654950,1856327,2035871,2196074,2336574,2459198,2565710,2654374,2724724,2781677
-Qatar,QAT,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,47029745913.7751,52030807570.4577,61247174618.6688,70942487715.4779,73750406204.5297,104057603622.712,126164839679.596,150461039511.636,162958609476.022,195585487769.004,232525547675.419,251919641445.884,271293954342.382,289563538552.867,310688350704.823,325612488601.927,338672704408.003,345284638402.724
-Romania,ROU,"Population, total",SP.POP.TOTL,22442971,22131970,21574326,21451748,21319685,21193760,20882982,20537875,20367487,20246871,20147528,20058035,19983693,19908979,19815481,19702332,19587491,19473936
-Romania,ROU,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,130343921116.754,143428551191.977,159111162645.822,184591741299.765,198699851308.829,236507598260.514,276575612214.484,336010559834.82,333675769775.451,338278063140.017,354760744636.693,373162401068.813,387062772540.858,405392968242.733,418649937601.288,457928719559.42,508054887689.337,..
-Russian Federation,RUS,"Population, total",SP.POP.TOTL,146596557,145976083,144648257,144067054,143518523,143049528,142805088,142742350,142785342,142849449,142960868,143201676,143506911,143819666,144096870,144342396,144496740,144478050
-Russian Federation,RUS,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,974629347999.371,1059732532867.18,1297685806670.6,1441505984835.48,1655585941894.52,2071121854636.68,2324721058626.26,2797649362802.82,2678612246973.08,2836588884248.56,3373072144878.87,3579360949693.82,3635166063636.87,3637938277083.81,3425169707911.52,3433083740516.52,3682841546246.9,3886717268560.01
-Rwanda,RWA,"Population, total",SP.POP.TOTL,7933681,8231156,8557161,8680524,8840215,9043337,9273757,9524534,9782770,10039338,10293331,10549678,10811543,11083635,11369071,11668818,11980937,12301939
-Rwanda,RWA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,5028800937.88533,5550298210.85677,6626255304.95316,7313992993.5446,8291933560.4003,9337794176.11331,10377191933.6109,11727112538.1117,12559007315.0086,13630337776.9131,14979823165.0363,16538899546.978,17537385277.7867,19144211206.6161,21025790743.5166,22509785473.3452,24399374004.2019,27136999372.655
-Samoa,WSM,"Population, total",SP.POP.TOTL,174454,175392,177484,178590,179727,180876,182046,183263,184556,185949,187469,189088,190717,192221,193513,194535,195352,196130
-Samoa,WSM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,687891532.523661,742703931.816799,791412817.828341,836255353.570398,917622569.975988,943859412.455098,918834268.141881,954480504.334988,1023455876.63548,1051884135.26276,1048945739.50976,1080511751.8989,1127517805.08547,1217049046.39002,1262918752.22524,1298464125.90263
-San Marino,SMR,"Population, total",SP.POP.TOTL,27462,27812,28562,28940,29324,29700,30063,30434,30816,31229,31661,32105,32553,32948,33272,33504,33671,33785
-San Marino,SMR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-Sao Tome and Principe,STP,"Population, total",SP.POP.TOTL,142262,144755,150415,153737,157472,161681,166300,171120,175876,180371,184524,188404,192087,195727,199432,203227,207089,211028
-Sao Tome and Principe,STP,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,222725685.505551,255842515.580943,272139585.118446,302242117.540873,354597598.259078,379196214.738748,405880831.80304,418424162.651445,453578787.233489,483633760.429585,497239655.961804,544987670.177864,596234707.196571,613460754.676843,649919979.161183,684002632.49163,724355990.336117
-Saudi Arabia,SAU,"Population, total",SP.POP.TOTL,20663843,21202642,22456649,23132682,23816183,24498310,25184597,25888541,26630303,27421461,28267685,29155187,30052518,30916994,31717667,32442572,33099147,33699947
-Saudi Arabia,SAU,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,715027078085.935,725401346914.642,806419345955.473,896900151496.543,977955856483.062,1037607231515.14,1090750615872.03,1184084855036.63,1171416111047.43,1236491758373.8,1390008608968.98,1494069835614.45,1566298505766.78,1660211841410.18,1754667365922.02,1799929798354.06,1804815255232.94,1875395761287.99
-Senegal,SEN,"Population, total",SP.POP.TOTL,9797734,10036104,10541467,10810083,11090116,11382268,11687080,12004701,12335084,12678148,13033809,13401991,13782420,14174731,14578459,14993528,15419381,15854360
-Senegal,SEN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,18562402626.4463,19892716322.0909,22141595365.7388,24120438459.5496,26289892248.3954,27829730344.4734,29994189755.8527,31892890780.9432,32557745169.4623,34151872959.6453,35141864992.7798,37604256123.1945,39339330785.1955,42644878052.2165,45707326046.7718,48935774935.213,53309901826.6201,58141537237.0997
-Serbia,SRB,"Population, total",SP.POP.TOTL,7516346,7503433,7480591,7463157,7440769,7411569,7381579,7350222,7320807,7291436,7234099,7199077,7164132,7130576,7095383,7058322,7020858,6982084
-Serbia,SRB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,43038071972.5298,46076898125.2704,53500701805.4094,59663244715.1845,67521965480.3202,74624622026.0803,81286836385.3215,90438303309.8633,90355638492.0918,91320875216.673,97317351470.9349,97051140117.2252,100741107826.015,100573330094.5,100963137996.871,104148505796.327,107809144178.294,..
-Seychelles,SYC,"Population, total",SP.POP.TOTL,81131,81202,82781,82475,82858,84600,85033,86956,87298,89770,87441,88303,89949,91359,93419,94677,95843,96762
-Seychelles,SYC,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1130040472.51602,1156473295.75382,1101211704.80475,1183052056.50651,1329012962.31028,1497299651.4751,1563629594.30702,1533562018.71259,1561026670.28986,1690587174.47586,1835493986.51847,1920513227.11824,2073252787.60011,2185436714.50922,2330151800.08164,2419602232.03578,2576139447.37754,2812831725.39246
-Sierra Leone,SLE,"Population, total",SP.POP.TOTL,4584571,4754072,5201070,5433991,5645624,5829237,5989633,6133603,6272734,6415634,6563240,6712581,6863980,7017144,7171914,7328838,7488431,7650154
-Sierra Leone,SLE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3212015673.61562,3093804179.48975,4448301801.64614,4856126881.89251,5228361116.37041,5632574708.82399,6688886833.14579,7384809159.02604,7736233095.55139,7675560429.50167,8124629823.32337,9983644365.54614,11816553927.3429,12357594121.6436,10021603553.8153,9711990378.56826,11225289124.7576,11649248742.0068
-Singapore,SGP,"Population, total",SP.POP.TOTL,4027887,4138012,4114826,4166664,4265762,4401365,4588599,4839396,4987573,5076732,5183688,5312437,5399162,5469724,5535002,5607283,5612253,5638676
-Singapore,SGP,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,166786994835.372,168525749847.204,185622195444.804,202045222805.602,224600922762.136,260111505022.112,291441235894.44,299403373313.377,297320545558.469,359395846514.951,380595114593.581,400912679585.028,423387410598.2,457261400731.951,459041115688.593,477097148685.861,504191316889.121,532874932442.445
-Sint Maarten (Dutch part),SXM,"Population, total",SP.POP.TOTL,30519,30600,31472,32488,33011,33441,33811,33964,34238,34056,33435,34640,36607,37685,38825,39969,40574,40654
-Sint Maarten (Dutch part),SXM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,1050471795.71762,1095375487.5315,1169642633.22038,1214932496.3034,1265517172.41925,1281607844.62052,1295959821.65772,1331696352.27259,..,..
-Slovak Republic,SVK,"Population, total",SP.POP.TOTL,5388720,5378867,5373374,5372280,5372807,5373054,5374622,5379233,5386406,5391428,5398384,5407579,5413393,5418649,5423801,5430798,5439232,5447011
-Slovak Republic,SVK,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,60878240594.602,66560523575.0346,72182735695.5029,78339548639.5647,86800343536.12,98320841108.7014,110380551616.639,125077405429.544,123364618193.176,131564298602.343,134396744120.836,141334374541.664,149610025166.76,154769445337.157,156995390879.843,164646665730.209,172573528282.663,183019215742.057
-Slovenia,SVN,"Population, total",SP.POP.TOTL,1988925,1992060,1995733,1997012,2000474,2006868,2018122,2021316,2039669,2048583,2052843,2057159,2059953,2061980,2063531,2065042,2066388,2067372
-Slovenia,SVN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,35811112904.9107,37726264664.393,41725666116.1914,44847489163.8984,47449318593.426,51051764902.5015,54429002733.8643,58308080449.4871,55108934487.4501,56066453379.6483,58323557222.3024,58528575642.7645,60556023217.8819,63021879513.8337,63261512455.9346,66722547671.2003,73355374944.8381,78665817256.0743
-Solomon Islands,SLB,"Population, total",SP.POP.TOTL,412660,423944,447017,458539,469918,481078,492132,503360,515181,527861,541521,556064,571335,587079,603118,619437,636038,652858
-Solomon Islands,SLB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,597042722.094692,564444259.10272,599190484.836551,653597296.222304,706272880.009252,782325074.041119,793884366.73137,788273460.495396,648372857.135353,705271648.238904,806095347.634751,1043039413.06714,1162171492.47891,1220489336.37122,1309260650.02284,1328179237.93601,1378229349.15824,1488554995.92136
-Somalia,SOM,"Population, total",SP.POP.TOTL,8872254,9186725,9815412,10130243,10446863,10763905,11080121,11397188,11717692,12043883,12376302,12715510,13063706,13423576,13797201,14185613,14589119,15008154
-Somalia,SOM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-South Africa,ZAF,"Population, total",SP.POP.TOTL,44967708,45571274,46719196,47291610,47880601,48489459,49119759,49779471,50477011,51216964,52004172,52834005,53689236,54545991,55386367,56203654,57000451,57779622
-South Africa,ZAF,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,339038714212.139,353103767410.159,391835826058.322,423926533545.353,460054016648.078,500671933036.669,534107180375.945,562707576285.645,563340719609.082,587871679526.887,617169274162.823,641889866600.465,670031361682.697,694979468341.252,712795969722.202,722495117256.704,744150305035.439,764274746876.32
-South Sudan,SSD,"Population, total",SP.POP.TOTL,6199394,6447793,6935676,7213351,7535932,7907406,8315139,8736939,9142259,9508364,9830698,10113647,10355036,10554883,10715658,10832512,10910759,10975920
-South Sudan,SSD,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,23408770628.8712,19134728365.1381,21256663094.279,21581062744.0566,20027566142.8048,16758778832.8953,..,..
-Spain,ESP,"Population, total",SP.POP.TOTL,40567864,40850412,42187645,42921895,43653155,44397319,45226803,45954106,46362946,46576897,46742697,46773055,46620045,46480882,46444832,46483569,46593236,46723749
-Spain,ESP,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,870339079278.909,926012841387.855,1048509023741.43,1113376833108.53,1191810871361.96,1344294825594.73,1438612883601.28,1496522755014.04,1474196731395.77,1466033546910.38,1472969169435.77,1485648425269.36,1512101363366.92,1561678787485.34,1622470138226.38,1708196861360.75,1816892534659.95,1908425782274.45
-Sri Lanka,LKA,"Population, total",SP.POP.TOTL,18777601,18911730,19224037,19387153,19544988,19695972,19842044,19983984,20123508,20261737,20398670,20425000,20585000,20778000,20970000,21203000,21444000,21670000
-Sri Lanka,LKA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,81231731001.7837,81845586893.3426,94108861425.2964,101818045285.657,111279704785.342,123250682051.474,135553322946.861,144502858287.468,152652820998.826,166922138704.492,184899504319.22,204066421101.056,213423870287.922,228432858317.209,241865358317.728,255072385398.301,268906141542.722,283553944760.855
-St. Kitts and Nevis,KNA,"Population, total",SP.POP.TOTL,44074,44599,45746,46324,46857,47339,47778,48185,48599,49016,49447,49887,50331,50774,51203,51625,52045,52441
-St. Kitts and Nevis,KNA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,717605715.282215,771064068.325787,774670017.299226,842871790.597918,966440760.648414,1037411439.47025,1071970364.17649,1163375693.99179,1131377359.19286,1135019924.02587,1181669934.0039,1204508205.08158,1309285362.98676,1333478713.24897,1383406059.09471,1443281927.82908,1505168355.96279,1579326417.0023
-St. Lucia,LCA,"Population, total",SP.POP.TOTL,156729,158179,160530,161816,163417,165381,167639,170011,172221,174085,175544,176646,177513,178296,179126,180024,180955,181889
-St. Lucia,LCA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1180310583.89127,1146421989.88097,1245245054.46002,1353995039.62696,1392150585.59261,1676299704.61545,1747428141.79681,1864242209.71027,1891417795.40332,1933271263.94371,2085626540.52268,2093137479.7437,2117457120.35477,2032294137.71285,2004809882.1399,2165554802.31558,2309176736.07982,2358987376.63006
-St. Martin (French part),MAF,"Population, total",SP.POP.TOTL,28935,29853,32053,33186,34248,35237,36137,36885,37377,37582,37446,37009,36453,36015,35858,36065,36560,37264
-St. Martin (French part),MAF,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-St. Vincent and the Grenadines,VCT,"Population, total",SP.POP.TOTL,107784,107896,108326,108512,108614,108603,108518,108393,108287,108255,108316,108435,108622,108861,109148,109459,109827,110210
-St. Vincent and the Grenadines,VCT,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,617277633.21013,648367408.749169,759215129.009289,805897389.245346,854319319.480292,959550903.434341,978148616.500377,1064662788.54208,1064995229.22257,1042604944.47307,1058714670.73699,1109137452.21251,1125774152.2779,1211823306.35394,1340166695.55457,1339804965.08149,1369323786.76058,1456393997.60871
-Sudan,SDN,"Population, total",SP.POP.TOTL,27275015,27971082,29460519,30214193,30949516,31661823,32360621,33060837,33783788,34545013,35349681,36193783,37072550,37977655,38902950,39847440,40813396,41801533
-Sudan,SDN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,58204598494.1571,62717111892.7847,73440248976.7778,78472120960.0788,87406101784.5942,100377799364.389,113954521966.819,125473615444.848,129516478874.195,135121347373.573,140669381805.509,137689646920.219,99543400929.5034,150880174180.657,161019855428.19,169817606644.374,182050561921.82,184812195498.885
-Suriname,SUR,"Population, total",SP.POP.TOTL,470949,476579,487942,493679,499464,505295,511181,517123,523111,529131,535179,541245,547291,553273,559143,564888,570496,575991
-Suriname,SUR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3487018727.62043,3411968012.55991,4251609002.36723,4716785630.40814,5187159003.676,5667495816.22412,6240562581.99931,6670094091.66944,6892514352.09145,7149055549.66979,7445199966.48529,7962873754.58475,8454454231.11553,8743490839.39209,8627571864.68756,7801864055.28579,7285079482.71772,7732438168.09743
-Sweden,SWE,"Population, total",SP.POP.TOTL,8872109,8895960,8958229,8993531,9029572,9080505,9148092,9219637,9298515,9378126,9449213,9519374,9600379,9696110,9799186,9923085,10057698,10183175
-Sweden,SWE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,260292854412.149,264225381059.931,287088129924.05,303595516995.513,311259347061.803,349055863199.825,382859381220.805,399729535962.354,377875126472.825,401175334832.15,422540394991.34,436106779523.148,448963505391.745,461209989858.064,479473809784.176,490412896873.017,524923424628.347,549781346877.935
-Switzerland,CHE,"Population, total",SP.POP.TOTL,7184250,7229854,7339001,7389625,7437115,7483934,7551117,7647675,7743831,7824909,7912398,7996861,8089346,8188649,8282396,8373338,8451840,8516543
-Switzerland,CHE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,273950109496.662,276465060981.54,294963563483.934,307426397098.295,327059401274.082,362758817325.499,377924536160.99,375881421641.219,408518497645.874,439637085444.547,449676395959.064,472965119580.052,496497257704.326,509076701038.649,542121799886.034,541546466635.944,552518795011.746,589517252051.173
-Syrian Arab Republic,SYR,"Population, total",SP.POP.TOTL,16410848,16766561,17415214,17827825,18361176,19059258,19878254,20664038,21205873,21362529,21082966,20442541,19584274,18715672,17997408,17453933,17068002,16906283
-Syrian Arab Republic,SYR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-Tajikistan,TJK,"Population, total",SP.POP.TOTL,6216341,6318513,6541547,6662389,6789321,6922587,7062672,7209930,7364753,7527394,7697510,7874835,8059769,8252833,8454028,8663579,8880268,9100837
-Tajikistan,TJK,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,5616711696.84365,6257582059.0158,7867604500.35423,9117453924.84111,10056499174.174,11069899096.7866,12411002384.4993,13832695517.3304,14421351026.6284,19475989946.3203,22041323704.1279,24175222758.1379,27527118638.9227,28199381049.3682,28792579571.914,30589305252.138,32898638764.0078,36803752386.7329
-Tanzania,TZA,"Population, total",SP.POP.TOTL,33499180,34385856,36337782,37379767,38450320,39548663,40681414,41853944,43073834,44346525,45673338,47052481,48482266,49959822,51482633,53050790,54663906,56318348
-Tanzania,TZA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,40131263164.2706,42890967017.4586,51260374827.9552,56532928080.5228,62301972662.4298,69639969981.9492,75457683612.8265,81436994687.305,86469735714.9226,92287061442.5689,101382077998.843,108433518875.264,117702796605.002,127866407214.704,136847491706.678,147347550142.609,160259345083.565,172644497888.404
-Thailand,THA,"Population, total",SP.POP.TOTL,62952642,63539196,64549866,64995299,65416189,65812536,66182067,66530984,66866839,67195028,67518382,67835957,68144501,68438730,68714511,68971331,69209858,69428524
-Thailand,THA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,451283702840.35,473052313029.769,549513025914.586,598187297135.216,641715816482.417,699548696696.576,759856396711.913,786016710555.066,787702816639.472,850674941293.243,891983915185.034,953255445289.917,977159884690.597,1018838162769.1,1061851114398.43,1114754047934.98,1184686898226.15,1261083617625.96
-Timor-Leste,TLS,"Population, total",SP.POP.TOTL,884366,901214,947108,971893,995135,1016432,1036392,1055431,1074277,1093523,1113151,1132994,1153295,1174331,1196302,1219288,1243261,1267972
-Timor-Leste,TLS,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3066262141.77418,3329603441.66001,3208410665.01415,2608107795.30357,2695791703.29278,4123924732.23076,6227822907.50796,7620466547.61641,7625361551.99389,8051089483.19185,8875837189.7171,7657562962.62111,7842321791.69017,6633140820.71888,8841911079.17208,9007130427.468,8397550542.78817,8867293994.48867
-Togo,TGO,"Population, total",SP.POP.TOTL,4924402,5062567,5330639,5467766,5611640,5762880,5920359,6083420,6250835,6421679,6595943,6773807,6954721,7137997,7323158,7509952,7698475,7889094
-Togo,TGO,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,4746988526.01444,4770513430.40532,5178364347.87939,5409771619.23566,5640859747.15146,6043144705.06634,6377973278.71089,6812889958.68794,7236961060.24104,7758514395.16101,8997810959.96775,9228336453.33507,10007045002.6137,10845638359.1361,11861370721.2505,12291346174.8177,12968144782.5965,13874399525.314
-Tonga,TON,"Population, total",SP.POP.TOTL,97973,98487,99589,100218,100905,101706,102581,103379,103890,103986,103562,102737,101768,101028,100781,101133,101998,103197
-Tonga,TON,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,357784199.307633,377866597.727289,419272791.528134,430706598.862551,445193709.255631,463102117.302958,458561607.979409,480222408.822255,500093429.136062,524842935.728248,548648424.397204,564662549.708014,554335176.245479,566434537.234914,595653508.203939,620025178.093263,654945658.3823,671334890.179322
-Trinidad and Tobago,TTO,"Population, total",SP.POP.TOTL,1267153,1271632,1283559,1290123,1296502,1302561,1308451,1314443,1320930,1328147,1336178,1344817,1353700,1362342,1370328,1377564,1384072,1389858
-Trinidad and Tobago,TTO,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,17063783146.5871,18479180938.9587,23640091953.1461,27051783646.6118,29024713064.6748,33765881285.5085,36600614721.0584,38606616565.3602,36842674421.7033,38686808501.7608,36805736895.769,38927371182.6903,41793944640.6051,41951847664.019,45602103500.0885,42914629945.5215,43833081066.4904,44558094284.6672
-Tunisia,TUN,"Population, total",SP.POP.TOTL,9708350,9793903,9945277,10022277,10106771,10201214,10304726,10414433,10525694,10635244,10741880,10847002,10952951,11063201,11179949,11303946,11433443,11565204
-Tunisia,TUN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,55874653480.8964,59444943584.9895,65472551480.1344,71282291341.216,75216530469.8522,81962829758.4308,89074239337.9617,94213875881.3911,98887456919.5009,103665263133.272,103777406437.032,110558871563.759,115457701288.41,122252854745.413,125649679137.34,129010325482.275,133382093298.423,139437407211.764
-Turkey,TUR,"Population, total",SP.POP.TOTL,63240194,64192243,66089402,67010930,67903469,68756810,69581848,70418604,71321399,72326988,73443863,74653016,75928564,77231907,78529409,79821724,81101892,82319724
-Turkey,TUR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,597194480777.628,576770257410.937,623403566203.274,717658274429.54,798582176668.912,926423152215.623,1023644289517.37,1119242568656.94,1091637399326.7,1249722041104.58,1430728379426.73,1527509826303.98,1675523371057.61,1834768262142.98,1989688670333.99,2065177040421.12,2231683996936.37,2335891857745.33
-Turkmenistan,TKM,"Population, total",SP.POP.TOTL,4516133,4564083,4655743,4703401,4754646,4810109,4870141,4935767,5007954,5087213,5174085,5267900,5366375,5466328,5565287,5662372,5757669,5850908
-Turkmenistan,TKM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,17995828773.5322,19829653440.6324,21607205861.5466,23237124635.2335,25604577781.7961,29541576895.1685,34842921623.3447,39694640317.475,42059204115.3116,45389111073.3959,52404098571.8364,59471193613.567,67243320645.3257,75327130249.2869,83896500237.0947,93145567321.2999,99514725506.7201,107998142279.311
-Turks and Caicos Islands,TCA,"Population, total",SP.POP.TOTL,20164,21573,25011,26700,28180,29391,30385,31202,31934,32660,33377,34066,34731,35369,35981,36559,37115,37665
-Turks and Caicos Islands,TCA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,739208799.015112,791603965.497346,836301132.697549,870903710.245997,924247506.254097
-Tuvalu,TUV,"Population, total",SP.POP.TOTL,9394,9484,9726,9869,10000,10120,10221,10314,10424,10530,10633,10739,10857,10972,11099,11225,11370,11508
-Tuvalu,TUV,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,44816713.8307151,39423211.9666701,44008233.8177605,44010714.0272282,44669035.2114286,52633356.120253,52851720.347888,54738734.1186393,49291845.54984,50436773.521359,43459568.1162693,54547258.7193721,48534841.9572943,63000995.29202,63492051.2981101,63480552.6312282,70026777.9863552
-Uganda,UGA,"Population, total",SP.POP.TOTL,23650172,24388968,25980552,26821297,27684585,28571475,29486338,30431736,31411096,32428167,33476919,34559168,35695246,36912148,38225453,39647506,41162465,42723139
-Uganda,UGA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,19732383544.7386,20917812976.4608,25320235179.1238,27593443638.7927,30179770024.2155,34607073932.2648,38752364028.8124,42992717000.3962,46328477998.4323,49517211875.1275,55370715714.0034,58334813062.0023,61413436958.8149,65691305456.3805,70135540030.1019,74169884040.4857,78179776479.0386,84120132480.5213
-Ukraine,UKR,"Population, total",SP.POP.TOTL,49175848,48683865,47812950,47451600,47105150,46787750,46509350,46258200,46053300,45870700,45706100,45593300,45489600,45271947,45154029,45004645,44831135,44622516
-Ukraine,UKR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,182072492832.991,205824005600.269,246961108216.491,284111016778.532,302009955387.397,332759661169.771,368074483732.517,386328007065.453,327715414234.499,346378307650.733,369725094277.308,380182095141.185,386744692746.068,370198321926.394,337410409059.683,350194278767.123,359434925554.07,381130336464.312
-United Arab Emirates,ARE,"Population, total",SP.POP.TOTL,3134062,3302719,3711932,4068570,4588225,5300174,6168838,7089487,7917372,8549988,8946777,9141596,9197910,9214175,9262900,9360980,9487203,9630959
-United Arab Emirates,ARE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,270242667599.528,280093094632.057,307756311720.631,348086541069.833,380547512895.163,432900052128.142,463684570499.24,478150719176.58,455747333779.102,463507876122.492,506316326003.741,539427339215.772,578506553034.284,613900012254.438,653992484368.492,681583821989.914,700994461992.456,725234231707.214
-United Kingdom,GBR,"Population, total",SP.POP.TOTL,58892514,59119673,59647577,59987905,60401206,60846820,61322463,61806995,62276270,62766365,63258918,63700300,64128226,64613160,65128861,65595565,66058859,66488991
-United Kingdom,GBR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1552125294884.13,1638390131222.71,1820054546759.49,1926984154650.84,1989351614357.44,2104804714785.05,2161203171043.66,2230618605625.55,2149068637946.38,2261925476186.07,2338452408604.47,2389589159020.23,2481085885899.71,2586417808729.12,2676110144215.84,2748394004282.66,2910875444407.31,3035742387684.41
-United States,USA,"Population, total",SP.POP.TOTL,282162411,284968955,290107933,292805298,295516599,298379912,301231207,304093966,306771529,309326085,311580009,313874218,316057727,318386421,320742673,323071342,325147121,327167434
-United States,USA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,10383859000000,10743709000000,11530268000000,12313988000000,13169702000000,14072966000000,14543216000000,14684602000000,14398708000000,15126736000000,15832207000000,16670651000000,17175898000000,18062432000000,18700478000000,19049435000000,19872232000000,20738399000000
-Uruguay,URY,"Population, total",SP.POP.TOTL,3319736,3325473,3323668,3321476,3321803,3325401,3331749,3340221,3349676,3359275,3368934,3378974,3389439,3400434,3412009,3424132,3436646,3449299
-Uruguay,URY,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,33927712317.2044,33327120691.8604,30867334852.4273,33199602522.5985,37340746298.4527,40315016314.1386,44113794682.749,47817999407.611,50075569089.2715,54357702760.8174,58558594372.8545,59350552262.5048,64464340387.3184,67120595545.5464,69425897371.4788,71036907660.1062,73460303105.1559,75547716669.6862
-Uzbekistan,UZB,"Population, total",SP.POP.TOTL,24650400,24964450,25567650,25864350,26167000,26488250,26868000,27302800,27767400,28562400,29339400,29774500,30243200,30757700,31298900,31847900,32388600,32955400
-Uzbekistan,UZB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,48635223892.606,51662869159.4908,58316569444.3101,64826910518.5812,71663116363.2661,79060176222.7707,93060930669.2329,105080292797.382,110984250184.11,122243219889.066,136295408676.256,150970348121.118,167821848139.923,180201974897.96,191860837851.123,204483734624.537,219626679050.298,238335475647.897
-Vanuatu,VUT,"Population, total",SP.POP.TOTL,184972,189219,198959,204127,209282,214370,219472,224704,230247,236211,242653,249499,256635,263888,271130,278330,285510,292680
-Vanuatu,VUT,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,395845637.995294,403652721.333649,399573849.218806,425394093.205076,454841786.626822,518923916.182845,556611911.565058,637642070.41798,643469996.481578,657929082.677382,684302150.005901,686703133.695767,754198448.017536,791353492.972593,775558828.856362,826169514.857148,878783296.543725,924015342.200343
-"Venezuela, RB",VEN,"Population, total",SP.POP.TOTL,24192446,24646472,25551624,25996594,26432447,26850194,27247610,27635832,28031009,28439940,28888369,29362449,29783571,30045134,30081829,29846179,29390409,28870195
-"Venezuela, RB",VEN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,277520368039.487,291862603179.054,251406204671.029,303860229304.044,351328246706.003,401591261263.823,455701484920.927,485017855005.818,468236198904.863,464636976153.772,487696163869.793,524373119462.894,537842486515.487,537773535522.688,..,..,..,..
-Vietnam,VNM,"Population, total",SP.POP.TOTL,79910412,80742499,82301656,83062821,83832661,84617540,85419591,86243413,87092252,87967651,88871561,89802487,90753472,91714595,92677076,93638724,94596642,95540395
-Vietnam,VNM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,174297736400.7,189421988946.299,222286668252.391,246657402340.845,251128099702.306,275899297905.399,301475951746.669,324169424138.899,309977115099.669,367460152029.961,396482343535.126,426615145409.605,456333610654.877,490398087868.146,526614845522.342,571097036200.103,617508003652.825,671245082248.009
-Virgin Islands (U.S.),VIR,"Population, total",SP.POP.TOTL,108642,108549,108506,108467,108454,108371,108339,108399,108405,108358,108292,108191,108044,107884,107710,107510,107268,106977
-Virgin Islands (U.S.),VIR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
-West Bank and Gaza,PSE,"Population, total",SP.POP.TOTL,2922153,2997784,3154969,3236626,3320396,3406334,3494496,3591977,3689099,3786161,3882986,3979998,4076708,4173398,4270092,4367088,4454805,4569087
-West Bank and Gaza,PSE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,9581562025.40581,8581893437.62694,8711891032.15408,9788488506.83217,11390702945.9231,11423201836.8576,12667760475.4543,13702056362.7755,14629247819.8148,15909009847.3924,18332734924.1935,19940193572.0569,21067508757.4605,21889445151.3666,23261462034.2339,24755871266.2101,25930907577.1221,27376726511.647
-"Yemen, Rep.",YEM,"Population, total",SP.POP.TOTL,17409072,17918373,18985000,19540098,20107409,20687646,21282515,21892146,22516460,23154855,23807588,24473178,25147109,25823485,26497889,27168210,27834821,28498687
-"Yemen, Rep.",YEM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,50945731957.021,54635896876.3459,59836847910.4749,63193375067.7939,68857560184.7989,75755105734.0369,80592513596.264,84356835620.827,90617952570.448,97470105229.5594,85694098679.7649,92035976558.7977,98108265892.9489,98134775321.8416,85199170571.8447,76663697942.8642,73537752886.0791,73255533964.395
-Zambia,ZMB,"Population, total",SP.POP.TOTL,10415944,10692193,11256743,11550642,11856247,12173514,12502958,12848530,13215139,13605984,14023193,14465121,14926504,15399753,15879361,16363507,16853688,17351822
-Zambia,ZMB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,16859317973.0349,18203447793.9742,21293945093.7292,22563622104.5323,24637111130.0717,26921161038.7427,29350744715.8496,33399420896.3917,38781297276.5569,41496562802.8305,45584354103.5952,51890087558.0177,53897710078.9259,58818095450.7059,61347525118.4727,63987993435.1516,65878916452.6281,71062540099.1249
-Zimbabwe,ZWE,"Population, total",SP.POP.TOTL,11881477,11923914,11982224,12019912,12076699,12155491,12255922,12379549,12526968,12697723,12894316,13115131,13350356,13586681,13814629,14030390,14236745,14439018
-Zimbabwe,ZWE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,26350189272.7886,27467955150.4053,21725309056.2701,20786127560.7269,20233468879.9595,19918084138.1566,19474943345.3475,15786137784.2068,17214601829.981,21138050914.4065,23990800679.1528,28941591239.3131,31104347021.3766,32566365115.0374,33341554454.358,34446760780.9698,36771043359.7364,43477936211.9703
-,,,,,,,,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,,,,,,,
-Data from database: World Development Indicators,,,,,,,,,,,,,,,,,,,,,
-Last Updated: 07/10/2019,,,,,,,,,,,,,,,,,,,,,
+﻿Country Name,Country Code,Series Name,Series Code,2000 [YR2000],2001 [YR2001],2002 [YR2002],2003 [YR2003],2004 [YR2004],2005 [YR2005],2006 [YR2006],2007 [YR2007],2008 [YR2008],2009 [YR2009],2010 [YR2010],2011 [YR2011],2012 [YR2012],2013 [YR2013],2014 [YR2014],2015 [YR2015],2016 [YR2016],2017 [YR2017],2018 [YR2018],2019 [YR2019]
+Afghanistan,AFG,"Population, total",SP.POP.TOTL,20779953,21606988,22600770,23680871,24726684,25654277,26433049,27100536,27722276,28394813,29185507,30117413,31161376,32269589,33370794,34413603,35383128,36296400,37172386,38041754
+Afghanistan,AFG,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,43028339584.2827,50011958158.0176,51128371918.0527,59761402458.6644,65266760640.6549,69050351838.9108,72481076025.8795,76028794220.7415,80928557850.552,84153433613.6912,88625369464.1162
+Albania,ALB,"Population, total",SP.POP.TOTL,3089027,3060173,3051010,3039616,3026939,3011487,2992547,2970017,2947314,2927519,2913021,2905195,2900401,2895092,2889104,2880703,2876101,2873457,2866376,2854191
+Albania,ALB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,12295329934.0871,13662030955.6943,14638785105.4615,15646789482.4405,16815675369.8153,18045171250.16,20207327771.9002,22210992539.7718,24354670853.9274,25412668725.7731,27785785416.5398,29662729114.3582,30304812913.2324,31131654485.7363,32829902894.5929,33990559188.9825,35083764553.2169,37559230695.0488,39608393973.6197,40948001863.9295
+Algeria,DZA,"Population, total",SP.POP.TOTL,31042235,31451514,31855109,32264157,32692163,33149724,33641002,34166972,34730608,35333881,35977455,36661444,37383887,38140132,38923687,39728025,40551404,41389198,42228429,43053054
+Algeria,DZA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,249239806875.697,267956340953.41,284631758231.333,311583719636.453,331993919386.156,359464197320.959,380479524575.988,414482847146.861,435958233181.566,445244775226.9,470023755816.768,489716726450.96,488121977761.001,487240917216.145,494779232360.141,464696482682.72,466748869735.932,470665607922.597,483634986014.434,496317405228.713
+American Samoa,ASM,"Population, total",SP.POP.TOTL,57821,58494,59080,59504,59681,59562,59107,58365,57492,56683,56079,55759,55667,55713,55791,55812,55741,55620,55465,55312
+American Samoa,ASM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+Andorra,AND,"Population, total",SP.POP.TOTL,65390,67341,70049,73182,76244,78867,80993,82684,83862,84463,84449,83747,82427,80774,79213,78011,77297,77001,77006,77142
+Andorra,AND,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+Angola,AGO,"Population, total",SP.POP.TOTL,16395473,16945753,17519417,18121479,18758145,19433602,20149901,20905363,21695634,22514281,23356246,24220661,25107931,26015780,26941779,27884381,28842484,29816748,30809762,31825295
+Angola,AGO,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,45625455853.6001,49027450511.5838,58964860623.3629,62549385841.7304,70579130516.6148,83400219381.4952,94887584187.4675,111277581531.289,120613907210.438,130973295234.436,139021737564.205,148439198180.964,170976257471.015,185392055550.407,206980822098.846,194201091488.512,194190315018.69,204590018767.271,201768990921.183,203208993772.894
+Antigua and Barbuda,ATG,"Population, total",SP.POP.TOTL,76016,77212,78295,79300,80336,81465,82704,84026,85397,86746,88028,89253,90409,91516,92562,93566,94527,95426,96286,97118
+Antigua and Barbuda,ATG,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1217115229.2722,1210511861.26921,1216713026.6122,1322214773.35562,1429982539.02744,1582114255.11667,1838859693.47553,2063612215.07978,2093309042.37265,1859954533.20297,1770640004.07869,1760071676.80133,1713287781.8074,1663882354.66843,1672367226.25589,1673163663.24582,1740563149.3915,1805710260.31236,1974378899.13692,2088020637.75117
+Argentina,ARG,"Population, total",SP.POP.TOTL,36870787,37275652,37681749,38087868,38491972,38892931,39289878,39684295,40080160,40482788,40788453,41261490,41733271,42202935,42669500,43131966,43590368,44044811,44494502,44938712
+Argentina,ARG,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,417017017009.874,406454882837.983,359568619973.832,403024962214.876,417925482320.917,467759982214.622,567943867286.977,640200578583.143,680128095943.174,640783010735.511,711419160863.447,774596879587.266,799048894124.435,829354154809.18,821363404158.217,849527597209.511,865869191296.284,1011372465447.42,998830800603.003,991400568035.896
+Armenia,ARM,"Population, total",SP.POP.TOTL,3069591,3050687,3033978,3017932,3000720,2981269,2958307,2932618,2907618,2888092,2877319,2876538,2884229,2897584,2912403,2925553,2936146,2944809,2951776,2957731
+Armenia,ARM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,8411785419.15044,9413974116.05656,10873948357.9474,12607269792.8155,14422298034.6708,16947791947.5762,19865408956.9072,23342625648.8472,25565242042.8503,21756361158.8814,22666908341.8519,23905121367.1988,28085043286.0165,30249264888.7339,30546350169.5525,30350856297.5626,32159779382.3082,36937299281.0249,38914323976.9806,42759114791.1952
+Aruba,ABW,"Population, total",SP.POP.TOTL,90853,92898,94992,97017,98737,100031,100834,101222,101358,101455,101669,102046,102560,103159,103774,104341,104872,105366,105845,106314
+Aruba,ABW,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,2872847338.94668,2799573363.68339,2637127972.53136,2867204478.72712,3154765184.77508,2706594377.7855,3391212936.23979,3161477224.08529,3615027525.56263,3283103911.55257,3122230322.67618,3163613120.68283,3285168875.60645,3533775695.47509,3641308245.23705,3672197163.04349,3739360304.0678,3824342328.82359,..,..
+Australia,AUS,"Population, total",SP.POP.TOTL,19153000,19413000,19651400,19895400,20127400,20394800,20697900,20827600,21249200,21691700,22031750,22340024,22733465,23128129,23475686,23815995,24190907,24601860,24982688,25364307
+Australia,AUS,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,489520624813.209,516165308478.963,549012712403.385,574857353021.546,612002674935.358,639679592265.961,682096652760.495,727224136964.806,763437639656.731,843557963001.247,832245554168.474,899875053935.933,943990546160.514,1035222299693.94,1071746498596.55,1079583930033.6,1118334918553.7,1170453615167.99,1235210799693.42,1307710525895.41
+Austria,AUT,"Population, total",SP.POP.TOTL,8011566,8042293,8081957,8121423,8171966,8227829,8268641,8295487,8321496,8343323,8363404,8391643,8429991,8479823,8546356,8642699,8736668,8797566,8840521,8877067
+Austria,AUT,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,233385834582.488,235712900139.037,250522395607.009,260116247290.919,275368283316.74,287476798281.967,311765805754.051,326427226000.799,346680570770.484,341573577563.707,354517435256.432,374289188740.567,392030460346.489,407466618825.439,417609480255.935,426846890617.193,459804635718.973,476401858847.048,501391213443.661,524255318588.868
+Azerbaijan,AZE,"Population, total",SP.POP.TOTL,8048600,8111200,8171950,8234100,8306500,8391850,8484550,8581300,8763400,8947243,9054332,9173082,9295784,9416801,9535079,9649341,9757812,9854033,9939771,10023318
+Azerbaijan,AZE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,25945541164.1045,29117470035.1167,32461373835.4051,36476110641.4663,40054525091.6411,50348316038.8448,69470177011.273,86839747098.6742,103214559007.322,117359000512.606,126293927378.347,125796646904.165,139255987866.21,152856083251.662,160621518912.437,138638584391.013,131075186140.226,133161462622.119,137025867661.274,143908317720.303
+"Bahamas, The",BHS,"Population, total",SP.POP.TOTL,298051,302618,307660,313129,318894,324859,331033,337389,343681,349604,354942,359577,363584,367168,370633,374206,377931,381761,385640,389482
+"Bahamas, The",BHS,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,8212039357.49644,8555735052.74748,8954646677.20319,9038072662.66086,9378191119.25278,9969505538.47152,10498621829.1727,10932504061.2488,11064073036.999,10593508696.2367,10810983134.6064,11125447356.4103,11592317459.2316,11657745330.0293,11584144607.0395,12121659219.4026,12442626567.74,13079239093.8042,13243975035.1448,13926793002.7071
+Bahrain,BHR,"Population, total",SP.POP.TOTL,664611,697545,735146,778708,829844,889164,958418,1035919,1114641,1185076,1240860,1278151,1299943,1315029,1336075,1371851,1425791,1494074,1569439,1641172
+Bahrain,BHR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,27342775275.6308,28311147154.8213,29139543394.9118,31890130714.0216,35064369649.6128,39326073357.5737,43358665294.0685,48563603277.495,51417086000.4558,49339407229.793,52795240416.4259,52634201219.1065,63717186823.4415,65227977632.6593,64937397694.8038,59179331108.336,60305919955.802,67183271708.1063,70191027889.9976,72447496887.6035
+Bangladesh,BGD,"Population, total",SP.POP.TOTL,127657854,130088702,132478086,134791603,136986432,139035505,140921167,142660376,144304167,145924797,147575430,149273778,151007807,152764676,154520167,156256276,157970840,159670593,161356039,163046161
+Bangladesh,BGD,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,175498887965.454,188070169582.154,200208777958.829,213675132590.599,231579935778.308,254658309092.687,283108869793.188,313518446629.288,342916400364.922,363743172757.142,389103719400.951,422196099681.023,481140590082.247,518842425889.083,555106922287.902,591636233914.118,643070206340.889,692953262569.39,767013742002.338,845445644078.841
+Barbados,BRB,"Population, total",SP.POP.TOTL,271515,272500,273425,274329,275284,276323,277477,278700,279946,281104,282131,282987,283700,284296,284825,285324,285796,286233,286641,287025
+Barbados,BRB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3342299166.77654,3318357276.51927,3388898330.18903,3514294102.71811,3689684927.88694,3906413102.97208,4195291318.44247,4499475767.81716,4565169179.79777,4407087551.19392,4437707800.42561,4316589791.49889,4181013706.50134,4178206525.47126,4140648057.77415,4225737707.64073,4350024546.28767,4316152743.33284,4390758125.54967,4514195345.96069
+Belarus,BLR,"Population, total",SP.POP.TOTL,9979610,9928549,9865548,9796749,9730146,9663915,9604924,9560953,9527985,9506765,9490583,9473172,9464495,9465997,9474511,9489616,9501534,9498264,9483499,9466856
+Belarus,BLR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,57705302050.6981,61790137574.8412,65964081580.8031,72232043481.186,82600707462.355,93036490620.998,105319045370.782,116797714121.373,131252203713.056,131452902107.079,142835099051.391,153208172866.978,167125617328.764,172894457423.035,173994190973.455,163630254654.451,160606261472.775,167024751964.679,176773092587.249,183086223605.112
+Belgium,BEL,"Population, total",SP.POP.TOTL,10251250,10286570,10332785,10376133,10421137,10478617,10547958,10625700,10709973,10796493,10895586,11038264,11106932,11159407,11209057,11274196,11331422,11375158,11427054,11484055
+Belgium,BEL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,292276530740.395,301798939308.354,318307798007.558,326734665722.615,338466279472.564,352001708926.337,376805872104.647,395958458302.032,415597849908.875,415541297928.157,441038357059.041,452655752838.946,480620383220.801,499349513623.745,514186705056.397,528391165614.716,556214648760.066,583765893496.913,601270822533.095,628536700011.253
+Belize,BLZ,"Population, total",SP.POP.TOTL,247315,255063,262378,269425,276504,283800,291329,299025,306823,314655,322464,330237,338000,345715,353366,360933,368400,375769,383071,390353
+Belize,BLZ,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1287387950.12441,1357116298.17213,1450626199.39274,1584055478.8119,1666953268.63775,1766477586.79562,1908375872.74665,1922371073.92628,2034622477.42642,2179676578.6101,2193777170.18317,2368973885.92935,2264265317.53936,2309881069.2432,2316370287.0878,2469910477.61929,2483171941.55207,2445227377.72736,2521543358.43644,2586290005.7404
+Benin,BEN,"Population, total",SP.POP.TOTL,6865951,7076733,7295394,7520555,7750004,7982225,8216897,8454793,8696921,8944708,9199259,9460830,9729248,10004588,10286842,10575952,10872067,11175204,11485048,11801151
+Benin,BEN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,12039933514.299,12953894834.0906,13731587220.5999,14462457150.2043,15527659080.1207,16339425050.7319,17469806798.1607,18981657972.5593,20396010410.2284,20980955406.4862,21626033958.7697,22827277379.615,24162896617.311,26561886938.3552,29012509444.3848,30282958642.7141,32384504143.6299,33647417490.4049,36780159249.1225,39999046350.9209
+Bermuda,BMU,"Population, total",SP.POP.TOTL,61833,62504,62912,63325,63740,64154,64523,64888,65273,65636,65124,64564,64798,65001,65138,65237,64554,63873,63920,63918
+Bermuda,BMU,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,5456799919.71736,5466764865.19812,5030614754.06481,5022225302.70077,4922794703.56838,4798405145.34744,4915286607.50308,..,..,..,..,..,..
+Bhutan,BTN,"Population, total",SP.POP.TOTL,591021,603640,616018,627839,638815,648739,657410,664876,671613,678323,685503,693298,701583,710238,719056,727876,736709,745568,754394,763092
+Bhutan,BTN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1591736072.85988,1763611969.90641,1958737241.04163,2135036176.14072,2322903181.89559,2593205499.03799,2889013893.97406,3477490674.9173,3662361807.20907,3885527852.17577,4327633174.10703,4733983718.26042,5108157657.00653,5275721526.07621,5790544513.85152,6422593662.27931,7042038049.76,7585887017.97289,7972462732.6997,..
+Bolivia,BOL,"Population, total",SP.POP.TOTL,8418264,8580235,8742814,8905823,9069039,9232306,9395446,9558439,9721454,9884781,10048590,10212954,10377676,10542376,10706517,10869730,11031813,11192854,11353142,11513100
+Bolivia,BOL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,28161612877.8653,29291553032.7892,30495792099.2688,31529219889.622,33501391737.5381,36239758171.9237,39319908872.8557,42104650396.6538,45805903721.7166,47374744534.9209,49638890299.5505,53064109761.1359,57756234328.9259,65495334433.2076,71666096824.1971,74894854676.5673,81222638727.5769,91619577813.6129,98159504441.3777,102575988110.502
+Bosnia and Herzegovina,BIH,"Population, total",SP.POP.TOTL,3751176,3755512,3759387,3762173,3764194,3765331,3765424,3762786,3754271,3735938,3705472,3661175,3604972,3542605,3482104,3429361,3386267,3351527,3323929,3301000
+Bosnia and Herzegovina,BIH,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,18893960441.6454,19495377630.5613,20785260181.9174,21502942338.8847,24451805360.4885,25418813434.2621,28733747408.2105,31724715828.6723,35149095739.1769,35063480682.5581,35226791593.2155,36818838481.123,37436322971.8998,39547015864.6682,40137098277.2587,41479053647.328,44046396490.1261,46045036414.2516,49490888672.9277,52045375795.3886
+Botswana,BWA,"Population, total",SP.POP.TOTL,1643334,1674678,1704642,1734398,1765527,1799078,1835908,1875459,1915639,1953498,1987105,2015402,2039551,2062536,2088614,2120716,2159944,2205128,2254126,2303697
+Botswana,BWA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,13557098416.7967,14419530134.1595,13889154137.087,15363412458.1537,15991769327.3531,17685230941.2731,19912705651.2361,22352103231.3717,24185722744.8361,23597971610.0522,25205768180.1838,28096540791.5689,27303359705.3918,29010795919.8094,33058030162.8137,31933338415.3736,34254769280.8652,35240910553.464,37601959311.8403,39418398509.3185
+Brazil,BRA,"Population, total",SP.POP.TOTL,174790340,177196054,179537520,181809246,184006481,186127103,188167356,190130443,192030362,193886508,195713635,197514534,199287296,201035903,202763735,204471769,206163058,207833831,209469333,211049527
+Brazil,BRA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1538129202525.13,1587691758684.04,1660196184117.21,1713529500931.72,1865227767451.45,1986218399261.88,2135907584142.05,2335440097782.97,2493769549044.97,2515775629776.84,2712167338494.9,2894294561187.89,2923719823241.04,3090347659210.83,3127764536961.12,2958026429307.17,2876740136507.09,2961280980576.57,3041123356393.52,3134970431394.81
+British Virgin Islands,VGB,"Population, total",SP.POP.TOTL,20311,20675,21129,21672,22334,23107,24023,25047,26097,27039,27794,28319,28650,28847,28989,29152,29355,29577,29802,30030
+British Virgin Islands,VGB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+Brunei Darussalam,BRN,"Population, total",SP.POP.TOTL,333165,340034,346782,353293,359433,365114,370263,374965,379421,383906,388646,393688,398989,404421,409769,414907,419800,424473,428962,433285
+Brunei Darussalam,BRN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,22135261424.3605,23241505277.578,24523299248.4977,25704091177.3781,26529220186.0059,27461594982.2529,29536870001.5476,30531964635.0643,30482369303.0034,30204880108.3032,30970850502.8798,32155106321.3359,34364760477.9712,33509559006.4759,33313972350.929,27254603848.3947,25364170400.1577,27428959648.7296,26679679555.1299,28773188263.1097
+Bulgaria,BGR,"Population, total",SP.POP.TOTL,8170172,8009142,7837161,7775327,7716860,7658972,7601022,7545338,7492561,7444443,7395599,7348328,7305888,7265115,7223938,7177991,7127822,7075947,7025037,6975761
+Bulgaria,BGR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,51206887192.224,55857030666.9347,62301080894.9876,66436197074.9398,71770858373.6766,79042444991.263,84464686591.4914,89506772467.2668,102296594159.52,102238446938.669,107687535635.403,111463649283.489,117073102231.176,117808231142.742,125723697399.701,127548541849.325,137386319097.664,147551916573.944,160249850986.115,166588293364.132
+Burkina Faso,BFA,"Population, total",SP.POP.TOTL,11607942,11944587,12293100,12654621,13030569,13421930,13829176,14252021,14689725,15141098,15605217,16081911,16571246,17072775,17586017,18110624,18646378,19193284,19751535,20321378
+Burkina Faso,BFA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,29691629052.1441,33038518525.3481,37940356284.1784,41816222358.4319,45106161376.3608
+Burundi,BDI,"Population, total",SP.POP.TOTL,6378871,6525545,6704113,6909154,7131693,7364862,7607849,7862214,8126102,8397668,8675602,8958406,9245988,9540289,9844297,10160030,10487998,10827024,11175378,11530580
+Burundi,BDI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3417413481.01147,3457302261.58827,3658729575.30679,3657760764.51363,3909506770.43672,4126198847.68812,4521888837.8659,4816030666.91283,5157105457.38349,5357360329.22675,5721809553.46122,6061708967.24937,6368259239.23793,7074395514.84014,7630235753.1728,8546596103.6737,8355961626.26465,8362807306.07259,8728640031.72276,9047917503.70175
+Cabo Verde,CPV,"Population, total",SP.POP.TOTL,428188,435709,442951,449930,456617,463032,469170,475060,480842,486671,492654,498856,505235,511748,518269,524743,531146,537497,543767,549935
+Cabo Verde,CPV,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1266782277.89099,1342798431.14331,1418151673.32053,1513235208.56818,1709455198.73134,1857808134.49154,2054984867.8792,2473476172.30508,2673960999.08434,2662817641.47333,2681117810.15862,2859939245.12912,2814067315.42606,2860973891.1569,2830720284.50257,3029167495.53556,3238655861.9396,3447518124.1818,3730549246.95491,4019648413.84286
+Cambodia,KHM,"Population, total",SP.POP.TOTL,12155239,12405408,12637727,12856163,13066469,13273354,13477709,13679962,13883834,14093604,14312212,14541423,14780454,15026332,15274503,15521436,15766293,16009414,16249798,16486542
+Cambodia,KHM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,12642116508.8615,13934468278.6169,14956236448.0484,16630363468.4016,18802167691.3012,21829777132.6337,24961136701.0952,28430776792.2456,30812143007.5767,31002587125.5977,33148868045.7431,36196062670.2364,40199856424.6254,43802730490.9686,46099725658.5717,49377507801.9442,54385763728.0482,58986036499.7482,64519125861.4293,68852453802.8108
+Cameroon,CMR,"Population, total",SP.POP.TOTL,15513945,15928910,16357602,16800865,17259322,17733410,18223674,18730282,19252666,19789919,20341241,20906388,21485266,22077298,22681858,23298368,23926539,24566045,25216237,25876380
+Cameroon,CMR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,28350592041.0371,29973192155.9005,32043132678.9502,34925291392.5026,38815056169.6922,40660059083.8955,43972199123.2327,46918252733.0472,49841317015.4953,51912218948.8495,54002042434.8693,57392868093.6708,60411127308.0801,65020260624.0553,71651218352.3963,74891827392.5734,80077228864.7195,85671150257.2736,91043062688.824,96515454551.2549
+Canada,CAN,"Population, total",SP.POP.TOTL,30685730,31020902,31360079,31644028,31940655,32243753,32571174,32889025,33247118,33628895,34004889,34339328,34714222,35082954,35437435,35702908,36109487,36543321,37057765,37589262
+Canada,CAN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,877403072641.854,910889240475.231,946440061399.149,997997291124.232,1059801620831.76,1147390008931.78,1221437024738.28,1281770753021.91,1322673547258.16,1285413680532.32,1337096249937.57,1403781260484.68,1442044757903.5,1530453431372.55,1595196682591.57,1570466921580.38,1657881697068.52,1756595635890.34,1831814016986.74,1910033900633.52
+Cayman Islands,CYM,"Population, total",SP.POP.TOTL,42303,43935,45351,46632,47902,49261,50740,52280,53836,55322,56672,57878,58958,59932,60848,61724,62569,63382,64174,64948
+Cayman Islands,CYM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,3395040409.33341,3579426001.18982,2506666954.65396,2247527709.29713,2213929718.77153,2351877741.07651,2496908670.53074,2639134540.57074,..,..
+Central African Republic,CAF,"Population, total",SP.POP.TOTL,3640427,3722018,3802128,3881181,3959875,4038382,4118069,4198010,4273366,4337625,4386768,4418636,4436415,4447942,4464175,4493170,4537687,4596028,4666377,4745185
+Central African Republic,CAF,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,2420173859.83915,2599121943.16844,2733617163.78552,2651938233.75056,2862197904.44427,2987895516.47448,3224496848.98221,3469104943.0554,3590248705.0439,3962827993.80464,4225494331.49768,4492422406.61788,4910903587.89207,3314143517.70327,3249088436.38074,3580087008.65921,3910067806.77701,4409011233.54022,4789641939.89765,5017902834.17048
+Chad,TCD,"Population, total",SP.POP.TOTL,8355654,8678051,9019233,9373916,9734767,10096633,10457124,10818024,11183588,11560147,11952136,12360989,12784750,13220424,13663559,14110975,14561666,15016773,15477751,15946876
+Chad,TCD,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,6319492732.6608,7207018150.40711,7812304544.90587,7891811202.81306,10951344124.8321,13201164727.507,13543078133.2229,14781565230.2795,15134744516.7814,18144612371.4748,21024060933.5094,21644734483.3347,21591587636.4981,19796873664.8052,21921934523.2352,24904346467.7966,23791406629.63,23520168178.8231,24608840263.1903,25830796904.5155
+Channel Islands,CHI,"Population, total",SP.POP.TOTL,148443,149097,149596,150068,150716,151678,153008,154636,156433,158178,159734,160998,162056,163038,164100,165385,166923,168665,170499,172259
+Channel Islands,CHI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+Chile,CHL,"Population, total",SP.POP.TOTL,15342353,15516113,15684409,15849652,16014971,16182721,16354504,16530195,16708258,16886186,17062536,17233576,17400347,17571507,17758959,17969353,18209068,18470439,18729160,18952038
+Chile,CHL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,141423035548.287,149617763772.581,155784421760.061,161378820974.511,173667662655.791,188423173015.673,226393185292.021,248814945028.446,254260262604.88,254255791260.918,288017255793.192,329368731234.727,356585691606.824,374348201436.925,389162444827.984,395407468276.445,400624301817.111,419006172363.607,443885470333.679,457579908141.733
+China,CHN,"Population, total",SP.POP.TOTL,1262645000,1271850000,1280400000,1288400000,1296075000,1303720000,1311020000,1317885000,1324655000,1331260000,1337705000,1344130000,1350695000,1357380000,1364270000,1371220000,1378665000,1386395000,1392730000,1397715000
+China,CHN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3642929495002.62,4024301291629.47,4480003695003.27,5041479417259.67,5720935150218.09,6542253999453.47,7637180375337.52,8995506578057.3,10095483737974.6,11041378395911.4,12325778007443,13715342009909,15089408602884,16053444960087.1,17143015127789.3,17729511091167.2,18637218188518.7,19871384311878.3,21650459382664.6,23403178554979.1
+Colombia,COL,"Population, total",SP.POP.TOTL,39629968,40255967,40875360,41483869,42075955,42647723,43200897,43737516,44254975,44750054,45222700,45663099,46076848,46497267,46969209,47520667,48171392,48901066,49648685,50339443
+Colombia,COL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,259414591428.19,268702127899.533,279161165812.221,293272250099.694,317045556052.753,346110876184.377,380086886997.642,414864274101.021,434915143665.748,444985677687.291,467552032493.6,507216374248.229,532681024405.232,571015950345.544,606448118177.276,621482821087.166,664816412490.902,687298469474.748,724232953004.369,762425730871.469
+Comoros,COM,"Population, total",SP.POP.TOTL,542357,555888,569479,583211,597228,611627,626425,641620,657229,673252,689692,706569,723871,741505,759390,777424,795592,813892,832322,850886
+Comoros,COM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,978152950.778042,1023858997.70425,1060344930.375,1101989662.31587,1152290411.05479,1222952535.58608,1293956753.02818,1344729861.00691,1420168578.88456,1477640850.41601,1552343824.85307,1650025527.79945,1814962014.89785,1955354402.02042,2065846271.75344,2114908310.93723,2290518423.87202,2481555639.3609,2627949548.30045,2741496615.1196
+"Congo, Dem. Rep.",COD,"Population, total",SP.POP.TOTL,47105826,48428545,49871666,51425580,53068880,54785903,56578037,58453683,60411195,62448574,64563854,66755153,69020747,71358807,73767447,76244544,78789127,81398764,84068091,86790567
+"Congo, Dem. Rep.",COD,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,20631804485.1208,20003968418.718,21282755743.5173,23094505319.2151,25195745565.8829,27219506328.6504,29841190580.1695,32379440357.0365,33996053842.4646,36180051180.7136,39199375965.1633,42414784447.7013,43696967208.4135,49142683507.8545,57377953169.2351,63954295208.2057,74312567452.9388,83831229357.8051,90885907472.5688,96218912373.4924
+"Congo, Rep.",COG,"Population, total",SP.POP.TOTL,3127411,3217933,3310387,3406922,3510468,3622775,3745141,3876119,4011486,4145391,4273731,4394844,4510198,4622761,4736974,4856095,4980999,5110702,5244363,5380508
+"Congo, Rep.",COG,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,7601711583.97746,8036306716.03473,8724482325.33339,9181332300.17183,8997398787.066,9737195047.57814,10623917862.3278,11183689574.246,12937905979.856,13784549918.7088,15667449650.5169,16346963764.2037,17025078803.1975,17267296875.4012,18436509734.9793,16048228148.5409,15691634236.6015,15977607409.9916,16215340249.7365,16463559986.7425
+Costa Rica,CRI,"Population, total",SP.POP.TOTL,3962372,4034074,4100925,4164053,4225155,4285502,4345412,4404628,4463125,4520740,4577378,4633086,4688000,4742107,4795396,4847804,4899345,4949954,4999441,5047561
+Costa Rica,CRI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,29623300811.7384,31328489119.4728,32869977672.8924,34899103009.3252,37542259497.0707,40408165122.6785,45035715488.8468,50192693094.6612,53911670959.4287,53040066100.438,56358853436.7787,59912146076.3814,63956459017.0707,66885378676.1451,71737908299.0027,76862312605.2469,84399345453.2129,89894854940.6111,93960595206.229,97152868665.4819
+Cote d'Ivoire,CIV,"Population, total",SP.POP.TOTL,16454668,16853026,17231539,17599610,17970494,18354514,18754916,19171237,19605569,20059147,20532950,21028655,21547188,22087505,22647683,23226143,23822714,24437469,25069229,25716544
+Cote d'Ivoire,CIV,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,34179810556.9689,34164006387.8496,33728201147.5087,32927882380.6959,35894161009.2635,40606319284.1736,42394364749.2328,44307734365.2147,46446854989.2683,48250474385.1245,49892838647.0563,48585323041.8884,54762839531.1921,59653079619.2815,69008798623.8581,105692768632.425,110081941651.056,114536013131.385,124763689653.615,135958136117.795
+Croatia,HRV,"Population, total",SP.POP.TOTL,4468302,4299642,4302174,4303399,4304600,4310145,4311159,4310217,4309705,4305181,4295427,4280622,4267558,4255689,4238389,4203604,4174349,4124531,4087843,4067500
+Croatia,HRV,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,46499890107.2711,48896198711.9351,53482270125.2327,56353884454.221,61475698987.1059,64372129540.5663,73190743911.4847,81487123907.0063,86614855154.6138,82943218058.2524,82051671965.4988,85889523327.2529,87138270730.1742,90772432088.2814,91550495934.9966,96134586878.9095,100097233590.908,108081346537.34,112930965650.021,120055262820.192
+Cuba,CUB,"Population, total",SP.POP.TOTL,11126430,11164667,11199651,11229183,11250365,11261582,11261248,11251122,11236971,11226709,11225832,11236670,11257101,11282720,11306902,11324781,11335109,11339259,11338138,11333483
+Cuba,CUB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+Curacao,CUW,"Population, total",SP.POP.TOTL,133860,129047,129205,131897,134192,137658,141239,144056,145880,146833,148703,150831,152088,153822,155909,157980,159664,160175,159800,157538
+Curacao,CUW,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,3489211680.43107,3662002831.67272,3854063142.65658,3929727908.71205,3881983960.51665,3983315325.96962,4081824563.38638,3923707213.22909,3917983606.61816,3915994347.36562,3961320244.31667,3940250307.57778,4115499635.2035,4132584601.47828,..
+Cyprus,CYP,"Population, total",SP.POP.TOTL,943290,960276,976964,993563,1010408,1027662,1045507,1063713,1081563,1098083,1112612,1124833,1135046,1143866,1152285,1160985,1170187,1179680,1189265,1198575
+Cyprus,CYP,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,13511436832.2251,14900268382.8294,15854031078.158,16711119936.0921,17808359787.8131,19438218852.3815,21265557155.9929,23583728079.5028,26949305682.2092,27330223334.2122,27345454292.8436,29092538227.0754,27312721127.3054,25872169801.1677,24927082983.1203,26713635284.3923,28930812841.8969,31471920977.0666,33356593562.1506,35125093140.5641
+Czech Republic,CZE,"Population, total",SP.POP.TOTL,10255063,10216605,10196916,10193998,10197101,10211216,10238905,10298828,10384603,10443936,10474410,10496088,10510785,10514272,10525347,10546059,10566332,10594438,10629928,10669709
+Czech Republic,CZE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,163038832898.852,174467305667.327,179046170022.093,191477640584.699,202340708154.596,214084360418.233,228658408144.147,251847307853.256,270395387186.615,268132912244.783,268604766055.741,279370310382.565,286391051564.635,301403153675.82,316710658172.226,331373073380.675,354511276940.125,382709527241.609,405816971330.564,433853854330.091
+Denmark,DNK,"Population, total",SP.POP.TOTL,5339616,5358783,5375931,5390574,5404523,5419432,5437272,5461438,5493621,5523095,5547683,5570572,5591572,5614932,5643475,5683483,5728010,5764980,5793636,5818553
+Denmark,DNK,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,149596143354.486,155487973617.73,162670765274.646,164472529117.583,178075165724.772,186566260237.836,205208412175.99,213876992045.586,229296531979.344,225193495345.495,242631692386.991,252568140433.285,256181803182.809,270675687839.011,280163778604.424,287382159288.342,305006431683.768,324192732266.205,340112252681.597,357320214235.544
+Djibouti,DJI,"Population, total",SP.POP.TOTL,717584,733015,746942,759641,771603,783254,794563,805451,816358,827823,840198,853674,868136,883293,898696,913993,929112,944097,958920,973560
+Djibouti,DJI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,3715087653.66217,4036230825.66616,4429309389.07182,4597475415.7157,4817795003.66086,5289280458.10073,5819929455.04377
+Dominica,DMA,"Population, total",SP.POP.TOTL,69650,69661,69837,70100,70382,70589,70718,70795,70827,70851,70878,70916,70965,71016,71085,71183,71307,71458,71625,71808
+Dominica,DMA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,400344100.039402,429313346.655132,419179922.578869,456635202.274809,476896541.72058,501085760.596008,564432283.057511,611226901.228168,672058787.445127,677696725.862907,696454257.626208,708014383.213069,679255897.176842,700295621.02101,750737430.525807,761036723.992605,829614493.990179,789737770.599692,847596135.862176,895005759.185567
+Dominican Republic,DOM,"Population, total",SP.POP.TOTL,8471321,8598601,8724975,8850317,8974444,9097257,9218686,9338861,9458075,9576737,9695121,9813210,9930911,10048224,10165178,10281680,10397743,10513131,10627165,10738958
+Dominican Republic,DOM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,54857959234.1973,57451823519.1937,61018030270.1061,59914230879.4222,62079258329.0088,72081412996.4997,81421833744.7993,89627113600.64,95624024360.2622,97332284097.8779,106666390183.348,111949190660.718,113509281387.312,119476175474.504,130354685235.318,145306712788.837,160308245051.641,167596990082.089,184008614926.158,196349641425.533
+Ecuador,ECU,"Population, total",SP.POP.TOTL,12681123,12914667,13143465,13369678,13596388,13825847,14059384,14296557,14535739,14774424,15011117,15243883,15474102,15707474,15951838,16212020,16491115,16785361,17084357,17373662
+Ecuador,ECU,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,69098046172.0833,74742259805.639,79574768087.9565,83073642541.6052,91901802521.3136,100466458726.895,108594774592.686,114009264818.594,125602173796.277,127642774663.478,134421320332.912,147884749634.534,157237893147.298,172690001154.939,184012416071.378,176187957730.396,178667364050.045,190676356240.484,196867951562.893,199871447137.298
+"Egypt, Arab Rep.",EGY,"Population, total",SP.POP.TOTL,68831561,70152661,71485043,72826097,74172073,75523569,76873663,78232126,79636079,81134798,82761235,84529250,86422240,88404640,90424654,92442547,94447072,96442593,98423595,100388073
+"Egypt, Arab Rep.",EGY,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,400684181257.648,424516803084.269,442195029596.355,463855596342.298,496188030671.872,529723401474.72,587646465573.459,648828095446.349,708313454619.035,741484422581.662,772379855382.843,807504032637.098,935460226221.456,969791269904.67,961833673783.757,1045884282029.13,1042793009640.79,1041539732767.9,1116365583862.3,1185110320142.05
+El Salvador,SLV,"Population, total",SP.POP.TOTL,5887936,5927006,5962136,5994077,6023797,6052123,6079399,6105810,6131764,6157686,6183875,6210568,6237923,6266070,6295128,6325124,6356143,6388122,6420744,6453553
+El Salvador,SLV,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,25625057193.2798,26412663278.8683,27145840513.0776,27897191944.0943,28861264893.0732,30566055698.3285,33063124163.0323,34601612380.5593,36374477944.3703,35521962609.6281,36783889176.141,38933283619.5548,39143379884.8551,41152360828.005,43447081739.4438,45817642299.8659,48462178672.0867,51005491573.6496,53436355129.8483,56132584584.232
+Equatorial Guinea,GNQ,"Population, total",SP.POP.TOTL,606181,631666,658384,686664,716949,749535,784496,821687,860840,901599,943639,986853,1031191,1076413,1122276,1168568,1215179,1262001,1308974,1355986
+Equatorial Guinea,GNQ,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3569476980.42644,4055894873.55833,5418769255.37622,5380816669.01491,7063285944.27882,10643726530.0438,18306829396.1913,22011462069.2607,24503329731.2202,22329409017.6862,18263922392.6939,21889346128.883,25687593216.8693,25581464599.311,25707960045.8039,21190569158.2367,19263632756.1753,20954718048.321,20599465392.7533,19797708447.4125
+Eritrea,ERI,"Population, total",SP.POP.TOTL,2292416,2374722,2481058,2600973,2719803,2826659,2918205,2996536,3062779,3119920,3170435,3213972,..,..,..,..,..,..,..,..
+Eritrea,ERI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3506504683.54086,3882334366.44965,4040941341.42888,3995622452.95127,4151458428.13569,4414188410.48932,4510019766.93467,4705298978.88769,4314353633.37809,4514907120.14248,4650579875.09612,5164760114.43522,..,..,..,..,..,..,..,..
+Estonia,EST,"Population, total",SP.POP.TOTL,1396985,1388115,1379350,1370720,1362550,1354775,1346810,1340680,1337090,1334515,1331475,1327439,1322696,1317997,1314545,1315407,1315790,1317384,1321977,1326590
+Estonia,EST,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,12669789053.2999,13621048412.8871,15237944246.2133,16938465034.2173,18679330374.4002,21499500921.8641,24584992712.209,27418527426.1221,28932126115.7131,26675790036.0418,27494601909.1167,31230453479.2807,33215561266.1041,35556368007.5954,37217445766.6686,37821991827.8642,40170713503.6427,43497799024.4122,47162932030.7337,50421445033.1002
+Eswatini,SWZ,"Population, total",SP.POP.TOTL,1005435,1013609,1019059,1022802,1026286,1030579,1036092,1042652,1049945,1057467,1064837,1072032,1079288,1086839,1095021,1104044,1113984,1124753,1136191,1148130
+Eswatini,SWZ,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,4841044260.53071,5228208996.89649,5210477318.31103,5395620373.05508,5858932937.73412,6756746959.2949,7016136628.35619,7581049283.3852,7688629392.01527,7714634747.85168,7853617337.89829,8582264516.31715,8878105091.60812,9553826836.30231,9655682182.88881,9859047731.37133,9239799764.31969,8992934215.72979,9167414979.72843,9119639409.78686
+Ethiopia,ETH,"Population, total",SP.POP.TOTL,66224804,68159423,70142091,72170584,74239505,76346311,78489206,80674348,82916235,85233913,87639964,90139927,92726971,95385785,98094253,100835458,103603501,106400024,109224559,112078730
+Ethiopia,ETH,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,31745647141.6655,35172872840.3776,36248505406.0944,36093164761.2695,42154727413.4637,48770757910.6299,55711564489.7698,63968650234.7454,72249633206.4247,79048790246.6279,89796474832.5446,102066962975.689,112283190021.582,122160040713.247,148077681634.81,166439956275.808,194015746732.547,213816795462.579,234123795699.233,257833627636.733
+Faroe Islands,FRO,"Population, total",SP.POP.TOTL,46735,46997,47233,47432,47600,47722,47792,47825,47820,47808,47814,47823,47843,47892,47960,48051,48173,48331,48497,48678
+Faroe Islands,FRO,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+Fiji,FJI,"Population, total",SP.POP.TOTL,811006,813925,815257,816076,817860,821604,827870,836190,845361,853637,859818,863449,865069,865608,866453,868627,872399,877459,883483,889953
+Fiji,FJI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,4827120096.51656,4892822205.4524,5214236792.19288,5323698866.83316,5754894934.23974,6061204526.3355,6025609709.78998,6241924312.93759,6412425532.57076,6507160715.10832,6593677900.24856,6919076183.45899,7364413511.27213,8093191221.57648,9375290977.58611,10308984097.0623,10552450502.8774,11065468557.7563,11639696514.4538,11799710852.3755
+Finland,FIN,"Population, total",SP.POP.TOTL,5176209,5188008,5200598,5213014,5228172,5246096,5266268,5288720,5313399,5338871,5363352,5388272,5413971,5438972,5461512,5479531,5495303,5508214,5515525,5520314
+Finland,FIN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,137831205768.922,144213025306.481,149214583627.633,150389244509.753,164126870712.683,168848220995.197,182879915808.363,200493060394.021,213338084144.169,205444151668.081,211781871684.258,221315089725.945,222320431042.548,226606741870.886,230341376307.58,235221001780.708,248155471609.02,261590094221.63,273274599947.778,282682864368.635
+France,FRA,"Population, total",SP.POP.TOTL,60912500,61357430,61805267,62244886,62704895,63179351,63621381,64016225,64374984,64707040,65027507,65342780,65659809,65998687,66312067,66548272,66724104,66864379,66965912,67059887
+France,FRA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1614956006369.75,1717864359700.64,1781288096300.79,1774939575254.32,1845786479339.73,1959874866060.42,2104482410624.18,2225392718411.68,2308471504999.58,2297731448402.57,2390316382553.47,2511515271090.53,2528097207038.72,2666950863865.02,2719730300347.34,2777946957121.9,2924396537469.08,3065793971593.25,3180957643991.66,3379235791179.85
+French Polynesia,PYF,"Population, total",SP.POP.TOTL,240686,244931,248972,252703,255992,258780,261010,262721,264061,265254,266455,267698,268998,270328,271705,273124,274575,276103,277679,279287
+French Polynesia,PYF,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+Gabon,GAB,"Population, total",SP.POP.TOTL,1228360,1258003,1288315,1319953,1353795,1390549,1430152,1472575,1518540,1568928,1624140,1684635,1749682,1817071,1883800,1947686,2007873,2064823,2119275,2172579
+Gabon,GAB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,14560360616.8048,15533771682.1043,16373734921.2765,16685199605.6481,16403352230.3776,18466927308.8567,17838899425.0902,19077719130.1454,18981183917.5181,19713699134.9328,20931794546.4329,22729974762.4942,24187166236.5611,24803028471.2847,27448373201.6419,26252661543.3818,26457471076.3386,29027529828.7639,29882361204.4177,31328419269.158
+"Gambia, The",GMB,"Population, total",SP.POP.TOTL,1317703,1360074,1404261,1449925,1496527,1543741,1591445,1639848,1689285,1740279,1793196,1848147,1905011,1963711,2024042,2085860,2149139,2213894,2280102,2347706
+"Gambia, The",GMB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,2391096788.02665,2579595445.05702,2507399451.28304,2780913260.15132,3137919845.09736,3158295371.00478,3229331373.09398,3429568507.91704,3729476358.48792,3996504312.8178,4281627558.09595,4002461735.10188,4103967194.68281,4076131550.67062,4006121655.97443,4207793058.65318,4362686911.60081,4502345653.44125,4914925185.03292,5304139529.51512
+Georgia,GEO,"Population, total",SP.POP.TOTL,4077131,4014373,3978515,3951736,3927340,3902469,3880347,3860158,3848449,3814419,3786695,3756441,3728874,3717668,3719414,3725276,3727505,3728004,3726549,3720382
+Georgia,GEO,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,12812347844.1636,13640959575.383,14569475526.9638,16469948371.4657,18107946265.3463,20363417437.7528,23213208401.1407,26381442604.0567,27320718279.6863,26539639982.1387,28134208151.5415,30519613226.4118,36257009738.4886,38723289569.7477,42492961933.5167,44015459770.8487,45709833895.1989,48180654829.8018,52267983795.5271,55865774651.3008
+Germany,DEU,"Population, total",SP.POP.TOTL,82211508,82349925,82488495,82534176,82516260,82469422,82376451,82266372,82110097,81902307,81776930,80274983,80425823,80645605,80982500,81686611,82348669,82657002,82905782,83132799
+Germany,DEU,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,2224328583943.71,2320728939186.94,2381368004844.2,2440703477248.71,2598811221466.52,2643689105682.11,2858148381212.31,3025439825143.71,3133424995825.21,3086256642388.37,3251502171529.72,3502470398953.27,3570904139239.83,3712581829258.22,3883389666513.64,3983765536763.11,4266415919562.53,4493919482771.19,4641067663123.44,4795662518549.85
+Ghana,GHA,"Population, total",SP.POP.TOTL,19278856,19756928,20246381,20750299,21272323,21814642,22379055,22963946,23563825,24170940,24779619,25387710,25996449,26607642,27224472,27849205,28481946,29121471,29767108,30417856
+Ghana,GHA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,33524661532.0692,35837806716.777,38027118472.8837,40731393775.2881,44150796112.8559,48520510267.9119,53260838519.3104,57103190612.7684,63642248133.0456,67264314065.1944,72467930100.5584,83129912555.5813,93322034398.2884,136957246170.144,143670731901.313,140624612115.26,136623482244.943,141646107789.028,155166742061.052,167736159566.294
+Gibraltar,GIB,"Population, total",SP.POP.TOTL,31077,31602,32102,32555,32928,33219,33417,33517,33559,33565,33585,33612,33646,33692,33725,33736,33737,33728,33718,33701
+Gibraltar,GIB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+Greece,GRC,"Population, total",SP.POP.TOTL,10805808,10862132,10902022,10928070,10955141,10987314,11020362,11048473,11077841,11107017,11121341,11104899,11045011,10965211,10892413,10820883,10775971,10754679,10732882,10716322
+Greece,GRC,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,212412906521.369,229451460132.503,246506012516.46,260114542212.294,275403545164.743,281471978035.928,308410889366.803,315270202791.407,331637075588.565,330031550468.558,306864932903.115,282370859957.681,281120340956.062,285824079577.244,294315512120.89,291510428686.154,299834879612.122,313451120014.443,324064779565.834,335971429806.141
+Greenland,GRL,"Population, total",SP.POP.TOTL,56200,56350,56609,56765,56911,56935,56774,56555,56328,56323,56905,56890,56810,56483,56295,56114,56186,56172,56023,56225
+Greenland,GRL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+Grenada,GRD,"Population, total",SP.POP.TOTL,102833,103249,103634,104005,104347,104661,104933,105190,105456,105789,106233,106796,107446,108170,108902,109599,110261,110874,111454,112003
+Grenada,GRD,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,734808668.997312,724132428.505397,753881927.286094,843000490.898453,838101389.203375,1053766192.82723,1041581983.0442,1119875083.74834,1155463272.22854,1052844457.55335,1094309142.21063,1138673428.05649,1148161514.25938,1240710384.87123,1291198872.90021,1373363286.20348,1505284098.72797,1631169567.08909,1734364871.14465,1820223209.9485
+Guam,GUM,"Population, total",SP.POP.TOTL,155329,156401,157176,157717,158101,158402,158648,158847,159036,159226,159444,159692,159996,160407,161016,161853,162951,164281,165768,167294
+Guam,GUM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+Guatemala,GTM,"Population, total",SP.POP.TOTL,11589761,11871565,12147518,12415334,12682108,12948292,13213330,13477017,13739299,14000190,14259687,14521515,14781942,15043981,15306316,15567419,15827690,16087418,16346950,16604026
+Guatemala,GTM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,55436071588.0517,58423901749.5849,60973451961.9998,63730651285.231,67330576884.2977,71639439847.8173,77407216882.2785,84307587083.0798,89061029301.2988,89842025531.9565,93393580375.0718,98829682628.6572,105811146465.384,109413614487.413,115639774376.543,124517142887.857,127323281385.564,131000150292.011,138427160736.326,146879602730.045
+Guinea,GIN,"Population, total",SP.POP.TOTL,8240730,8417081,8586074,8753093,8925743,9109581,9307425,9518162,9738792,9964469,10192176,10420471,10652029,10892810,11150977,11432088,11738441,12067539,12414318,12771246
+Guinea,GIN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,9920558236.99188,10462436057.565,11331156275.4814,11199918764.5244,11747323939.0738,12286336393.9249,13567930368.8496,14877927221.0885,15745640858.2095,15497677235.8985,16665347006.9948,17815489449.8391,18819737532.167,18776195192.1864,19471089653.3749,20460340883.3828,24108942384.3006,29066574011.7813,29963997150.6944,32168440980.3898
+Guinea-Bissau,GNB,"Population, total",SP.POP.TOTL,1201301,1227106,1254453,1283305,1313492,1344930,1377581,1411543,1446936,1483921,1522599,1562989,1604979,1648257,1692439,1737202,1782437,1828146,1874309,1920922
+Guinea-Bissau,GNB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1245250077.79105,1290990559.36951,1324865081.05661,1354249893.99777,1434589411.30001,1542192301.95513,1642203212.75516,1749063681.3057,1820547733.8338,1902652560.45922,2030006201.0127,2262774007.23512,2187093803.73918,2205787895.62385,2415238570.21739,2842389875.31444,3191999767.76646,3526798653.49018,3734300631.46878,4267587492.64397
+Guyana,GUY,"Population, total",SP.POP.TOTL,746715,745206,744789,745143,745737,746163,746343,746474,746817,747718,749436,752028,755399,759285,763380,767432,771366,775221,779004,782766
+Guyana,GUY,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3009699061.64372,3124587257.8627,3202193511.38486,3279330998.25765,3458833622.83972,3532228541.45415,4003249323.3272,4358404507.89151,4473814101.71071,4670274719.11104,4853150909.08941,5222514849.01609,5572885371.12253,5942399128.49836,6287536367.09898,6469630294.56216,6722036893.02856,6806377196.40416,7235915307.07568,7746391573.0876
+Haiti,HTI,"Population, total",SP.POP.TOTL,8463806,8608819,8754150,8900104,9047077,9195288,9344785,9495328,9646580,9798046,9949322,10100320,10250930,10400673,10549008,10695542,10839970,10982366,11123176,11263077
+Haiti,HTI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,11964700189.2746,12061370869.5294,12173079053.8234,12426628463.5777,12335060575.9589,12882424019.9465,13705750370.178,14529693062.1158,14944372403.3397,15539598839.4582,15251416680.2375,16464253341.1231,16440541937.5505,17548110518.666,18234505008.3534,18308690377.402,19153302075.9352,19492773518.3174,20230734762.7718,20153439276.3162
+Honduras,HND,"Population, total",SP.POP.TOTL,6574509,6751912,6929265,7106319,7282953,7458985,7634298,7808518,7980955,8150775,8317470,8480671,8640691,8798521,8955589,9112916,9270795,9429013,9587522,9746117
+Honduras,HND,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,16508738719.9366,17280507734.3576,18133692998.8405,19178423048.0611,20773807318.9273,22824412781.0451,25008545050.3809,27739987380.8685,29311524918.5336,28642526365.4201,29729364273.93,31469455075.9805,32447867601.1165,33761586548.5521,36611449125.7829,40945953789.8257,44383060571.3461,49235457099.1837,51275999310.5713,53703314264.4892
+"Hong Kong SAR, China",HKG,"Population, total",SP.POP.TOTL,6665000,6714300,6744100,6730800,6783500,6813200,6857100,6916300,6957800,6972800,7024200,7071600,7150100,7178900,7229500,7291300,7336600,7391700,7451000,7507400
+"Hong Kong SAR, China",HKG,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,189820368906.922,197977937213.81,201127217069.696,215146200495.275,239130027430.84,260658394780.65,292675217844.809,322582288590.381,344599699656.119,329453225166.724,352799114972.927,379780810643.688,378882956243.058,392752239125.688,404211342098.222,418904765973.878,430361863158.585,461609726417.992,487933404311.381,492465939619.043
+Hungary,HUN,"Population, total",SP.POP.TOTL,10210971,10187576,10158608,10129552,10107146,10087065,10071370,10055780,10038188,10022650,10000023,9971727,9920362,9893082,9866468,9843028,9814023,9787966,9775564,9769949
+Hungary,HUN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,114045211135.924,126801506496.016,139177319914.304,148325802239.665,154021963134.902,161419505675.344,173625083151.775,177597007603.051,194072486578.888,198356724319.117,206068856612.511,217312698268.979,219987870432.761,235501990439.515,241704812304.023,250589735184.109,264903551296.285,277433118025.225,296328671701.857,319980967377.16
+Iceland,ISL,"Population, total",SP.POP.TOTL,281205,284968,287523,289521,292074,296734,303782,311566,317414,318499,318041,319014,320716,323764,327386,330815,335439,343400,352721,361313
+Iceland,ISL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,8064056447.99737,8781736929.05093,9390431859.41103,9381468561.22915,10025240340.2104,10526296722.7951,11026180884.6178,12073064240.4066,10807260433.594,10708134789.6414,10237034204.2611,11022605832.7629,11766282593.5493,13631427233.6515,14240759323.4076,15376113336.7176,17103762803.3958,18673233568.213,19724344190.2306,22101273413.3938
+India,IND,"Population, total",SP.POP.TOTL,1056575549,1075000085,1093317189,1111523144,1129623456,1147609927,1165486291,1183209472,1200669765,1217726215,1234281170,1250288729,1265782790,1280846129,1295604184,1310152403,1324509589,1338658835,1352617328,1366417754
+India,IND,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,2190686809323.87,2351372617361.02,2484358366592.28,2727424215141.91,3023959793295.09,3364649501516.79,3743550659626.91,4153719586236.6,4357404051268.08,4735817203686.97,5173298943912.42,5568976388344.3,6080904818549.95,6396857208684.85,6700838434194.09,7076731493413.66,7577059418948.02,8191428149143.83,8899126431645.27,9507241234000.71
+Indonesia,IDN,"Population, total",SP.POP.TOTL,211513823,214427417,217357793,220309469,223285676,226289470,229318262,232374245,235469762,238620563,241834215,245116206,248452413,251806402,255129004,258383256,261554226,264645886,267663435,270625568
+Indonesia,IDN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,936869323318.277,1023368245083.65,1094409163250.38,1157760861349.83,1239077076507.84,1346480241917.56,1472854684302.26,1610868377528.11,1751105373682.55,1847157749729.14,2002209911115.04,2167767372892.09,2345311900455.84,2459271038444.92,2534329758163.13,2559879525286.4,2657025035196.4,2802422575187.42,3026018847669.79,3229572832486.22
+"Iran, Islamic Rep.",IRN,"Population, total",SP.POP.TOTL,65623405,66449112,67284796,68122938,68951281,69762347,70554760,71336475,72120604,72924837,73762519,74634956,75539862,76481943,77465753,78492215,79564016,80673951,81800269,82913906
+"Iran, Islamic Rep.",IRN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,675841187412.547,696994128225.243,761316821245.031,842398737386.086,899769697896.238,957212207172.177,1037798895728.35,1155249643133.39,1181336226840.72,1198040521436.13,1282857044909.04,1344189230057.48,1213336909094.26,1176150169010.8,1183766862250.56,1069286038839.47,1118284077512.34,1174847753747.62,..,..
+Iraq,IRQ,"Population, total",SP.POP.TOTL,23497585,24208180,24931919,25644499,26313838,26922284,27448124,27911248,28385746,28973162,29741976,30725300,31890011,33157050,34411951,35572261,36610632,37552781,38433600,39309783
+Iraq,IRQ,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,223945695599.99,233939007709.488,219010054391.258,152008077472.552,240719232174.42,235318954839.301,277698213537.278,295172176352.744,346250555535.968,361115320741.941,382579570985.527,414739424314.827,485908441354.314,512778489299.524,488228998508.139,366501386393.93,359100794117.949,408986068274.349,416090939901.668,443346809470.494
+Ireland,IRL,"Population, total",SP.POP.TOTL,3805174,3866243,3931947,3996521,4070262,4159914,4273591,4398942,4489544,4535375,4560155,4580084,4599533,4623816,4657740,4701957,4755335,4807388,4867316,4941444
+Ireland,IRL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,100113059734.314,107470352532.356,116072235760.394,124855538574.355,135840842759.092,145668071091.729,165648719283.898,177837354517,172166896183.693,157923766321.604,165548185550.13,166561101149.351,171504812215.699,186850967298.959,200789098958.416,249588740149.407,278957902309.884,298263305224.758,322469887775.013,336252300615.224
+Isle of Man,IMN,"Population, total",SP.POP.TOTL,76941,77703,78318,78884,79520,80305,81285,82408,83508,84376,84857,84886,84533,83976,83488,83234,83287,83598,84077,84584
+Isle of Man,IMN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+Israel,ISR,"Population, total",SP.POP.TOTL,6289000,6439000,6570000,6689700,6809000,6930100,7053700,7180100,7308800,7485600,7623600,7765800,7910500,8059500,8215700,8380100,8546000,8713300,8882800,9053300
+Israel,ISR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,146996682279.526,153795709264.995,159684729036.156,153577205649.943,166628609112.852,170591268132.874,180310175239.801,196904817585.902,196595302964.286,200830172172.911,215667488792.448,233970859364.682,244257169060.297,269603510735.328,279377873188.598,294407526010.901,320477649412.972,336098643414.734,357819136573.777,381508561013.861
+Italy,ITA,"Population, total",SP.POP.TOTL,56942108,56974100,57059007,57313203,57685327,57969484,58143979,58438310,58826731,59095365,59277417,59379449,59539717,60233948,60789140,60730582,60627498,60536709,60421760,60297396
+Italy,ITA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1536251752977.11,1592989057386.54,1632366431124.16,1663483685393.26,1700508305410.16,1749401793158.77,1892183143469.26,1994618888873.8,2070619017116.37,2045551343726.36,2081077565453.29,2167673493812.34,2169728284637.12,2183586713124.53,2200447377386.96,2226028747655.71,2427375662810.54,2543341126089.71,2615143671973.54,2687760563023.36
+Jamaica,JAM,"Population, total",SP.POP.TOTL,2654701,2674702,2692845,2709437,2725015,2740003,2754407,2768227,2781876,2795837,2810460,2825929,2842132,2858709,2875136,2891021,2906238,2920853,2934855,2948279
+Jamaica,JAM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,16228041675.6903,16645742257.0425,16954752900.4538,17982395364.7117,18754092245.9084,19450170551.3636,20809329777.3449,21678729182.2425,22157235803.6987,21046043678.58,21372671662.9003,22231524588.9226,22956406890.3935,23565528689.09,24045139424.8735,24640731094.2126,25588822115.0276,27208298032.1934,27920525731.4864,28799949401.4959
+Japan,JPN,"Population, total",SP.POP.TOTL,126843000,127149000,127445000,127718000,127761000,127773000,127854000,128001000,128063000,128047000,128070000,127833000,127629000,127445000,127276000,127141000,126994511,126785797,126529100,126264931
+Japan,JPN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3452930586529.41,3546345231235.99,3639730784809.42,3752540602986.5,3950153980558.91,4133438974348.17,4341515713395.91,4548813737724.68,4573202767880.07,4354890214696.97,4596530742002.53,4702730270932.62,4873844260962.84,5133797407300.4,5166025961476.02,5333311667417.55,5246871690810.19,5364983572337.73,5420858766097.59,5654421763505.28
+Jordan,JOR,"Population, total",SP.POP.TOTL,5122493,5217336,5317506,5434030,5580244,5765635,5991540,6255280,6556478,6893260,7261539,7663131,8090872,8520420,8920049,9266575,9551467,9779173,9956011,10101694
+Jordan,JOR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,30393012055.2555,32891728661.6786,34974460374.9464,37307713592.1815,41899452079.2101,46732800031.6403,52229398474.1985,58548112453.5047,63092518458.0793,66862417266.3191,67599734908.1306,70723209041.2385,72809011999.9602,77738120211.2599,79805909438.9503,85486442885.3451,87984422971.6304,95750703564.1376,99946566925.5574,103465944256.527
+Kazakhstan,KAZ,"Population, total",SP.POP.TOTL,14883626,14858335,14858948,14909018,15012985,15147029,15308084,15484192,15674000,16092822,16321872,16557201,16792089,17035550,17288285,17542806,17794055,18037776,18276498.5,18513930
+Kazakhstan,KAZ,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,107939394934.675,126916049786.246,142962263860.528,157161146492.615,174829230289.961,190542280469.363,212938577584.93,235954730059.164,242322806772.202,257942621312.301,272722282122.584,294494040831.081,319954479748.818,373088584433.754,383650191926.991,381745816548.317,382306984208.955,399678715598.354,419091035222.809,445227412201.649
+Kenya,KEN,"Population, total",SP.POP.TOTL,31964557,32848564,33751739,34678779,35635271,36624895,37649033,38705932,39791981,40901792,42030676,43178257,44343410,45519889,46699981,47878336,49051686,50221473,51393010,52573973
+Kenya,KEN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,51242963036.4607,54291635343.8476,55555143737.2785,58149160259.5733,62892402118.2424,69193318822.4205,75717180970.7134,82927905459.9744,85046293991.7905,88499791982.3419,96815313092.1344,105284725887.098,111702555544.44,124600115565.074,139107161405.764,158922253444.329,175712039306.777,199324373582.831,217492984098.153,232294328998.953
+Kiribati,KIR,"Population, total",SP.POP.TOTL,84396,85849,87305,88835,90499,92325,94343,96527,98761,100930,102927,104728,106370,107890,109391,110930,112524,114158,115847,117606
+Kiribati,KIR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,217156131.67745,232653434.252958,227221872.952441,222507516.798848,217292400.466397,228478024.025504,232628480.663213,248005509.18067,252582083.045832,243191331.125525,258637330.475909,254926735.893375,295962984.145106,341023661.572294,394689227.134109,481818499.250186,443604706.489874,489406598.949437,495003038.427024,546379236.403899
+"Korea, Dem. People’s Rep.",PRK,"Population, total",SP.POP.TOTL,22929075,23132980,23339453,23542426,23732731,23904167,24054864,24188331,24310142,24428341,24548836,24673385,24800612,24929452,25057752,25183833,25307744,25429985,25549819,25666161
+"Korea, Dem. People’s Rep.",PRK,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+"Korea, Rep.",KOR,"Population, total",SP.POP.TOTL,47008111,47370164,47644736,47892330,48082519,48184561,48438292,48683638,49054708,49307835,49554112,49936638,50199853,50428893,50746659,51014947,51217803,51361911,51606633,51709098
+"Korea, Rep.",KOR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,866224637084.584,926568183291.801,1015663096721.17,1053487194629.71,1141674348593.57,1205046439840.2,1298121837175.56,1411147965489.67,1469369248901.13,1459437700151.26,1575219821834.69,1635336002448.05,1702177999918.46,1737909546523.48,1801276221059.28,1939898096852.87,2033944222873.06,2114477220937.47,2180192386669,2245536234863.2
+Kosovo,XKX,"Population, total",SP.POP.TOTL,1700000,1701154,1702310,1703466,1704622,1705780,1719536,1733404,1747383,1761474,1775680,1791000,1807106,1818117,1812771,1788196,1777557,1791003,1797085,1794248
+Kosovo,XKX,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,9448780718.94259,10319967010.2791,11159472454.892,12328905773.4844,13202725427.3682,13420011280.9226,14032931934.7061,15065975384.9805,15786623490.4927,16375362781.983,16729091063.4254,17396818269.5142,18103723637.3237,19243542089.8682,20379566169.0025,21688653507.3278
+Kuwait,KWT,"Population, total",SP.POP.TOTL,2045123,2103282,2136997,2161626,2200492,2270198,2373672,2504019,2656009,2821045,2991884,3168060,3348853,3526376,3690941,3835591,3956875,4056099,4137312,4207083
+Kuwait,KWT,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,135299805296.8,134200916856.49,133934535618.162,157473075417.704,181118682877.255,206878546765.969,233175724142.53,253816914309.589,256739472146.302,240304338140.048,237522519195.452,262429662609.487,297080892082.726,296212485278.017,282130555688.171,204641979189.488,206128302066.468,240345871255.75,247070912844.791,..
+Kyrgyz Republic,KGZ,"Population, total",SP.POP.TOTL,4898400,4945100,4990700,5043300,5104700,5162600,5218400,5268400,5318700,5383300,5447900,5514600,5607200,5719600,5835500,5956900,6079500,6198200,6322800,6456900
+Kyrgyz Republic,KGZ,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,8582788124.17997,9445299068.39432,9620514406.97036,10528230099.1611,11405670075.3493,11867795448.6145,12852625677.4441,14379148851.6645,15456671499.0971,16049689287.6332,15740559548.7582,16250508927.3612,19767684145.2302,21790220340.6309,23953408501.6723,24127188673.9971,26964623071.125,29771394476.3694,32213584892.4963,32743237340.9162
+Lao PDR,LAO,"Population, total",SP.POP.TOTL,5323700,5409582,5493246,5576640,5662208,5751676,5846074,5944948,6046620,6148623,6249165,6347567,6444530,6541304,6639756,6741164,6845846,6953035,7061507,7169455
+Lao PDR,LAO,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,9354054066.72607,10128844090.9953,10925727062.9119,11565351478.2267,12833062902.6013,14423987196.9701,15626237268.1888,17634679034.541,19143604679.9074,21142119992.2366,22373664603.9142,24562505654.9469,29339581968.1696,32738513911.9639,37279715377.7992,39733495399.3774,44835845958.1785,47800441427.6112,52320902374.4912,57060254694.0481
+Latvia,LVA,"Population, total",SP.POP.TOTL,2367550,2337170,2310173,2287955,2263122,2238799,2218357,2200325,2177322,2141669,2097555,2059709,2034319,2012647,1993782,1977527,1959537,1942248,1927174,1912789
+Latvia,LVA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,18958427819.7615,21141588611.7692,23262996772.4508,25069950348.6161,27035534506.2247,30655830475.7041,34043840581.1906,38692429651.4441,41843251555.0613,38815194342.2175,37290854957.7853,40718164748.9288,43009656243.271,45570135257.205,47389285714.2857,48824891694.3922,51608651149.5449,55079441674.1518,58231115700.1278,60766842719.0905
+Lebanon,LBN,"Population, total",SP.POP.TOTL,3842778,3991001,4182205,4388375,4569378,4698763,4759753,4767344,4764741,4813026,4953061,5202343,5538634,5914621,6262410,6532678,6711121,6811873,6848925,6855713
+Lebanon,LBN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,35040734794.1739,36352321493.6295,36609276889.7272,33656173715.177,42476313044.2458,46345388708.0947,49273874854.1886,56580458896.5347,61987320720.5013,67409785454.3513,73126239449.1207,75853128476.6476,81684754405.0447,88008051378.2797,93092365035.804,97376540515.4046,102281959781.688,108596513314.89,108823275394.388,104646451621.174
+Lesotho,LSO,"Population, total",SP.POP.TOTL,2032804,2035740,2029829,2018348,2005940,1996114,1989939,1986922,1987129,1990131,1995581,2003787,2014990,2028519,2043437,2059021,2075001,2091412,2108132,2125268
+Lesotho,LSO,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3256788969.27872,3913059198.29636,4007732093.07968,4213292015.02062,4222495514.4261,4262511673.4545,4395353578.81672,5261996070.51886,5601279294.0217,5576746839.8704,5732442949.77979,5867436520.2687,5807263380.73409,6324234618.26154,6791590360.36545,7160368698.95524,7170407008.26459,6588747322.30217,6739409120.09678,6986676687.08345
+Liberia,LBR,"Population, total",SP.POP.TOTL,2848456,2953927,3024729,3077058,3135651,3218116,3329211,3461911,3607860,3754133,3891356,4017443,4135659,4248334,4359505,4472230,4586788,4702228,4818977,4937374
+Liberia,LBR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,2501365581.1216,2462075674.93199,2582706058.45283,1775793699.67672,1916106938.6771,2134870484.98442,2456347243.47831,2838061025.64274,3169296955.52172,3402304565.41736,3620075701.16098,4164518138.61442,4387996479.62735,5130477809.93594,5386476328.91385,5269268962.54026,5783171659.71288,6469862956.51871,6395618956.68225,6497975683.41754
+Libya,LBY,"Population, total",SP.POP.TOTL,5357891,5443248,5531089,5620547,5710154,5798614,5886872,5974787,6058748,6133984,6197663,6247439,6285750,6320359,6362037,6418315,6492164,6580724,6678567,6777452
+Libya,LBY,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,98907556524.4814,114707180069.975,119683554072.231,138242554223.013,155161329132.711,168729376086.617,175860708442.341,175981228401.748,185208123495.146,71848542675.5916,149054487640.829,124785429204.8,92283833247.2583,81779062375.7705,74186507345.4983,90063923226.6159,104447488316.605,109021556569.616
+Liechtenstein,LIE,"Population, total",SP.POP.TOTL,33184,33552,33879,34175,34452,34713,34970,35217,35471,35727,35994,36293,36615,36934,37223,37470,37658,37800,37910,38019
+Liechtenstein,LIE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+Lithuania,LTU,"Population, total",SP.POP.TOTL,3499536,3470818,3443067,3415213,3377075,3322528,3269909,3231294,3198231,3162916,3097282,3028115,2987773,2957689,2932367,2904910,2868231,2828403,2801543,2786844
+Lithuania,LTU,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,29073456226.9132,32362510660.0322,35750858862.3134,40193556163.8145,43151663312.5329,47618000652.6305,52865536898.9319,59375969176.707,64082336397.9652,58509746215.4088,61707606732.2113,67086687879.9077,71326873608.2146,77165315430.1258,81588368630.5696,80707965908.1476,85447564215.7165,92095203351.2039,97160699030.8492,103153905292.877
+Luxembourg,LUX,"Population, total",SP.POP.TOTL,436300,441525,446175,451630,458095,465158,472637,479993,488650,497783,506953,518347,530946,543360,556319,569604,582014,596336,607950,619896
+Luxembourg,LUX,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,21402834237.7511,22205396698.8394,22170831121.5512,22111143439.9495,26868080040.165,29304952011.0148,29984532326.2853,34891089859.2331,34990188934.9977,27761239146.6041,31327971287.1073,32928110626.5723,33825803107.6655,34690043272.6355,37434314552.7056,38500383076.5302,41001079837.5551,43381072945.2113,45229329379.7453,48082741436.7121
+"Macao SAR, China",MAC,"Population, total",SP.POP.TOTL,427782,437938,448821,460165,471597,482858,493799,504511,515239,526400,538219,550832,564039,577372,590208,602085,612836,622585,631636,640445
+"Macao SAR, China",MAC,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,13706107536.5062,15627085786.6657,17267184835.5279,19329615484.4758,24278902454.7137,26760633799.454,29988063964.298,39046721018.6114,36971369691.5926,38224456299.8988,47597861283.4551,57350950643.267,64100909366.4591,74713533743.9956,77917473234.3904,64809126006.3126,65773504327.3786,72268933052.8813,77872092849.4063,..
+Madagascar,MDG,"Population, total",SP.POP.TOTL,15766806,16260932,16765117,17279141,17802997,18336724,18880269,19433530,19996473,20569117,21151640,21743967,22346641,22961253,23589887,24234088,24894380,25570540,26262368,26969307
+Madagascar,MDG,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,20000324221.3427,21719978128.7289,19333172594.0745,21648258647.6888,23466060029.0376,25169793768.2069,27272882274.5452,30029763756.3776,32703464533.5358,31515710894.3531,31981783671.9735,33215344356.2567,33270003412.2222,34214331592.4778,35835765900.7156,36248277778.3637,38589859315.1109,39408585195.5646,42114816931.3737,44744349303.4543
+Malawi,MWI,"Population, total",SP.POP.TOTL,11148758,11432000,11713664,12000181,12301838,12625952,12973699,13341806,13727890,14128155,14539612,14962112,15396005,15839269,16289540,16745303,17205289,17670260,18143315,18628747
+Malawi,MWI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,7468702620.06217,7261461674.75702,7517169630.58197,8091700822.89291,8757644017.49567,9347339330.45314,10097467130.9573,11418403655.3996,12536347425.6092,13610993240.9149,14625812055.4388,15674391716.7311,15561165076.6142,17042708429.6565,17109325958.1925,16473997716.5332,17560554548.0402,17887349679.4659,18899964803.5179,20072440824.3269
+Malaysia,MYS,"Population, total",SP.POP.TOTL,23194257,23709119,24208391,24698819,25190652,25690611,26201961,26720370,27236006,27735040,28208035,28650955,29068159,29468872,29866559,30270962,30684804,31105028,31528585,31949777
+Malaysia,MYS,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,275216955851.54,285306500876.983,307840083267.587,335817083278.505,369162507040.03,404099396996.24,446508519665.673,491378118390.59,520367694890.533,521709642166.794,560108318399.07,607129184341.237,643498757192.916,668794343781.363,710620293507.506,730292560312.552,762175793250.096,805535724414.304,857003074416.584,916167930850.023
+Maldives,MDV,"Population, total",SP.POP.TOTL,279398,286306,294186,302683,311265,319608,327487,335169,343452,353398,365734,380495,397237,415593,435015,454915,475513,496402,515696,530953
+Maldives,MDV,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,2253180771.23407,2257030705.29697,2466212611.27598,2830947399.42371,3101821749.0097,2781537609.64207,3616677052.30743,3489661777.15557,4014499658.82216,3817992392.22995,4090164279.80897,4606288827.99661,4925577794.19348,5462304304.18157,6289083101.74374,7011178133.5159,7611970620.07724,8222612688.896,8867339111.63474,9491560182.08956
+Mali,MLI,"Population, total",SP.POP.TOTL,10946445,11271600,11616887,11982695,12369070,12775516,13203378,13651464,14113577,14581429,15049353,15514591,15979499,16449864,16934220,17438778,17965429,18512394,19077690,19658031
+Mali,MLI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,12292742587.3803,13941544624.6624,14389781143.677,16466831473.1814,17184734582.9409,18883602839.9178,20273266451.7546,21559100729.8093,23141943944.9032,24091169427.4465,25839494612.5296,27331464772.5263,27142665899.9272,28848666641.2997,31565335369.9749,34647080536.5333,38259683413.4737,40265008470.82,43400282213.7382,46409879473.0827
+Malta,MLT,"Population, total",SP.POP.TOTL,390087,393028,395969,398582,401268,403834,405308,406724,409379,412477,414508,416268,420028,425967,434558,445053,455356,467999,484630,502653
+Malta,MLT,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,7418506646.99118,7781794445.5462,8182922609.86114,8300895889.19964,8567771015.99112,8691958769.47538,9070977858.96685,9805802592.27267,10452841112.9785,10054235517.1331,10930839608.3118,11519839400.3933,11856532171.4899,12659130736.1534,13946172710.9629,15205171356.2142,16149880438.2282,17705167517.0901,19337863104.5485,20956607516.0043
+Marshall Islands,MHL,"Population, total",SP.POP.TOTL,50753,51422,52370,53456,54476,55258,55767,56051,56174,56250,56366,56531,56717,56938,57179,57439,57735,58058,58413,58791
+Marshall Islands,MHL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,165195612.572103,178858139.279194,183887750.523852,185037714.030403,192632495.991304,205190881.691055,208725029.405694,220098824.178841,208418571.232958,212534146.256352,223890702.074199,225123576.183362,214374318.110595,232239330.227536,245267634.124603,271674728.831819,271055072.124151,282007133.915327,297369192.405849,..
+Mauritania,MRT,"Population, total",SP.POP.TOTL,2630219,2702400,2778099,2857148,2939247,3024194,3111906,3202517,3296238,3393409,3494195,3598648,3706554,3817494,3930896,4046301,4163534,4282574,4403319,4525696
+Mauritania,MRT,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,8062494581.35486,7954577709.2746,8621231271.65362,9358823794.11214,10061624427.466,11199079617.1087,13089954032.4626,13245639969.6864,13593241977.7643,13929125581.5186,14118200542.0269,14841521503.2747,15331799325.0023,16624623434.4163,16238197197.5205,16498775890.9074,19213092379.4616,21432474968.9306,22603330085.99,24201598237.4835
+Mauritius,MUS,"Population, total",SP.POP.TOTL,1186873,1196287,1204621,1213370,1221003,1228254,1233996,1239630,1244121,1247429,1250400,1252404,1255882,1258653,1260934,1262605,1263473,1264613,1265303,1265711
+Mauritius,MUS,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,10676157583.7624,11349047487.8424,11712469983.9639,12537796070.2914,13473040517.5956,14152520099.7114,15421530885.5241,17078312574.2382,18164830360.8768,18696525733.535,19451212765.7378,20460710909.864,22061568419.1301,24215842266.8622,25119627939.9348,26339259783.019,28287860057.6668,29764244947.5412,31591720797.2744,33423662610.0243
+Mexico,MEX,"Population, total",SP.POP.TOTL,98899845,100298153,101684758,103081020,104514932,106005203,107560153,109170502,110815271,112463887,114092963,115695473,117274155,118827161,120355128,121858258,123333376,124777324,126190788,127575529
+Mexico,MEX,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1073235252932.68,1095604356342.78,1117965544638.39,1162592493945.24,1244336432872.96,1313762682229.57,1462385582249.25,1533815706563.18,1630569413184.12,1609779367702.41,1720422018790.8,1880967839882.46,1973881601912.17,2004429620594.39,2121554563909.11,2173135864192.38,2319313166992.63,2408228099476.71,2507773305576.86,2526976501908.53
+"Micronesia, Fed. Sts.",FSM,"Population, total",SP.POP.TOTL,107402,107173,107030,106901,106625,106129,105371,104444,103543,102975,102911,103450,104506,105926,107446,108895,110215,111459,112640,113815
+"Micronesia, Fed. Sts.",FSM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,274330744.626663,284999418.801453,290109959.616858,299484123.110739,301947436.818278,319226676.36372,328724559.481847,333493224.758921,327679791.649598,343956873.213831,348030813.436505,364901630.785689,370710582.107805,374936332.76615,372922660.936786,433804248.940122,433988685.906055,442919835.259949,410132530.440214,..
+Moldova,MDA,"Population, total",SP.POP.TOTL,2923783,2917252,2910504,2902320,2895147,2888111,2880095,2873429,2867964,2864346,2861487,2859833,2859458,2858692,2856950,2834530,2802170,2755158,2706049,2657637
+Moldova,MDA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,9167195706.78059,10408612000.934,11713688802.0024,12978142527.6396,14581781329.8495,16164636204.0076,17155634623.328,17763757379.5845,19615837382.5472,17892763278.7317,19629333604.2239,21128784190.6961,23013074857.4494,26216545799.9271,27399046984.958,27755535456.2499,31375154264.0507,33952683757.4524,35940478464.6157,..
+Monaco,MCO,"Population, total",SP.POP.TOTL,32147,32470,32806,33153,33500,33843,34190,34525,34872,35226,35612,36024,36460,36901,37322,37718,38070,38392,38682,38964
+Monaco,MCO,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+Mongolia,MNG,"Population, total",SP.POP.TOTL,2397418,2419588,2443271,2468762,2496391,2526424,2558856,2593820,2631898,2673796,2719896,2770362,2824699,2881792,2940108,2998439,3056359,3113779,3170208,3225167
+Mongolia,MNG,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,8899686949.80145,9391553610.59174,9975244443.39951,10828717692.8553,12322368250.5191,13422679811.4135,15135132305.2825,16951614932.9388,18668342461.7305,18345008310.043,18957879258.1345,22657114467.4965,26658538159.65,28685437151.1049,29864062852.7761,29636387676.1811,30129523615.8258,30263180633.1592,34703168653.3306,36685712934.8347
+Montenegro,MNE,"Population, total",SP.POP.TOTL,604950,607389,609828,612267,613353,614261,615025,615875,616969,618294,619428,620079,620601,621207,621810,622159,622303,622373,622227,622137
+Montenegro,MNE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3815820961.53465,4319638788.8936,4572037360.65309,4751054728.33324,5053944157.5054,5163071370.90954,6531914408.90913,7754226149.23701,8651061175.76346,8073045361.63993,8396291053.15587,9043804769.49049,8750795311.96759,9418324721.96317,9681732511.98603,10387848814.9118,11349484804.517,12469071660.1303,13368506304.4132,14351582083.5051
+Morocco,MAR,"Population, total",SP.POP.TOTL,28793679,29126330,29454768,29782884,30115214,30455561,30804683,31163673,31536811,31929087,32343389,32781850,33241898,33715693,34192347,34663603,35126296,35581294,36029138,36471769
+Morocco,MAR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,102139393685.103,112143605945.752,117850272775.3,127470176032.388,137696016577.266,147428033609.745,163209815787.65,173852230262.43,188005555834.369,195167799335.246,204980497057.706,219548856240.118,221558465714.716,233442913596.092,224028206132.59,242479228111.022,248808416563.671,259109842934.255,272757048440.112,284421831344.95
+Mozambique,MOZ,"Population, total",SP.POP.TOTL,17711927,18221888,18764155,19331100,19910552,20493925,21080110,21673316,22276596,22894710,23531574,24187487,24862648,25560725,26286163,27042002,27829942,28649007,29495962,30366036
+Mozambique,MOZ,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,8177278563.09204,9291411717.77773,9617646908.39962,11422907502.7249,12491543387.1564,13695474387.5857,15041398362.5616,16864703666.6215,18557527238.3764,20461548618.2714,21874221272.845,24418498649.582,25627038662.8078,27637299640.6561,29600102418.1981,34268684504.4287,37128572437.6555,35680284784.8543,38152005615.3217,39514921646.4828
+Myanmar,MMR,"Population, total",SP.POP.TOTL,46719701,47225120,47702171,48148902,48564484,48949924,49301050,49621475,49929642,50250367,50600818,50990615,51413698,51852451,52280807,52680726,53045226,53382581,53708395,54045420
+Myanmar,MMR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,42998704281.2578,48895682639.9269,55658008629.222,64546445659.4268,75283770159.7116,88147560822.8466,102711602963.393,118133238390.898,132774469874.273,147912395072.948,164058393039.433,176855931603.602,184010746021.877,201685064985.604,213072891301.063,225644892096.516,231990221765.927,245826346688.426,266686901622.871,278799517936.018
+Namibia,NAM,"Population, total",SP.POP.TOTL,1794571,1823672,1851523,1879117,1907745,1938320,1971317,2006514,2043394,2081044,2118874,2156701,2194784,2233510,2273430,2314904,2358041,2402603,2448255,2494530
+Namibia,NAM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,9461417729.10618,9704517286.30121,10497547733.6128,11532212592.3895,12799913294.0378,13158659131.6424,14629437172.4061,15355658838.1761,16106047718.351,16234948337.9654,17069770941.2428,18530827058.6351,19680724579.4145,21629943604.1853,23507845287.3846,24438808197.0287,23975062172.4607,23704551385.4182,24124209500.1929,24332228767.2588
+Nauru,NRU,"Population, total",SP.POP.TOTL,10337,10215,10102,9994,9902,9849,9828,9842,9891,9939,10005,10057,10279,10821,11853,12475,13049,12876,12704,12581
+Nauru,NRU,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,48522152.1314013,54333382.4566256,62796220.0520194,72021093.9621256,82081790.6299373,92329590.9487578,126031537.580759,158718129.621484,186738281.898791,194764542.336288,192543303.233466,200349004.70439,223877727.761513
+Nepal,NPL,"Population, total",SP.POP.TOTL,23941110,24347106,24725627,25080872,25419344,25744500,26066693,26382581,26666576,26883535,27013212,27041437,26989862,26917906,26906926,27015031,27261131,27627124,28087871,28608710
+Nepal,NPL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,28462645242.8133,30497155115.9188,30857012519.5828,32668135049.4057,35056496303.3967,37628037997.5669,40262954104.2367,42866801599.5967,46346893790.9807,48920897553.2459,51657022296.6501,54425821378.1911,59206619399.8804,63735009673.0611,70944811652.5188,72284863170.6641,71476639814.489,86617232592.1683,94213081915.6352,102978116883.077
+Netherlands,NLD,"Population, total",SP.POP.TOTL,15925513,16046180,16148929,16225302,16281779,16319868,16346101,16381696,16445593,16530388,16615394,16693074,16754962,16804432,16865008,16939923,17030314,17131296,17231624,17332850
+Netherlands,NLD,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,516852632560.376,530138233974.21,554795790258.896,559371407910.287,585814485091.078,605553877381.32,674800594293.726,718720604254.588,741916192385.952,730026618589.592,751121005301.854,788764031504.728,805602323121.561,838682680044.001,828263670286.029,852766433552.616,877231222533.962,955329960975.533,1001782586018.43,1038101146971.03
+New Caledonia,NCL,"Population, total",SP.POP.TOTL,213230,217324,221490,225296,228750,232250,235750,239250,242750,245950,249750,254350,259000,263650,268050,272400,276550,280350,284060,287800
+New Caledonia,NCL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+New Zealand,NZL,"Population, total",SP.POP.TOTL,3857700,3880500,3948500,4027200,4087500,4133900,4184600,4223800,4259800,4302600,4350700,4384000,4408100,4442100,4509700,4595700,4693200,4793900,4841000,4917000
+New Zealand,NZL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,78297997495.1371,82895606558.8895,87389067382.274,91938827508.2597,96743282770.2947,99289747947.8827,108365512926.595,115278120752.581,117980470098.457,126670076884.423,129222027987.92,137009721215.547,139353582322.271,154545145745.547,161245340209.477,166416913074.36,181297312894.525,188551971011.741,196320021186.878,209984738791.131
+Nicaragua,NIC,"Population, total",SP.POP.TOTL,5069302,5145366,5219328,5292118,5364935,5438690,5513763,5590055,5667432,5745526,5824065,5903039,5982526,6062454,6142733,6223240,6303974,6384855,6465513,6545502
+Nicaragua,NIC,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,13551689562.5361,14175391303.2217,14595236258.185,15275517390.3171,16590298964.1512,18013422032.0332,19166977602.7244,20799600129.2365,21938409049.3694,21273341014.7148,22524861033.4143,24463198980.6977,25699434373.9683,27117096696.4901,29554114307.5316,32052201357.1565,34930273712.1284,37321575970.9361,36795945821.0625,35912875866.6251
+Niger,NER,"Population, total",SP.POP.TOTL,11331557,11751365,12189983,12647984,13125916,13624467,14143971,14685399,15250908,15843133,16464025,17114761,17795191,18504255,19240157,20001663,20788838,21602472,22442948,23310715
+Niger,NER,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,8714860645.95476,9552399306.82228,10138387467.8598,10594090476.5142,10964936351.8009,12128424678.4221,13255769670.171,14029535704.455,15375100180.8419,15746564890.2164,17256415648.2066,18029695404.0462,20177762093.9889,20344757760.6248,21572931440.3123,22505341600.1021,23343586015.5258,24686639908.752,27072874800.407,29152889262.2637
+Nigeria,NGA,"Population, total",SP.POP.TOTL,122283850,125394046,128596076,131900631,135320422,138865016,142538308,146339977,150269623,154324933,158503197,162805071,167228767,171765769,176404902,181137448,185960289,190873311,195874740,200963599
+Nigeria,NGA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,255167279361.791,287090811451.007,333028660553.987,360317164880.447,404128100283.132,441651874500.752,514815673971.723,548857256333.924,596032621496.002,645180793759.501,705437181551.46,756939368351.467,793230176344.865,853026950842.773,939073115447.917,957051778143.622,952515802712.001,960398587580.009,985893533546.953,1039633150748.45
+North Macedonia,MKD,"Population, total",SP.POP.TOTL,2034819,2042842,2048928,2053426,2057048,2060273,2063131,2065426,2067313,2069039,2070741,2072487,2074278,2076067,2077775,2079328,2080745,2081996,2082958,2083459
+North Macedonia,MKD,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,12238988709.6306,12225602597.4537,12773034002.9162,13191014714.2916,14473791893.2768,15708331655.17,17637727880.3566,18197783997.2061,21276861035.5934,22438920029.9913,23036881953.5352,23634727508.5267,24027034149.675,25647250304.1644,27256380190.9792,27852753382.988,29935058684.5946,31050642917.5775,32956753946.2663,35649539595.7626
+Northern Mariana Islands,MNP,"Population, total",SP.POP.TOTL,57453,58321,58420,57947,57246,56542,55882,55219,54625,54193,53971,54012,54311,54784,55305,55780,56188,56562,56882,57216
+Northern Mariana Islands,MNP,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+Norway,NOR,"Population, total",SP.POP.TOTL,4490967,4513751,4538159,4564855,4591910,4623291,4660677,4709153,4768212,4828726,4889252,4953088,5018573,5079623,5137232,5188607,5234519,5276968,5311916,5347896
+Norway,NOR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,163809179058.287,170711385468.446,172786645952.789,176976439531.853,195462041977.103,223283670197.81,252184206505.928,262393276835.26,293138235484.347,269379259626.725,286645665285.929,310701643205.307,331152578513.979,344244308199.849,349842613934.341,327034783599.997,323725133589.202,346868275225.434,374631286747.306,372280312640
+Oman,OMN,"Population, total",SP.POP.TOTL,2267973,2294962,2334858,2386166,2445517,2511251,2580758,2657158,2750963,2876186,3041434,3251108,3498029,3764805,4027260,4267348,4479219,4665935,4829483,4974986
+Oman,OMN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,79235959658.9843,84792834710.2019,83788314286.2636,85062122358.5598,89353502794.7445,92634966923.2222,93601614783.524,109511564811.834,118168477362.654,124411096039.846,135387404024.282,132708609162.248,146975065405.124,152666415184.438,147843100201.919,130046463464.616,125897322209.259,130111645478.941,131938237838.467,142211422700.939
+Pakistan,PAK,"Population, total",SP.POP.TOTL,142343578,145978402,149549700,153093373,156664697,160304008,164022627,167808105,171648986,175525609,179424641,183340592,187281475,191262919,195306825,199426964,203627284,207896686,212215030,216565318
+Pakistan,PAK,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,369404406240.034,390735821486.68,413800532806.37,456384783128.01,499973931899.76,548501914890.354,597908005939.994,642892692086.748,668239001725.966,696878190114.575,724599627456.603,765039210300.823,791513506615.346,825590569865.228,874802211343.66,925319864050.729,953080148747.716,1002293170997.4,1084494813277.11,1129050343318.84
+Palau,PLW,"Population, total",SP.POP.TOTL,19105,19386,19637,19809,19867,19781,19540,19158,18704,18285,17955,17745,17640,17606,17626,17665,17725,17808,17907,18008
+Palau,PLW,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,211174302.999241,231341383.494551,243185969.15795,234267703.220008,248076627.110369,277293585.650191,280418827.087255,297040146.220095,281668462.888573,261976812.537098,264596331.229319,284241777.903655,291833954.423022,288531087.6412,304879733.34836,343944205.490429,348201991.112564,334258725.644689,349137795.900517,..
+Panama,PAN,"Population, total",SP.POP.TOTL,3030328,3089648,3149188,3209048,3269356,3330217,3391666,3453675,3516204,3579215,3642687,3706483,3770624,3835437,3901315,3968487,4037078,4106771,4176873,4246439
+Panama,PAN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,24364003728.1015,24908792800.3642,26735195721.2458,27517726690.2089,29907517284.4004,32560340306.6999,36430564546.1268,42470623777.3447,47512762926.5939,48805783548.6948,50865949437.0556,59266837875.6713,65663109755.6884,74726193766.6597,81538689297.7009,94068749851.9453,104322439879.142,117512813377.254,122715775285.123,129953036259.725
+Papua New Guinea,PNG,"Population, total",SP.POP.TOTL,5847586,5974629,6098621,6223377,6354245,6494903,6646895,6808514,6976201,7144776,7310507,7472200,7631002,7788379,7946731,8107775,8271760,8438029,8606316,8776109
+Papua New Guinea,PNG,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,11689909083.4728,11782139184.0131,11994999914.5765,12150356962.7707,13004301436.2799,14494469656.1726,14951336412.6804,16961711049.4465,17553793000.7478,18537466557.8058,20624546301.5549,20754466387.4553,23205469528.6527,23757281549.9278,29386596489.9702,32487579217.8286,34430674713.5218,36008809638.6283,36332291730.6946,39228382939.1454
+Paraguay,PRY,"Population, total",SP.POP.TOTL,5323201,5428444,5531962,5632983,5730549,5824096,5913209,5998427,6081296,6163972,6248020,6333976,6421512,6510276,6599526,6688746,6777872,6867062,6956071,7044636
+Paraguay,PRY,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,30966339106.0611,31994514394.7487,33425791560.7727,32955404968.9342,35879600552.2512,38014665154.8201,42442719141.0924,48119399684.98,52810030726.6891,52893580251.9813,59469808606.6031,64133125073.6599,61591935539.7893,69297872980.2731,72664615483.7895,73852324239.6658,78266222662.4423,83809237145.5088,88410573254.3939,89650321681.415
+Peru,PER,"Population, total",SP.POP.TOTL,26459944,26799285,27100968,27372226,27624213,27866145,28102056,28333052,28562317,28792655,29027674,29264318,29506788,29773987,30090359,30470734,30926032,31444297,31989256,32510453
+Peru,PER,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,130452271472.573,134975718985.549,143784908887.532,151002976641.214,159597818097.476,172777044632.864,187599814291.07,209846929295.68,235569614896.216,241692558655.719,261705337880.59,283964927266.9,297710295468.343,318997109857.16,330667402340.409,340543090251.254,356119980475.884,375165985596.124,397984077099.888,414709560947.683
+Philippines,PHL,"Population, total",SP.POP.TOTL,77991755,79672873,81365258,83051971,84710542,86326250,87888675,89405482,90901965,92414158,93966780,95570047,97212638,98871552,100513138,102113212,103663927,105173264,106651922,108116615
+Philippines,PHL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,293546466765.911,309550000698.454,326006799824.386,348562292415.459,381170730382.479,414099437803.561,447011843666.261,487974807198.051,520920551839.16,543111526839.69,588000732556.72,621050497570.767,679680535110.927,730910824409.234,780292861533.854,817730803198.514,887291422586.415,948319217869.441,1028799416150.81,1102793818348.89
+Poland,POL,"Population, total",SP.POP.TOTL,38258629,38248076,38230364,38204570,38182222,38165445,38141267,38120560,38125759,38151603,38042794,38063255,38063164,38040196,38011735,37986412,37970087,37974826,37974750,37970874
+Poland,POL,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,405928263952.82,423264851972.431,447988845729.653,462987927844.742,493324802124.358,521485118561.573,565480839451.024,620520684705.345,684955242060.901,714162622184.593,775270582482.123,841563674071.179,878904423194.261,912005652523.057,940604094068.281,985374945527.231,1029371304856.61,1098727031189.92,1159006118404.7,1242060092704.4
+Portugal,PRT,"Population, total",SP.POP.TOTL,10289898,10362722,10419631,10458821,10483861,10503330,10522288,10542964,10558177,10568247,10573100,10557560,10514844,10457295,10401062,10358076,10325452,10300300,10283822,10269417
+Portugal,PRT,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,191162333476.579,198946163123.708,208897263871.468,215655339291.813,222139978722.147,235520718575.134,252037472169.304,263235461915.183,272098077805.794,270543878824.239,279258685479.183,278041334782.043,271411027125.957,288230115471.542,292835641286.096,299068874296.756,318403967634.571,332797030443.435,344450702228.985,365570407715.063
+Puerto Rico,PRI,"Population, total",SP.POP.TOTL,3810605,3818774,3823701,3826095,3826878,3821362,3805214,3782995,3760866,3740410,3721525,3678732,3634488,3593077,3534874,3473232,3406672,3325286,3193354,3193694
+Puerto Rico,PRI,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,58733761399.7069,60499957634.4599,61323055387.3295,63015448424.3178,71561555530.5919,73282972901.7744,75473206025.0908,78275161095.6972,77428186151.7523,75399861663.9094,75213919309.895,76671237933.7386,79385642494.7194,80211595023.5961,79957879558.6487,79546562680.8065,78484982368.6929,76274336611.4748,74901136510.2749,77400156028.063
+Qatar,QAT,"Population, total",SP.POP.TOTL,592468,615012,640868,681788,753334,865416,1022711,1218434,1436665,1654950,1856327,2035871,2196074,2336574,2459198,2565710,2654374,2724724,2781677,2832067
+Qatar,QAT,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,52844271826.9036,58463640090.606,63242264101.0028,68819473320.729,79713467127.8268,82868542815.173,116922772698.625,141763238425.186,169063300616.692,183106008515.175,219766713179.047,261273859967.584,290855609268.645,306141143057.52,303091258041.229,233271012036.937,218972340599.152,258357181046.802,263812622499.6,266700904932.535
+Romania,ROU,"Population, total",SP.POP.TOTL,22442971,22131970,21730496,21574326,21451748,21319685,21193760,20882982,20537875,20367487,20246871,20147528,20058035,19983693,19908979,19815616,19702267,19587290,19472545,19356544
+Romania,ROU,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,130472172572.504,143525926780.149,154082024275.708,159114026184.779,184591713992.08,198702374392.595,236462450561.554,276553017265.441,337097295551.8,334769233393.309,339699138901.25,356201879783.7,373165708242.957,389853277154.31,408658360571.476,424138786650.093,469815748811.334,525047398922.873,558400088938.719,616613186039.27
+Russian Federation,RUS,"Population, total",SP.POP.TOTL,146596869,145976482,145306497,144648618,144067316,143518814,143049637,142805114,142742366,142785349,142849468,142960908,143201721,143506995,143819666,144096870,144342396,144496740,144477860,144373535
+Russian Federation,RUS,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,974627421657.533,1059732182384.88,1145642785078.87,1297686739857.67,1441505486256.06,1655585780417.93,2071121544039.89,2324720237537.22,2797648415289.07,2678612196782.56,2836588557941.65,3163098238397.45,3373670140327.24,3611852783384.38,3639329873431.79,3428605724107.56,3440199770765.34,3716761165251.31,4117644726224.44,4147418036811.93
+Rwanda,RWA,"Population, total",SP.POP.TOTL,7933681,8231156,8427060,8557161,8680524,8840215,9043337,9273757,9524534,9782770,10039338,10293331,10549678,10811543,11083635,11369071,11668818,11980937,12301939,12626950
+Rwanda,RWA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,4984792289.7506,5500814446.43183,6338268240.37365,6563522975.55199,7246003555.12871,8218101871.06816,9266024423.53704,10286566958.1852,11627479925.1191,12451755242.7965,13514588518.7971,14874456674.8466,15585133904.4704,16472104845.2448,18592434064.2187,20138529720.0947,21541809782.4229,22875986390.5019,25446588408.2789,28336853127.1914
+Samoa,WSM,"Population, total",SP.POP.TOTL,174454,175392,176407,177484,178590,179727,180876,182046,183263,184556,185949,187469,189088,190717,192221,193513,194535,195352,196130,197097
+Samoa,WSM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,656129200.01375,696240495.485358,751718146.21322,801018193.39023,846404986.284917,928759783.297955,955315073.519703,929986181.882017,966999334.423705,1020029218.05116,999743394.357344,1012610226.03282,1028640510.18319,1105495733.50317,1204016754.89651,1228314510.95016,1224208932.24003,1279066000.93285
+San Marino,SMR,"Population, total",SP.POP.TOTL,27462,27812,28175,28562,28940,29324,29700,30063,30434,30816,31229,31661,32105,32553,32948,33272,33504,33671,33785,33860
+San Marino,SMR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+Sao Tome and Principe,STP,"Population, total",SP.POP.TOTL,142262,144755,147447,150415,153737,157472,161681,166300,171120,175876,180371,184524,188404,192087,195727,199432,203227,207089,211028,215056
+Sao Tome and Principe,STP,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,255566703.745449,266396208.879123,293566638.415525,312266708.951805,346807903.39736,406883199.131625,435108912.704917,465728182.537504,480121037.051648,520459226.461073,554945829.681376,546308664.914749,642962268.2136,759370095.927575,762889548.330079,792597147.710333,808509263.027399,857082098.90257,879111457.332912
+Saudi Arabia,SAU,"Population, total",SP.POP.TOTL,20663843,21202642,21805313,22456649,23132682,23816183,24498310,25184597,25888541,26630303,27421461,28267685,29155187,30052518,30916994,31717667,32442572,33099147,33699947,34268528
+Saudi Arabia,SAU,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,828007290113.436,840020779517.361,826977992567.345,933840294734.223,1038617818410.17,1132480997433.1,1201557784745.03,1263098264835.91,1371180088329.22,1356509577662.19,1431867717296.31,1609641504262.52,1697441893442.77,1710674757214.71,1760505609319.99,1582553691883.64,1511656088328.92,1590219406270.97,1656706098593.48,1692868359986.68
+Senegal,SEN,"Population, total",SP.POP.TOTL,9797734,10036104,10283699,10541467,10810083,11090116,11382268,11687080,12004701,12335084,12678148,13033809,13401991,13782420,14174731,14578459,14993528,15419381,15854360,16296364
+Senegal,SEN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,18178582368.0147,19481388776.3261,19869524048.5466,21683767086.4729,23621693059.632,25746288414.5148,27254286825.51,29373991072.7734,31233432098.6014,31884539097.273,33445704638.302,34415226315.3097,36427222864.5151,37245933448.3051,39358815590.1772,42363282419.3143,44911708617.1489,48020557391.9318,52402629738.2478,56113568116.7654
+Serbia,SRB,"Population, total",SP.POP.TOTL,7516346,7503433,7496522,7480591,7463157,7440769,7411569,7381579,7350222,7320807,7291436,7234099,7199077,7164132,7130576,7095383,7058322,7020858,6982604,6944975
+Serbia,SRB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,45257309352.7367,48680377685.7187,53939449146.4194,56788712102.6038,62763575041.0969,67522226305.9422,74612237515.9374,81280923359.4795,90437964699.0743,90424045371.6504,91388968100.1562,97317586786.9039,97051558828.03,100740901038.093,100572891480.162,100962636045.149,104942550019.958,108471457604.254,116392549752.424,124763538712.68
+Seychelles,SYC,"Population, total",SP.POP.TOTL,81131,81202,83723,82781,82475,82858,84600,85033,86956,87298,89770,87441,88303,89949,91359,93419,94677,95843,96762,97625
+Seychelles,SYC,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1098286181.45465,1123976238.77417,1072994332.88678,1070267506.04422,1149808132.7252,1291667524.3807,1455225335.13926,1520789181.16357,1496927786.61198,1517612379.40579,1646832585.13231,1704881468.35025,1796647364.37891,1907297426.10617,2048795965.28169,2112360163.7696,2245383379.7948,2417588949.83326,2642281618.23683,2860121340.79797
+Sierra Leone,SLE,"Population, total",SP.POP.TOTL,4584571,4754072,4965766,5201070,5433991,5645624,5829237,5989633,6133603,6272734,6415634,6563240,6712581,6863980,7017144,7171914,7328838,7488431,7650154,7813215
+Sierra Leone,SLE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3078355090.61565,2965062693.69484,3811355840.48297,4263196038.6237,4654050423.97535,5010794994.08064,5398188175.35187,6410544320.37155,7077507452.6414,7414307697.09276,7356159783.30807,7786542195.82346,9738223472.1891,11922760797.3981,12246518774.9448,11226733103.7828,10434653657.3075,11938865734.8629,12110858455.1451,13013830059.0806
+Singapore,SGP,"Population, total",SP.POP.TOTL,4027887,4138012,4175950,4114826,4166664,4265762,4401365,4588599,4839396,4987573,5076732,5183688,5312437,5399162,5469724,5535002,5607283,5612253,5638676,5703569
+Singapore,SGP,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,175475990155.213,177305489495.705,184670988377.651,195292440542.546,212571173695.197,236301952480.521,273662417679.57,306624365777.701,315001406844.762,312810004079.337,378119206245.336,400707778808.442,416578549823.047,424002358121.386,445708256666.976,448557736908.24,469524071593.093,492395261470.978,509997637667.539,524841789129.782
+Sint Maarten (Dutch part),SXM,"Population, total",SP.POP.TOTL,30519,30600,30777,31472,32488,33011,33441,33811,33964,34238,34056,33435,34640,36607,37685,38825,39969,40574,40654,40733
+Sint Maarten (Dutch part),SXM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,1076306314.50851,1122314269.16244,1198407915.49339,1102057764.20802,1162505139.99796,1190232152.72171,1202403006.88066,1249433536.30347,1271575989.66521,..,..
+Slovak Republic,SVK,"Population, total",SP.POP.TOTL,5388720,5378867,5376912,5373374,5372280,5372807,5373054,5374622,5379233,5386406,5391428,5398384,5407579,5413393,5418649,5423801,5430798,5439232,5446771,5454073
+Slovak Republic,SVK,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,61083993049.9732,66695266134.4753,71403065665.9981,72449990182.4595,78596910447.9461,87124402574.7501,98687707671.112,110791194181.167,125448397000.54,123782220565.48,132884290981.565,135779454075.477,143192037531.068,150266637346.169,155347191663.989,158380009238.59,156843605003.527,164629105049.078,174577152157.9,183677613789.773
+Slovenia,SVN,"Population, total",SP.POP.TOTL,1988925,1992060,1994530,1995733,1997012,2000474,2006868,2018122,2021316,2039669,2048583,2052843,2057159,2059953,2061980,2063531,2065042,2066388,2073894,2087946
+Slovenia,SVN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,35729557107.8743,37731226284.5409,40019698741.2693,41640522811.3764,44778206419.9901,47268194743.7862,50908423708.2664,54304531861.8556,58273321247.2921,55289538407.1433,56288187891.8793,58585332628.1712,58814142549.4361,60918129358.2224,63069203941.5599,63269913868.7162,68163693508.2576,74364570119.803,79094983841.5059,83673941284.5428
+Solomon Islands,SLB,"Population, total",SP.POP.TOTL,412660,423944,435432,447017,458539,469918,481078,492132,503360,515181,527861,541521,556064,571335,587079,603118,619437,636038,652858,669823
+Solomon Islands,SLB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,597042746.99174,564444388.911496,550780216.702815,599190432.338696,653597529.487548,706272886.359672,782325081.078124,793884373.867199,788273467.581486,648372862.966105,705271651.226785,806095347.634749,1043039428.16338,1162171508.2969,1220489346.74271,1309260656.27858,1331857667.45131,1415196530.19378,1511697179.24996,1571505892.80681
+Somalia,SOM,"Population, total",SP.POP.TOTL,8872254,9186725,9501342,9815412,10130243,10446863,10763905,11080121,11397188,11717692,12043883,12376302,12715510,13063706,13423576,13797201,14185613,14589119,15008154,15442905
+Somalia,SOM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+South Africa,ZAF,"Population, total",SP.POP.TOTL,44967708,45571274,46150913,46719196,47291610,47880601,48489459,49119759,49779471,50477011,51216964,52004172,52834005,53689236,54545991,55386367,56203654,57000451,57779622,58558270
+South Africa,ZAF,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,338847762431.791,352904893533.235,374285459134.666,391615137940.236,423687771963.7,459794907520.686,500389947330.619,533806362211.562,562391385126.517,563023437602.228,587540655891.057,616821696796.998,619739350156.296,650936442976.243,664730482950.131,677999059197.49,688184240521.716,702384466248.083,723410417860.139,739743880215.4
+South Sudan,SSD,"Population, total",SP.POP.TOTL,6199394,6447793,6688226,6935676,7213351,7535932,7907406,8315139,8736939,9142259,9508364,9830698,10113647,10355036,10554883,10715658,10832512,10910759,10975920,11062113
+South Sudan,SSD,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,16038626934.766,14790639635.8154,20542512085.5034,13514791883.5209,..,..,..,..,..
+Spain,ESP,"Population, total",SP.POP.TOTL,40567864,40850412,41431558,42187645,42921895,43653155,44397319,45226803,45954106,46362946,46576897,46742697,46773055,46620045,46480882,46444832,46484062,46593236,46797754,47076781
+Spain,ESP,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,869690668123.322,924904237114.657,998316071948.184,1046820524829.82,1110664109889.25,1188490567999.29,1337056206794.54,1430968449422.51,1486151637639.11,1460812824691.15,1455146268303.33,1463308449873.9,1471780320471.5,1501976882039.12,1552593080187.63,1621139938786.75,1737321244918,1843525333993.54,1898750653984.1,1991315629473.24
+Sri Lanka,LKA,"Population, total",SP.POP.TOTL,18777601,18911730,19062482,19224037,19387153,19544988,19695972,19842044,19983984,20123508,20261737,20398670,20425000,20585000,20778000,20970000,21203000,21444000,21670000,21803000
+Sri Lanka,LKA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,80219612592.163,80707690509.369,85438265093.8054,92694593586.4605,100298785212.344,109652264522.375,121471812831.66,133547831409.968,142604716518.666,150406486461.344,164223838599.756,181910599698.272,206950552659.399,218124451812.083,228565788492.023,236279911702.493,252283568160.724,262709274806.972,277615620224.671,288411260724.197
+St. Kitts and Nevis,KNA,"Population, total",SP.POP.TOTL,44074,44599,45165,45746,46324,46857,47339,47778,48185,48599,49016,49447,49887,50331,50774,51203,51625,52045,52441,52823
+St. Kitts and Nevis,KNA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,668626627.030419,718436252.546109,744762582.945911,721796119.49235,785342872.453035,900477813.981571,946785397.017441,983506390.046433,1063395727.80758,1028244449.31807,1041414759.68333,1085010859.5522,1040073570.95555,1095520084.77226,1126413064.05166,1138913288.5063,1209135630.0354,1253585607.5405,1313202217.63159,1369275749.82975
+St. Lucia,LCA,"Population, total",SP.POP.TOTL,156729,158179,159392,160530,161816,163417,165381,167639,170011,172221,174085,175544,176646,177513,178296,179126,180024,180955,181889,182790
+St. Lucia,LCA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1305855310.53088,1270824912.50597,1312264068.35251,1379897600.78669,1502713457.62692,1544835895.79416,1839801165.1013,1904808814.05479,2039871225.17556,2034633287.52068,2103475539.04643,2297809125.759,2256310219.44242,2340104825.45271,2304068263.59932,2220169455.30641,2413769769.05196,2558643206.97483,2670955788.03675,2767313822.83397
+St. Martin (French part),MAF,"Population, total",SP.POP.TOTL,28935,29853,30910,32053,33186,34248,35237,36137,36885,37377,37582,37446,37009,36453,36015,35858,36065,36560,37264,38002
+St. Martin (French part),MAF,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+St. Vincent and the Grenadines,VCT,"Population, total",SP.POP.TOTL,107784,107896,108097,108326,108512,108614,108603,108518,108393,108287,108255,108316,108435,108622,108861,109148,109459,109827,110210,110589
+St. Vincent and the Grenadines,VCT,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,638159376.525602,670314466.444616,724127161.498021,784916407.357878,833178925.141251,883240113.601914,992034020.254062,1063625110.3998,1100704108.7646,1101047803.34189,1077900540.92904,1094556250.36243,1127672288.17059,1178894343.25033,1180712569.46047,1240035784.97745,1354300475.1646,1335277351.37259,1392156097.48341,1424298575.54419
+Sudan,SDN,"Population, total",SP.POP.TOTL,27275015,27971082,28704778,29460519,30214193,30949516,31661823,32360621,33060837,33783788,34545013,35349681,36193783,37072550,37977655,38902950,39847440,40813396,41801533,42813238
+Sudan,SDN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,58212531297.298,63680735170.4652,68910959486.9048,74978164139.573,79768301290.8968,88320710528.3167,93942762350.271,112239021245.355,119548408750.404,127090687572.071,130164486506.18,138252289994.32,142798888417.107,147780281950.933,177192917844.649,193305122554.049,173012156095.499,171572486184.966,165149037086.917,170741468621.492
+Suriname,SUR,"Population, total",SP.POP.TOTL,470949,476579,482235,487942,493679,499464,505295,511181,517123,523111,529131,535179,541245,547291,553273,559143,564888,570496,575991,581372
+Suriname,SUR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,3455101779.96144,3452172053.5285,3869264165.22239,4192975496.85693,4655634374.65597,5102119078.97652,5547176744.27413,6108812235.51674,6528902952.26631,6746376489.35332,6997716781.20293,7287563034.49645,8213418033.82234,8968094623.77967,9422022464.70498,8961754691.65336,7598415769.13654,8178387430.85907,8695356897.78605,8836767171.57063
+Sweden,SWE,"Population, total",SP.POP.TOTL,8872109,8895960,8924958,8958229,8993531,9029572,9080505,9148092,9219637,9298515,9378126,9449213,9519374,9600379,9696110,9799186,9923085,10057698,10175214,10285453
+Sweden,SWE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,261536194358.147,265039091713.136,275242719220.112,287729555181.962,303981183172.221,311479619232.968,348755955764.149,382516435235.849,400366853301.737,382465021963.24,406622962140.547,429144502027.467,441172311031.33,452932249986.944,465812418766.259,483754081559.8,503345052823.841,539004902592.682,557021173354.563,589328987811.607
+Switzerland,CHE,"Population, total",SP.POP.TOTL,7184250,7229854,7284753,7339001,7389625,7437115,7483934,7551117,7647675,7743831,7824909,7912398,7996861,8089346,8188649,8282396,8373338,8451840,8514329,8574832
+Switzerland,CHE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,274014758779.276,276467718717.679,282083618928.972,294968201481.081,307427849499.894,327059401274.082,362697631526.67,377896938305.799,375881421641.219,408827811088.838,439965969368.288,449676395959.064,472965119580.052,496497257704.326,509076701038.649,542121799886.034,553301058576.508,573779624920.909,597120517941.947,620733021180.849
+Syrian Arab Republic,SYR,"Population, total",SP.POP.TOTL,16410848,16766561,17084632,17415214,17827825,18361176,19059258,19878254,20664038,21205873,21362529,21082966,20442541,19584274,18715672,17997408,17453933,17068002,16906283,17070135
+Syrian Arab Republic,SYR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+Tajikistan,TJK,"Population, total",SP.POP.TOTL,6216341,6318513,6426867,6541547,6662389,6789321,6922587,7062672,7209930,7364753,7527394,7697510,7874835,8059769,8252833,8454028,8663579,8880268,9100837,9321018
+Tajikistan,TJK,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,6243952520.11311,6956391457.58099,7940888916.07205,8865335640.46874,10232161892.1305,13315140659.5813,15606010070.8765,17958659371.2663,20015975062.9807,19445730700.2787,21650983633.0307,24502585880.9376,27649805633.739,32099463306.2014,33792660554.7335,30205900190.8183,31326779891.4301,32094206010.1166,35042775748.5525,38186407402.8905
+Tanzania,TZA,"Population, total",SP.POP.TOTL,33499180,34385856,35334788,36337782,37379767,38450320,39548663,40681414,41853944,43073834,44346525,45673338,47052481,48482266,49959822,51482633,53050790,54663906,56318348,58005463
+Tanzania,TZA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,38397497776.3668,41037773111.773,45408862707.0621,49045752787.4878,54090494683.7852,59610581601.6123,66631583817.7983,72197977275.5116,77918987309.6057,82734318300.1854,88300340612.0959,97002460359.7256,94529738375.3637,101725607824.693,107031002837.467,115147236257.427,124836678462.57,131217326623.384,140452391887.359,152044786430.903
+Thailand,THA,"Population, total",SP.POP.TOTL,62952642,63539196,64069087,64549866,64995299,65416189,65812536,66182067,66530984,66866839,67195028,67518382,67835957,68144501,68438730,68714511,68971331,69209858,69428524,69625582
+Thailand,THA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,450671563297.021,472410644012.811,505623430896.062,548768048123.199,597376671474.052,640844956966.608,698598604407.005,758824843683.545,784949891095.53,786634662277.215,849519757331.666,890774204971.964,962565591015.47,982839168917.538,1004937587069.8,1031139449774.92,1092384223464.17,1151656441215.65,1223157479632.06,1289400494111.78
+Timor-Leste,TLS,"Population, total",SP.POP.TOTL,884366,901214,922694,947108,971893,995135,1016432,1036392,1055431,1074277,1093523,1113151,1132994,1153295,1174331,1196302,1219288,1243261,1267972,1293119
+Timor-Leste,TLS,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1574774048.15707,1767734817.44826,2044643608.94684,1699848000.03095,2006516904.24496,2521021245.83139,3906319048.15135,5595452624.68354,8809236374.25167,6735167351.45591,8100273342.80888,10105478690.9941,9860410997.89224,8520034074.72098,7368662501.18337,6107945596.37407,5170878011.18355,5580941212.39929,5730167599.59686,6112136222.45617
+Togo,TGO,"Population, total",SP.POP.TOTL,4924402,5062567,5197031,5330639,5467766,5611640,5762880,5920359,6083420,6250835,6421679,6595943,6773807,6954721,7137997,7323158,7509952,7698475,7889094,8082366
+Togo,TGO,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,4695495615.47244,4836298686.31055,5137495675.78138,5593950603.09644,5666656648.11381,5567283011.38162,5883941545.60747,5999557769.79647,6408670137.09282,6807580411.75893,7298190564.58075,8463956228.3191,8325342477.13935,8921364449.72602,9577642653.30672,10577120513.5998,11023673694.766,11687035212.7357,12582724939.5682,13484391446.6806
+Tonga,TON,"Population, total",SP.POP.TOTL,97973,98487,99022,99589,100218,100905,101706,102581,103379,103890,103986,103562,102737,101768,101028,100781,101133,101998,103197,104494
+Tonga,TON,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,357784199.303927,377866597.727363,406910565.468162,419272791.525725,430706598.859729,445193709.253949,463102117.302844,458561607.97632,480222408.819444,500093429.134895,524842935.725519,548648424.397204,564662549.7069,554335176.241438,566434537.234819,595653508.202184,620025178.090875,654945658.379999,672020199.921711,..
+Trinidad and Tobago,TTO,"Population, total",SP.POP.TOTL,1267153,1271632,1277213,1283559,1290123,1296502,1302561,1308451,1314443,1320930,1328147,1336178,1344817,1353700,1362342,1370328,1377564,1384072,1389858,1394973
+Trinidad and Tobago,TTO,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,17012875951.3096,18424051120.37,20369750460.5276,23569565343.3526,26971078774.8305,28938122258.8779,33665145927.3679,36491422367.7205,38491439611.4192,36732759920.3182,38571392278.7278,36695932591.946,36835904408.0776,38353998987.3133,37934914092.36,37337641618.7473,35493336828.6125,36681957170.3557,36326373324.7135,37591615894.1119
+Tunisia,TUN,"Population, total",SP.POP.TOTL,9708350,9793903,9871251,9945277,10022277,10106771,10201214,10304726,10414433,10525694,10635244,10741880,10847002,10952951,11063201,11179949,11303946,11433443,11565204,11694719
+Tunisia,TUN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,55482145961.9188,59027355540.4305,60767940056.2163,65012620775.8729,70781548453.9982,74688150392.4089,81387058368.2445,88448511812.3066,93552043505.7407,98192793634.6049,102937036778.887,103048392300.402,106139515924.993,107073102533.151,111432879156.612,110536919999.913,113664872520.447,117404469799.969,123100895158.534,126246204651.811
+Turkey,TUR,"Population, total",SP.POP.TOTL,63240194,64192243,65145367,66089402,67010930,67903469,68756810,69581848,70418604,71321399,72326988,73443863,74653016,75928564,77231907,78529409,79821724,81101892,82319724,83429615
+Turkey,TUR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,597334483200.142,576775800988.776,596184974340.906,623412870993.991,717661896581.309,798582177973.32,926267066261.931,1023569815490.45,1119242568185.42,1092463594830.04,1250656923762.77,1430728376610.47,1527509825602.83,1675523365075.39,1834768262767.73,1989695683312.09,2079317383660.83,2236042743568.31,2280595352742.52,2287042822851.61
+Turkmenistan,TKM,"Population, total",SP.POP.TOTL,4516133,4564083,4610005,4655743,4703401,4754646,4810109,4870141,4935767,5007954,5087213,5174085,5267900,5366375,5466328,5565287,5662372,5757669,5850908,5942089
+Turkmenistan,TKM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,18608125797.2421,20168709626.6258,20512405888.362,21796071376.3924,23408021444.9088,25792885962.1902,29758839630.028,35099172955.5778,39986573484.7062,42368527403.7033,45722924073.0519,52789503109.1211,57503025651.6309,62407231340.9251,67102532122.3818,71735322172.8103,76445710804.7088,78393490626.9716,85163219714.7608,..
+Turks and Caicos Islands,TCA,"Population, total",SP.POP.TOTL,20164,21573,23232,25011,26700,28180,29391,30385,31202,31934,32660,33377,34066,34731,35369,35981,36559,37115,37665,38191
+Turks and Caicos Islands,TCA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,764731910.157113,823917422.181535,889386727.130543,929417556.78184,987352323.619838,..
+Tuvalu,TUV,"Population, total",SP.POP.TOTL,9394,9484,9596,9726,9869,10000,10120,10221,10314,10424,10530,10633,10739,10857,10972,11099,11225,11370,11508,11646
+Tuvalu,TUV,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,44816713.8307238,55987016.7823781,39423211.9664439,44008233.8174725,44010714.0270621,44669035.2114179,52633356.1198989,52851720.3475787,54738734.1185112,49291845.5495836,50436773.5213591,43459568.1161838,54547258.7189745,48534841.957286,63000995.2918348,63492051.2978658,63480552.6310055,70098267.5235555,71863891.2861822
+Uganda,UGA,"Population, total",SP.POP.TOTL,23650172,24388968,25167257,25980552,26821297,27684585,28571475,29486338,30431736,31411096,32428167,33476919,34559168,35695246,36912148,38225453,39647506,41162465,42723139,44269594
+Uganda,UGA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,26499505401.6939,28241217363.4276,31376554570.7417,34048226950.8195,37196648518.9452,40721832209.1975,46612393718.0096,52079100131.2783,57754070635.1758,62115766422.6747,66348768277.3103,74180430678.1867,67861747681.2255,70028337871.091,75027330101.7947,79484445119.7673,80837873387.1188,83396734294.2227,90179159679.8365,97886334387.587
+Ukraine,UKR,"Population, total",SP.POP.TOTL,49176500,48662400,48202470,47812949,47451626,47105171,46787786,46509355,46258189,46053331,45870741,45706086,45593342,45489648,45272156,45154036,45004674,44831135,44622518,44385155
+Ukraine,UKR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,195874159423.066,221426068987.724,237520547089.596,265681569588.845,306381587636.351,324903125739.448,357983817517.623,400086017392.992,415612966587.664,352557246526.279,372634874968.387,397751382057.074,418808180763.59,478317354943.168,456689210728.162,437283649075.699,483248219684.615,515944166360.639,547484803864.72,578031775037.061
+United Arab Emirates,ARE,"Population, total",SP.POP.TOTL,3134062,3302719,3478777,3711932,4068570,4588225,5300174,6168838,7089487,7917372,8549988,8946777,9141596,9197910,9214175,9262900,9360980,9487203,9630959,9770529
+United Arab Emirates,ARE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,323322696221.062,335107906366.934,335185283543.408,368204626489.547,416456364855.637,455293178482.826,517928620572.751,554759716006.904,572067250142.766,545263477685.039,554578548603.043,605808769081.988,632212172329.896,648063820753.781,679448062185.081,604104698714.526,602327541485.937,641975592252.713,662414696568.075,686306904138.687
+United Kingdom,GBR,"Population, total",SP.POP.TOTL,58892514,59119673,59370479,59647577,59987905,60401206,60846820,61322463,61806995,62276270,62766365,63258810,63700215,64128273,64602298,65116219,65611593,66058859,66460344,66834405
+United Kingdom,GBR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,1561407145331.57,1652810760601.11,1748086977823.58,1828070205658.89,1937447618826.28,1999826177646.45,2117185886698.94,2172625553539.84,2244862767229.45,2165272748033.17,2284296653908.52,2360144861851.54,2415126689983.67,2510996076220.28,2611439141863.92,2705282618272.15,2827976162817.73,3000838547377.93,3072868018494.63,3210886653457.9
+United States,USA,"Population, total",SP.POP.TOTL,282162411,284968955,287625193,290107933,292805298,295516599,298379912,301231207,304093966,306771529,309321666,311556874,313830990,315993715,318301008,320635163,322941311,324985539,326687501,328239523
+United States,USA,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,10383859000000,10743709000000,11054325000000,11530268000000,12313988000000,13169702000000,14072966000000,14543216000000,14684602000000,14398708000000,15126736000000,15832207000000,16670651000000,17175898000000,18057489000000,18704317000000,19045164000000,19830277000000.1,20837347000000.1,21624995749999.9
+Uruguay,URY,"Population, total",SP.POP.TOTL,3319736,3325473,3326040,3323668,3321476,3321803,3325401,3331749,3340221,3349676,3359275,3368934,3378974,3389439,3400434,3412009,3424132,3436646,3449299,3461734
+Uruguay,URY,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,33945443247.5938,33344537747.9671,31533824762.6923,30883466401.9197,33216952936.3271,37360260911.6236,40336085307.9769,44136848952.393,47842989528.3195,50101739036.5721,54386110589.9181,58589197626.3659,57034863431.4258,61370940005.0751,64012672369.2185,65894817067.7221,67291572981.5448,68924690398.7391,70955584945.7829,73121453897.6351
+Uzbekistan,UZB,"Population, total",SP.POP.TOTL,24650400,24964450,25271850,25567650,25864350,26167000,26488250,26868000,27302800,27767400,28562400,29339400,29774500,30243200,30757700,31298900,31847900,32388600,32956100,33580650
+Uzbekistan,UZB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,60490019864.9866,64255651188.6571,68073816741.291,72531185462.2683,80628416840.1209,89130942254.7757,98331029398.2857,115744456269.22,130693528066.927,138036570231.641,146731919200.689,161559906176.939,170707243416.585,180556615900.712,192173670374.64,201986598838.056,207853080775.075,215456449592.35,234703033130.301,248452283977.245
+Vanuatu,VUT,"Population, total",SP.POP.TOTL,184972,189219,193920,198959,204127,209282,214370,219472,224704,230247,236211,242653,249499,256635,263888,271130,278330,285510,292680,299882
+Vanuatu,VUT,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,395845637.991194,403652721.333728,377866769.674181,399573849.216512,425394093.202289,454841786.625104,518923916.182719,556611911.561311,637642070.414252,643469996.480078,657929082.673957,684302150.005902,686703133.694412,754198448.012038,795660594.778998,802937429.465799,835331693.633886,880102798.798113,946508379.529688,991320396.983575
+"Venezuela, RB",VEN,"Population, total",SP.POP.TOTL,24192446,24646472,25100408,25551624,25996594,26432447,26850194,27247610,27635832,28031009,28439940,28888369,29362449,29783571,30045134,30081829,29846179,29390409,28870195,28515829
+"Venezuela, RB",VEN,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,280855847538.954,295370460052.072,269834466478.442,254427821599.432,307512284009.188,355550813047.347,406417931932.049,461178498993.92,490847218537.909,473863865999.872,470221384679.447,493557717634.178,..,..,..,..,..,..,..,..
+Vietnam,VNM,"Population, total",SP.POP.TOTL,79910412,80742499,81534407,82301656,83062821,83832661,84617540,85419591,86243413,87092252,87967651,88871561,89802487,90753472,91714595,92677076,93638724,94596642,95540395,96462106
+Vietnam,VNM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,169101978301.367,183775381863.24,198446295952.172,215660375905.614,239304626439.798,243642053786.487,267674830733.176,292489052948.076,314506040405.064,300736799423.602,356506285960.339,384663335500.307,434659185242.371,465497570616.946,501888463952.615,536539130014.396,589741573548.919,625899825382.239,690000277848.292,747220006779.353
+Virgin Islands (U.S.),VIR,"Population, total",SP.POP.TOTL,108642,108549,108510,108506,108467,108454,108371,108339,108399,108405,108358,108292,108191,108044,107884,107710,107510,107268,106977,106631
+Virgin Islands (U.S.),VIR,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..
+West Bank and Gaza,PSE,"Population, total",SP.POP.TOTL,2922153,2997784,3075373,3154969,3236626,3320396,3406334,3494496,3591977,3689099,3786161,3882986,3979998,4076708,4173398,4270092,4367088,4454805,4569087,4685306
+West Bank and Gaza,PSE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,8722138455.78828,7812135701.68618,6828082613.95172,7930473089.15384,8910504550.65981,10369007468.7528,10398591353.509,11531518608.2507,12473042746.9752,13317069247.2852,14482042303.3576,16688370002.6944,19833587676.5149,21072559191.4526,23338783134.8549,26177201049.1117,27386949786.2061,29158617677.1035,30815829709.4169,..
+"Yemen, Rep.",YEM,"Population, total",SP.POP.TOTL,17409072,17918373,18443691,18985000,19540098,20107409,20687646,21282515,21892146,22516460,23154855,23807588,24473178,25147109,25823485,26497889,27168210,27834821,28498687,29161922
+"Yemen, Rep.",YEM,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,47407469489.7263,50841346561.1139,53305582982.396,55681083237.4228,58804494221.7735,64075292634.3902,70493792627.0925,74995234785.3653,78498118632.1159,84324391008.1339,90700650718.9413,79742574005.5175,81652542720.9669,88588654788.721,..,..,..,..,..,..
+Zambia,ZMB,"Population, total",SP.POP.TOTL,10415944,10692193,10971698,11256743,11550642,11856247,12173514,12502958,12848530,13215139,13605984,14023193,14465121,14926504,15399753,15879361,16363507,16853688,17351822,17861030
+Zambia,ZMB,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,16390516773.1936,17697270843.1887,18873338727.6239,20701831757.7299,21936203300.825,23952035537.2028,26172573663.3931,28534598750.7941,32470694798.8824,37702919211.7603,40342714903.8491,44313413076.5895,48670115552.996,51231499045.8015,53398340681.0049,53416147657.3537,53991782699.8614,56136005389.7561,61604252695.0115,63886639446.6947
+Zimbabwe,ZWE,"Population, total",SP.POP.TOTL,11881477,11923914,11954290,11982224,12019912,12076699,12155491,12255922,12379549,12526968,12697723,12894316,13115131,13350356,13586681,13814629,14030390,14236745,14439018,14645468
+Zimbabwe,ZWE,"GNI, PPP (current international $)",NY.GNP.MKTP.PP.CD,26072084507.4236,27121623088.7881,25202095917.1133,21365454472.375,20525176748.7229,19970617965.9813,19735282220.6704,19382201999.971,15921801862.8195,16688304055.5788,20491802499.1171,23257335849.2756,27130426246.4164,30824982317.5151,32122394049.3391,33340681206.5211,35973034626.7689,39276020087.4136,43207113913.4029,40017364504.5875
+,,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,,,,,,,
+Data from database: World Development Indicators,,,,,,,,,,,,,,,,,,,,,,,
+Last Updated: 08/18/2020,,,,,,,,,,,,,,,,,,,,,,,
diff --git a/tools/java/org/unicode/cldr/util/data/iso-639-3-macrolanguages.tab b/tools/java/org/unicode/cldr/util/data/iso-639-3-macrolanguages.tab
old mode 100755
new mode 100644
index 1a79cb8..d8dba02
--- a/tools/java/org/unicode/cldr/util/data/iso-639-3-macrolanguages.tab
+++ b/tools/java/org/unicode/cldr/util/data/iso-639-3-macrolanguages.tab
@@ -27,7 +27,7 @@
 ara	ayl	A
 ara	ayn	A
 ara	ayp	A
-ara	bbz	A
+ara	bbz	R
 ara	pga	A
 ara	shu	A
 ara	ssh	A
@@ -437,7 +437,9 @@
 zho	cdo	A
 zho	cjy	A
 zho	cmn	A
+zho	cnp	A
 zho	cpx	A
+zho	csp	A
 zho	czh	A
 zho	czo	A
 zho	gan	A
diff --git a/tools/java/org/unicode/cldr/util/data/iso-639-3-version.tab b/tools/java/org/unicode/cldr/util/data/iso-639-3-version.tab
index 58ff2f2..f5415f7 100755
--- a/tools/java/org/unicode/cldr/util/data/iso-639-3-version.tab
+++ b/tools/java/org/unicode/cldr/util/data/iso-639-3-version.tab
@@ -1 +1 @@
-20190408
+20200130
diff --git a/tools/java/org/unicode/cldr/util/data/iso-639-3.tab b/tools/java/org/unicode/cldr/util/data/iso-639-3.tab
old mode 100755
new mode 100644
index 0d13023..30f7732
--- a/tools/java/org/unicode/cldr/util/data/iso-639-3.tab
+++ b/tools/java/org/unicode/cldr/util/data/iso-639-3.tab
@@ -70,7 +70,7 @@
 acy				I	L	Cypriot Arabic	
 acz				I	L	Acheron	
 ada	ada	ada		I	L	Adangme	
-adb				I	L	Adabe	
+adb				I	L	Atauran	
 add				I	L	Lidzonka	
 ade				I	L	Adele	
 adf				I	L	Dhofari Arabic	
@@ -297,7 +297,6 @@
 aoe				I	L	Angal Enen	
 aof				I	L	Bragat	
 aog				I	L	Angoram	
-aoh				I	E	Arma	
 aoi				I	L	Anindilyakwa	
 aoj				I	L	Mufian	
 aok				I	L	Arhö	
@@ -497,7 +496,6 @@
 ays				I	L	Sorsogon Ayta	
 ayt				I	L	Magbukun Ayta	
 ayu				I	L	Ayu	
-ayy				I	E	Tayabas Ayta	
 ayz				I	L	Mai Brat	
 aza				I	L	Azha	
 azb				I	L	South Azerbaijani	
@@ -556,7 +554,6 @@
 bbw				I	L	Baba	
 bbx				I	L	Bubia	
 bby				I	L	Befang	
-bbz				I	L	Babalia Creole Arabic	
 bca				I	L	Central Bai	
 bcb				I	L	Bainouk-Samik	
 bcc				I	L	Southern Balochi	
@@ -879,7 +876,6 @@
 boy				I	L	Bodo (Central African Republic)	
 boz				I	L	Tiéyaxo Bozo	
 bpa				I	L	Daakaka	
-bpb				I	E	Barbacoas	
 bpd				I	L	Banda-Banda	
 bpg				I	L	Bonggo	
 bph				I	L	Botlikh	
@@ -931,7 +927,7 @@
 brc				I	E	Berbice Creole Dutch	
 brd				I	L	Baraamu	
 bre	bre	bre	br	I	L	Breton	
-brf				I	L	Bera	
+brf				I	L	Bira	
 brg				I	L	Baure	
 brh				I	L	Brahui	
 bri				I	L	Mokpwe	
@@ -1189,7 +1185,6 @@
 cbv				I	L	Cacua	
 cbw				I	L	Kinabalian	
 cby				I	L	Carabayo	
-cca				I	E	Cauca	
 ccc				I	L	Chamicuro	
 ccd				I	L	Cafundo Creole	
 cce				I	L	Chopi	
@@ -1204,7 +1199,6 @@
 cda				I	L	Choni	
 cde				I	L	Chenchu	
 cdf				I	L	Chiru	
-cdg				I	L	Chamari	
 cdh				I	L	Chambeali	
 cdi				I	L	Chodri	
 cdj				I	L	Churahi	
@@ -1283,6 +1277,7 @@
 ckb				I	L	Central Kurdish	
 ckh				I	L	Chak	
 ckl				I	L	Cibak	
+ckm				I	L	Chakavian	
 ckn				I	L	Kaang Chin	
 cko				I	L	Anufo	
 ckq				I	L	Kajakse	
@@ -1329,6 +1324,7 @@
 cnk				I	L	Khumi Chin	
 cnl				I	L	Lalana Chinantec	
 cno				I	L	Con	
+cnp				I	L	Northern Ping Chinese	
 cnr	cnr	cnr		I	L	Montenegrin	
 cns				I	L	Central Asmat	
 cnt				I	L	Tepetotutla Chinantec	
@@ -1410,6 +1406,7 @@
 csm				I	L	Central Sierra Miwok	
 csn				I	L	Colombian Sign Language	
 cso				I	L	Sochiapam Chinantec	
+csp				I	L	Southern Ping Chinese	
 csq				I	L	Croatia Sign Language	
 csr				I	L	Costa Rican Sign Language	
 css				I	E	Southern Ohlone	
@@ -1556,7 +1553,6 @@
 dgr	dgr	dgr		I	L	Dogrib	
 dgs				I	L	Dogoso	
 dgt				I	E	Ndra'ngith	
-dgu				I	L	Degaru	
 dgw				I	E	Daungwurrung	
 dgx				I	L	Doghoro	
 dgz				I	L	Daga	
@@ -1626,6 +1622,7 @@
 dmc				I	L	Gavak	
 dmd				I	E	Madhi Madhi	
 dme				I	L	Dugwor	
+dmf				I	E	Medefaidrin	
 dmg				I	L	Upper Kinabatangan	
 dmk				I	L	Domaaki	
 dml				I	L	Dameli	
@@ -1685,7 +1682,6 @@
 drn				I	L	West Damar	
 dro				I	L	Daro-Matu Melanau	
 drq				I	E	Dura	
-drr				I	E	Dororo	
 drs				I	L	Gedeo	
 drt				I	L	Drents	
 dru				I	L	Rukai	
@@ -1738,6 +1734,7 @@
 duz				I	E	Duli-Gey	
 dva				I	L	Duau	
 dwa				I	L	Diri	
+dwk				I	L	Dawik Kui	
 dwr				I	L	Dawro	
 dws				I	C	Dutton World Speedwords	
 dwu				I	L	Dhuwal	
@@ -1761,6 +1758,7 @@
 dzn				I	L	Dzando	
 dzo	dzo	dzo	dz	I	L	Dzongkha	
 eaa				I	E	Karenggapa	
+ebc				I	L	Beginci	
 ebg				I	L	Ebughu	
 ebk				I	L	Eastern Bontok	
 ebo				I	L	Teke-Ebo	
@@ -1783,7 +1781,6 @@
 eiv				I	L	Askopan	
 eja				I	L	Ejamat	
 eka	eka	eka		I	L	Ekajuk	
-ekc				I	E	Eastern Karnic	
 eke				I	L	Ekit	
 ekg				I	L	Ekari	
 eki				I	L	Eki	
@@ -2058,6 +2055,7 @@
 geb				I	L	Kire	
 gec				I	L	Gboloo Grebo	
 ged				I	L	Gade	
+gef				I	L	Gerai	
 geg				I	L	Gengle	
 geh				I	L	Hutterite German	
 gei				I	L	Gebe	
@@ -2133,7 +2131,6 @@
 gle	gle	gle	ga	I	L	Irish	
 glg	glg	glg	gl	I	L	Galician	
 glh				I	L	Northwest Pashai	
-gli				I	E	Guliguli	
 glj				I	L	Gula Iro	
 glk				I	L	Gilaki	
 gll				I	E	Garlali	
@@ -2151,6 +2148,7 @@
 gml				I	H	Middle Low German	
 gmm				I	L	Gbaya-Mbodomo	
 gmn				I	L	Gimnime	
+gmr				I	L	Mirning	
 gmu				I	L	Gumalu	
 gmv				I	L	Gamo	
 gmx				I	L	Magoma	
@@ -2280,7 +2278,7 @@
 gvy				I	E	Guyani	
 gwa				I	L	Mbato	
 gwb				I	L	Gwa	
-gwc				I	L	Kalami	
+gwc				I	L	Gawri	
 gwd				I	L	Gawwada	
 gwe				I	L	Gweno	
 gwf				I	L	Gowro	
@@ -2417,6 +2415,7 @@
 hna				I	L	Mina (Cameroon)	
 hnd				I	L	Southern Hindko	
 hne				I	L	Chhattisgarhi	
+hng				I	L	Hungu
 hnh				I	L	ǁAni	
 hni				I	L	Hani	
 hnj				I	L	Hmong Njua	
@@ -3039,7 +3038,6 @@
 kjc				I	L	Coastal Konjo	
 kjd				I	L	Southern Kiwai	
 kje				I	L	Kisar	
-kjf				I	L	Khalaj	
 kjg				I	L	Khmu	
 kjh				I	L	Khakas	
 kji				I	L	Zabana	
@@ -3075,7 +3073,7 @@
 kkn				I	L	Kon Keu	
 kko				I	L	Karko	
 kkp				I	L	Gugubera	
-kkq				I	L	Kaiku	
+kkq				I	L	Kaeku	
 kkr				I	L	Kir-Balar	
 kks				I	L	Giiwo	
 kkt				I	L	Koi	
@@ -3094,7 +3092,7 @@
 klg				I	L	Tagakaulo	
 klh				I	L	Weliki	
 kli				I	L	Kalumpang	
-klj				I	L	Turkic Khalaj	
+klj				I	L	Khalaj	
 klk				I	L	Kono (Nigeria)	
 kll				I	L	Kagan Kalagan	
 klm				I	L	Migum	
@@ -3394,7 +3392,6 @@
 kxi				I	L	Keningau Murut	
 kxj				I	L	Kulfa	
 kxk				I	L	Zayein Karen	
-kxl				I	L	Nepali Kurux	
 kxm				I	L	Northern Khmer	
 kxn				I	L	Kanowit-Tanjong Melanau	
 kxo				I	E	Kanoé	
@@ -3403,7 +3400,6 @@
 kxr				I	L	Koro (Papua New Guinea)	
 kxs				I	L	Kangjia	
 kxt				I	L	Koiwat	
-kxu				I	L	Kui (India)	
 kxv				I	L	Kuvi	
 kxw				I	L	Konai	
 kxx				I	L	Likuba	
@@ -3671,7 +3667,6 @@
 lmw				I	L	Lake Miwok	
 lmx				I	L	Laimbue	
 lmy				I	L	Lamboya	
-lmz				I	E	Lumbee	
 lna				I	L	Langbashe	
 lnb				I	L	Mbalanhu	
 lnd				I	L	Lundayeh	
@@ -4149,7 +4144,7 @@
 moa				I	L	Mwan	
 moc				I	L	Mocoví	
 mod				I	E	Mobilian	
-moe				I	L	Montagnais	
+moe				I	L	Innu	
 mog				I	L	Mongondow	
 moh	moh	moh		I	L	Mohawk	
 moi				I	L	Mboi	
@@ -4803,6 +4798,7 @@
 nrx				I	E	Ngurmbur	
 nrz				I	L	Lala	
 nsa				I	L	Sangtam Naga	
+nsb				I	E	Lower Nossob	
 nsc				I	L	Nshi	
 nsd				I	L	Southern Nisu	
 nse				I	L	Nsenga	
@@ -4892,7 +4888,6 @@
 nxo				I	L	Ndambomo	
 nxq				I	L	Naxi	
 nxr				I	L	Ninggerum	
-nxu				I	E	Narau	
 nxx				I	L	Nafri	
 nya	nya	nya	ny	I	L	Nyanja	
 nyb				I	L	Nyangbo	
@@ -5184,7 +5179,7 @@
 pey				I	L	Petjo	
 pez				I	L	Eastern Penan	
 pfa				I	L	Pááfang	
-pfe				I	L	Peere	
+pfe				I	L	Pere	
 pfl				I	L	Pfaelzisch	
 pga				I	L	Sudanese Creole Arabic	
 pgd				I	H	Gāndhārī	
@@ -5261,7 +5256,6 @@
 pll				I	L	Shwe Palaung	
 pln				I	L	Palenquero	
 plo				I	L	Oluta Popoluca	
-plp				I	L	Palpa	
 plq				I	A	Palaic	
 plr				I	L	Palaka Senoufo	
 pls				I	L	San Marcos Tlacoyalco Popoloca	
@@ -5735,10 +5729,10 @@
 sdj				I	L	Suundi	
 sdk				I	L	Sos Kundi	
 sdl				I	L	Saudi Arabian Sign Language	
-sdm				I	L	Semandang	
 sdn				I	L	Gallurese Sardinian	
 sdo				I	L	Bukar-Sadung Bidayuh	
 sdp				I	L	Sherdukpen	
+sdq				I	L	Semandang	
 sdr				I	L	Oraon Sadri	
 sds				I	E	Sened	
 sdt				I	E	Shuadit	
@@ -6200,7 +6194,6 @@
 tay				I	L	Atayal	
 taz				I	L	Tocho	
 tba				I	L	Aikanã	
-tbb				I	E	Tapeba	
 tbc				I	L	Takia	
 tbd				I	L	Kaki Ae	
 tbe				I	L	Tanimbili	
@@ -6730,6 +6723,7 @@
 uka				I	L	Kaburi	
 ukg				I	L	Ukuriguma	
 ukh				I	L	Ukhwejo	
+uki				I	L	Kui (India)	
 ukk				I	L	Muak Sa-aak	
 ukl				I	L	Ukrainian Sign Language	
 ukp				I	L	Ukpe-Bayobiri	
@@ -6737,6 +6731,7 @@
 ukr	ukr	ukr	uk	I	L	Ukrainian	
 uks				I	L	Urubú-Kaapor Sign Language	
 uku				I	L	Ukue	
+ukv				I	L	Kuku	
 ukw				I	L	Ukwuani-Aboh-Ndoni	
 uky				I	E	Kuuk-Yak	
 ula				I	L	Fungwa	
@@ -7023,6 +7018,7 @@
 wlc				I	L	Mwali Comorian	
 wle				I	L	Wolane	
 wlg				I	L	Kunbarlang	
+wlh				I	L	Welaun	
 wli				I	L	Waioli	
 wlk				I	E	Wailaki	
 wll				I	L	Wali (Sudan)	
@@ -7308,6 +7304,7 @@
 xnh				I	L	Kuanhua	
 xni				I	E	Ngarigu	
 xnk				I	E	Nganakarti	
+xnm				I	E	Ngumbarl	
 xnn				I	L	Northern Kankanay	
 xno				I	H	Anglo-Norman	
 xnr				I	L	Kangri	
@@ -7328,12 +7325,17 @@
 xor				I	L	Korubo	
 xow				I	L	Kowaki	
 xpa				I	E	Pirriya	
+xpb				I	E	Northeastern Tasmanian	
 xpc				I	H	Pecheneg	
+xpd				I	E	Oyster Bay Tasmanian	
 xpe				I	L	Liberia Kpelle	
+xpf				I	E	Southeast Tasmanian	
 xpg				I	A	Phrygian	
+xph				I	E	North Midlands Tasmanian	
 xpi				I	H	Pictish	
 xpj				I	E	Mpalitjanh	
 xpk				I	L	Kulina Pano	
+xpl				I	E	Port Sorell Tasmanian	
 xpm				I	E	Pumpokol	
 xpn				I	E	Kapinawá	
 xpo				I	E	Pochutec	
@@ -7343,7 +7345,11 @@
 xps				I	A	Pisidian	
 xpt				I	E	Punthamara	
 xpu				I	A	Punic	
+xpv				I	E	Northern Tasmanian	
+xpw				I	E	Northwestern Tasmanian	
+xpx				I	E	Southwestern Tasmanian	
 xpy				I	A	Puyo	
+xpz				I	E	Bruny Island Tasmanian	
 xqa				I	H	Karakhanid	
 xqt				I	A	Qatabanian	
 xra				I	L	Krahô	
@@ -7354,7 +7360,6 @@
 xri				I	L	Krikati-Timbira	
 xrm				I	A	Armazic	
 xrn				I	E	Arin	
-xrq				I	E	Karranga	
 xrr				I	A	Raetic	
 xrt				I	E	Aranama-Tamique	
 xru				I	L	Marriammu	
@@ -7400,7 +7405,6 @@
 xtv				I	E	Thawa	
 xtw				I	L	Tawandê	
 xty				I	L	Yoloxochitl Mixtec	
-xtz				I	E	Tasmanian	
 xua				I	L	Alu Kurumba	
 xub				I	L	Betta Kurumba	
 xud				I	E	Umiida	
@@ -7706,6 +7710,7 @@
 zax				I	L	Xadani Zapotec	
 zay				I	L	Zayse-Zergulla	
 zaz				I	L	Zari	
+zba				I	C	Balaibalan	
 zbc				I	L	Central Berawan	
 zbe				I	L	East Berawan	
 zbl	zbl	zbl		I	C	Blissymbols	
@@ -7736,8 +7741,7 @@
 zik				I	L	Zimakani	
 zil				I	L	Zialo	
 zim				I	L	Mesme	
-zin				I	L	Zinza	
-zir				I	E	Ziriya	
+zin				I	L	Zinza		
 ziw				I	L	Zigula	
 ziz				I	L	Zizilivakan	
 zka				I	L	Kaimbulawa	
diff --git a/tools/java/org/unicode/cldr/util/data/iso-639-3_Name_Index.tab b/tools/java/org/unicode/cldr/util/data/iso-639-3_Name_Index.tab
old mode 100755
new mode 100644
index 9cf57b1..ccb7344
--- a/tools/java/org/unicode/cldr/util/data/iso-639-3_Name_Index.tab
+++ b/tools/java/org/unicode/cldr/util/data/iso-639-3_Name_Index.tab
@@ -70,7 +70,7 @@
 acy	Cypriot Arabic	Arabic, Cypriot
 acz	Acheron	Acheron
 ada	Adangme	Adangme
-adb	Adabe	Adabe
+adb	Atauran	Atauran
 add	Dzodinka	Dzodinka
 add	Lidzonka	Lidzonka
 ade	Adele	Adele
@@ -303,7 +303,6 @@
 aoe	Angal Enen	Angal Enen
 aof	Bragat	Bragat
 aog	Angoram	Angoram
-aoh	Arma	Arma
 aoi	Anindilyakwa	Anindilyakwa
 aoj	Mufian	Mufian
 aok	Arhö	Arhö
@@ -512,7 +511,6 @@
 ays	Sorsogon Ayta	Ayta, Sorsogon
 ayt	Magbukun Ayta	Ayta, Magbukun
 ayu	Ayu	Ayu
-ayy	Tayabas Ayta	Ayta, Tayabas
 ayz	Mai Brat	Mai Brat
 aza	Azha	Azha
 azb	South Azerbaijani	Azerbaijani, South
@@ -572,7 +570,6 @@
 bbw	Baba	Baba
 bbx	Bubia	Bubia
 bby	Befang	Befang
-bbz	Babalia Creole Arabic	Creole Arabic, Babalia
 bca	Central Bai	Bai, Central
 bcb	Bainouk-Samik	Bainouk-Samik
 bcc	Southern Balochi	Balochi, Southern
@@ -907,7 +904,6 @@
 boy	Bodo (Central African Republic)	Bodo (Central African Republic)
 boz	Tiéyaxo Bozo	Bozo, Tiéyaxo
 bpa	Daakaka	Daakaka
-bpb	Barbacoas	Barbacoas
 bpd	Banda-Banda	Banda-Banda
 bpg	Bonggo	Bonggo
 bph	Botlikh	Botlikh
@@ -962,7 +958,7 @@
 brc	Berbice Creole Dutch	Creole Dutch, Berbice
 brd	Baraamu	Baraamu
 bre	Breton	Breton
-brf	Bera	Bera
+brf	Bira	Bira
 brg	Baure	Baure
 brh	Brahui	Brahui
 bri	Mokpwe	Mokpwe
@@ -1230,7 +1226,6 @@
 cbv	Cacua	Cacua
 cbw	Kinabalian	Kinabalian
 cby	Carabayo	Carabayo
-cca	Cauca	Cauca
 ccc	Chamicuro	Chamicuro
 ccd	Cafundo Creole	Creole, Cafundo
 cce	Chopi	Chopi
@@ -1245,7 +1240,6 @@
 cda	Choni	Choni
 cde	Chenchu	Chenchu
 cdf	Chiru	Chiru
-cdg	Chamari	Chamari
 cdh	Chambeali	Chambeali
 cdi	Chodri	Chodri
 cdj	Churahi	Churahi
@@ -1331,6 +1325,7 @@
 ckb	Central Kurdish	Kurdish, Central
 ckh	Chak	Chak
 ckl	Cibak	Cibak
+ckm	Chakavian	Chakavian
 ckn	Kaang Chin	Chin, Kaang
 cko	Anufo	Anufo
 ckq	Kajakse	Kajakse
@@ -1378,6 +1373,8 @@
 cnk	Khumi Chin	Chin, Khumi
 cnl	Lalana Chinantec	Chinantec, Lalana
 cno	Con	Con
+cnp	Northern Ping Chinese	Chinese, Northern Ping
+cnp	Northern Pinghua	Pinghua, Northern
 cnr	Montenegrin	Montenegrin
 cns	Central Asmat	Asmat, Central
 cnt	Tepetotutla Chinantec	Chinantec, Tepetotutla
@@ -1464,6 +1461,8 @@
 csn	Colombian Sign Language	Colombian Sign Language
 cso	Sochiapam Chinantec	Chinantec, Sochiapam
 cso	Sochiapan Chinantec	Chinantec, Sochiapan
+csp	Southern Ping Chinese	Chinese, Southern Ping
+csp	Southern Pinghua	Pinghua, Southern
 csq	Croatia Sign Language	Croatia Sign Language
 csr	Costa Rican Sign Language	Costa Rican Sign Language
 css	Southern Ohlone	Ohlone, Southern
@@ -1614,9 +1613,9 @@
 dgn	Dagoman	Dagoman
 dgo	Dogri (individual language)	Dogri (individual language)
 dgr	Dogrib	Dogrib
+dgr	Tłı̨chǫ	Tłı̨chǫ
 dgs	Dogoso	Dogoso
 dgt	Ndra'ngith	Ndra'ngith
-dgu	Degaru	Degaru
 dgw	Daungwurrung	Daungwurrung
 dgx	Doghoro	Doghoro
 dgz	Daga	Daga
@@ -1697,6 +1696,7 @@
 dmc	Gavak	Gavak
 dmd	Madhi Madhi	Madhi Madhi
 dme	Dugwor	Dugwor
+dmf	Medefaidrin	Medefaidrin
 dmg	Upper Kinabatangan	Kinabatangan, Upper
 dmk	Domaaki	Domaaki
 dml	Dameli	Dameli
@@ -1759,7 +1759,6 @@
 drn	West Damar	Damar, West
 dro	Daro-Matu Melanau	Melanau, Daro-Matu
 drq	Dura	Dura
-drr	Dororo	Dororo
 drs	Gedeo	Gedeo
 drt	Drents	Drents
 dru	Rukai	Rukai
@@ -1815,6 +1814,7 @@
 duz	Duli-Gey	Duli-Gey
 dva	Duau	Duau
 dwa	Diri	Diri
+dwk	Dawik Kui	Kui, Dawik
 dwr	Dawro	Dawro
 dws	Dutton World Speedwords	Dutton World Speedwords
 dwu	Dhuwal	Dhuwal
@@ -1840,6 +1840,7 @@
 dzn	Dzando	Dzando
 dzo	Dzongkha	Dzongkha
 eaa	Karenggapa	Karenggapa
+ebc	Beginci	Beginci
 ebg	Ebughu	Ebughu
 ebk	Eastern Bontok	Bontok, Eastern
 ebo	Teke-Ebo	Teke-Ebo
@@ -1863,7 +1864,6 @@
 eiv	Askopan	Askopan
 eja	Ejamat	Ejamat
 eka	Ekajuk	Ekajuk
-ekc	Eastern Karnic	Karnic, Eastern
 eke	Ekit	Ekit
 ekg	Ekari	Ekari
 eki	Eki	Eki
@@ -2128,6 +2128,7 @@
 gdf	Guduf-Gava	Guduf-Gava
 gdg	Ga'dang	Ga'dang
 gdh	Gadjerawang	Gadjerawang
+gdh	Gajirrabeng	Gajirrabeng
 gdi	Gundi	Gundi
 gdj	Gurdjar	Gurdjar
 gdk	Gadang	Gadang
@@ -2145,6 +2146,7 @@
 geb	Kire	Kire
 gec	Gboloo Grebo	Grebo, Gboloo
 ged	Gade	Gade
+gef	Gerai	Gerai
 geg	Gengle	Gengle
 geh	Hutterisch	Hutterisch
 geh	Hutterite German	German, Hutterite
@@ -2226,7 +2228,6 @@
 glg	Galician	Galician
 glh	Northwest Pashai	Pashai, Northwest
 glh	Northwest Pashayi	Pashayi, Northwest
-gli	Guliguli	Guliguli
 glj	Gula Iro	Gula Iro
 glk	Gilaki	Gilaki
 gll	Garlali	Garlali
@@ -2244,6 +2245,8 @@
 gml	Middle Low German	German, Middle Low
 gmm	Gbaya-Mbodomo	Gbaya-Mbodomo
 gmn	Gimnime	Gimnime
+gmr	Mirning	Mirning
+gmr	Mirniny	Mirniny
 gmu	Gumalu	Gumalu
 gmv	Gamo	Gamo
 gmx	Magoma	Magoma
@@ -2377,6 +2380,7 @@
 gvy	Guyani	Guyani
 gwa	Mbato	Mbato
 gwb	Gwa	Gwa
+gwc	Gawri	Gawri
 gwc	Kalami	Kalami
 gwd	Gawwada	Gawwada
 gwe	Gweno	Gweno
@@ -2531,6 +2535,7 @@
 hna	Mina (Cameroon)	Mina (Cameroon)
 hnd	Southern Hindko	Hindko, Southern
 hne	Chhattisgarhi	Chhattisgarhi
+hng	Hungu	Hungu
 hnh	ǁAni	ǁAni
 hni	Hani	Hani
 hnj	Hmong Njua	Hmong Njua
@@ -2588,6 +2593,7 @@
 htu	Hitu	Hitu
 htx	Middle Hittite	Hittite, Middle
 hub	Huambisa	Huambisa
+huc	ǂ'Amkhoe	ǂ'Amkhoe
 huc	ǂHua	ǂHua
 hud	Huaulu	Huaulu
 hue	San Francisco Del Mar Huave	Huave, San Francisco Del Mar
@@ -2944,6 +2950,7 @@
 jya	Jiarong	Jiarong
 jye	Judeo-Yemeni Arabic	Arabic, Judeo-Yemeni
 jyy	Jaya	Jaya
+kaa	Karakalpak	Karakalpak
 kaa	Kara-Kalpak	Kara-Kalpak
 kab	Kabyle	Kabyle
 kac	Jingpho	Jingpho
@@ -3187,7 +3194,6 @@
 kjc	Coastal Konjo	Konjo, Coastal
 kjd	Southern Kiwai	Kiwai, Southern
 kje	Kisar	Kisar
-kjf	Khalaj	Khalaj
 kjg	Khmu	Khmu
 kjh	Khakas	Khakas
 kji	Zabana	Zabana
@@ -3224,7 +3230,7 @@
 kko	Karko	Karko
 kkp	Gugubera	Gugubera
 kkp	Koko-Bera	Koko-Bera
-kkq	Kaiku	Kaiku
+kkq	Kaeku	Kaeku
 kkr	Kir-Balar	Kir-Balar
 kks	Giiwo	Giiwo
 kkt	Koi	Koi
@@ -3244,7 +3250,7 @@
 klg	Tagakaulo	Tagakaulo
 klh	Weliki	Weliki
 kli	Kalumpang	Kalumpang
-klj	Turkic Khalaj	Khalaj, Turkic
+klj	Khalaj	Khalaj
 klk	Kono (Nigeria)	Kono (Nigeria)
 kll	Kagan Kalagan	Kalagan, Kagan
 klm	Migum	Migum
@@ -3474,6 +3480,7 @@
 kuf	Western Katu	Katu, Western
 kug	Kupa	Kupa
 kuh	Kushi	Kushi
+kui	Kalapalo	Kalapalo
 kui	Kuikúro-Kalapálo	Kuikúro-Kalapálo
 kuj	Kuria	Kuria
 kuk	Kepo'	Kepo'
@@ -3556,7 +3563,6 @@
 kxi	Keningau Murut	Murut, Keningau
 kxj	Kulfa	Kulfa
 kxk	Zayein Karen	Karen, Zayein
-kxl	Nepali Kurux	Kurux, Nepali
 kxm	Northern Khmer	Khmer, Northern
 kxn	Kanowit-Tanjong Melanau	Melanau, Kanowit-Tanjong
 kxo	Kanoé	Kanoé
@@ -3565,7 +3571,6 @@
 kxr	Koro (Papua New Guinea)	Koro (Papua New Guinea)
 kxs	Kangjia	Kangjia
 kxt	Koiwat	Koiwat
-kxu	Kui (India)	Kui (India)
 kxv	Kuvi	Kuvi
 kxw	Konai	Konai
 kxx	Likuba	Likuba
@@ -3844,7 +3849,6 @@
 lmw	Lake Miwok	Miwok, Lake
 lmx	Laimbue	Laimbue
 lmy	Lamboya	Lamboya
-lmz	Lumbee	Lumbee
 lna	Langbashe	Langbashe
 lnb	Mbalanhu	Mbalanhu
 lnd	Lun Bawang	Lun Bawang
@@ -4342,6 +4346,7 @@
 moa	Mwan	Mwan
 moc	Mocoví	Mocoví
 mod	Mobilian	Mobilian
+moe	Innu	Innu
 moe	Montagnais	Montagnais
 mog	Mongondow	Mongondow
 moh	Mohawk	Mohawk
@@ -5019,6 +5024,7 @@
 nrx	Ngurmbur	Ngurmbur
 nrz	Lala	Lala
 nsa	Sangtam Naga	Naga, Sangtam
+nsb	Lower Nossob	Lower Nossob
 nsc	Nshi	Nshi
 nsd	Southern Nisu	Nisu, Southern
 nse	Nsenga	Nsenga
@@ -5113,7 +5119,6 @@
 nxo	Ndambomo	Ndambomo
 nxq	Naxi	Naxi
 nxr	Ninggerum	Ninggerum
-nxu	Narau	Narau
 nxx	Nafri	Nafri
 nya	Chewa	Chewa
 nya	Chichewa	Chichewa
@@ -5417,7 +5422,7 @@
 pey	Petjo	Petjo
 pez	Eastern Penan	Penan, Eastern
 pfa	Pááfang	Pááfang
-pfe	Peere	Peere
+pfe	Pere	Pere
 pfl	Pfaelzisch	Pfaelzisch
 pga	Sudanese Creole Arabic	Creole Arabic, Sudanese
 pgd	Gāndhārī	Gāndhārī
@@ -5497,7 +5502,6 @@
 pll	Shwe Palaung	Palaung, Shwe
 pln	Palenquero	Palenquero
 plo	Oluta Popoluca	Popoluca, Oluta
-plp	Palpa	Palpa
 plq	Palaic	Palaic
 plr	Palaka Senoufo	Senoufo, Palaka
 pls	San Marcos Tlacoyalco Popoloca	Popoloca, San Marcos Tlacoyalco
@@ -5993,10 +5997,10 @@
 sdj	Suundi	Suundi
 sdk	Sos Kundi	Sos Kundi
 sdl	Saudi Arabian Sign Language	Saudi Arabian Sign Language
-sdm	Semandang	Semandang
 sdn	Gallurese Sardinian	Sardinian, Gallurese
 sdo	Bukar-Sadung Bidayuh	Bidayuh, Bukar-Sadung
 sdp	Sherdukpen	Sherdukpen
+sdq	Semandang	Semandang
 sdr	Oraon Sadri	Sadri, Oraon
 sds	Sened	Sened
 sdt	Shuadit	Shuadit
@@ -6470,7 +6474,6 @@
 tay	Atayal	Atayal
 taz	Tocho	Tocho
 tba	Aikanã	Aikanã
-tbb	Tapeba	Tapeba
 tbc	Takia	Takia
 tbd	Kaki Ae	Kaki Ae
 tbe	Tanimbili	Tanimbili
@@ -7016,6 +7019,7 @@
 uka	Kaburi	Kaburi
 ukg	Ukuriguma	Ukuriguma
 ukh	Ukhwejo	Ukhwejo
+uki	Kui (India)	Kui (India)
 ukk	Muak Sa-aak	Muak Sa-aak
 ukl	Ukrainian Sign Language	Ukrainian Sign Language
 ukp	Ukpe-Bayobiri	Ukpe-Bayobiri
@@ -7024,6 +7028,7 @@
 uks	Kaapor Sign Language	Kaapor Sign Language
 uks	Urubú-Kaapor Sign Language	Urubú-Kaapor Sign Language
 uku	Ukue	Ukue
+ukv	Kuku	Kuku
 ukw	Ukwuani-Aboh-Ndoni	Ukwuani-Aboh-Ndoni
 uky	Kuuk-Yak	Kuuk-Yak
 ula	Fungwa	Fungwa
@@ -7328,6 +7333,7 @@
 wlc	Mwali Comorian	Comorian, Mwali
 wle	Wolane	Wolane
 wlg	Kunbarlang	Kunbarlang
+wlh	Welaun	Welaun
 wli	Waioli	Waioli
 wlk	Wailaki	Wailaki
 wll	Wali (Sudan)	Wali (Sudan)
@@ -7623,6 +7629,7 @@
 xnh	Kuanhua	Kuanhua
 xni	Ngarigu	Ngarigu
 xnk	Nganakarti	Nganakarti
+xnm	Ngumbarl	Ngumbarl
 xnn	Northern Kankanay	Kankanay, Northern
 xno	Anglo-Norman	Anglo-Norman
 xnr	Kangri	Kangri
@@ -7644,12 +7651,20 @@
 xor	Korubo	Korubo
 xow	Kowaki	Kowaki
 xpa	Pirriya	Pirriya
+xpb	Northeastern Tasmanian	Tasmanian, Northeastern
+xpb	Pyemmairrener	Pyemmairrener
 xpc	Pecheneg	Pecheneg
+xpd	Oyster Bay Tasmanian	Tasmanian, Oyster Bay
 xpe	Liberia Kpelle	Kpelle, Liberia
+xpf	Nuenonne	Nuenonne
+xpf	Southeast Tasmanian	Tasmanian, Southeast
 xpg	Phrygian	Phrygian
+xph	North Midlands Tasmanian	Tasmanian, North Midlands
+xph	Tyerrenoterpanner	Tyerrenoterpanner
 xpi	Pictish	Pictish
 xpj	Mpalitjanh	Mpalitjanh
 xpk	Kulina Pano	Pano, Kulina
+xpl	Port Sorell Tasmanian	Tasmanian, Port Sorell
 xpm	Pumpokol	Pumpokol
 xpn	Kapinawá	Kapinawá
 xpo	Pochutec	Pochutec
@@ -7659,7 +7674,14 @@
 xps	Pisidian	Pisidian
 xpt	Punthamara	Punthamara
 xpu	Punic	Punic
+xpv	Northern Tasmanian	Tasmanian, Northern
+xpv	Tommeginne	Tommeginne
+xpw	Northwestern Tasmanian	Tasmanian, Northwestern
+xpw	Peerapper	Peerapper
+xpx	Southwestern Tasmanian	Tasmanian, Southwestern
+xpx	Toogee	Toogee
 xpy	Puyo	Puyo
+xpz	Bruny Island Tasmanian	Tasmanian, Bruny Island
 xqa	Karakhanid	Karakhanid
 xqt	Qatabanian	Qatabanian
 xra	Krahô	Krahô
@@ -7670,7 +7692,6 @@
 xri	Krikati-Timbira	Krikati-Timbira
 xrm	Armazic	Armazic
 xrn	Arin	Arin
-xrq	Karranga	Karranga
 xrr	Raetic	Raetic
 xrt	Aranama-Tamique	Aranama-Tamique
 xru	Marriammu	Marriammu
@@ -7716,13 +7737,13 @@
 xtv	Thawa	Thawa
 xtw	Tawandê	Tawandê
 xty	Yoloxochitl Mixtec	Mixtec, Yoloxochitl
-xtz	Tasmanian	Tasmanian
 xua	Alu Kurumba	Kurumba, Alu
 xub	Betta Kurumba	Kurumba, Betta
 xud	Umiida	Umiida
 xug	Kunigami	Kunigami
 xuj	Jennu Kurumba	Kurumba, Jennu
 xul	Ngunawal	Ngunawal
+xul	Nunukul	Nunukul
 xum	Umbrian	Umbrian
 xun	Unggaranggu	Unggaranggu
 xuo	Kuo	Kuo
@@ -8030,6 +8051,7 @@
 zay	Zaysete	Zaysete
 zay	Zayse-Zergulla	Zayse-Zergulla
 zaz	Zari	Zari
+zba	Balaibalan	Balaibalan
 zbc	Central Berawan	Berawan, Central
 zbe	East Berawan	Berawan, East
 zbl	Bliss	Bliss
@@ -8064,7 +8086,6 @@
 zil	Zialo	Zialo
 zim	Mesme	Mesme
 zin	Zinza	Zinza
-zir	Ziriya	Ziriya
 ziw	Zigula	Zigula
 ziz	Zizilivakan	Zizilivakan
 zka	Kaimbulawa	Kaimbulawa
diff --git a/tools/java/org/unicode/cldr/util/data/iso-639-3_Retirements.tab b/tools/java/org/unicode/cldr/util/data/iso-639-3_Retirements.tab
old mode 100755
new mode 100644
index f7d9355..1f02313
--- a/tools/java/org/unicode/cldr/util/data/iso-639-3_Retirements.tab
+++ b/tools/java/org/unicode/cldr/util/data/iso-639-3_Retirements.tab
@@ -323,10 +323,31 @@
 ncp	Ndaktup	M	kdz		2018-01-23
 ais	Nataoran Amis	S		Split by part going to Amis [ami] and creating Sakizaya [szy] with the remaining part	2019-01-25
 asd	Asas	M	snz		2019-01-25
-dit	Diyari	M	dif		2019-01-25
+dit	Dirari	M	dif		2019-01-25
 dud	Hun-Saare	S		Split into ut-Hun [uth] and us-Saare [uss]	2019-01-25
 lba	Lui	N			2019-01-25
 llo	Khlor	D	ngt		2019-01-25
 myd	Maramba	M	aog		2019-01-25
 myi	Mina (India)	N			2019-01-25
-nns	Ningye	M	nbr		2019-01-25
\ No newline at end of file
+nns	Ningye	M	nbr		2019-01-25
+aoh	Arma	N			2020-01-23
+ayy	Tayabas Ayta	N			2020-01-23
+bbz	Babalia Creole Arabic	N			2020-01-23
+bpb	Barbacoas	N			2020-01-23
+cca	Cauca	N			2020-01-23
+cdg	Chamari	N			2020-01-23
+dgu	Degaru	N			2020-01-23
+drr	Dororo	M	kzk		2020-01-23
+ekc	Eastern Karnic	N			2020-01-23
+gli	Guliguli	M	kzk		2020-01-23
+kjf	Khalaj	N			2020-01-23
+kxl	Nepali Kurux	M	kru		2020-01-23
+kxu	Kui (India)	S		Split into [dwk] Dawik Kui and [uki] Kui (India)	2020-01-23
+lmz	Lumbee	N			2020-01-23
+nxu	Narau	M	bpp		2020-01-23
+plp	Palpa	N			2020-01-23
+sdm	Semandang	S		Split into Semandang [sdq], Beginci [ebc] and Gerai [gef]	2020-01-23
+tbb	Tapeba	N			2020-01-23
+xrq	Karranga	M	dmw		2020-01-23
+xtz	Tasmanian	S		Split into [xpv] Northern Tasman,  [xph] North Midlands Tasman, [xpb] Northeastern Tasman, [xpd] Oyster Bay Tasmanian, [xpf] Southeast Tasma, [xpx] Southwestern Tasman, [xpw] Northwestern Tasman., [xpl] Port Sorell Tasman. and [xpz] Bruny Island Tasman.	2020-01-23
+zir	Ziriya	D	scv		2020-01-23
\ No newline at end of file
diff --git a/tools/java/org/unicode/cldr/util/data/langtagRegex.txt b/tools/java/org/unicode/cldr/util/data/langtagRegex.txt
index 8096de1..cceeec2 100644
--- a/tools/java/org/unicode/cldr/util/data/langtagRegex.txt
+++ b/tools/java/org/unicode/cldr/util/data/langtagRegex.txt
@@ -35,14 +35,14 @@
 
 $privateUse = $x (?: $s $alphanum{1,8} )+ ; # "x" 1*("-" (1*8alphanum))
 
-# Define certain grandfathered codes, since otherwise the regex is pretty useless.
+# Define certain legacy codes (marked as “Type: grandfathered” in BCP 47), since otherwise the regex is pretty useless.
 # Since these are limited, this is safe even later changes to the registry --
 # the only oddity is that it might change the type of the tag, and thus
 # the results from the capturing groups.
 # http://www.iana.org/assignments/language-subtag-registry
 # Note that these have to be compared case insensitively, requiring (?i) below.
 
-$grandfathered  = en $s GB $s oed
+$legacy  = en $s GB $s oed
       | i $s (?: ami | bnn | default | enochian | hak | klingon | lux | mingo | navajo | pwn | tao | tay | tsu )
       | no $s (?: bok | nyn )
       | sgn $s (?: BE $s (?: fr | nl) | CH $s de )
@@ -52,7 +52,7 @@
 # For well-formedness, we don't need the ones that would otherwise pass.
 # For validity, they need to be checked.
 
-# $grandfatheredWellFormed = (?:
+# $legacyWellFormed = (?:
 #         art $s lojban
 #     | cel $s gaulish
 #     | zh $s (?: guoyu | hakka | xiang )
@@ -75,12 +75,12 @@
       (?: $s ( $privateUse ) )? 5%);
 
 # Here is the final breakdown, with capturing groups for each of these components
-# The variants, extensions, grandfathered, and private-use may have interior '-'
+# The variants, extensions, legacy, and private-use may have interior '-'
  
 $root = (?i) # case-insensitive
   (?:
       $langtag 90%
     | ( $privateUse ) 5%
-    | ( $grandfathered ) 5%)
+    | ( $legacy ) 5%)
 #    (?: \@ $keywords )? 5%
-    ;
\ No newline at end of file
+    ;
diff --git a/tools/java/org/unicode/cldr/util/data/langtagTest.txt b/tools/java/org/unicode/cldr/util/data/langtagTest.txt
index 436824b..4378a77 100644
--- a/tools/java/org/unicode/cldr/util/data/langtagTest.txt
+++ b/tools/java/org/unicode/cldr/util/data/langtagTest.txt
@@ -50,21 +50,22 @@
 fr-Latn-FR
 fr-shadok 	 # Variant
 fr-y-myext-myext2
-i-default      	 # grandfathered
-i-default 	 # grandfathered
-i-enochian 	 # Grand fathered
-i-klingon 	 # grandfathered
-i-klingon 	 # grandfathered with singleton
+i-default      	 # legacy (marked as “Type: grandfathered” in BCP 47)
+i-default 	 # legacy
+i-enochian 	 # legacy
+i-klingon 	 # legacy
+i-klingon 	 # legacy with singleton
 mn-Cyrl-MN
 mN-cYrL-Mn
-no-bok 	 # grandfathered without singleton
+no-bok 	 # legacy without singleton
 sl-IT-nedis
 sl-nedis
 sr-Latn-CS
 x-12345678-a
 x-fr-CH
 
-#all of the grandfathered codes; first the really goofy ones. Cased oddly for an extra test.
+#all of the legacy codes (marked as “Type: grandfathered” in BCP 47); first the really goofy ones.
+#Cased oddly for an extra test.
 En-Gb-Oed
 I-Ami
 I-Bnn
@@ -264,7 +265,7 @@
 overlongone
 tlh-a-b-foo
 
-i-notexist          	 # grandfathered but not registered: invalid, even if we only test well-formedness
+i-notexist          	 # legacy but not registered: invalid, even if we only test well-formedness
 
 en-enx                    # Extended tag
 en-enx-eny-enz-latn-us    # Extended tag
diff --git a/tools/java/org/unicode/cldr/util/data/language-subtag-registry b/tools/java/org/unicode/cldr/util/data/language-subtag-registry
index c970025..4b6b653 100644
--- a/tools/java/org/unicode/cldr/util/data/language-subtag-registry
+++ b/tools/java/org/unicode/cldr/util/data/language-subtag-registry
@@ -1,4 +1,4 @@
-File-Date: 2019-09-16
+File-Date: 2020-07-17
 %%
 Type: language
 Subtag: aa
@@ -1530,7 +1530,7 @@
 %%
 Type: language
 Subtag: adb
-Description: Adabe
+Description: Atauran
 Added: 2009-07-29
 %%
 Type: language
@@ -2707,6 +2707,7 @@
 Subtag: aoh
 Description: Arma
 Added: 2009-07-29
+Deprecated: 2020-03-28
 %%
 Type: language
 Subtag: aoi
@@ -3770,6 +3771,7 @@
 Subtag: ayy
 Description: Tayabas Ayta
 Added: 2009-07-29
+Deprecated: 2020-03-28
 %%
 Type: language
 Subtag: ayz
@@ -4085,6 +4087,7 @@
 Subtag: bbz
 Description: Babalia Creole Arabic
 Added: 2009-07-29
+Deprecated: 2020-03-28
 Macrolanguage: ar
 %%
 Type: language
@@ -5755,6 +5758,7 @@
 Subtag: bpb
 Description: Barbacoas
 Added: 2009-07-29
+Deprecated: 2020-03-28
 %%
 Type: language
 Subtag: bpd
@@ -6011,7 +6015,7 @@
 %%
 Type: language
 Subtag: brf
-Description: Bera
+Description: Bira
 Added: 2009-07-29
 %%
 Type: language
@@ -7374,6 +7378,7 @@
 Subtag: cca
 Description: Cauca
 Added: 2009-07-29
+Deprecated: 2020-03-28
 %%
 Type: language
 Subtag: ccc
@@ -7480,6 +7485,7 @@
 Subtag: cdg
 Description: Chamari
 Added: 2009-07-29
+Deprecated: 2020-03-28
 %%
 Type: language
 Subtag: cdh
@@ -7875,6 +7881,11 @@
 Added: 2009-07-29
 %%
 Type: language
+Subtag: ckm
+Description: Chakavian
+Added: 2020-03-28
+%%
+Type: language
 Subtag: ckn
 Description: Kaang Chin
 Added: 2013-09-10
@@ -8121,6 +8132,13 @@
 Added: 2009-07-29
 %%
 Type: language
+Subtag: cnp
+Description: Northern Ping Chinese
+Description: Northern Pinghua
+Added: 2020-03-28
+Macrolanguage: zh
+%%
+Type: language
 Subtag: cnr
 Description: Montenegrin
 Added: 2018-01-23
@@ -8564,6 +8582,13 @@
 Added: 2009-07-29
 %%
 Type: language
+Subtag: csp
+Description: Southern Ping Chinese
+Description: Southern Pinghua
+Added: 2020-03-28
+Macrolanguage: zh
+%%
+Type: language
 Subtag: csq
 Description: Croatia Sign Language
 Added: 2009-07-29
@@ -9318,6 +9343,7 @@
 Type: language
 Subtag: dgr
 Description: Dogrib
+Description: Tłı̨chǫ
 Added: 2005-10-16
 %%
 Type: language
@@ -9334,6 +9360,7 @@
 Subtag: dgu
 Description: Degaru
 Added: 2009-07-29
+Deprecated: 2020-03-28
 %%
 Type: language
 Subtag: dgw
@@ -9720,6 +9747,11 @@
 Added: 2009-07-29
 %%
 Type: language
+Subtag: dmf
+Description: Medefaidrin
+Added: 2020-03-28
+%%
+Type: language
 Subtag: dmg
 Description: Upper Kinabatangan
 Added: 2009-07-29
@@ -10041,6 +10073,8 @@
 Subtag: drr
 Description: Dororo
 Added: 2009-07-29
+Deprecated: 2020-03-28
+Preferred-Value: kzk
 %%
 Type: language
 Subtag: drs
@@ -10330,6 +10364,11 @@
 Added: 2009-07-29
 %%
 Type: language
+Subtag: dwk
+Description: Dawik Kui
+Added: 2020-03-28
+%%
+Type: language
 Subtag: dwl
 Description: Walo Kumbe Dogon
 Added: 2009-07-29
@@ -10455,6 +10494,11 @@
 Added: 2013-09-10
 %%
 Type: language
+Subtag: ebc
+Description: Beginci
+Added: 2020-03-28
+%%
+Type: language
 Subtag: ebg
 Description: Ebughu
 Added: 2009-07-29
@@ -10576,6 +10620,7 @@
 Subtag: ekc
 Description: Eastern Karnic
 Added: 2013-09-10
+Deprecated: 2020-03-28
 %%
 Type: language
 Subtag: eke
@@ -11215,6 +11260,11 @@
 Added: 2009-07-29
 %%
 Type: language
+Subtag: fif
+Description: Faifi
+Added: 2020-06-08
+%%
+Type: language
 Subtag: fil
 Description: Filipino
 Description: Pilipino
@@ -11881,6 +11931,7 @@
 Type: language
 Subtag: gdh
 Description: Gadjerawang
+Description: Gajirrabeng
 Added: 2009-07-29
 %%
 Type: language
@@ -11970,6 +12021,11 @@
 Added: 2009-07-29
 %%
 Type: language
+Subtag: gef
+Description: Gerai
+Added: 2020-03-28
+%%
+Type: language
 Subtag: geg
 Description: Gengle
 Added: 2009-07-29
@@ -12381,6 +12437,8 @@
 Subtag: gli
 Description: Guliguli
 Added: 2009-07-29
+Deprecated: 2020-03-28
+Preferred-Value: kzk
 %%
 Type: language
 Subtag: glj
@@ -12476,6 +12534,12 @@
 Scope: collection
 %%
 Type: language
+Subtag: gmr
+Description: Mirning
+Description: Mirniny
+Added: 2020-03-28
+%%
+Type: language
 Subtag: gmu
 Description: Gumalu
 Added: 2009-07-29
@@ -13155,6 +13219,7 @@
 %%
 Type: language
 Subtag: gwc
+Description: Gawri
 Description: Kalami
 Added: 2009-07-29
 %%
@@ -13859,6 +13924,11 @@
 Added: 2009-07-29
 %%
 Type: language
+Subtag: hng
+Description: Hungu
+Added: 2020-03-28
+%%
+Type: language
 Subtag: hnh
 Description: ǁAni
 Added: 2009-07-29
@@ -14140,6 +14210,7 @@
 Type: language
 Subtag: huc
 Description: ǂHua
+Description: ǂʼAmkhoe
 Added: 2009-07-29
 %%
 Type: language
@@ -15910,6 +15981,7 @@
 Type: language
 Subtag: kaa
 Description: Kara-Kalpak
+Description: Karakalpak
 Added: 2005-10-16
 %%
 Type: language
@@ -17067,8 +17139,9 @@
 %%
 Type: language
 Subtag: kjf
-Description: Khalaj
+Description: Khalaj [Indo-Iranian]
 Added: 2009-07-29
+Deprecated: 2020-03-28
 %%
 Type: language
 Subtag: kjg
@@ -17248,7 +17321,7 @@
 %%
 Type: language
 Subtag: kkq
-Description: Kaiku
+Description: Kaeku
 Added: 2009-07-29
 %%
 Type: language
@@ -17344,7 +17417,7 @@
 %%
 Type: language
 Subtag: klj
-Description: Turkic Khalaj
+Description: Khalaj
 Added: 2009-07-29
 %%
 Type: language
@@ -18497,6 +18570,7 @@
 Type: language
 Subtag: kui
 Description: Kuikúro-Kalapálo
+Description: Kalapalo
 Added: 2009-07-29
 %%
 Type: language
@@ -18908,6 +18982,8 @@
 Subtag: kxl
 Description: Nepali Kurux
 Added: 2009-07-29
+Deprecated: 2020-03-28
+Preferred-Value: kru
 %%
 Type: language
 Subtag: kxm
@@ -18953,6 +19029,8 @@
 Subtag: kxu
 Description: Kui (India)
 Added: 2009-07-29
+Deprecated: 2020-03-28
+Comments: see dwk, uki
 %%
 Type: language
 Subtag: kxv
@@ -20337,6 +20415,7 @@
 Subtag: lmz
 Description: Lumbee
 Added: 2009-07-29
+Deprecated: 2020-03-28
 %%
 Type: language
 Subtag: lna
@@ -22788,6 +22867,7 @@
 %%
 Type: language
 Subtag: moe
+Description: Innu
 Description: Montagnais
 Added: 2009-07-29
 %%
@@ -26199,6 +26279,11 @@
 Added: 2009-07-29
 %%
 Type: language
+Subtag: nsb
+Description: Lower Nossob
+Added: 2020-03-28
+%%
+Type: language
 Subtag: nsc
 Description: Nshi
 Added: 2009-07-29
@@ -26667,6 +26752,8 @@
 Subtag: nxu
 Description: Narau
 Added: 2009-07-29
+Deprecated: 2020-03-28
+Preferred-Value: bpp
 %%
 Type: language
 Subtag: nxx
@@ -28166,7 +28253,7 @@
 %%
 Type: language
 Subtag: pfe
-Description: Peere
+Description: Pere
 Added: 2009-07-29
 %%
 Type: language
@@ -28572,6 +28659,7 @@
 Subtag: plp
 Description: Palpa
 Added: 2009-07-29
+Deprecated: 2020-03-28
 %%
 Type: language
 Subtag: plq
@@ -31132,6 +31220,8 @@
 Subtag: sdm
 Description: Semandang
 Added: 2009-07-29
+Deprecated: 2020-03-28
+Comments: see ebc, gef, sdq
 %%
 Type: language
 Subtag: sdn
@@ -31150,6 +31240,11 @@
 Added: 2009-07-29
 %%
 Type: language
+Subtag: sdq
+Description: Semandang
+Added: 2020-03-28
+%%
+Type: language
 Subtag: sdr
 Description: Oraon Sadri
 Added: 2009-07-29
@@ -33502,6 +33597,7 @@
 Subtag: tbb
 Description: Tapeba
 Added: 2009-07-29
+Deprecated: 2020-03-28
 %%
 Type: language
 Subtag: tbc
@@ -34219,6 +34315,8 @@
 Subtag: thw
 Description: Thudam
 Added: 2009-07-29
+Deprecated: 2020-06-08
+Preferred-Value: ola
 %%
 Type: language
 Subtag: thx
@@ -36240,6 +36338,11 @@
 Added: 2009-07-29
 %%
 Type: language
+Subtag: uki
+Description: Kui (India)
+Added: 2020-03-28
+%%
+Type: language
 Subtag: ukk
 Description: Muak Sa-aak
 Added: 2017-02-23
@@ -36271,6 +36374,11 @@
 Added: 2009-07-29
 %%
 Type: language
+Subtag: ukv
+Description: Kuku
+Added: 2020-03-28
+%%
+Type: language
 Subtag: ukw
 Description: Ukwuani-Aboh-Ndoni
 Added: 2009-07-29
@@ -37760,6 +37868,11 @@
 Added: 2009-07-29
 %%
 Type: language
+Subtag: wlh
+Description: Welaun
+Added: 2020-03-28
+%%
+Type: language
 Subtag: wli
 Description: Waioli
 Added: 2009-07-29
@@ -39232,6 +39345,11 @@
 Added: 2013-09-10
 %%
 Type: language
+Subtag: xnm
+Description: Ngumbarl
+Added: 2020-03-28
+%%
+Type: language
 Subtag: xnn
 Description: Northern Kankanay
 Added: 2009-07-29
@@ -39334,22 +39452,45 @@
 Added: 2013-09-10
 %%
 Type: language
+Subtag: xpb
+Description: Northeastern Tasmanian
+Description: Pyemmairrener
+Added: 2020-03-28
+%%
+Type: language
 Subtag: xpc
 Description: Pecheneg
 Added: 2009-07-29
 %%
 Type: language
+Subtag: xpd
+Description: Oyster Bay Tasmanian
+Added: 2020-03-28
+%%
+Type: language
 Subtag: xpe
 Description: Liberia Kpelle
 Added: 2009-07-29
 Macrolanguage: kpe
 %%
 Type: language
+Subtag: xpf
+Description: Southeast Tasmanian
+Description: Nuenonne
+Added: 2020-03-28
+%%
+Type: language
 Subtag: xpg
 Description: Phrygian
 Added: 2009-07-29
 %%
 Type: language
+Subtag: xph
+Description: North Midlands Tasmanian
+Description: Tyerrenoterpanner
+Added: 2020-03-28
+%%
+Type: language
 Subtag: xpi
 Description: Pictish
 Added: 2009-07-29
@@ -39365,6 +39506,11 @@
 Added: 2009-07-29
 %%
 Type: language
+Subtag: xpl
+Description: Port Sorell Tasmanian
+Added: 2020-03-28
+%%
+Type: language
 Subtag: xpm
 Description: Pumpokol
 Added: 2009-07-29
@@ -39410,11 +39556,34 @@
 Added: 2009-07-29
 %%
 Type: language
+Subtag: xpv
+Description: Northern Tasmanian
+Description: Tommeginne
+Added: 2020-03-28
+%%
+Type: language
+Subtag: xpw
+Description: Northwestern Tasmanian
+Description: Peerapper
+Added: 2020-03-28
+%%
+Type: language
+Subtag: xpx
+Description: Southwestern Tasmanian
+Description: Toogee
+Added: 2020-03-28
+%%
+Type: language
 Subtag: xpy
 Description: Puyo
 Added: 2009-07-29
 %%
 Type: language
+Subtag: xpz
+Description: Bruny Island Tasmanian
+Added: 2020-03-28
+%%
+Type: language
 Subtag: xqa
 Description: Karakhanid
 Added: 2009-07-29
@@ -39468,6 +39637,8 @@
 Subtag: xrq
 Description: Karranga
 Added: 2013-09-10
+Deprecated: 2020-03-28
+Preferred-Value: dmw
 %%
 Type: language
 Subtag: xrr
@@ -39700,6 +39871,8 @@
 Subtag: xtz
 Description: Tasmanian
 Added: 2009-07-29
+Deprecated: 2020-03-28
+Comments: see xpb, xpd, xpf, xph, xpl, xpv, xpw, xpx, xpz
 %%
 Type: language
 Subtag: xua
@@ -39729,6 +39902,7 @@
 Type: language
 Subtag: xul
 Description: Ngunawal
+Description: Nunukul
 Added: 2013-09-10
 %%
 Type: language
@@ -41321,6 +41495,11 @@
 Added: 2009-07-29
 %%
 Type: language
+Subtag: zba
+Description: Balaibalan
+Added: 2020-03-28
+%%
+Type: language
 Subtag: zbc
 Description: Central Berawan
 Added: 2009-07-29
@@ -41486,6 +41665,8 @@
 Subtag: zir
 Description: Ziriya
 Added: 2009-07-29
+Deprecated: 2020-03-28
+Preferred-Value: scv
 %%
 Type: language
 Subtag: ziw
@@ -42463,6 +42644,7 @@
 Subtag: bbz
 Description: Babalia Creole Arabic
 Added: 2009-07-29
+Deprecated: 2020-03-28
 Preferred-Value: bbz
 Prefix: ar
 Macrolanguage: ar
@@ -42580,6 +42762,15 @@
 Macrolanguage: zh
 %%
 Type: extlang
+Subtag: cnp
+Description: Northern Ping Chinese
+Description: Northern Pinghua
+Added: 2020-03-28
+Preferred-Value: cnp
+Prefix: zh
+Macrolanguage: zh
+%%
+Type: extlang
 Subtag: coa
 Description: Cocos Islands Malay
 Added: 2009-07-29
@@ -42647,6 +42838,15 @@
 Prefix: sgn
 %%
 Type: extlang
+Subtag: csp
+Description: Southern Ping Chinese
+Description: Southern Pinghua
+Added: 2020-03-28
+Preferred-Value: csp
+Prefix: zh
+Macrolanguage: zh
+%%
+Type: extlang
 Subtag: csq
 Description: Croatia Sign Language
 Added: 2009-07-29
@@ -44928,6 +45128,11 @@
 Added: 2011-08-16
 %%
 Type: script
+Subtag: Toto
+Description: Toto
+Added: 2020-05-12
+%%
+Type: script
 Subtag: Ugar
 Description: Ugaritic
 Added: 2005-10-16
@@ -46630,6 +46835,12 @@
   Letras in 1943 and generally used in Brazil until 2009
 %%
 Type: variant
+Subtag: akuapem
+Description: Akuapem Twi
+Added: 2017-06-05
+Prefix: tw
+%%
+Type: variant
 Subtag: alalc97
 Description: ALA-LC Romanization, 1997 edition
 Added: 2009-12-09
@@ -46648,12 +46859,6 @@
   continuum in Eastern Suriname and Western French Guiana
 %%
 Type: variant
-Subtag: akuapem
-Description: Akuapem Twi
-Added: 2017-06-05
-Prefix: tw
-%%
-Type: variant
 Subtag: ao1990
 Description: Portuguese Language Orthographic Agreement of 1990 (Acordo
   Ortográfico da Língua Portuguesa de 1990)
@@ -47129,6 +47334,16 @@
   Creole continuum in Eastern Suriname and Western French Guiana
 %%
 Type: variant
+Subtag: peano
+Description: Latino Sine Flexione
+Description: Interlingua de API
+Description: Interlingua de Peano
+Prefix: la
+Comments: Peano’s Interlingua, created in 1903 by Giuseppe Peano as an
+  international auxiliary language
+Added: 2020-03-12
+%%
+Type: variant
 Subtag: petr1708
 Description: Petrine orthography
 Added: 2010-10-10
@@ -47266,6 +47481,23 @@
   Miensk 2005).
 %%
 Type: variant
+Subtag: tongyong
+Description: Tongyong Pinyin romanization
+Added: 2020-06-08
+Prefix: zh-Latn
+Comments: Former official transcription standard for Mandarin Chinese in
+  Taiwan.
+%%
+Type: variant
+Subtag: tunumiit
+Description: Tunumiisiut
+Description: East Greenlandic
+Description: Østgrønlandsk
+Added: 2020-07-16
+Prefix: kl
+Comments: Also known as Tunumiit oraasiat
+%%
+Type: variant
 Subtag: uccor
 Description: Unified Cornish orthography of Revived Cornish
 Added: 2008-10-14
diff --git a/tools/java/org/unicode/cldr/util/data/language_script_raw.txt b/tools/java/org/unicode/cldr/util/data/language_script_raw.txt
index 4660a44..1b963c4 100644
--- a/tools/java/org/unicode/cldr/util/data/language_script_raw.txt
+++ b/tools/java/org/unicode/cldr/util/data/language_script_raw.txt
@@ -1,4 +1,7 @@
 #Lcode	LanguageName	Status	Scode	ScriptName	References
+#######
+#WARNING: this file is in TSV format (for pasting from a spreadsheet); make sure you maintain tabs!
+#######
 aa	Afar	primary	Latn	Latin
 ab	Abkhazian	primary	Cyrl	Cyrillic
 abq	Abaza	primary	Cyrl	Cyrillic
@@ -183,7 +186,8 @@
 dje	Zarma	primary	Latn	Latin
 dng	Dungan	primary	Cyrl	Cyrillic
 dnj	Dan	primary	Latn	Latin
-doi	Dogri	primary	Arab	Arabic
+doi	Dogri	primary	Deva	Devanagari
+doi	Dogri	secondary	Arab	Arabic
 doi	Dogri	secondary	Takr	Takri
 dsb	Lower Sorbian	primary	Latn	Latin
 dtm	Tomo Kan Dogon	primary	Latn	Latin
@@ -804,6 +808,7 @@
 tru	Turoyo	primary	Latn	Latin
 tru	Turoyo	secondary	Syrc	Syriac
 trv	Taroko	primary	Latn	Latin
+trw	Torwali	primary	Arab	Arabic
 ts	Tsonga	primary	Latn	Latin
 tsd	Tsakonian	primary	Grek	Greek
 tsg	Tausug	primary	Latn	Latin
diff --git a/tools/java/org/unicode/cldr/util/data/leapseconds b/tools/java/org/unicode/cldr/util/data/leapseconds
index 886ae27..3b9cc7b 100644
--- a/tools/java/org/unicode/cldr/util/data/leapseconds
+++ b/tools/java/org/unicode/cldr/util/data/leapseconds
@@ -3,36 +3,39 @@
 # This file is in the public domain.
 
 # This file is generated automatically from the data in the public-domain
-# leap-seconds.list file, which can be copied from
+# NIST format leap-seconds.list file, which can be copied from
 # <ftp://ftp.nist.gov/pub/time/leap-seconds.list>
-# or <ftp://ftp.boulder.nist.gov/pub/time/leap-seconds.list>
-# or <ftp://tycho.usno.navy.mil/pub/ntp/leap-seconds.list>.
+# or <ftp://ftp.boulder.nist.gov/pub/time/leap-seconds.list>.
 # For more about leap-seconds.list, please see
 # The NTP Timescale and Leap Seconds
 # <https://www.eecis.udel.edu/~mills/leap.html>.
 
-# The International Earth Rotation and Reference Systems Service
+# The rules for leap seconds are specified in Annex 1 (Time scales) of:
+# Standard-frequency and time-signal emissions.
+# International Telecommunication Union - Radiocommunication Sector
+# (ITU-R) Recommendation TF.460-6 (02/2002)
+# <https://www.itu.int/rec/R-REC-TF.460-6-200202-I/>.
+# The International Earth Rotation and Reference Systems Service (IERS)
 # periodically uses leap seconds to keep UTC to within 0.9 s of UT1
-# (which measures the true angular orientation of the earth in space)
+# (a proxy for Earth's angle in space as measured by astronomers)
 # and publishes leap second data in a copyrighted file
 # <https://hpiers.obspm.fr/iers/bul/bulc/Leap_Second.dat>.
 # See: Levine J. Coordinated Universal Time and the leap second.
 # URSI Radio Sci Bull. 2016;89(4):30-6. doi:10.23919/URSIRSB.2016.7909995
 # <https://ieeexplore.ieee.org/document/7909995>.
 
-# There were no leap seconds before 1972, because the official mechanism
-# accounting for the discrepancy between atomic time and the earth's rotation
-# did not exist.  The first ("1 Jan 1972") data line in leap-seconds.list
+# There were no leap seconds before 1972, as no official mechanism
+# accounted for the discrepancy between atomic time (TAI) and the earth's
+# rotation.  The first ("1 Jan 1972") data line in leap-seconds.list
 # does not denote a leap second; it denotes the start of the current definition
 # of UTC.
 
-# The correction (+ or -) is made at the given time, so lines
-# will typically look like:
-#	Leap	YEAR	MON	DAY	23:59:60	+	R/S
-# or
-#	Leap	YEAR	MON	DAY	23:59:59	-	R/S
-
-# If the leap second is Rolling (R) the given time is local time (unused here).
+# All leap-seconds are Stationary (S) at the given UTC time.
+# The correction (+ or -) is made at the given time, so in the unlikely
+# event of a negative leap second, a line would look like this:
+# Leap	YEAR	MON	DAY	23:59:59	-	S
+# Typical lines look like this:
+# Leap	YEAR	MON	DAY	23:59:60	+	S
 Leap	1972	Jun	30	23:59:60	+	S
 Leap	1972	Dec	31	23:59:60	+	S
 Leap	1973	Dec	31	23:59:60	+	S
@@ -61,9 +64,15 @@
 Leap	2015	Jun	30	23:59:60	+	S
 Leap	2016	Dec	31	23:59:60	+	S
 
-# POSIX timestamps for the data in this file:
-#updated 1467936000
-#expires 1577491200
+# UTC timestamp when this leap second list expires.
+# Any additional leap seconds will come after this.
+# This Expires line is commented out for now,
+# so that pre-2020a zic implementations do not reject this file.
+#Expires 2020	Dec	28	00:00:00
 
-#	Updated through IERS Bulletin C57
-#	File expires on:  28 December 2019
+# POSIX timestamps for the data in this file:
+#updated 1467936000 (2016-07-08 00:00:00 UTC)
+#expires 1609113600 (2020-12-28 00:00:00 UTC)
+
+#	Updated through IERS Bulletin C59
+#	File expires on:  28 December 2020
diff --git a/tools/java/org/unicode/cldr/util/data/lstreg.txt b/tools/java/org/unicode/cldr/util/data/lstreg.txt
deleted file mode 100644
index 9013ca5..0000000
--- a/tools/java/org/unicode/cldr/util/data/lstreg.txt
+++ /dev/null
@@ -1,1010 +0,0 @@
-# IANA Language Subtag Registry
-# This registry lists all valid subtags for language tags
-# created under RFC 3066bis.
-#
-# Format (except for date record):
-#
-# type | subtag | description | date | canonical_value | recommended_prefix # comments
-#
-# where:
-# - 'type' is the type of subtag (language, extlang, script, region, variant, grandfathered, redundant)
-# - 'subtag' is the subtag (or tag, if grandfathered or redundant) defined by this record
-# - 'description' is an English-language description of the subtag
-# - 'date' is the date this record was added to the registry (ISO 8601)
-# - 'canonical_value', if present, is the canonical subtag for which this subtag is an alias
-# - 'recommended_prefix' is an informative list of language-ranges considered most appropriate for this (variant) subtag
-# - 'comments' are informative only
-
-date | 2005-01-06
-
-# language codes: ISO 639 and registered codes
-
-# ISO 639-1 (alpha-2) codes
-language | aa | Afar | 2004-07-06 | |
-language | ab | Abkhazian | 2004-07-06 | |
-language | ae | Avestan | 2004-07-06 | |
-language | af | Afrikaans | 2004-07-06 | |
-language | ak | Akan | 2004-07-06 | |
-language | am | Amharic | 2004-07-06 | |
-language | an | Aragonese | 2004-07-06 | |
-language | ar | Arabic | 2004-07-06 | |
-language | as | Assamese | 2004-07-06 | |
-language | av | Avaric | 2004-07-06 | |
-language | ay | Aymara | 2004-07-06 | |
-language | az | Azerbaijani | 2004-07-06 | |
-language | ba | Bashkir | 2004-07-06 | |
-language | be | Belarusian | 2004-07-06 | |
-language | bg | Bulgarian | 2004-07-06 | |
-language | bh | Bihari | 2004-07-06 | |
-language | bi | Bislama | 2004-07-06 | |
-language | bm | Bambara | 2004-07-06 | |
-language | bn | Bengali | 2004-07-06 | |
-language | bo | Tibetan | 2004-07-06 | |
-language | br | Breton | 2004-07-06 | |
-language | bs | Bosnian | 2004-07-06 | |
-language | ca | Catalan; Valencian | 2004-07-06 | |
-language | ce | Chechen | 2004-07-06 | |
-language | ch | Chamorro | 2004-07-06 | |
-language | co | Corsican | 2004-07-06 | |
-language | cr | Cree | 2004-07-06 | |
-language | cs | Czech | 2004-07-06 | |
-language | cu | Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic | 2004-07-06 | |
-language | cv | Chuvash | 2004-07-06 | |
-language | cy | Welsh | 2004-07-06 | |
-language | da | Danish | 2004-07-06 | |
-language | de | German | 2004-07-06 | |
-language | dv | Divehi | 2004-07-06 | |
-language | dz | Dzongkha | 2004-07-06 | |
-language | ee | Ewe | 2004-07-06 | |
-language | el | Greek, Modern (1453-) | 2004-07-06 | |
-language | en | English | 2004-07-06 | |
-language | eo | Esperanto | 2004-07-06 | |
-language | es | Spanish; Castilian | 2004-07-06 | |
-language | et | Estonian | 2004-07-06 | |
-language | eu | Basque | 2004-07-06 | |
-language | fa | Persian | 2004-07-06 | |
-language | ff | Fulah | 2004-07-06 | |
-language | fi | Finnish | 2004-07-06 | |
-language | fj | Fijian | 2004-07-06 | |
-language | fo | Faroese | 2004-07-06 | |
-language | fr | French | 2004-07-06 | |
-language | fy | Frisian | 2004-07-06 | |
-language | ga | Irish | 2004-07-06 | |
-language | gd | Gaelic; Scottish Gaelic | 2004-07-06 | |
-language | gl | Gallegan | 2004-07-06 | |
-language | gn | Guarani | 2004-07-06 | |
-language | gu | Gujarati | 2004-07-06 | |
-language | gv | Manx | 2004-07-06 | |
-language | ha | Hausa | 2004-07-06 | |
-language | he | Hebrew | 2004-07-06 | |
-language | hi | Hindi | 2004-07-06 | |
-language | ho | Hiri Motu | 2004-07-06 | |
-language | hr | Croatian | 2004-07-06 | |
-language | ht | Haitian; Haitian Creole | 2004-07-06 | |
-language | hu | Hungarian | 2004-07-06 | |
-language | hy | Armenian | 2004-07-06 | |
-language | hz | Herero | 2004-07-06 | |
-language | ia | Interlingua (International Auxiliary Language Association) | 2004-07-06 | |
-language | id | Indonesian | 2004-07-06 | |
-language | ie | Interlingue | 2004-07-06 | |
-language | ig | Igbo | 2004-07-06 | |
-language | ii | Sichuan Yi | 2004-07-06 | |
-language | ik | Inupiaq | 2004-07-06 | |
-language | in | Indonesian | 2004-07-06 | id | # deprecated 1989
-language | io | Ido | 2004-07-06 | |
-language | is | Icelandic | 2004-07-06 | |
-language | it | Italian | 2004-07-06 | |
-language | iu | Inuktitut | 2004-07-06 | |
-language | iw | Hebrew | 2004-07-06 | he | # deprecated 1989
-language | ja | Japanese | 2004-07-06 | |
-language | ji | Yiddish | 2004-07-06 | yi | # deprecated 1989
-language | jv | Javanese | 2004-07-06 | |
-language | jw | Javanese | 2004-07-06 | jv |
-language | ka | Georgian | 2004-07-06 | |
-language | kg | Kongo | 2004-07-06 | |
-language | ki | Kikuyu; Gikuyu | 2004-07-06 | |
-language | kj | Kuanyama; Kwanyama | 2004-07-06 | |
-language | kk | Kazakh | 2004-07-06 | |
-language | kl | Kalaallisut; Greenlandic | 2004-07-06 | |
-language | km | Khmer | 2004-07-06 | |
-language | kn | Kannada | 2004-07-06 | |
-language | ko | Korean | 2004-07-06 | |
-language | kr | Kanuri | 2004-07-06 | |
-language | ks | Kashmiri | 2004-07-06 | |
-language | ku | Kurdish | 2004-07-06 | |
-language | kv | Komi | 2004-07-06 | |
-language | kw | Cornish | 2004-07-06 | |
-language | ky | Kirghiz | 2004-07-06 | |
-language | la | Latin | 2004-07-06 | |
-language | lb | Luxembourgish; Letzeburgesch | 2004-07-06 | |
-language | lg | Ganda | 2004-07-06 | |
-language | li | Limburgan; Limburger; Limburgish | 2004-07-06 | |
-language | ln | Lingala | 2004-07-06 | |
-language | lo | Lao | 2004-07-06 | |
-language | lt | Lithuanian | 2004-07-06 | |
-language | lu | Luba-Katanga | 2004-07-06 | |
-language | lv | Latvian | 2004-07-06 | |
-language | mg | Malagasy | 2004-07-06 | |
-language | mh | Marshallese | 2004-07-06 | |
-language | mi | Maori | 2004-07-06 | |
-language | mk | Macedonian | 2004-07-06 | |
-language | ml | Malayalam | 2004-07-06 | |
-language | mn | Mongolian | 2004-07-06 | |
-language | mo | Moldavian | 2004-07-06 | |
-language | mr | Marathi | 2004-07-06 | |
-language | ms | Malay | 2004-07-06 | |
-language | mt | Maltese | 2004-07-06 | |
-language | my | Burmese | 2004-07-06 | |
-language | na | Nauru | 2004-07-06 | |
-language | nb | Norwegian Bokmal | 2004-07-06 | |
-language | nd | Ndebele, North; North Ndebele | 2004-07-06 | |
-language | ne | Nepali | 2004-07-06 | |
-language | ng | Ndonga | 2004-07-06 | |
-language | nl | Dutch; Flemish | 2004-07-06 | |
-language | nn | Norwegian Nynorsk | 2004-07-06 | |
-language | no | Norwegian | 2004-07-06 | |
-language | nr | Ndebele, South; South Ndebele | 2004-07-06 | |
-language | nv | Navajo; Navaho | 2004-07-06 | |
-language | ny | Chichewa; Chewa; Nyanja | 2004-07-06 | |
-language | oc | Occitan (post 1500); Provencal | 2004-07-06 | |
-language | oj | Ojibwa | 2004-07-06 | |
-language | om | Oromo | 2004-07-06 | |
-language | or | Oriya | 2004-07-06 | |
-language | os | Ossetian; Ossetic | 2004-07-06 | |
-language | pa | Panjabi; Punjabi | 2004-07-06 | |
-language | pi | Pali | 2004-07-06 | |
-language | pl | Polish | 2004-07-06 | |
-language | ps | Pushto | 2004-07-06 | |
-language | pt | Portuguese | 2004-07-06 | |
-language | qu | Quechua | 2004-07-06 | |
-language | rm | Raeto-Romance | 2004-07-06 | |
-language | rn | Rundi | 2004-07-06 | |
-language | ro | Romanian | 2004-07-06 | |
-language | ru | Russian | 2004-07-06 | |
-language | rw | Kinyarwanda | 2004-07-06 | |
-language | sa | Sanskrit | 2004-07-06 | |
-language | sc | Sardinian | 2004-07-06 | |
-language | sd | Sindhi | 2004-07-06 | |
-language | se | Northern Sami | 2004-07-06 | |
-language | sg | Sango | 2004-07-06 | |
-language | sh | Serbo-Croatian | 2004-07-06 | | # deprecated 2000-02-18
-language | si | Sinhala; Sinhalese | 2004-07-06 | |
-language | sk | Slovak | 2004-07-06 | |
-language | sl | Slovenian | 2004-07-06 | |
-language | sm | Samoan | 2004-07-06 | |
-language | sn | Shona | 2004-07-06 | |
-language | so | Somali | 2004-07-06 | |
-language | sq | Albanian | 2004-07-06 | |
-language | sr | Serbian | 2004-07-06 | |
-language | ss | Swati | 2004-07-06 | |
-language | st | Sotho, Southern | 2004-07-06 | |
-language | su | Sundanese | 2004-07-06 | |
-language | sv | Swedish | 2004-07-06 | |
-language | sw | Swahili | 2004-07-06 | |
-language | ta | Tamil | 2004-07-06 | |
-language | te | Telugu | 2004-07-06 | |
-language | tg | Tajik | 2004-07-06 | |
-language | th | Thai | 2004-07-06 | |
-language | ti | Tigrinya | 2004-07-06 | |
-language | tk | Turkmen | 2004-07-06 | |
-language | tl | Tagalog | 2004-07-06 | |
-language | tn | Tswana | 2004-07-06 | |
-language | to | Tonga (Tonga Islands) | 2004-07-06 | |
-language | tr | Turkish | 2004-07-06 | |
-language | ts | Tsonga | 2004-07-06 | |
-language | tt | Tatar | 2004-07-06 | |
-language | tw | Twi | 2004-07-06 | |
-language | ty | Tahitian | 2004-07-06 | |
-language | ug | Uighur; Uyghur | 2004-07-06 | |
-language | uk | Ukrainian | 2004-07-06 | |
-language | ur | Urdu | 2004-07-06 | |
-language | uz | Uzbek | 2004-07-06 | |
-language | ve | Venda | 2004-07-06 | |
-language | vi | Vietnamese | 2004-07-06 | |
-language | vo | Volapuk | 2004-07-06 | |
-language | wa | Walloon | 2004-07-06 | |
-language | wo | Wolof | 2004-07-06 | |
-language | xh | Xhosa | 2004-07-06 | |
-language | yi | Yiddish | 2004-07-06 | |
-language | yo | Yoruba | 2004-07-06 | |
-language | za | Zhuang; Chuang | 2004-07-06 | |
-language | zh | Chinese | 2004-07-06 | |
-language | zu | Zulu | 2004-07-06 | |
-
-# ISO 639-2 (alpha-3) codes
-language | ace | Achinese | 2004-07-06 | |
-language | ach | Acoli | 2004-07-06 | |
-language | ada | Adangme | 2004-07-06 | |
-language | ady | Adyghe; Adygei | 2004-07-06 | |
-language | afa | Afro-Asiatic (Other) | 2004-07-06 | |
-language | afh | Afrihili | 2004-07-06 | |
-language | akk | Akkadian | 2004-07-06 | |
-language | ale | Aleut | 2004-07-06 | |
-language | alg | Algonquian languages | 2004-07-06 | |
-language | alt | Southern Altai | 2004-07-06 | |
-language | ang | English, Old (ca. 450-1100) | 2004-07-06 | |
-language | apa | Apache languages | 2004-07-06 | |
-language | arc | Aramaic | 2004-07-06 | |
-language | arn | Araucanian | 2004-07-06 | |
-language | arp | Arapaho | 2004-07-06 | |
-language | art | Artificial (Other) | 2004-07-06 | |
-language | arw | Arawak | 2004-07-06 | |
-language | ast | Asturian; Bable | 2004-07-06 | |
-language | ath | Athapascan languages | 2004-07-06 | |
-language | aus | Australian languages | 2004-07-06 | |
-language | awa | Awadhi | 2004-07-06 | |
-language | bad | Banda | 2004-07-06 | |
-language | bai | Bamileke languages | 2004-07-06 | |
-language | bal | Baluchi | 2004-07-06 | |
-language | ban | Balinese | 2004-07-06 | |
-language | bas | Basa | 2004-07-06 | |
-language | bat | Baltic (Other) | 2004-07-06 | |
-language | bej | Beja | 2004-07-06 | |
-language | bem | Bemba | 2004-07-06 | |
-language | ber | Berber (Other) | 2004-07-06 | |
-language | bho | Bhojpuri | 2004-07-06 | |
-language | bik | Bikol | 2004-07-06 | |
-language | bin | Bini | 2004-07-06 | |
-language | bla | Siksika | 2004-07-06 | |
-language | bnt | Bantu (Other) | 2004-07-06 | |
-language | bra | Braj | 2004-07-06 | |
-language | btk | Batak (Indonesia) | 2004-07-06 | |
-language | bua | Buriat | 2004-07-06 | |
-language | bug | Buginese | 2004-07-06 | |
-language | byn | Blin; Bilin | 2004-07-06 | |
-language | cad | Caddo | 2004-07-06 | |
-language | cai | Central American Indian (Other) | 2004-07-06 | |
-language | car | Carib | 2004-07-06 | |
-language | cau | Caucasian (Other) | 2004-07-06 | |
-language | ceb | Cebuano | 2004-07-06 | |
-language | cel | Celtic (Other) | 2004-07-06 | |
-language | chb | Chibcha | 2004-07-06 | |
-language | chg | Chagatai | 2004-07-06 | |
-language | chk | Chuukese | 2004-07-06 | |
-language | chm | Mari | 2004-07-06 | |
-language | chn | Chinook jargon | 2004-07-06 | |
-language | cho | Choctaw | 2004-07-06 | |
-language | chp | Chipewyan | 2004-07-06 | |
-language | chr | Cherokee | 2004-07-06 | |
-language | chy | Cheyenne | 2004-07-06 | |
-language | cmc | Chamic languages | 2004-07-06 | |
-language | cop | Coptic | 2004-07-06 | |
-language | cpe | Creoles and pidgins, English-based (Other) | 2004-07-06 | |
-language | cpf | Creoles and pidgins, French-based (Other) | 2004-07-06 | |
-language | cpp | Creoles and pidgins, Portuguese-based (Other) | 2004-07-06 | |
-language | crh | Crimean Tatar; Crimean Turkish | 2004-07-06 | |
-language | crp | Creoles and pidgins (Other) | 2004-07-06 | |
-language | csb | Kashubian | 2004-07-06 | |
-language | cus | Cushitic (Other) | 2004-07-06 | |
-language | dak | Dakota | 2004-07-06 | |
-language | dar | Dargwa | 2004-07-06 | |
-language | day | Dayak | 2004-07-06 | |
-language | del | Delaware | 2004-07-06 | |
-language | den | Slave (Athapascan) | 2004-07-06 | |
-language | dgr | Dogrib | 2004-07-06 | |
-language | din | Dinka | 2004-07-06 | |
-language | doi | Dogri | 2004-07-06 | |
-language | dra | Dravidian (Other) | 2004-07-06 | |
-language | dsb | Lower Sorbian | 2004-07-06 | |
-language | dua | Duala | 2004-07-06 | |
-language | dum | Dutch, Middle (ca. 1050-1350) | 2004-07-06 | |
-language | dyu | Dyula | 2004-07-06 | |
-language | efi | Efik | 2004-07-06 | |
-language | egy | Egyptian (Ancient) | 2004-07-06 | |
-language | eka | Ekajuk | 2004-07-06 | |
-language | elx | Elamite | 2004-07-06 | |
-language | enm | English, Middle (1100-1500) | 2004-07-06 | |
-language | ewo | Ewondo | 2004-07-06 | |
-language | fan | Fang | 2004-07-06 | |
-language | fat | Fanti | 2004-07-06 | |
-language | fil | Filipino; Pilipino | 2004-09-21 | |
-language | fiu | Finno-Ugrian (Other) | 2004-07-06 | |
-language | fon | Fon | 2004-07-06 | |
-language | frm | French, Middle (ca. 1400-1800) | 2004-07-06 | |
-language | fro | French, Old (842-ca. 1400) | 2004-07-06 | |
-language | fur | Friulian | 2004-07-06 | |
-language | gaa | Ga | 2004-07-06 | |
-language | gay | Gayo | 2004-07-06 | |
-language | gba | Gbaya | 2004-07-06 | |
-language | gem | Germanic (Other) | 2004-07-06 | |
-language | gez | Geez | 2004-07-06 | |
-language | gil | Gilbertese | 2004-07-06 | |
-language | gmh | German, Middle High (ca. 1050-1500) | 2004-07-06 | |
-language | goh | German, Old High (ca. 750-1050) | 2004-07-06 | |
-language | gon | Gondi | 2004-07-06 | |
-language | gor | Gorontalo | 2004-07-06 | |
-language | got | Gothic | 2004-07-06 | |
-language | grb | Grebo | 2004-07-06 | |
-language | grc | Greek, Ancient (to 1453) | 2004-07-06 | |
-language | gwi | Gwich'in | 2004-07-06 | |
-language | hai | Haida | 2004-07-06 | |
-language | haw | Hawaiian | 2004-07-06 | |
-language | hil | Hiligaynon | 2004-07-06 | |
-language | him | Himachali | 2004-07-06 | |
-language | hit | Hittite | 2004-07-06 | |
-language | hmn | Hmong | 2004-07-06 | |
-language | hsb | Upper Sorbian | 2004-07-06 | |
-language | hup | Hupa | 2004-07-06 | |
-language | iba | Iban | 2004-07-06 | |
-language | ijo | Ijo | 2004-07-06 | |
-language | ilo | Iloko | 2004-07-06 | |
-language | inc | Indic (Other) | 2004-07-06 | |
-language | ine | Indo-European (Other) | 2004-07-06 | |
-language | inh | Ingush | 2004-07-06 | |
-language | ira | Iranian (Other) | 2004-07-06 | |
-language | iro | Iroquoian languages | 2004-07-06 | |
-language | jbo | Lojban | 2004-07-06 | |
-language | jpr | Judeo-Persian | 2004-07-06 | |
-language | jrb | Judeo-Arabic | 2004-07-06 | |
-language | kaa | Kara-Kalpak | 2004-07-06 | |
-language | kab | Kabyle | 2004-07-06 | |
-language | kac | Kachin | 2004-07-06 | |
-language | kam | Kamba | 2004-07-06 | |
-language | kar | Karen | 2004-07-06 | |
-language | kaw | Kawi | 2004-07-06 | |
-language | kbd | Kabardian | 2004-07-06 | |
-language | kha | Khasi | 2004-07-06 | |
-language | khi | Khoisan (Other) | 2004-07-06 | |
-language | kho | Khotanese | 2004-07-06 | |
-language | kmb | Kimbundu | 2004-07-06 | |
-language | kok | Konkani | 2004-07-06 | |
-language | kos | Kosraean | 2004-07-06 | |
-language | kpe | Kpelle | 2004-07-06 | |
-language | krc | Karachay-Balkar | 2004-07-06 | |
-language | kro | Kru | 2004-07-06 | |
-language | kru | Kurukh | 2004-07-06 | |
-language | kum | Kumyk | 2004-07-06 | |
-language | kut | Kutenai | 2004-07-06 | |
-language | lad | Ladino | 2004-07-06 | |
-language | lah | Lahnda | 2004-07-06 | |
-language | lam | Lamba | 2004-07-06 | |
-language | lez | Lezghian | 2004-07-06 | |
-language | lol | Mongo | 2004-07-06 | |
-language | loz | Lozi | 2004-07-06 | |
-language | lua | Luba-Lulua | 2004-07-06 | |
-language | lui | Luiseno | 2004-07-06 | |
-language | lun | Lunda | 2004-07-06 | |
-language | luo | Luo (Kenya and Tanzania) | 2004-07-06 | |
-language | lus | Lushai | 2004-07-06 | |
-language | mad | Madurese | 2004-07-06 | |
-language | mag | Magahi | 2004-07-06 | |
-language | mai | Maithili | 2004-07-06 | |
-language | mak | Makasar | 2004-07-06 | |
-language | man | Mandingo | 2004-07-06 | |
-language | map | Austronesian (Other) | 2004-07-06 | |
-language | mas | Masai | 2004-07-06 | |
-language | mdf | Moksha | 2004-07-06 | |
-language | mdr | Mandar | 2004-07-06 | |
-language | men | Mende | 2004-07-06 | |
-language | mga | Irish, Middle (900-1200) | 2004-07-06 | |
-language | mic | Mi'kmaq; Micmac | 2004-07-06 | |
-language | min | Minangkabau | 2004-07-06 | |
-language | mis | Miscellaneous languages | 2004-07-06 | |
-language | mkh | Mon-Khmer (Other) | 2004-07-06 | |
-language | mnc | Manchu | 2004-07-06 | |
-language | mni | Manipuri | 2004-07-06 | |
-language | mno | Manobo languages | 2004-07-06 | |
-language | moh | Mohawk | 2004-07-06 | |
-language | mos | Mossi | 2004-07-06 | |
-language | mul | Multiple languages | 2004-07-06 | |
-language | mun | Munda languages | 2004-07-06 | |
-language | mus | Creek | 2004-07-06 | |
-language | mwl | Mirandese | 2004-09-21 | |
-language | mwr | Marwari | 2004-07-06 | |
-language | myn | Mayan languages | 2004-07-06 | |
-language | myv | Erzya | 2004-07-06 | |
-language | nah | Nahuatl | 2004-07-06 | |
-language | nai | North American Indian | 2004-07-06 | |
-language | nap | Neapolitan | 2004-07-06 | |
-language | nds | Low German; Low Saxon; German, Low; Saxon, Low | 2004-07-06 | |
-language | new | Nepal Bhasa; Newari | 2004-07-06 | |
-language | nia | Nias | 2004-07-06 | |
-language | nic | Niger-Kordofanian (Other) | 2004-07-06 | |
-language | niu | Niuean | 2004-07-06 | |
-language | nog | Nogai | 2004-07-06 | |
-language | non | Norse, Old | 2004-07-06 | |
-language | nso | Northern Sotho; Pedi; Sepedi | 2004-07-06 | |
-language | nub | Nubian languages | 2004-07-06 | |
-language | nwc | Classical Newari; Old Newari; Classical Nepal Bhasa | 2004-07-06 | |
-language | nym | Nyamwezi | 2004-07-06 | |
-language | nyn | Nyankole | 2004-07-06 | |
-language | nyo | Nyoro | 2004-07-06 | |
-language | nzi | Nzima | 2004-07-06 | |
-language | osa | Osage | 2004-07-06 | |
-language | ota | Turkish, Ottoman (1500-1928) | 2004-07-06 | |
-language | oto | Otomian languages | 2004-07-06 | |
-language | paa | Papuan (Other) | 2004-07-06 | |
-language | pag | Pangasinan | 2004-07-06 | |
-language | pal | Pahlavi | 2004-07-06 | |
-language | pam | Pampanga | 2004-07-06 | |
-language | pap | Papiamento | 2004-07-06 | |
-language | pau | Palauan | 2004-07-06 | |
-language | peo | Persian, Old (ca. 600-400 B.C.) | 2004-07-06 | |
-language | phi | Philippine (Other) | 2004-07-06 | |
-language | phn | Phoenician | 2004-07-06 | |
-language | pon | Pohnpeian | 2004-07-06 | |
-language | pra | Prakrit languages | 2004-07-06 | |
-language | pro | Provencal, Old (to 1500) | 2004-07-06 | |
-language | qaa..qtz | PRIVATE USE | 2004-08-01 | |
-language | raj | Rajasthani | 2004-07-06 | |
-language | rap | Rapanui | 2004-07-06 | |
-language | rar | Rarotongan | 2004-07-06 | |
-language | roa | Romance (Other) | 2004-07-06 | |
-language | rom | Romany | 2004-07-06 | |
-language | sad | Sandawe | 2004-07-06 | |
-language | sah | Yakut | 2004-07-06 | |
-language | sai | South American Indian (Other) | 2004-07-06 | |
-language | sal | Salishan languages | 2004-07-06 | |
-language | sam | Samaritan Aramaic | 2004-07-06 | |
-language | sas | Sasak | 2004-07-06 | |
-language | sat | Santali | 2004-07-06 | |
-language | scn | Sicilian | 2004-09-21 | |
-language | sco | Scots | 2004-07-06 | |
-language | sel | Selkup | 2004-07-06 | |
-language | sem | Semitic (Other) | 2004-07-06 | |
-language | sga | Irish, Old (to 900) | 2004-07-06 | |
-language | sgn | Sign Languages | 2004-07-06 | |
-language | shn | Shan | 2004-07-06 | |
-language | sid | Sidamo | 2004-07-06 | |
-language | sio | Siouan languages | 2004-07-06 | |
-language | sit | Sino-Tibetan (Other) | 2004-07-06 | |
-language | sla | Slavic (Other) | 2004-07-06 | |
-language | sma | Southern Sami | 2004-07-06 | |
-language | smi | Sami languages (Other) | 2004-07-06 | |
-language | smj | Lule Sami | 2004-07-06 | |
-language | smn | Inari Sami | 2004-07-06 | |
-language | sms | Skolt Sami | 2004-07-06 | |
-language | snk | Soninke | 2004-07-06 | |
-language | sog | Sogdian | 2004-07-06 | |
-language | son | Songhai | 2004-07-06 | |
-language | srn | Sranan Tongo | 2004-11-30 | |
-language | srr | Serer | 2004-07-06 | |
-language | ssa | Nilo-Saharan (Other) | 2004-07-06 | |
-language | suk | Sukuma | 2004-07-06 | |
-language | sus | Susu | 2004-07-06 | |
-language | sux | Sumerian | 2004-07-06 | |
-language | syr | Syriac | 2004-07-06 | |
-language | tai | Tai (Other) | 2004-07-06 | |
-language | tem | Timne | 2004-07-06 | |
-language | ter | Tereno | 2004-07-06 | |
-language | tet | Tetum | 2004-07-06 | |
-language | tig | Tigre | 2004-07-06 | |
-language | tiv | Tiv | 2004-07-06 | |
-language | tkl | Tokelau | 2004-07-06 | |
-language | tlh | Klingon; tlhIngan-Hol | 2004-07-06 | |
-language | tli | Tlingit | 2004-07-06 | |
-language | tmh | Tamashek | 2004-07-06 | |
-language | tog | Tonga (Nyasa) | 2004-07-06 | |
-language | tpi | Tok Pisin | 2004-07-06 | |
-language | tsi | Tsimshian | 2004-07-06 | |
-language | tum | Tumbuka | 2004-07-06 | |
-language | tup | Tupi languages | 2004-07-06 | |
-language | tut | Altaic (Other) | 2004-07-06 | |
-language | tvl | Tuvalu | 2004-07-06 | |
-language | tyv | Tuvinian | 2004-07-06 | |
-language | udm | Udmurt | 2004-07-06 | |
-language | uga | Ugaritic | 2004-07-06 | |
-language | umb | Umbundu | 2004-07-06 | |
-language | und | Undetermined | 2004-07-06 | |
-language | vai | Vai | 2004-07-06 | |
-language | vot | Votic | 2004-07-06 | |
-language | wak | Wakashan languages | 2004-07-06 | |
-language | wal | Walamo | 2004-07-06 | |
-language | war | Waray | 2004-07-06 | |
-language | was | Washo | 2004-07-06 | |
-language | wen | Sorbian languages | 2004-07-06 | |
-language | xal | Kalmyk | 2004-07-06 | |
-language | yao | Yao | 2004-07-06 | |
-language | yap | Yapese | 2004-07-06 | |
-language | ypk | Yupik languages | 2004-07-06 | |
-language | zap | Zapotec | 2004-07-06 | |
-language | zen | Zenaga | 2004-07-06 | |
-language | znd | Zande | 2004-07-06 | |
-language | zun | Zuni | 2004-07-06 | |
-
-# script codes: ISO 15924
-
-script | Arab | Arabic | 2004-07-06 | |
-script | Armn | Armenian | 2004-07-06 | |
-script | Bali | Balinese | 2004-07-06 | |
-script | Batk | Batak | 2004-07-06 | |
-script | Beng | Bengali | 2004-07-06 | |
-script | Blis | Blissymbols | 2004-07-06 | |
-script | Bopo | Bopomofo | 2004-07-06 | |
-script | Brah | Brahmi | 2004-07-06 | |
-script | Brai | Braille | 2004-07-06 | |
-script | Bugi | Buginese | 2004-07-06 | |
-script | Buhd | Buhid | 2004-07-06 | |
-script | Cans | Unified Canadian Aboriginal Syllabics | 2004-07-06 | |
-script | Cham | Cham | 2004-07-06 | |
-script | Cher | Cherokee | 2004-07-06 | |
-script | Cirt | Cirth | 2004-07-06 | |
-script | Copt | Coptic | 2004-07-06 | |
-script | Cprt | Cypriot | 2004-07-06 | |
-script | Cyrl | Cyrillic | 2004-07-06 | |
-script | Cyrs | Cyrillic (Old Church Slavonic variant) | 2004-07-06 | |
-script | Deva | Devanagari (Nagari) | 2004-07-06 | |
-script | Dsrt | Deseret (Mormon) | 2004-07-06 | |
-script | Egyd | Egyptian demotic | 2004-07-06 | |
-script | Egyh | Egyptian hieratic | 2004-07-06 | |
-script | Egyp | Egyptian hieroglyphs | 2004-07-06 | |
-script | Ethi | Ethiopic (Ge'ez) | 2004-07-06 | |
-script | Geor | Georgian (Mkhedruli) | 2004-07-06 | |
-script | Geok | Khutsuri (Asomtavruli and Nuskhuri) | 2004-10-25 | |
-script | Glag | Glagolitic | 2004-07-06 | |
-script | Goth | Gothic | 2004-07-06 | |
-script | Grek | Greek | 2004-07-06 | |
-script | Gujr | Gujarati | 2004-07-06 | |
-script | Guru | Gurmukhi | 2004-07-06 | |
-script | Hang | Hangul (Hangeul) | 2004-07-06 | |
-script | Hani | Han (Hanzi, Kanji, Hanja) | 2004-07-06 | |
-script | Hano | Hanunoo | 2004-07-06 | |
-script | Hans | Han (Simplified variant) | 2004-07-06 | |
-script | Hant | Han (Traditional variant) | 2004-07-06 | |
-script | Hebr | Hebrew | 2004-07-06 | |
-script | Hira | Hiragana | 2004-07-06 | |
-script | Hmng | Pahawh Hmong | 2004-07-06 | |
-script | Hrkt | (alias for Hiragana + Katakana) | 2004-07-06 | |
-script | Hung | Old Hungarian | 2004-07-06 | |
-script | Inds | Indus (Harappan) | 2004-07-06 | |
-script | Ital | Old Italic (Etruscan, Oscan, etc.) | 2004-07-06 | |
-script | Java | Javanese | 2004-07-06 | |
-script | Kali | Kayah Li | 2004-07-06 | |
-script | Kana | Katakana | 2004-07-06 | |
-script | Khar | Kharoshthi | 2004-07-06 | |
-script | Khmr | Khmer | 2004-07-06 | |
-script | Knda | Kannada | 2004-07-06 | |
-script | Laoo | Lao | 2004-07-06 | |
-script | Latf | Latin (Fraktur variant) | 2004-07-06 | |
-script | Latg | Latin (Gaelic variant) | 2004-07-06 | |
-script | Latn | Latin | 2004-07-06 | |
-script | Lepc | Lepcha (Rong) | 2004-07-06 | |
-script | Limb | Limbu | 2004-07-06 | |
-script | Lina | Linear A | 2004-07-06 | |
-script | Linb | Linear B | 2004-07-06 | |
-script | Mand | Mandaean | 2004-07-06 | |
-script | Maya | Mayan hieroglyphs | 2004-07-06 | |
-script | Mero | Meroitic | 2004-07-06 | |
-script | Mlym | Malayalam | 2004-07-06 | |
-script | Mong | Mongolian | 2004-07-06 | |
-script | Mymr | Myanmar (Burmese) | 2004-07-06 | |
-script | Nkoo | N’Ko | 2004-10-25 | |
-script | Ogam | Ogham | 2004-07-06 | |
-script | Orkh | Orkhon | 2004-07-06 | |
-script | Orya | Oriya | 2004-07-06 | |
-script | Osma | Osmanya | 2004-07-06 | |
-script | Perm | Old Permic | 2004-07-06 | |
-script | Phag | Phags-pa | 2004-07-06 | |
-script | Phnx | Phoenician | 2004-07-06 | |
-script | Plrd | Pollard Phonetic | 2004-07-06 | |
-script | Qaaa..Qabx | PRIVATE USE | 2004-08-01 | |
-script | Roro | Rongorongo | 2004-07-06 | |
-script | Runr | Runic | 2004-07-06 | |
-script | Sara | Sarati | 2004-07-06 | |
-script | Shaw | Shavian (Shaw) | 2004-07-06 | |
-script | Sinh | Sinhala | 2004-07-06 | |
-script | Sylo | Syloti Nagri | 2004-07-06 | |
-script | Syrc | Syriac | 2004-07-06 | |
-script | Syre | Syriac (Estrangelo variant) | 2004-07-06 | |
-script | Syrj | Syriac (Western variant) | 2004-07-06 | |
-script | Syrn | Syriac (Eastern variant) | 2004-07-06 | |
-script | Tagb | Tagbanwa | 2004-07-06 | |
-script | Tale | Tai Le | 2004-07-06 | |
-script | Talu | Tai Lue | 2004-07-06 | |
-script | Taml | Tamil | 2004-07-06 | |
-script | Telu | Telugu | 2004-07-06 | |
-script | Teng | Tengwar | 2004-07-06 | |
-script | Tfng | Tifinagh (Berber) | 2004-07-06 | |
-script | Tglg | Tagalog | 2004-07-06 | |
-script | Thaa | Thaana | 2004-07-06 | |
-script | Thai | Thai | 2004-07-06 | |
-script | Tibt | Tibetan | 2004-07-06 | |
-script | Ugar | Ugaritic | 2004-07-06 | |
-script | Vaii | Vai | 2004-07-06 | |
-script | Visp | Visible Speech | 2004-07-06 | |
-script | Xpeo | Old Persian | 2004-07-06 | |
-script | Xsux | Cuneiform, Sumero-Akkadian | 2004-07-06 | |
-script | Yiii | Yi | 2004-07-06 | |
-script | Zxxx | Code for unwritten languages | 2004-07-06 | |
-script | Zyyy | Code for undetermined script | 2004-07-06 | |
-script | Zzzz | Code for uncoded script | 2004-07-06 | |
-
-# region codes: ISO 3166 and UN codes
-
-# ISO 3166-1 (alpha-2) codes
-region | AA | PRIVATE USE | 2004-08-01 | |
-region | AD | Andorra | 2004-07-06 | |
-region | AE | United Arab Emirates | 2004-07-06 | |
-region | AF | Afghanistan | 2004-07-06 | |
-region | AG | Antigua and Barbuda | 2004-07-06 | |
-region | AI | Anguilla | 2004-07-06 | |
-region | AL | Albania | 2004-07-06 | |
-region | AM | Armenia | 2004-07-06 | |
-region | AN | Netherlands Antilles | 2004-07-06 | |
-region | AO | Angola | 2004-07-06 | |
-region | AQ | Antarctica | 2004-07-06 | |
-region | AR | Argentina | 2004-07-06 | |
-region | AS | American Samoa | 2004-07-06 | |
-region | AT | Austria | 2004-07-06 | |
-region | AU | Australia | 2004-07-06 | |
-region | AW | Aruba | 2004-07-06 | |
-region | AX | Aland Islands | 2004-07-06 | |
-region | AZ | Azerbaijan | 2004-07-06 | |
-region | BA | Bosnia and Herzegovina | 2004-07-06 | |
-region | BB | Barbados | 2004-07-06 | |
-region | BD | Bangladesh | 2004-07-06 | |
-region | BE | Belgium | 2004-07-06 | |
-region | BF | Burkina Faso | 2004-07-06 | |
-region | BG | Bulgaria | 2004-07-06 | |
-region | BH | Bahrain | 2004-07-06 | |
-region | BI | Burundi | 2004-07-06 | |
-region | BJ | Benin | 2004-07-06 | |
-region | BM | Bermuda | 2004-07-06 | |
-region | BN | Brunei Darussalam | 2004-07-06 | |
-region | BO | Bolivia | 2004-07-06 | |
-region | BQ | British Antarctic Territory | 2004-07-06 | | # deprecated 1979
-region | BR | Brazil | 2004-07-06 | |
-region | BS | Bahamas | 2004-07-06 | |
-region | BT | Bhutan | 2004-07-06 | |
-region | BU | Myanmar | 2004-07-06 | MM | # changed 1989-12-05, formerly Burma
-region | BV | Bouvet Island | 2004-07-06 | |
-region | BW | Botswana | 2004-07-06 | |
-region | BY | Belarus | 2004-07-06 | |
-region | BZ | Belize | 2004-07-06 | |
-region | CA | Canada | 2004-07-06 | |
-region | CC | Cocos (Keeling) Islands | 2004-07-06 | |
-region | CD | Congo, The Democratic Republic of the | 2004-07-06 | |
-region | CF | Central African Republic | 2004-07-06 | |
-region | CG | Congo | 2004-07-06 | |
-region | CH | Switzerland | 2004-07-06 | |
-region | CI | Cote d'Ivoire | 2004-07-06 | |
-region | CK | Cook Islands | 2004-07-06 | |
-region | CL | Chile | 2004-07-06 | |
-region | CM | Cameroon | 2004-07-06 | |
-region | CN | China | 2004-07-06 | |
-region | CO | Colombia | 2004-07-06 | |
-region | CR | Costa Rica | 2004-07-06 | |
-region | CS | Serbia and Montenegro | 2004-12-19 | |
-region | CT | Canton and Enderbury Islands | 2004-07-06 | | # deprecated 1984
-region | CU | Cuba | 2004-07-06 | |
-region | CV | Cape Verde | 2004-07-06 | |
-region | CX | Christmas Island | 2004-07-06 | |
-region | CY | Cyprus | 2004-07-06 | |
-region | CZ | Czech Republic | 2004-07-06 | |
-region | DD | East Germany | 2004-07-06 | | # deprecated 1990-10-30
-region | DE | Germany | 2004-07-06 | |
-region | DJ | Djibouti | 2004-07-06 | |
-region | DK | Denmark | 2004-07-06 | |
-region | DM | Dominica | 2004-07-06 | |
-region | DO | Dominican Republic | 2004-07-06 | |
-region | DY | Benin | 2004-07-06 | BJ | # changed 1977, formerly Dahomey
-region | DZ | Algeria | 2004-07-06 | |
-region | EC | Ecuador | 2004-07-06 | |
-region | EE | Estonia | 2004-07-06 | |
-region | EG | Egypt | 2004-07-06 | |
-region | EH | Western Sahara | 2004-07-06 | |
-region | ER | Eritrea | 2004-07-06 | |
-region | ES | Spain | 2004-07-06 | |
-region | ET | Ethiopia | 2004-07-06 | |
-region | FI | Finland | 2004-07-06 | |
-region | FJ | Fiji | 2004-07-06 | |
-region | FK | Falkland Islands (Malvinas) | 2004-07-06 | |
-region | FM | Micronesia, Federated States of | 2004-07-06 | |
-region | FO | Faroe Islands | 2004-07-06 | |
-region | FQ | French Southern and Antarctic Territories | 2004-07-06 | | # deprecated 1979
-region | FR | France | 2004-07-06 | |
-region | FX | Metropolitan France | 2004-07-06 | | # deprecated 1997-07-14
-region | GA | Gabon | 2004-07-06 | |
-region | GB | United Kingdom | 2004-07-06 | |
-region | GD | Grenada | 2004-07-06 | |
-region | GE | Georgia | 2004-07-06 | |
-region | GF | French Guiana | 2004-07-06 | |
-region | GH | Ghana | 2004-07-06 | |
-region | GI | Gibraltar | 2004-07-06 | |
-region | GL | Greenland | 2004-07-06 | |
-region | GM | Gambia | 2004-07-06 | |
-region | GN | Guinea | 2004-07-06 | |
-region | GP | Guadeloupe | 2004-07-06 | |
-region | GQ | Equatorial Guinea | 2004-07-06 | |
-region | GR | Greece | 2004-07-06 | |
-region | GS | South Georgia and the South Sandwich Islands | 2004-07-06 | |
-region | GT | Guatemala | 2004-07-06 | |
-region | GU | Guam | 2004-07-06 | |
-region | GW | Guinea-Bissau | 2004-07-06 | |
-region | GY | Guyana | 2004-07-06 | |
-region | HK | Hong Kong | 2004-07-06 | |
-region | HM | Heard Island and McDonald Islands | 2004-07-06 | |
-region | HN | Honduras | 2004-07-06 | |
-region | HR | Croatia | 2004-07-06 | |
-region | HT | Haiti | 2004-07-06 | |
-region | HU | Hungary | 2004-07-06 | |
-region | HV | Burkina Faso | 2004-07-06 | BF | # changed 1984, formerly Upper Volta
-region | ID | Indonesia | 2004-07-06 | |
-region | IE | Ireland | 2004-07-06 | |
-region | IL | Israel | 2004-07-06 | |
-region | IN | India | 2004-07-06 | |
-region | IO | British Indian Ocean Territory | 2004-07-06 | |
-region | IQ | Iraq | 2004-07-06 | |
-region | IR | Iran, Islamic Republic of | 2004-07-06 | |
-region | IS | Iceland | 2004-07-06 | |
-region | IT | Italy | 2004-07-06 | |
-region | JM | Jamaica | 2004-07-06 | |
-region | JO | Jordan | 2004-07-06 | |
-region | JP | Japan | 2004-07-06 | |
-region | JT | Johnston Island | 2004-07-06 | | # deprecated 1986
-region | KE | Kenya | 2004-07-06 | |
-region | KG | Kyrgyzstan | 2004-07-06 | |
-region | KH | Cambodia | 2004-07-06 | |
-region | KI | Kiribati | 2004-07-06 | |
-region | KM | Comoros | 2004-07-06 | |
-region | KN | Saint Kitts and Nevis | 2004-07-06 | |
-region | KP | Korea, Democratic People's Republic of | 2004-07-06 | |
-region | KR | Korea, Republic of | 2004-07-06 | |
-region | KW | Kuwait | 2004-07-06 | |
-region | KY | Cayman Islands | 2004-07-06 | |
-region | KZ | Kazakhstan | 2004-07-06 | |
-region | LA | Lao People's Democratic Republic | 2004-07-06 | |
-region | LB | Lebanon | 2004-07-06 | |
-region | LC | Saint Lucia | 2004-07-06 | |
-region | LI | Liechtenstein | 2004-07-06 | |
-region | LK | Sri Lanka | 2004-07-06 | |
-region | LR | Liberia | 2004-07-06 | |
-region | LS | Lesotho | 2004-07-06 | |
-region | LT | Lithuania | 2004-07-06 | |
-region | LU | Luxembourg | 2004-07-06 | |
-region | LV | Latvia | 2004-07-06 | |
-region | LY | Libyan Arab Jamahiriya | 2004-07-06 | |
-region | MA | Morocco | 2004-07-06 | |
-region | MC | Monaco | 2004-07-06 | |
-region | MD | Moldova, Republic of | 2004-07-06 | |
-region | MG | Madagascar | 2004-07-06 | |
-region | MH | Marshall Islands | 2004-07-06 | |
-region | MI | Midway Islands | 2004-07-06 | | # deprecated 1986
-region | MK | Macedonia, The Former Yugoslav Republic of | 2004-07-06 | |
-region | ML | Mali | 2004-07-06 | |
-region | MM | Myanmar | 2004-07-06 | |
-region | MN | Mongolia | 2004-07-06 | |
-region | MO | Macao | 2004-07-06 | |
-region | MP | Northern Mariana Islands | 2004-07-06 | |
-region | MQ | Martinique | 2004-07-06 | |
-region | MR | Mauritania | 2004-07-06 | |
-region | MS | Montserrat | 2004-07-06 | |
-region | MT | Malta | 2004-07-06 | |
-region | MU | Mauritius | 2004-07-06 | |
-region | MV | Maldives | 2004-07-06 | |
-region | MW | Malawi | 2004-07-06 | |
-region | MX | Mexico | 2004-07-06 | |
-region | MY | Malaysia | 2004-07-06 | |
-region | MZ | Mozambique | 2004-07-06 | |
-region | NA | Namibia | 2004-07-06 | |
-region | NC | New Caledonia | 2004-07-06 | |
-region | NE | Niger | 2004-07-06 | |
-region | NF | Norfolk Island | 2004-07-06 | |
-region | NG | Nigeria | 2004-07-06 | |
-region | NH | Vanuatu | 2004-07-06 | VU | # changed 1980, formerly New Hebrides
-region | NI | Nicaragua | 2004-07-06 | |
-region | NL | Netherlands | 2004-07-06 | |
-region | NO | Norway | 2004-07-06 | |
-region | NP | Nepal | 2004-07-06 | |
-region | NQ | Dronning Maud Land | 2004-07-06 | | # deprecated 1983
-region | NR | Nauru | 2004-07-06 | |
-region | NT | Neutral Zone | 2004-07-06 | | # deprecated 1993-07-12
-region | NU | Niue | 2004-07-06 | |
-region | NZ | New Zealand | 2004-07-06 | |
-region | OM | Oman | 2004-07-06 | |
-region | PA | Panama | 2004-07-06 | |
-region | PC | Pacific Islands Trust Territory | 2004-07-06 | | # deprecated 1986
-region | PE | Peru | 2004-07-06 | |
-region | PF | French Polynesia | 2004-07-06 | |
-region | PG | Papua New Guinea | 2004-07-06 | |
-region | PH | Philippines | 2004-07-06 | |
-region | PK | Pakistan | 2004-07-06 | |
-region | PL | Poland | 2004-07-06 | |
-region | PM | Saint Pierre and Miquelon | 2004-07-06 | |
-region | PN | Pitcairn | 2004-07-06 | |
-region | PR | Puerto Rico | 2004-07-06 | |
-region | PS | Palestinian Territory, Occupied | 2004-07-06 | |
-region | PT | Portugal | 2004-07-06 | |
-region | PU | U.S. Miscellaneous Pacific Islands | 2004-07-06 | | # deprecated 1986
-region | PW | Palau | 2004-07-06 | |
-region | PY | Paraguay | 2004-07-06 | |
-region | PZ | Panama Canal Zone | 2004-07-06 | | # deprecated 1980
-region | QA | Qatar | 2004-07-06 | |
-region | QM..QZ | PRIVATE USE | 2004-08-01 | |
-region | RE | Reunion | 2004-07-06 | |
-region | RH | Zimbabwe | 2004-07-06 | ZW | # changed 1980, formerly Southern Rhodesia
-region | RO | Romania | 2004-07-06 | |
-region | RU | Russian Federation | 2004-07-06 | |
-region | RW | Rwanda | 2004-07-06 | |
-region | SA | Saudi Arabia | 2004-07-06 | |
-region | SB | Solomon Islands | 2004-07-06 | |
-region | SC | Seychelles | 2004-07-06 | |
-region | SD | Sudan | 2004-07-06 | |
-region | SE | Sweden | 2004-07-06 | |
-region | SG | Singapore | 2004-07-06 | |
-region | SH | Saint Helena | 2004-07-06 | |
-region | SI | Slovenia | 2004-07-06 | |
-region | SJ | Svalbard and Jan Mayen | 2004-07-06 | |
-region | SK | Slovakia | 2004-07-06 | |
-region | SL | Sierra Leone | 2004-07-06 | |
-region | SM | San Marino | 2004-07-06 | |
-region | SN | Senegal | 2004-07-06 | |
-region | SO | Somalia | 2004-07-06 | |
-region | SR | Suriname | 2004-07-06 | |
-region | ST | Sao Tome and Principe | 2004-07-06 | |
-region | SU | Union of Soviet Socialist Republics | 2004-07-06 | | # deprecated 1992-08-30
-region | SV | El Salvador | 2004-07-06 | |
-region | SY | Syrian Arab Republic | 2004-07-06 | |
-region | SZ | Swaziland | 2004-07-06 | |
-region | TC | Turks and Caicos Islands | 2004-07-06 | |
-region | TD | Chad | 2004-07-06 | |
-region | TF | French Southern Territories | 2004-07-06 | |
-region | TG | Togo | 2004-07-06 | |
-region | TH | Thailand | 2004-07-06 | |
-region | TJ | Tajikistan | 2004-07-06 | |
-region | TK | Tokelau | 2004-07-06 | |
-region | TL | Timor-Leste | 2004-07-06 | |
-region | TM | Turkmenistan | 2004-07-06 | |
-region | TN | Tunisia | 2004-07-06 | |
-region | TO | Tonga | 2004-07-06 | |
-region | TL | Timor-Leste | 2004-07-06 | TP | # changed 2002-11-15, formerly East Timor
-region | TR | Turkey | 2004-07-06 | |
-region | TT | Trinidad and Tobago | 2004-07-06 | |
-region | TV | Tuvalu | 2004-07-06 | |
-region | TW | Taiwan, Province of China | 2004-07-06 | |
-region | TZ | Tanzania, United Republic of | 2004-07-06 | |
-region | UA | Ukraine | 2004-07-06 | |
-region | UG | Uganda | 2004-07-06 | |
-region | UM | United States Minor Outlying Islands | 2004-07-06 | |
-region | US | United States | 2004-07-06 | |
-region | UY | Uruguay | 2004-07-06 | |
-region | UZ | Uzbekistan | 2004-07-06 | |
-region | VA | Holy See (Vatican City State) | 2004-07-06 | |
-region | VC | Saint Vincent and the Grenadines | 2004-07-06 | |
-region | VD | North Vietnam | 2004-07-06 | | # deprecated 1977
-region | VE | Venezuela | 2004-07-06 | |
-region | VG | Virgin Islands, British | 2004-07-06 | |
-region | VI | Virgin Islands, U.S. | 2004-07-06 | |
-region | VN | Viet Nam | 2004-07-06 | |
-region | VU | Vanuatu | 2004-07-06 | |
-region | WF | Wallis and Futuna | 2004-07-06 | |
-region | WK | Wake Island | 2004-07-06 | | # deprecated 1986
-region | WS | Samoa | 2004-07-06 | |
-region | XA..XZ | PRIVATE USE | 2004-08-01 | |
-region | YD | People's Democratic Republic of Yemen | 2004-07-06 | | # deprecated 1990-08-14
-region | YE | Yemen | 2004-07-06 | |
-region | YT | Mayotte | 2004-07-06 | |
-region | YU | Serbia and Montenegro | 2005-01-01 | CS | # changed 2003-07-23, formerly Yugoslavia
-region | ZA | South Africa | 2004-07-06 | |
-region | ZM | Zambia | 2004-07-06 | |
-region | ZR | Congo, The Democratic Republic of the | 2004-07-06 | CD | # changed 1997-07-14, formerly Zaire
-region | ZW | Zimbabwe | 2004-07-06 | |
-region | ZZ | PRIVATE USE | 2004-08-01 | |
-
-# United Nations M.49 (numeric) codes
-region | 001 | World | 2004-07-06 | |
-region | 002 | Africa | 2004-07-06 | |
-region | 003 | North America | 2004-07-06 | |
-region | 005 | South America | 2004-07-06 | |
-region | 009 | Oceania | 2004-07-06 | |
-region | 011 | Western Africa | 2004-07-06 | |
-region | 013 | Central America | 2004-07-06 | |
-region | 014 | Eastern Africa | 2004-07-06 | |
-region | 015 | Northern Africa | 2004-07-06 | |
-region | 017 | Middle Africa | 2004-07-06 | |
-region | 018 | Southern Africa | 2004-07-06 | |
-region | 019 | Americas | 2004-07-06 | |
-region | 021 | Northern America | 2004-07-06 | |
-region | 029 | Caribbean | 2004-07-06 | |
-region | 030 | Eastern Asia | 2004-07-06 | |
-region | 035 | South-eastern Asia | 2004-07-06 | |
-region | 039 | Southern Europe | 2004-07-06 | |
-region | 053 | Australia and New Zealand | 2004-07-06 | |
-region | 054 | Melanesia | 2004-07-06 | |
-region | 057 | Micronesia | 2004-07-06 | |
-region | 061 | Polynesia | 2004-07-06 | |
-region | 062 | South-central Asia | 2004-07-06 | |
-region | 142 | Asia | 2004-07-06 | |
-region | 145 | Western Asia | 2004-07-06 | |
-region | 150 | Europe | 2004-07-06 | |
-region | 151 | Eastern Europe | 2004-07-06 | |
-region | 154 | Northern Europe | 2004-07-06 | |
-region | 155 | Western Europe | 2004-07-06 | |
-region | 172 | Commonwealth of Independent States | 2004-07-06 | |
-region | 200 | Czechoslovakia | 2004-12-19 | |
-region | 419 | Latin America and the Caribbean | 2004-07-06 | |
-region | 830 | Channel Islands | 2004-07-06 | |
-region | 833 | Isle of Man | 2004-07-06 | |
-
-# registered variants
-
-variant | 1901 | Traditional German orthography | 2004-09-09 | | de
-variant | 1996 | German orthography of 1996 | 2004-09-09 | | de
-variant | boont | Boontling | 2003-02-14 | | en
-variant | gaulish | Gaulish | 2001-05-25 | | cel
-variant | guoyu | Mandarin or Standard Chinese | 1999-12-18 | | zh
-variant | hakka | Hakka | 1999-12-18 | | zh
-variant | lojban | Lojban | 2001-11-11 | | art # deprecated 2003-09-20, use language jbo
-variant | nedis | Natisone dialect; Nadiza dialect | 2004-06-01 | | sl
-variant | rozaj | Resian; Resianic; Rezijan | 2003-10-09 | | sl
-variant | scouse | Scouse | 2000-05-25 | | en
-variant | xiang | Xiang or Hunanese | 1999-12-18 | | zh
-
-# grandfathered from RFC 3066
-
-grandfathered | en-GB-oed | English, Oxford English Dictionary spelling | 2003-07-09 | |
-grandfathered | i-ami | 'Amis | 1999-05-25 | |
-grandfathered | i-bnn | Bunun | 1999-05-25 | |
-grandfathered | i-default | Default Language | 1998-03-10 | |
-grandfathered | i-enochian | Enochian | 2002-07-03 | |
-grandfathered | i-hak | Hakka | 1999-01-31 | | # deprecated 2000-01-10, use variant hakka
-grandfathered | i-klingon | Klingon | 1999-05-26 | | # deprecated 2004-02-24, use language tlh
-grandfathered | i-lux | Luxembourgish | 1997-09-19 | | # deprecated 1998-09-09, use language lb
-grandfathered | i-mingo | Mingo | 1997-09-19 | |
-grandfathered | i-navajo | Navajo | 1997-09-19 | | # deprecated 2000-02-18, use language nv
-grandfathered | i-pwn | Paiwan | 1999-05-25 | |
-grandfathered | i-tao | Tao | 1999-05-25 | |
-grandfathered | i-tay | Tayal | 1999-05-25 | |
-grandfathered | i-tsu | Tsou | 1999-05-25 | |
-grandfathered | no-bok | Norwegian Bokmal | 1995-08-23 | | # deprecated 2000-02-18, use language nb
-grandfathered | no-nyn | Norwegian Nynorsk | 1995-08-23 | | # deprecated 2000-02-18, use language nn
-grandfathered | sgn-BE-fr | Belgian-French Sign Language | 2001-11-11 | |
-grandfathered | sgn-BE-nl | Belgian-Flemish Sign Language | 2001-11-11 | |
-grandfathered | sgn-CH-de | Swiss German Sign Language | 2001-11-11 | |
-grandfathered | zh-gan | Kan or Gan | 1999-12-18 | |
-grandfathered | zh-min | Min, Fuzhou, Hokkien, Amoy, or Taiwanese | 1999-12-18 | |
-grandfathered | zh-min-nan | Minnan, Hokkien, Amoy, Taiwanese, Southern Min, Southern Fujian, Hoklo, Southern Fukien, Ho-lo | 2001-03-26 | |
-grandfathered | zh-wuu | Shanghaiese or Wu | 1999-12-18 | |
-grandfathered | zh-yue | Cantonese | 1999-12-18 | |
-
-# redundant
-# The following codes were registered as complete tags, but can now be
-# composed of registered subtags and do not require registration.
-
-redundant | art-lojban | Lojban | 2001-11-11 | | # use language art + variant lojban
-redundant | az-Arab | Azerbaijani in Arabic script | 2003-05-30 | | # use language az + script Arab
-redundant | az-Cyrl | Azerbaijani in Cyrillic script | 2003-05-30 | | # use language az + script Cyrl
-redundant | az-Latn | Azerbaijani in Latin script | 2003-05-30 | | # use language az + script Latn
-redundant | be-Latn | Belarusian in Latin script | 2005-01-06 | | # use language be + script Latn
-redundant | cel-gaulish | Gaulish | 2001-05-25 | | # use language cel + variant gaulish
-redundant | de-1901 | German, traditional orthography | 2001-07-17 | | # use language de + variant 1901
-redundant | de-1996 | German, orthography of 1996 | 2001-07-17 | | # use language de + variant 1996
-redundant | de-AT-1901 | German, Austrian variant, traditional orthography | 2001-07-17 | | # use language de + region AT + variant 1901
-redundant | de-AT-1996 | German, Austrian variant, orthography of 1996 | 2001-07-17 | | # use language de + region AT + variant 1996
-redundant | de-CH-1901 | German, Swiss variant, traditional orthography | 2001-07-17 | | # use language de + region CH + variant 1901
-redundant | de-CH-1996 | German, Swiss variant, orthography of 1996 | 2001-07-17 | | # use language de + region CH + variant 1996
-redundant | de-DE-1901 | German, German variant, traditional orthography | 2001-07-17 | | # use language de + region DE + variant 1901
-redundant | de-DE-1996 | German, German variant, orthography of 1996 | 2001-07-17 | | # use language de + region DE + variant 1996
-redundant | en-boont | Boontling | 2003-02-14 | | # use language en + variant boont
-redundant | en-scouse | Scouse | 2000-05-25 | | # use language en + variant scouse
-redundant | sgn-BR | Brazilian Sign Language | 2001-11-11 | | # use language sgn + region BR
-redundant | sgn-CO | Colombian Sign Language | 2001-11-11 | | # use language sgn + region CO
-redundant | sgn-DE | German Sign Language | 2001-11-11 | | # use language sgn + region DE
-redundant | sgn-DK | Danish Sign Language | 2001-11-11 | | # use language sgn + region DK
-redundant | sgn-ES | Spanish Sign Language | 2001-11-11 | | # use language sgn + region ES
-redundant | sgn-FR | French Sign Language | 2001-11-11 | | # use language sgn + region FR
-redundant | sgn-GB | British Sign Language | 2001-03-02 | | # use language sgn + region GB
-redundant | sgn-GR | Greek Sign Language | 2001-11-11 | | # use language sgn + region GR
-redundant | sgn-IE | Irish Sign Language | 2001-03-02 | | # use language sgn + region IE
-redundant | sgn-IT | Italian Sign Language | 2001-11-11 | | # use language sgn + region IT
-redundant | sgn-JP | Japanese Sign Language | 2001-11-11 | | # use language sgn + region JP
-redundant | sgn-MX | Mexican Sign Language | 2001-11-11 | | # use language sgn + region MX
-redundant | sgn-NI | Nicaraguan Sign Language | 2001-03-02 | | # use language sgn + region NI
-redundant | sgn-NL | Dutch Sign Language | 2001-11-11 | | # use language sgn + region NL
-redundant | sgn-NO | Norwegian Sign Language | 2001-11-11 | | # use language sgn + region NO
-redundant | sgn-PT | Portuguese Sign Language | 2001-11-11 | | # use language sgn + region PT
-redundant | sgn-SE | Swedish Sign Language | 2001-11-11 | | # use language sgn + region SE
-redundant | sgn-US | American Sign Language | 2001-03-02 | | # use language sgn + region US
-redundant | sgn-ZA | South African Sign Language | 2001-11-11 | | # use language sgn + region ZA
-redundant | sl-nedis | Natisone dialect, Nadiza dialect | 2004-06-01 | | # use language sl + variant nedis
-redundant | sl-rozaj | Resian, Resianic, Rezijan | 2003-10-09 | | # use language sl + variant rozaj
-redundant | sr-Cyrl | Serbian in Cyrillic script | 2003-05-30 | | # use language sr + script Cyrl
-redundant | sr-Latn | Serbian in Latin script | 2003-05-30 | | # use language sr + script Latn
-redundant | uz-Cyrl | Uzbek in Cyrillic script | 2003-05-30 | | # use language uz + script Cyrl
-redundant | uz-Latn | Uzbek in Latin script | 2003-05-30 | | # use language uz + script Latn
-redundant | yi-latn | Yiddish, in Latin script | 2003-01-07 | | # use language yi + script Latn
-redundant | zh-Hans | simplified Chinese | 2003-05-30 | | # use language zh + script Hans
-redundant | zh-Hant | traditional Chinese | 2003-05-30 | | # use language zh + script Hant
-redundant | zh-guoyu | Mandarin or Standard Chinese | 1999-12-18 | | # use language zh + variant guoyu
-redundant | zh-hakka | Hakka | 1999-12-18 | | # use language zh + variant hakka
-redundant | zh-xiang | Xiang or Hunanese | 1999-12-18 | | # use language zh + variant xiang
diff --git a/tools/java/org/unicode/cldr/util/data/northamerica b/tools/java/org/unicode/cldr/util/data/northamerica
index eee8de0..675c648 100644
--- a/tools/java/org/unicode/cldr/util/data/northamerica
+++ b/tools/java/org/unicode/cldr/util/data/northamerica
@@ -86,17 +86,40 @@
 # For more about the first ten years of DST in the United States, see
 # Robert Garland, Ten years of daylight saving from the Pittsburgh standpoint
 # (Carnegie Library of Pittsburgh, 1927).
-# http://www.clpgh.org/exhibit/dst.html
+# https://web.archive.org/web/20160517155308/http://www.clpgh.org/exhibit/dst.html
 #
 # Shanks says that DST was called "War Time" in the US in 1918 and 1919.
 # However, DST was imposed by the Standard Time Act of 1918, which
 # was the first nationwide legal time standard, and apparently
 # time was just called "Standard Time" or "Daylight Saving Time".
 
-# From Arthur David Olson:
-# US Daylight Saving Time ended on the last Sunday of *October* in 1974.
-# See, for example, the front page of the Saturday, 1974-10-26
-# and Sunday, 1974-10-27 editions of the Washington Post.
+# From Paul Eggert (2019-06-04):
+# Here is the legal basis for the US federal rules.
+# * Public Law 65-106 (1918-03-19) implemented standard and daylight saving
+#   time for the first time across the US, springing forward on March's last
+#   Sunday and falling back on October's last Sunday.
+#   https://www.loc.gov/law/help/statutes-at-large/65th-congress/session-2/c65s2ch24.pdf
+# * Public Law 66-40 (1919-08-20) repealed DST on October 1919's last Sunday.
+#   https://www.loc.gov/law/help/statutes-at-large/66th-congress/session-1/c66s1ch51.pdf
+# * Public Law 77-403 (1942-01-20) started wartime DST on 1942-02-09.
+#   https://www.loc.gov/law/help/statutes-at-large/77th-congress/session-2/c77s2ch7.pdf
+# * Public Law 79-187 (1945-09-25) ended wartime DST on 1945-09-30.
+#   https://www.loc.gov/law/help/statutes-at-large/79th-congress/session-1/c79s1ch388.pdf
+# * Public Law 89-387 (1966-04-13) reinstituted a national standard for DST,
+#   from April's last Sunday to October's last Sunday, effective 1967.
+#   https://www.govinfo.gov/content/pkg/STATUTE-80/pdf/STATUTE-80-Pg107.pdf
+# * Public Law 93-182 (1973-12-15) moved the 1974 spring-forward to 01-06.
+#   https://www.govinfo.gov/content/pkg/STATUTE-87/pdf/STATUTE-87-Pg707.pdf
+# * Public Law 93-434 (1974-10-05) moved the 1975 spring-forward to
+#   February's last Sunday.
+#   https://www.govinfo.gov/content/pkg/STATUTE-88/pdf/STATUTE-88-Pg1209.pdf
+# * Public Law 99-359 (1986-07-08) moved the spring-forward to April's first
+#   Sunday.
+#   https://www.govinfo.gov/content/pkg/STATUTE-100/pdf/STATUTE-100-Pg764.pdf
+# * Public Law 109-58 (2005-08-08), effective 2007, moved the spring-forward
+#   to March's second Sunday and the fall-back to November's first Sunday.
+#   https://www.govinfo.gov/content/pkg/PLAW-109publ58/pdf/PLAW-109publ58.pdf
+# All transitions are at 02:00 local time.
 
 # From Arthur David Olson:
 # Before the Uniform Time Act of 1966 took effect in 1967, observance of
@@ -147,16 +170,16 @@
 # U.S. government action.  So even though the "US" rules have changed
 # in the latest release, other countries won't be affected.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	US	1918	1919	-	Mar	lastSun	2:00	1:00	D
 Rule	US	1918	1919	-	Oct	lastSun	2:00	0	S
 Rule	US	1942	only	-	Feb	9	2:00	1:00	W # War
 Rule	US	1945	only	-	Aug	14	23:00u	1:00	P # Peace
-Rule	US	1945	only	-	Sep	lastSun	2:00	0	S
+Rule	US	1945	only	-	Sep	30	2:00	0	S
 Rule	US	1967	2006	-	Oct	lastSun	2:00	0	S
 Rule	US	1967	1973	-	Apr	lastSun	2:00	1:00	D
 Rule	US	1974	only	-	Jan	6	2:00	1:00	D
-Rule	US	1975	only	-	Feb	23	2:00	1:00	D
+Rule	US	1975	only	-	Feb	lastSun	2:00	1:00	D
 Rule	US	1976	1986	-	Apr	lastSun	2:00	1:00	D
 Rule	US	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
 Rule	US	2007	max	-	Mar	Sun>=8	2:00	1:00	D
@@ -173,7 +196,7 @@
 # increase the chances that they'll actually get compiled and to
 # avoid the need to duplicate the US rules in another file.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	EST		 -5:00	-	EST
 Zone	MST		 -7:00	-	MST
 Zone	HST		-10:00	-	HST
@@ -324,13 +347,13 @@
 # Eastern time (i.e., -4:56:01.6) just before the 1883 switch.  Round to the
 # nearest second.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER
 Rule	NYC	1920	only	-	Mar	lastSun	2:00	1:00	D
 Rule	NYC	1920	only	-	Oct	lastSun	2:00	0	S
 Rule	NYC	1921	1966	-	Apr	lastSun	2:00	1:00	D
 Rule	NYC	1921	1954	-	Sep	lastSun	2:00	0	S
 Rule	NYC	1955	1966	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/New_York	-4:56:02 -	LMT	1883 Nov 18 12:03:58
 			-5:00	US	E%sT	1920
 			-5:00	NYC	E%sT	1942
@@ -383,14 +406,39 @@
 # From Paul Eggert (2015-12-25):
 # Assume this practice predates 1970, so Fort Pierre can use America/Chicago.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
+# From Paul Eggert (2015-04-06):
+# In 1950s Nashville a public clock had dueling faces, one for conservatives
+# and the other for liberals; the two sides didn't agree about the time of day.
+# I haven't found a photo of this clock, nor have I tracked down the TIME
+# magazine report cited below, but here's the story as told by the late
+# American journalist John Seigenthaler, who was there:
+#
+# "The two [newspaper] owners held strongly contrasting political and
+# ideological views.  Evans was a New South liberal, Stahlman an Old South
+# conservative, and their two papers frequently clashed editorially, often on
+# the same day....  In the 1950s as the state legislature was grappling with
+# the question of whether to approve daylight saving time for the entire state,
+# TIME magazine reported:
+#
+# "'The Nashville Banner and The Nashville Tennessean rarely agree on anything
+# but the time of day - and last week they couldn't agree on that.'
+#
+# "It was all too true. The clock on the front of the building had two faces -
+# The Tennessean side of the building facing west, the other, east.  When it
+# was high noon Banner time, it was 11 a.m. Tennessean time."
+#
+# Seigenthaler J. For 100 years, Tennessean had it covered.
+# The Tennessean 2007-05-11, republished 2015-04-06.
+# https://www.tennessean.com/story/insider/extras/2015/04/06/archives-seigenthaler-for-100-years-the-tennessean-had-it-covered/25348545/
+
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER
 Rule	Chicago	1920	only	-	Jun	13	2:00	1:00	D
 Rule	Chicago	1920	1921	-	Oct	lastSun	2:00	0	S
 Rule	Chicago	1921	only	-	Mar	lastSun	2:00	1:00	D
 Rule	Chicago	1922	1966	-	Apr	lastSun	2:00	1:00	D
 Rule	Chicago	1922	1954	-	Sep	lastSun	2:00	0	S
 Rule	Chicago	1955	1966	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Chicago	-5:50:36 -	LMT	1883 Nov 18 12:09:24
 			-6:00	US	C%sT	1920
 			-6:00	Chicago	C%sT	1936 Mar  1  2:00
@@ -452,13 +500,13 @@
 # El Paso Times. 2018-10-24 06:40 -06.
 # https://www.elpasotimes.com/story/news/local/el-paso/2018/10/24/el-pasoans-were-time-rebels-fought-stay-mountain-zone/1744509002/
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER
 Rule	Denver	1920	1921	-	Mar	lastSun	2:00	1:00	D
 Rule	Denver	1920	only	-	Oct	lastSun	2:00	0	S
 Rule	Denver	1921	only	-	May	22	2:00	0	S
 Rule	Denver	1965	1966	-	Apr	lastSun	2:00	1:00	D
 Rule	Denver	1965	1966	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Denver	-6:59:56 -	LMT	1883 Nov 18 12:00:04
 			-7:00	US	M%sT	1920
 			-7:00	Denver	M%sT	1942
@@ -505,13 +553,13 @@
 # https://repository.uchastings.edu/cgi/viewcontent.cgi?article=1501&context=ca_ballot_props
 # https://repository.uchastings.edu/cgi/viewcontent.cgi?article=1636&context=ca_ballot_props
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER
 Rule	CA	1948	only	-	Mar	14	2:01	1:00	D
 Rule	CA	1949	only	-	Jan	 1	2:00	0	S
 Rule	CA	1950	1966	-	Apr	lastSun	1:00	1:00	D
 Rule	CA	1950	1961	-	Sep	lastSun	2:00	0	S
 Rule	CA	1962	1966	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Los_Angeles -7:52:58 -	LMT	1883 Nov 18 12:07:02
 			-8:00	US	P%sT	1946
 			-8:00	CA	P%sT	1967
@@ -619,7 +667,7 @@
 # So they won't be waiting for Alaska to join them on 2019-03-10, but will
 # rather change their clocks twice in seven weeks.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Juneau	 15:02:19 -	LMT	1867 Oct 19 15:33:32
 			 -8:57:41 -	LMT	1900 Aug 20 12:00
 			 -8:00	-	PST	1942
@@ -739,7 +787,7 @@
 # Note that 1933-05-21 was a Sunday.
 # We're left to guess the time of day when Act 163 was approved; guess noon.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Pacific/Honolulu	-10:31:26 -	LMT	1896 Jan 13 12:00
 			-10:30	-	HST	1933 Apr 30  2:00
 			-10:30	1:00	HDT	1933 May 21 12:00
@@ -769,7 +817,7 @@
 # Shanks says the 1944 experiment came to an end on 1944-03-17.
 # Go with the Arizona State Library instead.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Phoenix	-7:28:18 -	LMT	1883 Nov 18 11:31:42
 			-7:00	US	M%sT	1944 Jan  1  0:01
 			-7:00	-	MST	1944 Apr  1  0:01
@@ -795,7 +843,7 @@
 # quarter of Idaho county) and eastern Oregon (most of Malheur County)
 # switched four weeks late in 1974.
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Boise	-7:44:49 -	LMT	1883 Nov 18 12:15:11
 			-8:00	US	P%sT	1923 May 13  2:00
 			-7:00	US	M%sT	1974
@@ -863,11 +911,11 @@
 # going to switch from Central to Eastern Time on March 11, 2007....
 # http://www.indystar.com/apps/pbcs.dll/article?AID=/20070207/LOCAL190108/702070524/0/LOCAL
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER
 Rule Indianapolis 1941	only	-	Jun	22	2:00	1:00	D
 Rule Indianapolis 1941	1954	-	Sep	lastSun	2:00	0	S
 Rule Indianapolis 1946	1954	-	Apr	lastSun	2:00	1:00	D
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Indianapolis -5:44:38 - LMT	1883 Nov 18 12:15:22
 			-6:00	US	C%sT	1920
 			-6:00 Indianapolis C%sT	1942
@@ -882,12 +930,12 @@
 #
 # Eastern Crawford County, Indiana, left its clocks alone in 1974,
 # as well as from 1976 through 2005.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER
 Rule	Marengo	1951	only	-	Apr	lastSun	2:00	1:00	D
 Rule	Marengo	1951	only	-	Sep	lastSun	2:00	0	S
 Rule	Marengo	1954	1960	-	Apr	lastSun	2:00	1:00	D
 Rule	Marengo	1954	1960	-	Sep	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Marengo -5:45:23 -	LMT	1883 Nov 18 12:14:37
 			-6:00	US	C%sT	1951
 			-6:00	Marengo	C%sT	1961 Apr 30  2:00
@@ -901,7 +949,7 @@
 # Daviess, Dubois, Knox, and Martin Counties, Indiana,
 # switched from eastern to central time in April 2006, then switched back
 # in November 2007.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER
 Rule Vincennes	1946	only	-	Apr	lastSun	2:00	1:00	D
 Rule Vincennes	1946	only	-	Sep	lastSun	2:00	0	S
 Rule Vincennes	1953	1954	-	Apr	lastSun	2:00	1:00	D
@@ -911,7 +959,7 @@
 Rule Vincennes	1960	only	-	Oct	lastSun	2:00	0	S
 Rule Vincennes	1961	only	-	Sep	lastSun	2:00	0	S
 Rule Vincennes	1962	1963	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Vincennes -5:50:07 - LMT	1883 Nov 18 12:09:53
 			-6:00	US	C%sT	1946
 			-6:00 Vincennes	C%sT	1964 Apr 26  2:00
@@ -922,33 +970,33 @@
 			-5:00	US	E%sT
 #
 # Perry County, Indiana, switched from eastern to central time in April 2006.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
-Rule Perry	1946	only	-	Apr	lastSun	2:00	1:00	D
-Rule Perry	1946	only	-	Sep	lastSun	2:00	0	S
-Rule Perry	1953	1954	-	Apr	lastSun	2:00	1:00	D
-Rule Perry	1953	1959	-	Sep	lastSun	2:00	0	S
+# From Alois Triendl (2019-07-09):
+# The Indianapolis News, Friday 27 October 1967 states that Perry County
+# returned to CST.  It went again to EST on 27 April 1969, as documented by the
+# Indianapolis star of Saturday 26 April.
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER
 Rule Perry	1955	only	-	May	 1	0:00	1:00	D
+Rule Perry	1955	1960	-	Sep	lastSun	2:00	0	S
 Rule Perry	1956	1963	-	Apr	lastSun	2:00	1:00	D
-Rule Perry	1960	only	-	Oct	lastSun	2:00	0	S
-Rule Perry	1961	only	-	Sep	lastSun	2:00	0	S
-Rule Perry	1962	1963	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+Rule Perry	1961	1963	-	Oct	lastSun	2:00	0	S
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Tell_City -5:47:03 - LMT	1883 Nov 18 12:12:57
 			-6:00	US	C%sT	1946
 			-6:00 Perry	C%sT	1964 Apr 26  2:00
-			-5:00	-	EST	1969
+			-5:00	-	EST	1967 Oct 29  2:00
+			-6:00	US	C%sT	1969 Apr 27  2:00
 			-5:00	US	E%sT	1971
 			-5:00	-	EST	2006 Apr  2  2:00
 			-6:00	US	C%sT
 #
 # Pike County, Indiana moved from central to eastern time in 1977,
 # then switched back in 2006, then switched back again in 2007.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER
 Rule	Pike	1955	only	-	May	 1	0:00	1:00	D
 Rule	Pike	1955	1960	-	Sep	lastSun	2:00	0	S
 Rule	Pike	1956	1964	-	Apr	lastSun	2:00	1:00	D
 Rule	Pike	1961	1964	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Petersburg -5:49:07 - LMT	1883 Nov 18 12:10:53
 			-6:00	US	C%sT	1955
 			-6:00	Pike	C%sT	1965 Apr 25  2:00
@@ -964,13 +1012,13 @@
 # An article on page A3 of the Sunday, 1991-10-27 Washington Post
 # notes that Starke County switched from Central time to Eastern time as of
 # 1991-10-27.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER
 Rule	Starke	1947	1961	-	Apr	lastSun	2:00	1:00	D
 Rule	Starke	1947	1954	-	Sep	lastSun	2:00	0	S
 Rule	Starke	1955	1956	-	Oct	lastSun	2:00	0	S
 Rule	Starke	1957	1958	-	Sep	lastSun	2:00	0	S
 Rule	Starke	1959	1961	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Knox -5:46:30 -	LMT	1883 Nov 18 12:13:30
 			-6:00	US	C%sT	1947
 			-6:00	Starke	C%sT	1962 Apr 29  2:00
@@ -981,12 +1029,12 @@
 #
 # Pulaski County, Indiana, switched from eastern to central time in
 # April 2006 and then switched back in March 2007.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER
 Rule	Pulaski	1946	1960	-	Apr	lastSun	2:00	1:00	D
 Rule	Pulaski	1946	1954	-	Sep	lastSun	2:00	0	S
 Rule	Pulaski	1955	1956	-	Oct	lastSun	2:00	0	S
 Rule	Pulaski	1957	1960	-	Sep	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Winamac -5:46:25 - LMT	1883 Nov 18 12:13:35
 			-6:00	US	C%sT	1946
 			-6:00	Pulaski	C%sT	1961 Apr 30  2:00
@@ -997,7 +1045,7 @@
 			-5:00	US	E%sT
 #
 # Switzerland County, Indiana, did not observe DST from 1973 through 2005.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Indiana/Vevay -5:40:16 -	LMT	1883 Nov 18 12:19:44
 			-6:00	US	C%sT	1954 Apr 25  2:00
 			-5:00	-	EST	1969
@@ -1012,17 +1060,28 @@
 # clear how this matched civil time in Louisville, so for now continue
 # to assume Louisville switched at noon new local time, like New York.
 #
+# From Michael Deckers (2019-08-06):
+# From the contemporary source given by Alois Treindl,
+# the switch in Louisville on 1946-04-28 was on 00:01
+# From Paul Eggert (2019-08-26):
+# That source was the Louisville Courier-Journal, 1946-04-27, p 4.
+# Shanks gives 02:00 for all 20th-century transition times in Louisville.
+# Evidently this is wrong for spring 1946.  Although also likely wrong
+# for other dates, we have no data.
+#
 # Part of Kentucky left its clocks alone in 1974.
 # This also includes Clark, Floyd, and Harrison counties in Indiana.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER
 Rule Louisville	1921	only	-	May	1	2:00	1:00	D
 Rule Louisville	1921	only	-	Sep	1	2:00	0	S
-Rule Louisville	1941	1961	-	Apr	lastSun	2:00	1:00	D
+Rule Louisville	1941	only	-	Apr	lastSun	2:00	1:00	D
 Rule Louisville	1941	only	-	Sep	lastSun	2:00	0	S
+Rule Louisville	1946	only	-	Apr	lastSun	0:01	1:00	D
 Rule Louisville	1946	only	-	Jun	2	2:00	0	S
+Rule Louisville	1950	1961	-	Apr	lastSun	2:00	1:00	D
 Rule Louisville	1950	1955	-	Sep	lastSun	2:00	0	S
-Rule Louisville	1956	1960	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+Rule Louisville	1956	1961	-	Oct	lastSun	2:00	0	S
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Kentucky/Louisville -5:43:02 -	LMT	1883 Nov 18 12:16:58
 			-6:00	US	C%sT	1921
 			-6:00 Louisville C%sT	1942
@@ -1111,41 +1170,44 @@
 # one hour in 1914."  This change is not in Shanks.  We have no more
 # info, so omit this for now.
 #
-# From Paul Eggert (2017-07-26):
-# Although Shanks says Detroit observed DST in 1967 from 06-14 00:01
-# until 10-29 00:01, I now see multiple reports that this is incorrect.
-# For example, according to a 50-year anniversary report about the 1967
-# Detroit riots and a major-league doubleheader on 1967-07-23, "By the time
-# the last fly ball of the doubleheader settled into the glove of leftfielder
-# Lenny Green, it was after 7 p.m.  Detroit did not observe daylight saving
-# time, so light was already starting to fail.  Twilight was made even deeper
-# by billowing columns of smoke that ascended in an unbroken wall north of the
-# ballpark."  See: Dow B. Detroit '67: As violence unfolded, Tigers played two
-# at home vs. Yankees. Detroit Free Press 2017-07-23.
-# https://www.freep.com/story/sports/mlb/tigers/2017/07/23/detroit-tigers-1967-riot-new-york-yankees/499951001/
+# From Paul Eggert (2019-07-06):
+# Due to a complicated set of legal maneuvers, in 1967 Michigan did
+# not start daylight saving time when the rest of the US did.
+# Instead, it began DST on Jun 14 at 00:01.  This was big news:
+# the Detroit Free Press reported it at the top of Page 1 on
+# 1967-06-14, in an article "State Adjusting to Switch to Fast Time"
+# by Gary Blonston, above an article about Thurgood Marshall's
+# confirmation to the US Supreme Court.  Although Shanks says Detroit
+# observed DST until 1967-10-29 00:01, that time of day seems to be
+# incorrect, as the Free Press later said DST ended in Michigan at the
+# same time as the rest of the US.  Also, although Shanks reports no DST in
+# Detroit in 1968, it did observe DST that year; in the November 1968
+# election Michigan voters narrowly repealed DST, effective 1969.
 #
 # Most of Michigan observed DST from 1973 on, but was a bit late in 1975.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER
 Rule	Detroit	1948	only	-	Apr	lastSun	2:00	1:00	D
 Rule	Detroit	1948	only	-	Sep	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Detroit	-5:32:11 -	LMT	1905
 			-6:00	-	CST	1915 May 15  2:00
 			-5:00	-	EST	1942
 			-5:00	US	E%sT	1946
-			-5:00	Detroit	E%sT	1973
+			-5:00	Detroit	E%sT	1967 Jun 14  0:01
+			-5:00	US	E%sT	1969
+			-5:00	-	EST	1973
 			-5:00	US	E%sT	1975
 			-5:00	-	EST	1975 Apr 27  2:00
 			-5:00	US	E%sT
 #
 # Dickinson, Gogebic, Iron, and Menominee Counties, Michigan,
 # switched from EST to CST/CDT in 1973.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER
 Rule Menominee	1946	only	-	Apr	lastSun	2:00	1:00	D
 Rule Menominee	1946	only	-	Sep	lastSun	2:00	0	S
 Rule Menominee	1966	only	-	Apr	lastSun	2:00	1:00	D
 Rule Menominee	1966	only	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
 			-6:00	US	C%sT	1946
 			-6:00 Menominee	C%sT	1969 Apr 27  2:00
@@ -1182,6 +1244,12 @@
 #
 # Other sources occasionally used include:
 #
+#	Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
+#	<https://www.jstor.org/stable/1774359>.
+#
+#	Pearce C. The Great Daylight Saving Time Controversy.
+#	Australian Ebook Publisher. 2017. ISBN 978-1-925516-96-8.
+#
 #	Edward W. Whitman, World Time Differences,
 #	Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated),
 #	which I found in the UCLA library.
@@ -1190,9 +1258,6 @@
 #	<http://cs.ucla.edu/~eggert/The-Waste-of-Daylight-19th.pdf>
 #	[PDF] (1914-03)
 #
-#	Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
-#	<https://www.jstor.org/stable/1774359>.
-#
 # See the 'europe' file for Greenland.
 
 # Canada
@@ -1307,7 +1372,7 @@
 # Oct 31, to Oct 27, 1918 (and Sunday is a more likely transition day
 # than Thursday) in all Canadian rulesets.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Canada	1918	only	-	Apr	14	2:00	1:00	D
 Rule	Canada	1918	only	-	Oct	27	2:00	0	S
 Rule	Canada	1942	only	-	Feb	 9	2:00	1:00	W # War
@@ -1330,7 +1395,7 @@
 # that follows the rules is the southeast corner, including Port Hope
 # Simpson and Mary's Harbour, but excluding, say, Black Tickle.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	StJohns	1917	only	-	Apr	 8	2:00	1:00	D
 Rule	StJohns	1917	only	-	Sep	17	2:00	0	S
 # Whitman gives 1919 Apr 5 and 1920 Apr 5; go with Shanks & Pottenger.
@@ -1379,7 +1444,7 @@
 Rule	StJohns	2007	2010	-	Nov	Sun>=1	0:01	0	S
 #
 # St John's has an apostrophe, but Posix file names can't have apostrophes.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/St_Johns	-3:30:52 -	LMT	1884
 			-3:30:52 StJohns N%sT	1918
 			-3:30:52 Canada	N%sT	1919
@@ -1392,7 +1457,7 @@
 # most of east Labrador
 
 # The name 'Happy Valley-Goose Bay' is too long; use 'Goose Bay'.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Goose_Bay	-4:01:40 -	LMT	1884 # Happy Valley-Goose Bay
 			-3:30:52 -	NST	1918
 			-3:30:52 Canada N%sT	1919
@@ -1405,7 +1470,8 @@
 			-4:00	Canada	A%sT
 
 
-# west Labrador, Nova Scotia, Prince Edward I
+# west Labrador, Nova Scotia, Prince Edward I,
+# Îles-de-la-Madeleine, Listuguj reserve
 
 # From Brian Inglis (2015-07-20):
 # From the historical weather station records available at:
@@ -1424,7 +1490,14 @@
 # in Canada to observe DST in 1971 but not 1970; for now we'll assume
 # this is a typo.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# From Jeffery Nichols (2020-01-09):
+# America/Halifax ... also applies to Îles-de-la-Madeleine and the Listuguj
+# reserve in Quebec. Officially, this came into effect on January 1, 2007
+# (Legal Time Act, CQLR c T-5.1), but the legislative debates surrounding that
+# bill say that it is "accommodating the customs and practices" of those
+# regions, which suggests that they have always been in-line with Halifax.
+
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Halifax	1916	only	-	Apr	 1	0:00	1:00	D
 Rule	Halifax	1916	only	-	Oct	 1	0:00	0	S
 Rule	Halifax	1920	only	-	May	 9	0:00	1:00	D
@@ -1466,7 +1539,7 @@
 Rule	Halifax	1956	1959	-	Sep	lastSun	2:00	0	S
 Rule	Halifax	1962	1973	-	Apr	lastSun	2:00	1:00	D
 Rule	Halifax	1962	1973	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Halifax	-4:14:24 -	LMT	1902 Jun 15
 			-4:00	Halifax	A%sT	1918
 			-4:00	Canada	A%sT	1919
@@ -1490,7 +1563,7 @@
 # clear that this was the case since at least 1993.
 # For now, assume it started in 1993.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Moncton	1933	1935	-	Jun	Sun>=8	1:00	1:00	D
 Rule	Moncton	1933	1935	-	Sep	Sun>=8	1:00	0	S
 Rule	Moncton	1936	1938	-	Jun	Sun>=1	1:00	1:00	D
@@ -1504,7 +1577,7 @@
 Rule	Moncton	1957	1972	-	Oct	lastSun	2:00	0	S
 Rule	Moncton	1993	2006	-	Apr	Sun>=1	0:01	1:00	D
 Rule	Moncton	1993	2006	-	Oct	lastSun	0:01	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Moncton	-4:19:08 -	LMT	1883 Dec  9
 			-5:00	-	EST	1902 Jun 15
 			-4:00	Canada	A%sT	1933
@@ -1517,23 +1590,24 @@
 
 # Quebec
 
-# From Paul Eggert (2015-03-24):
+# From Paul Eggert (2020-01-10):
 # See America/Toronto for most of Quebec, including Montreal.
+# See America/Halifax for the Îles de la Madeleine and the Listuguj reserve.
 #
 # Matthews and Vincent (1998) also write that Quebec east of the -63
 # meridian is supposed to observe AST, but residents as far east as
 # Natashquan use EST/EDT, and residents east of Natashquan use AST.
 # The Quebec department of justice writes in
 # "The situation in Minganie and Basse-Côte-Nord"
-# http://www.justice.gouv.qc.ca/english/publications/generale/temps-minganie-a.htm
+# https://www.justice.gouv.qc.ca/en/department/ministre/functions-and-responsabilities/legal-time-in-quebec/the-situation-in-minganie-and-basse-cote-nord/
 # that the coastal strip from just east of Natashquan to Blanc-Sablon
 # observes Atlantic standard time all year round.
-# https://www.assnat.qc.ca/Media/Process.aspx?MediaId=ANQ.Vigie.Bll.DocumentGenerique_8845en
-# says this common practice was codified into law as of 2007.
+# This common practice was codified into law as of 2007; see Legal Time Act,
+# CQLR c T-5.1 <http://legisquebec.gouv.qc.ca/en/ShowDoc/cs/T-5.1>.
 # For lack of better info, guess this practice began around 1970, contra to
 # Shanks & Pottenger who have this region observing AST/ADT.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Blanc-Sablon -3:48:28 -	LMT	1884
 			-4:00	Canada	A%sT	1970
 			-4:00	-	AST
@@ -1548,6 +1622,15 @@
 # Nipigon (EST) and Rainy River (CST) are the largest that we know of.
 # Far west Ontario is like Winnipeg; far east Quebec is like Halifax.
 
+# From Jeffery Nichols (2020-02-06):
+# According to the [Shanks] atlas, those western Ontario zones are huge,
+# covering most of Ontario northwest of Sault Ste Marie and Timmins.
+# The zones seem to include towns bigger than the ones they're named after,
+# like Dryden in America/Rainy_River and Wawa (and maybe Attawapiskat) in
+# America/Nipigon.  I assume it's too much trouble to change the name of the
+# zone (like when you found out that America/Glace_Bay includes Sydney, Nova
+# Scotia)....
+
 # From Mark Brader (2003-07-26):
 # [According to the Toronto Star] Orillia, Ontario, adopted DST
 # effective Saturday, 1912-06-22, 22:00; the article mentions that
@@ -1689,7 +1772,7 @@
 #   With some exceptions, the use of daylight saving may be said to be limited
 # to those cities and towns lying between Quebec city and Windsor, Ont.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Toronto	1919	only	-	Mar	30	23:30	1:00	D
 Rule	Toronto	1919	only	-	Oct	26	0:00	0	S
 Rule	Toronto	1920	only	-	May	 2	2:00	1:00	D
@@ -1701,19 +1784,10 @@
 # was meant.
 Rule	Toronto	1922	1926	-	Sep	Sun>=15	2:00	0	S
 Rule	Toronto	1924	1927	-	May	Sun>=1	2:00	1:00	D
-# The 1927-to-1939 rules can be expressed more simply as
-# Rule	Toronto	1927	1937	-	Sep	Sun>=25	2:00	0	S
-# Rule	Toronto	1928	1937	-	Apr	Sun>=25	2:00	1:00	D
-# Rule	Toronto	1938	1940	-	Apr	lastSun	2:00	1:00	D
-# Rule	Toronto	1938	1939	-	Sep	lastSun	2:00	0	S
-# The rules below avoid use of Sun>=25
-# (which pre-2004 versions of zic cannot handle).
-Rule	Toronto	1927	1932	-	Sep	lastSun	2:00	0	S
-Rule	Toronto	1928	1931	-	Apr	lastSun	2:00	1:00	D
-Rule	Toronto	1932	only	-	May	1	2:00	1:00	D
-Rule	Toronto	1933	1940	-	Apr	lastSun	2:00	1:00	D
-Rule	Toronto	1933	only	-	Oct	1	2:00	0	S
-Rule	Toronto	1934	1939	-	Sep	lastSun	2:00	0	S
+Rule	Toronto	1927	1937	-	Sep	Sun>=25	2:00	0	S
+Rule	Toronto	1928	1937	-	Apr	Sun>=25	2:00	1:00	D
+Rule	Toronto	1938	1940	-	Apr	lastSun	2:00	1:00	D
+Rule	Toronto	1938	1939	-	Sep	lastSun	2:00	0	S
 Rule	Toronto	1945	1946	-	Sep	lastSun	2:00	0	S
 Rule	Toronto	1946	only	-	Apr	lastSun	2:00	1:00	D
 Rule	Toronto	1947	1949	-	Apr	lastSun	0:00	1:00	D
@@ -1746,7 +1820,7 @@
 # War,... [t]he cities agreed to implement DST during the summer
 # months for the remainder of the war years.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Toronto	-5:17:32 -	LMT	1895
 			-5:00	Canada	E%sT	1919
 			-5:00	Toronto	E%sT	1942 Feb  9  2:00s
@@ -1796,7 +1870,7 @@
 # starting 1966.  Since 02:00s is clearly correct for 1967 on, assume
 # it was also 02:00s in 1966.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Winn	1916	only	-	Apr	23	0:00	1:00	D
 Rule	Winn	1916	only	-	Sep	17	0:00	0	S
 Rule	Winn	1918	only	-	Apr	14	2:00	1:00	D
@@ -1821,7 +1895,7 @@
 Rule	Winn	1966	1986	-	Apr	lastSun	2:00s	1:00	D
 Rule	Winn	1966	2005	-	Oct	lastSun	2:00s	0	S
 Rule	Winn	1987	2005	-	Apr	Sun>=1	2:00s	1:00	D
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Winnipeg	-6:28:36 -	LMT	1887 Jul 16
 			-6:00	Winn	C%sT	2006
 			-6:00	Canada	C%sT
@@ -1843,6 +1917,12 @@
 # Willett (1914-03) notes that DST "has been in operation ... in the
 # City of Moose Jaw, Saskatchewan, for one year."
 
+# From Paul Eggert (2019-07-25):
+# Pearce's book says Regina observed DST in 1914-1917.  No dates and times,
+# unfortunately.  It also says that in 1914 Saskatoon observed DST
+# from 1 June to 6 July, and that DST was also tried out in Davidson,
+# Melfort, and Prince Albert.
+
 # From Paul Eggert (2006-03-22):
 # Shanks & Pottenger say that since 1970 this region has mostly been as Regina.
 # Some western towns (e.g. Swift Current) switched from MST/MDT to CST in 1972.
@@ -1881,7 +1961,7 @@
 # long and rather painful to read.
 # http://www.qp.gov.sk.ca/documents/English/Statutes/Statutes/T14.pdf
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Regina	1918	only	-	Apr	14	2:00	1:00	D
 Rule	Regina	1918	only	-	Oct	27	2:00	0	S
 Rule	Regina	1930	1934	-	May	Sun>=1	0:00	1:00	D
@@ -1905,7 +1985,7 @@
 Rule	Swift	1959	1961	-	Apr	lastSun	2:00	1:00	D
 Rule	Swift	1959	only	-	Oct	lastSun	2:00	0	S
 Rule	Swift	1960	1961	-	Sep	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Regina	-6:58:36 -	LMT	1905 Sep
 			-7:00	Regina	M%sT	1960 Apr lastSun  2:00
 			-6:00	-	CST
@@ -1918,7 +1998,20 @@
 
 # Alberta
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# From Alois Triendl (2019-07-19):
+# There was no DST in Alberta in 1967... Calgary Herald, 29 April 1967.
+# 1969, no DST, from Edmonton Journal 18 April 1969
+#
+# From Paul Eggert (2019-07-25):
+# Pearce's book says that Alberta's 1948 Daylight Saving Act required
+# Mountain Standard Time without DST, and that "anyone who broke that law
+# could be fined up to $25 and costs".  There seems to be no record of
+# anybody paying the fine.  The law was not changed until an August 1971
+# plebiscite reinstituted DST in 1972.  This story is also mentioned in:
+# Boyer JP. Forcing Choice: The Risky Reward of Referendums. Dundum. 2017.
+# ISBN 978-1459739123.
+
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Edm	1918	1919	-	Apr	Sun>=8	2:00	1:00	D
 Rule	Edm	1918	only	-	Oct	27	2:00	0	S
 Rule	Edm	1919	only	-	May	27	2:00	0	S
@@ -1930,13 +2023,9 @@
 Rule	Edm	1945	only	-	Sep	lastSun	2:00	0	S
 Rule	Edm	1947	only	-	Apr	lastSun	2:00	1:00	D
 Rule	Edm	1947	only	-	Sep	lastSun	2:00	0	S
-Rule	Edm	1967	only	-	Apr	lastSun	2:00	1:00	D
-Rule	Edm	1967	only	-	Oct	lastSun	2:00	0	S
-Rule	Edm	1969	only	-	Apr	lastSun	2:00	1:00	D
-Rule	Edm	1969	only	-	Oct	lastSun	2:00	0	S
 Rule	Edm	1972	1986	-	Apr	lastSun	2:00	1:00	D
 Rule	Edm	1972	2006	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Edmonton	-7:33:52 -	LMT	1906 Sep
 			-7:00	Edm	M%sT	1987
 			-7:00	Canada	M%sT
@@ -2016,20 +2105,32 @@
 # been on MST (-0700) like Dawson Creek since it advanced its clocks on
 # 2015-03-08.
 #
-# From Paul Eggert (2015-09-23):
+# From Paul Eggert (2019-07-25):
 # Shanks says Fort Nelson did not observe DST in 1946, unlike Vancouver.
+# Alois Triendl confirmed this on 07-22, citing the 1946-04-27 Vancouver Daily
+# Province.  He also cited the 1946-09-28 Victoria Daily Times, which said
+# that Vancouver, Victoria, etc. "change at midnight Saturday"; for now,
+# guess they meant 02:00 Sunday since 02:00 was common practice in Vancouver.
+#
+# Early Vancouver, Volume Four, by Major J.S. Matthews, V.D., 2011 edition
+# says that a 1922 plebiscite adopted DST, but a 1923 plebiscite rejected it.
+# http://former.vancouver.ca/ctyclerk/archives/digitized/EarlyVan/SearchEarlyVan/Vol4pdf/MatthewsEarlyVancouverVol4_DaylightSavings.pdf
+# A catalog entry for a newspaper clipping seems to indicate that Vancouver
+# observed DST in 1941 from 07-07 through 09-27; see
+# https://searcharchives.vancouver.ca/daylight-saving-1918-starts-again-july-7-1941-start-d-s-sept-27-end-of-d-s-1941
+# We have no further details, so omit them for now.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Vanc	1918	only	-	Apr	14	2:00	1:00	D
 Rule	Vanc	1918	only	-	Oct	27	2:00	0	S
 Rule	Vanc	1942	only	-	Feb	 9	2:00	1:00	W # War
 Rule	Vanc	1945	only	-	Aug	14	23:00u	1:00	P # Peace
 Rule	Vanc	1945	only	-	Sep	30	2:00	0	S
 Rule	Vanc	1946	1986	-	Apr	lastSun	2:00	1:00	D
-Rule	Vanc	1946	only	-	Oct	13	2:00	0	S
+Rule	Vanc	1946	only	-	Sep	29	2:00	0	S
 Rule	Vanc	1947	1961	-	Sep	lastSun	2:00	0	S
 Rule	Vanc	1962	2006	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Vancouver	-8:12:28 -	LMT	1884
 			-8:00	Vanc	P%sT	1987
 			-8:00	Canada	P%sT
@@ -2100,7 +2201,7 @@
 #     varying the manner of reckoning standard time.
 #
 # * Yukon Territory Commissioner's Order 1966-20 Interpretation Ordinance
-#   http://? - no online source found
+#   [no online source found]
 #
 # * Standard Time and Time Zones in Canada; Thomson, Malcolm M.; JRASC,
 #   Vol. 64, pp.129-162; June 1970; SAO/NASA Astrophysics Data System (ADS)
@@ -2133,7 +2234,7 @@
 #     to say eight hours behind Greenwich Time.
 #
 # * O.I.C. 1980/02 INTERPRETATION ACT
-#   http://? - no online source found
+#   [no online source found]
 #
 # * Yukon Daylight Saving Time, YOIC 1987/56
 #   https://www.canlii.org/en/yk/laws/regu/yoic-1987-56/latest/yoic-1987-56.html
@@ -2336,7 +2437,31 @@
 # obtained in November 2008 should be ignored...
 # I apologize for reporting incorrect information in 2008.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# From Tim Parenti (2020-03-05):
+# The government of Yukon announced [yesterday] the cessation of seasonal time
+# changes.  "After clocks are pushed ahead one hour on March 8, the territory
+# will remain on [UTC-07].  ... [The government] found 93 per cent of
+# respondents wanted to end seasonal time changes and, of that group, 70 per
+# cent wanted 'permanent Pacific Daylight Saving Time.'"
+# https://www.cbc.ca/news/canada/north/yukon-end-daylight-saving-time-1.5486358
+#
+# Although the government press release prefers PDT, we prefer MST for
+# consistency with nearby Dawson Creek, Creston, and Fort Nelson.
+# https://yukon.ca/en/news/yukon-end-seasonal-time-change
+
+# From Andrew G. Smith (2020-09-24):
+# Yukon has completed its regulatory change to be on UTC -7 year-round....
+# http://www.gov.yk.ca/legislation/regs/oic2020_125.pdf
+# What we have done is re-defined Yukon Standard Time, as we are
+# authorized to do under section 33 of our Interpretation Act:
+# http://www.gov.yk.ca/legislation/acts/interpretation_c.pdf
+#
+# From Paul Eggert (2020-09-24):
+# tzdb uses the obsolete YST abbreviation for standard time in Yukon through
+# about 1970, and uses PST for standard time in Yukon since then.  Consistent
+# with that, use MST for -07, the new standard time in Yukon effective Nov. 1.
+
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	NT_YK	1918	only	-	Apr	14	2:00	1:00	D
 Rule	NT_YK	1918	only	-	Oct	27	2:00	0	S
 Rule	NT_YK	1919	only	-	May	25	2:00	1:00	D
@@ -2349,7 +2474,7 @@
 Rule	NT_YK	1980	1986	-	Apr	lastSun	2:00	1:00	D
 Rule	NT_YK	1980	2006	-	Oct	lastSun	2:00	0	S
 Rule	NT_YK	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 # aka Panniqtuuq
 Zone America/Pangnirtung 0	-	-00	1921 # trading post est.
 			-4:00	NT_YK	A%sT	1995 Apr Sun>=1  2:00
@@ -2390,11 +2515,13 @@
 Zone America/Whitehorse	-9:00:12 -	LMT	1900 Aug 20
 			-9:00	NT_YK	Y%sT	1967 May 28  0:00
 			-8:00	NT_YK	P%sT	1980
-			-8:00	Canada	P%sT
+			-8:00	Canada	P%sT	2020 Nov  1
+			-7:00	-	MST
 Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
 			-9:00	NT_YK	Y%sT	1973 Oct 28  0:00
 			-8:00	NT_YK	P%sT	1980
-			-8:00	Canada	P%sT
+			-8:00	Canada	P%sT	2020 Nov  1
+			-7:00	-	MST
 
 
 ###############################################################################
@@ -2496,7 +2623,7 @@
 
 # From Paul Eggert (2001-03-03):
 #
-# http://www.latimes.com/news/nation/20010303/t000018766.html
+# https://www.latimes.com/archives/la-xpm-2001-mar-03-mn-32561-story.html
 # James F. Smith writes in today's LA Times
 # * Sonora will continue to observe standard time.
 # * Last week Mexico City's mayor Andrés Manuel López Obrador decreed that
@@ -2608,7 +2735,7 @@
 # 5- The islands, reefs and keys shall take their timezone from the
 #    longitude they are located at.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Mexico	1939	only	-	Feb	5	0:00	1:00	D
 Rule	Mexico	1939	only	-	Jun	25	0:00	0	S
 Rule	Mexico	1940	only	-	Dec	9	0:00	1:00	D
@@ -2623,7 +2750,7 @@
 Rule	Mexico	2001	only	-	Sep	lastSun	2:00	0	S
 Rule	Mexico	2002	max	-	Apr	Sun>=1	2:00	1:00	D
 Rule	Mexico	2002	max	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 # Quintana Roo; represented by Cancún
 Zone America/Cancun	-5:47:04 -	LMT	1922 Jan  1  0:12:56
 			-6:00	-	CST	1981 Dec 23
@@ -2813,10 +2940,10 @@
 # rules to sync with the U.S. starting in 2007....
 # http://www.jonesbahamas.com/?c=45&a=10412
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Bahamas	1964	1975	-	Oct	lastSun	2:00	0	S
 Rule	Bahamas	1964	1975	-	Apr	lastSun	2:00	1:00	D
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Nassau	-5:09:30 -	LMT	1912 Mar 2
 			-5:00	Bahamas	E%sT	1976
 			-5:00	US	E%sT
@@ -2825,27 +2952,27 @@
 
 # For 1899 Milne gives -3:58:29.2; round that.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Barb	1977	only	-	Jun	12	2:00	1:00	D
 Rule	Barb	1977	1978	-	Oct	Sun>=1	2:00	0	S
 Rule	Barb	1978	1980	-	Apr	Sun>=15	2:00	1:00	D
 Rule	Barb	1979	only	-	Sep	30	2:00	0	S
 Rule	Barb	1980	only	-	Sep	25	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Barbados	-3:58:29 -	LMT	1924 # Bridgetown
 			-3:58:29 -	BMT	1932 # Bridgetown Mean Time
 			-4:00	Barb	A%sT
 
 # Belize
 # Whitman entirely disagrees with Shanks; go with Shanks & Pottenger.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Belize	1918	1942	-	Oct	Sun>=2	0:00	0:30	-0530
 Rule	Belize	1919	1943	-	Feb	Sun>=9	0:00	0	CST
 Rule	Belize	1973	only	-	Dec	 5	0:00	1:00	CDT
 Rule	Belize	1974	only	-	Feb	 9	0:00	0	CST
 Rule	Belize	1982	only	-	Dec	18	0:00	1:00	CDT
 Rule	Belize	1983	only	-	Feb	12	0:00	0	CST
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Belize	-5:52:48 -	LMT	1912 Apr
 			-6:00	Belize	%s
 
@@ -2862,7 +2989,7 @@
 # Friday, the same thing will happen in Bermuda.
 # http://www.theroyalgazette.com/apps/pbcs.dll/article?AID=/20060529/NEWS/105290135
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Atlantic/Bermuda	-4:19:18 -	LMT	1930 Jan  1  2:00 # Hamilton
 			-4:00	-	AST	1974 Apr 28  2:00
 			-4:00	Canada	A%sT	1976
@@ -2875,7 +3002,7 @@
 
 # Milne gives -5:36:13.3 as San José mean time; round to nearest.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	CR	1979	1980	-	Feb	lastSun	0:00	1:00	D
 Rule	CR	1979	1980	-	Jun	Sun>=1	0:00	0	S
 Rule	CR	1991	1992	-	Jan	Sat>=15	0:00	1:00	D
@@ -2884,7 +3011,7 @@
 Rule	CR	1991	only	-	Jul	 1	0:00	0	S
 Rule	CR	1992	only	-	Mar	15	0:00	0	S
 # There are too many San Josés elsewhere, so we'll use 'Costa Rica'.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Costa_Rica	-5:36:13 -	LMT	1890        # San José
 			-5:36:13 -	SJMT	1921 Jan 15 # San José Mean Time
 			-6:00	CR	C%sT
@@ -3049,7 +3176,7 @@
 # From Paul Eggert (2012-11-03):
 # For now, assume the future rule is first Sunday in November.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Cuba	1928	only	-	Jun	10	0:00	1:00	D
 Rule	Cuba	1928	only	-	Oct	10	0:00	0	S
 Rule	Cuba	1940	1942	-	Jun	Sun>=1	0:00	1:00	D
@@ -3090,7 +3217,7 @@
 Rule	Cuba	2012	max	-	Nov	Sun>=1	0:00s	0	S
 Rule	Cuba	2013	max	-	Mar	Sun>=8	0:00s	1:00	D
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Havana	-5:29:28 -	LMT	1890
 			-5:29:36 -	HMT	1925 Jul 19 12:00 # Havana MT
 			-5:00	Cuba	C%sT
@@ -3118,14 +3245,14 @@
 # decided to revert.
 
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	DR	1966	only	-	Oct	30	0:00	1:00	EDT
 Rule	DR	1967	only	-	Feb	28	0:00	0	EST
 Rule	DR	1969	1973	-	Oct	lastSun	0:00	0:30	-0430
 Rule	DR	1970	only	-	Feb	21	0:00	0	EST
 Rule	DR	1971	only	-	Jan	20	0:00	0	EST
 Rule	DR	1972	1974	-	Jan	21	0:00	0	EST
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Santo_Domingo -4:39:36 -	LMT	1890
 			-4:40	-	SDMT	1933 Apr  1 12:00 # S. Dom. MT
 			-5:00	DR	%s	1974 Oct 27
@@ -3135,12 +3262,12 @@
 
 # El Salvador
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Salv	1987	1988	-	May	Sun>=1	0:00	1:00	D
 Rule	Salv	1987	1988	-	Sep	lastSun	0:00	0	S
 # There are too many San Salvadors elsewhere, so use America/El_Salvador
 # instead of America/San_Salvador.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/El_Salvador -5:56:48 -	LMT	1921 # San Salvador
 			-6:00	Salv	C%sT
 
@@ -3164,7 +3291,7 @@
 # (2006-04-19), says DST ends at 24:00.  See
 # http://www.sieca.org.gt/Sitio_publico/Energeticos/Doc/Medidas/Cambio_Horario_Nac_190406.pdf
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Guat	1973	only	-	Nov	25	0:00	1:00	D
 Rule	Guat	1974	only	-	Feb	24	0:00	0	S
 Rule	Guat	1983	only	-	May	21	0:00	1:00	D
@@ -3173,7 +3300,7 @@
 Rule	Guat	1991	only	-	Sep	 7	0:00	0	S
 Rule	Guat	2006	only	-	Apr	30	0:00	1:00	D
 Rule	Guat	2006	only	-	Oct	 1	0:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Guatemala	-6:02:04 -	LMT	1918 Oct 5
 			-6:00	Guat	C%sT
 
@@ -3245,7 +3372,7 @@
 # I have not been able to find a more authoritative source:
 # https://www.haitilibre.com/en/news-20319-haiti-notices-time-change-in-haiti.html
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Haiti	1983	only	-	May	8	0:00	1:00	D
 Rule	Haiti	1984	1987	-	Apr	lastSun	0:00	1:00	D
 Rule	Haiti	1983	1987	-	Oct	lastSun	0:00	0	S
@@ -3259,7 +3386,7 @@
 Rule	Haiti	2012	2015	-	Nov	Sun>=1	2:00	0	S
 Rule	Haiti	2017	max	-	Mar	Sun>=8	2:00	1:00	D
 Rule	Haiti	2017	max	-	Nov	Sun>=1	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Port-au-Prince -4:49:20 -	LMT	1890
 			-4:49	-	PPMT	1917 Jan 24 12:00 # P-a-P MT
 			-5:00	Haiti	E%sT
@@ -3293,12 +3420,12 @@
 # http://www.laprensahn.com/pais_nota.php?id04962=7386
 # So it seems that Honduras will not enter DST this year....
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Hond	1987	1988	-	May	Sun>=1	0:00	1:00	D
 Rule	Hond	1987	1988	-	Sep	lastSun	0:00	0	S
 Rule	Hond	2006	only	-	May	Sun>=1	0:00	1:00	D
 Rule	Hond	2006	only	-	Aug	Mon>=1	0:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Tegucigalpa -5:48:52 -	LMT	1921 Apr
 			-6:00	Hond	C%sT
 #
@@ -3319,7 +3446,7 @@
 # Neita L. The politician in all of us. Jamaica Observer 2014-09-20
 # http://www.jamaicaobserver.com/columns/The-politician-in-all-of-us_17573647
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Jamaica	-5:07:10 -	LMT	1890        # Kingston
 			-5:07:10 -	KMT	1912 Feb    # Kingston Mean Time
 			-5:00	-	EST	1974
@@ -3327,7 +3454,7 @@
 			-5:00	-	EST
 
 # Martinique
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Martinique	-4:04:20 -      LMT	1890        # Fort-de-France
 			-4:04:20 -	FFMT	1911 May    # Fort-de-France MT
 			-4:00	-	AST	1980 Apr  6
@@ -3384,14 +3511,14 @@
 # The natural sun time is restored in all the national territory, in that the
 # time is returned one hour at 01:00 am of October 1 of 2006.
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Nic	1979	1980	-	Mar	Sun>=16	0:00	1:00	D
 Rule	Nic	1979	1980	-	Jun	Mon>=23	0:00	0	S
 Rule	Nic	2005	only	-	Apr	10	0:00	1:00	D
 Rule	Nic	2005	only	-	Oct	Sun>=1	0:00	0	S
 Rule	Nic	2006	only	-	Apr	30	2:00	1:00	D
 Rule	Nic	2006	only	-	Oct	Sun>=1	1:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Managua	-5:45:08 -	LMT	1890
 			-5:45:12 -	MMT	1934 Jun 23 # Managua Mean Time?
 			-6:00	-	CST	1973 May
@@ -3403,7 +3530,7 @@
 			-6:00	Nic	C%sT
 
 # Panama
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Panama	-5:18:08 -	LMT	1890
 			-5:19:36 -	CMT	1908 Apr 22 # Colón Mean Time
 			-5:00	-	EST
@@ -3411,7 +3538,7 @@
 
 # Puerto Rico
 # There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Puerto_Rico -4:24:25 -	LMT	1899 Mar 28 12:00 # San Juan
 			-4:00	-	AST	1942 May  3
 			-4:00	US	A%sT	1946
@@ -3423,7 +3550,7 @@
 
 # St Pierre and Miquelon
 # There are too many St Pierres elsewhere, so we'll use 'Miquelon'.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Miquelon	-3:44:40 -	LMT	1911 May 15 # St Pierre
 			-4:00	-	AST	1980 May
 			-3:00	-	-03	1987
@@ -3469,7 +3596,7 @@
 # by March 2018 for TCI. Magnetic Media. 2017-08-25.
 # http://magneticmediatv.com/2017/08/time-change-back-by-march-2018-for-tci/
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Grand_Turk	-4:44:32 -	LMT	1890
 			-5:07:10 -	KMT	1912 Feb # Kingston Mean Time
 			-5:00	-	EST	1979
diff --git a/tools/java/org/unicode/cldr/util/data/pacificnew b/tools/java/org/unicode/cldr/util/data/pacificnew
deleted file mode 100644
index 0e6cf07..0000000
--- a/tools/java/org/unicode/cldr/util/data/pacificnew
+++ /dev/null
@@ -1,29 +0,0 @@
-# tzdb data for proposed US election time (this file is obsolete)
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# From Arthur David Olson (1989-04-05):
-# On 1989-04-05, the U. S. House of Representatives passed (238-154) a bill
-# establishing "Pacific Presidential Election Time"; it was not acted on
-# by the Senate or signed into law by the President.
-# You might want to change the "PE" (Presidential Election) below to
-# "Q" (Quadrennial) to maintain three-character zone abbreviations.
-# If you're really conservative, you might want to change it to "D".
-# Avoid "L" (Leap Year), which won't be true in 2100.
-
-# If Presidential Election Time is ever established, replace "XXXX" below
-# with the year the law takes effect and uncomment the "##" lines.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-## Rule	Twilite	XXXX	max	-	Apr	Sun>=1	2:00	1:00	D
-## Rule	Twilite	XXXX	max	uspres	Oct	lastSun	2:00	1:00	PE
-## Rule	Twilite	XXXX	max	uspres	Nov	Sun>=7	2:00	0	S
-## Rule	Twilite	XXXX	max	nonpres	Oct	lastSun	2:00	0	S
-
-# Zone	NAME			GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
-## Zone	America/Los_Angeles-PET	-8:00	US		P%sT	XXXX
-##				-8:00	Twilite		P%sT
-
-# For now...
-Link	America/Los_Angeles	US/Pacific-New	##
diff --git a/tools/java/org/unicode/cldr/util/data/southamerica b/tools/java/org/unicode/cldr/util/data/southamerica
index b66cb88..aad8b2d 100644
--- a/tools/java/org/unicode/cldr/util/data/southamerica
+++ b/tools/java/org/unicode/cldr/util/data/southamerica
@@ -48,7 +48,7 @@
 # I am sending modifications to the Argentine time zone table...
 # AR was chosen because they are the ISO letters that represent Argentina.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Arg	1930	only	-	Dec	 1	0:00	1:00	-
 Rule	Arg	1931	only	-	Apr	 1	0:00	0	-
 Rule	Arg	1931	only	-	Oct	15	0:00	1:00	-
@@ -396,7 +396,7 @@
 # plus is that this silences a zic complaint that there's no POSIX TZ
 # setting for timestamps past 2038.
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 #
 # Buenos Aires (BA), Capital Federal (CF),
 Zone America/Argentina/Buenos_Aires -3:53:48 - LMT	1894 Oct 31
@@ -577,7 +577,7 @@
 Link America/Curacao America/Aruba
 
 # Bolivia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	America/La_Paz	-4:32:36 -	LMT	1890
 			-4:32:36 -	CMT	1931 Oct 15 # Calamarca MT
 			-4:32:36 1:00	BST	1932 Mar 21 # Bolivia ST
@@ -769,7 +769,7 @@
 # From Paul Eggert (2013-10-17):
 # For now, assume western Amazonas will change as well.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 # Decree 20,466 <http://pcdsh01.on.br/HV20466.htm> (1931-10-01)
 # Decree 21,896 <http://pcdsh01.on.br/HV21896.htm> (1932-01-10)
 Rule	Brazil	1931	only	-	Oct	 3	11:00	1:00	-
@@ -920,14 +920,13 @@
 # removed Tocantins.
 Rule	Brazil	2013	2014	-	Feb	Sun>=15	0:00	0	-
 Rule	Brazil	2015	only	-	Feb	Sun>=22	0:00	0	-
-Rule	Brazil	2016	2022	-	Feb	Sun>=15	0:00	0	-
+Rule	Brazil	2016	2019	-	Feb	Sun>=15	0:00	0	-
 # From Steffen Thorsen (2017-12-18):
 # According to many media sources, next year's DST start in Brazil will move to
-# the first Sunday of November, and it will stay like that for the years after.
+# the first Sunday of November
 # ... https://www.timeanddate.com/news/time/brazil-delays-dst-2018.html
 # From Steffen Thorsen (2017-12-20):
 # http://www.planalto.gov.br/ccivil_03/_ato2015-2018/2017/decreto/D9242.htm
-#
 # From Fábio Gomes (2018-10-04):
 # The Brazilian president just announced a new change on this year DST.
 # It was scheduled to start on November 4th and it was changed to November 18th.
@@ -935,22 +934,21 @@
 # The Brazilian government just announced that the change in DST was
 # canceled....  Maybe the president Michel Temer also woke up one hour
 # earlier today. :)
-Rule	Brazil	2018	max	-	Nov	Sun>=1	0:00	1:00	-
-Rule	Brazil	2023	only	-	Feb	Sun>=22	0:00	0	-
-Rule	Brazil	2024	2025	-	Feb	Sun>=15	0:00	0	-
-Rule	Brazil	2026	only	-	Feb	Sun>=22	0:00	0	-
-Rule	Brazil	2027	2033	-	Feb	Sun>=15	0:00	0	-
-Rule	Brazil	2034	only	-	Feb	Sun>=22	0:00	0	-
-Rule	Brazil	2035	2036	-	Feb	Sun>=15	0:00	0	-
-Rule	Brazil	2037	only	-	Feb	Sun>=22	0:00	0	-
-# From Arthur David Olson (2008-09-29):
-# The next is wrong in some years but is better than nothing.
-Rule	Brazil	2038	max	-	Feb	Sun>=15	0:00	0	-
-
-# The latest ruleset listed above says that the following states observe DST:
+Rule	Brazil	2018	only	-	Nov	Sun>=1	0:00	1:00	-
+# The last ruleset listed above says that the following states observed DST:
 # DF, ES, GO, MG, MS, MT, PR, RJ, RS, SC, SP.
+#
+# From Steffen Thorsen (2019-04-05):
+# According to multiple sources the Brazilian president wants to get rid of DST.
+# https://gmconline.com.br/noticias/politica/bolsonaro-horario-de-verao-deve-acabar-este-ano
+# https://g1.globo.com/economia/noticia/2019/04/05/governo-anuncia-fim-do-horario-de-verao.ghtml
+# From Marcus Diniz (2019-04-25):
+# Brazil no longer has DST changes - decree signed today
+# https://g1.globo.com/politica/noticia/2019/04/25/bolsonaro-assina-decreto-que-acaba-com-o-horario-de-verao.ghtml
+# From Daniel Soares de Oliveira (2019-04-26):
+# http://www.planalto.gov.br/ccivil_03/_Ato2019-2022/2019/Decreto/D9772.htm
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 #
 # Fernando de Noronha (administratively part of PE)
 Zone America/Noronha	-2:09:40 -	LMT	1914
@@ -1232,14 +1230,8 @@
 # From Juan Correa (2016-12-04):
 # Magallanes region ... will keep DST (UTC -3) all year round....
 # http://www.soychile.cl/Santiago/Sociedad/2016/12/04/433428/Bachelet-firmo-el-decreto-para-establecer-un-horario-unico-para-la-Region-de-Magallanes.aspx
-#
 # From Deborah Goldsmith (2017-01-19):
 # http://www.diariooficial.interior.gob.cl/publicaciones/2017/01/17/41660/01/1169626.pdf
-# From Paul Eggert (2017-01-19):
-# The above says the Magallanes change expires 2019-05-11 at 24:00,
-# so in theory, they will revert to -04/-03 after that, which means
-# they will switch from -03 to -04 one hour after Santiago does that day.
-# For now, assume that they will not revert.
 
 # From Juan Correa (2018-08-13):
 # As of moments ago, the Ministry of Energy in Chile has announced the new
@@ -1258,8 +1250,15 @@
 # https://twitter.com/MinEnergia/status/1029009354001973248
 # "We will keep the new time policy unchanged for at least the next 4 years."
 # So we extend the new rules on Saturdays at 24:00 mainland time indefinitely.
+# From Juan Correa (2019-02-04):
+# http://www.diariooficial.interior.gob.cl/publicaciones/2018/11/23/42212/01/1498738.pdf
+# From Paul Eggert (2019-09-01):
+# The above says the Magallanes exception expires 2022-04-02 at 24:00,
+# so in theory, they will revert to -04/-03 after that.
+# For now, assume that they will not revert,
+# since they have extended the expiration date once already.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Chile	1927	1931	-	Sep	 1	0:00	1:00	-
 Rule	Chile	1928	1932	-	Apr	 1	0:00	0	-
 Rule	Chile	1968	only	-	Nov	 3	4:00u	1:00	-
@@ -1298,7 +1297,7 @@
 Rule	Chile	2019	max	-	Sep	Sun>=2	4:00u	1:00	-
 # IATA SSIM anomalies: (1992-02) says 1992-03-14;
 # (1996-09) says 1998-03-08.  Ignore these.
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Santiago	-4:42:46 -	LMT	1890
 			-4:42:46 -	SMT	1910 Jan 10 # Santiago Mean Time
 			-5:00	-	-05	1916 Jul  1
@@ -1347,7 +1346,7 @@
 # Palmer has followed Chile.  Prior to that, before the Falklands War,
 # Palmer used to be supplied from Argentina.
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Antarctica/Palmer	0	-	-00	1965
 			-4:00	Arg	-04/-03	1969 Oct  5
 			-3:00	Arg	-03/-02	1982 May
@@ -1359,10 +1358,10 @@
 # Milne gives 4:56:16.4 for Bogotá time in 1899; round to nearest.  He writes,
 # "A variation of fifteen minutes in the public clocks of Bogota is not rare."
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	CO	1992	only	-	May	 3	0:00	1:00	-
 Rule	CO	1993	only	-	Apr	 4	0:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Bogota	-4:56:16 -	LMT	1884 Mar 13
 			-4:56:16 -	BMT	1914 Nov 23 # Bogotá Mean Time
 			-5:00	CO	-05/-04
@@ -1387,7 +1386,7 @@
 # Netherlands as Kingdom Islands.  This won't affect their time zones
 # though, as far as we know.
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Curacao	-4:35:47 -	LMT	1912 Feb 12 # Willemstad
 			-4:30	-	-0430	1965
 			-4:00	-	AST
@@ -1419,11 +1418,11 @@
 # (Not one step back), the clocks went back in 1993 and the experiment was not
 # repeated.  For now, assume transitions were at 00:00 local time country-wide.
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Ecuador	1992	only	-	Nov	28	0:00	1:00	-
 Rule	Ecuador	1993	only	-	Feb	 5	0:00	0	-
 #
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Guayaquil	-5:19:20 -	LMT	1890
 			-5:14:00 -	QMT	1931 # Quito Mean Time
 			-5:00	Ecuador	-05/-04
@@ -1513,7 +1512,7 @@
 # For now we will assume permanent -03 for the Falklands
 # until advised differently (to apply for 2012 and beyond, after the 2011
 # experiment was apparently successful.)
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Falk	1937	1938	-	Sep	lastSun	0:00	1:00	-
 Rule	Falk	1938	1942	-	Mar	Sun>=19	0:00	0	-
 Rule	Falk	1939	only	-	Oct	1	0:00	1:00	-
@@ -1526,7 +1525,7 @@
 Rule	Falk	1986	2000	-	Apr	Sun>=16	0:00	0	-
 Rule	Falk	2001	2010	-	Apr	Sun>=15	2:00	0	-
 Rule	Falk	2001	2010	-	Sep	Sun>=1	2:00	1:00	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Atlantic/Stanley	-3:51:24 -	LMT	1890
 			-3:51:24 -	SMT	1912 Mar 12 # Stanley Mean Time
 			-4:00	Falk	-04/-03	1983 May
@@ -1535,13 +1534,13 @@
 			-3:00	-	-03
 
 # French Guiana
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Cayenne	-3:29:20 -	LMT	1911 Jul
 			-4:00	-	-04	1967 Oct
 			-3:00	-	-03
 
 # Guyana
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Guyana	-3:52:40 -	LMT	1915 Mar    # Georgetown
 			-3:45	-	-0345	1975 Jul 31
 			-3:00	-	-03	1991
@@ -1559,7 +1558,7 @@
 # No time of the day is established for the adjustment, so people normally
 # adjust their clocks at 0 hour of the given dates.
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Para	1975	1988	-	Oct	 1	0:00	1:00	-
 Rule	Para	1975	1978	-	Mar	 1	0:00	0	-
 Rule	Para	1979	1991	-	Apr	 1	0:00	0	-
@@ -1635,7 +1634,7 @@
 # http://www.presidencia.gov.py/archivos/documentos/DECRETO1264_ey9r8zai.pdf
 Rule	Para	2013	max	-	Mar	Sun>=22	0:00	0	-
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Asuncion	-3:50:40 -	LMT	1890
 			-3:50:40 -	AMT	1931 Oct 10 # Asunción Mean Time
 			-4:00	-	-04	1972 Oct
@@ -1652,7 +1651,7 @@
 # From Paul Eggert (2006-03-22):
 # Shanks & Pottenger don't have this transition.  Assume 1986 was like 1987.
 
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Peru	1938	only	-	Jan	 1	0:00	1:00	-
 Rule	Peru	1938	only	-	Apr	 1	0:00	0	-
 Rule	Peru	1938	1939	-	Sep	lastSun	0:00	1:00	-
@@ -1664,13 +1663,13 @@
 # IATA is ambiguous for 1993/1995; go with Shanks & Pottenger.
 Rule	Peru	1994	only	-	Jan	 1	0:00	1:00	-
 Rule	Peru	1994	only	-	Apr	 1	0:00	0	-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Lima	-5:08:12 -	LMT	1890
 			-5:08:36 -	LMT	1908 Jul 28 # Lima Mean Time?
 			-5:00	Peru	-05/-04
 
 # South Georgia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone Atlantic/South_Georgia -2:26:08 -	LMT	1890 # Grytviken
 			-2:00	-	-02
 
@@ -1678,7 +1677,7 @@
 # uninhabited; scientific personnel have wintered
 
 # Suriname
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Paramaribo	-3:40:40 -	LMT	1911
 			-3:40:52 -	PMT	1935     # Paramaribo Mean Time
 			-3:40:36 -	PMT	1945 Oct    # The capital moved?
@@ -1686,7 +1685,7 @@
 			-3:00	-	-03
 
 # Trinidad and Tobago
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone America/Port_of_Spain -4:06:04 -	LMT	1912 Mar 2
 			-4:00	-	AST
 
@@ -1748,7 +1747,7 @@
 # https://www.impo.com.uy/diariooficial/1926/03/10/2
 # https://www.impo.com.uy/diariooficial/1926/03/18/2
 #
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Rule	NAME	FROM	TO	-	IN	ON	AT	SAVE	LETTER/S
 Rule	Uruguay	1923	1925	-	Oct	 1	 0:00	0:30	-
 Rule	Uruguay	1924	1926	-	Apr	 1	 0:00	0	-
 # From Tim Parenti (2018-02-15):
@@ -1957,7 +1956,7 @@
 # ... published in the official Gazette [2016-04-18], here:
 # http://historico.tsj.gob.ve/gaceta_ext/abril/1842016/E-1842016-4551.pdf
 
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+# Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Caracas	-4:27:44 -	LMT	1890
 			-4:27:40 -	CMT	1912 Feb 12 # Caracas Mean Time?
 			-4:30	-	-0430	1965 Jan  1  0:00
diff --git a/tools/java/org/unicode/cldr/util/data/st_sysmsg.html b/tools/java/org/unicode/cldr/util/data/st_sysmsg.html
index 5a82330..e384fc0 100644
--- a/tools/java/org/unicode/cldr/util/data/st_sysmsg.html
+++ b/tools/java/org/unicode/cldr/util/data/st_sysmsg.html
@@ -65,7 +65,7 @@
 					<hr> <a href='http://www.unicode.org'>Unicode</a> | <a
 					href='http://www.unicode.org/cldr/'>Common Locale Data
 						Repository</a> | <a
-					href='http://www.unicode.org/cldr/trac/newticket?component=survey&amp;summary=Feedback+on+BOOTING+%3F'>Report
+					href='http://cldr.unicode.org/index/bug-reports#TOC-Filing-a-Ticket'>Report
 						Problem in Tool</a>
 
 				</td>
diff --git a/tools/java/org/unicode/cldr/util/data/systemv b/tools/java/org/unicode/cldr/util/data/systemv
deleted file mode 100644
index 24c8f64..0000000
--- a/tools/java/org/unicode/cldr/util/data/systemv
+++ /dev/null
@@ -1,39 +0,0 @@
-# tzdb data for System V rules (this file is obsolete)
-
-# This file is in the public domain, so clarified as of
-# 2009-05-17 by Arthur David Olson.
-
-# Old rules, should the need arise.
-# No attempt is made to handle Newfoundland, since it cannot be expressed
-# using the System V "TZ" scheme (half-hour offset), or anything outside
-# North America (no support for non-standard DST start/end dates), nor
-# the changes in the DST rules in the US after 1976 (which occurred after
-# the old rules were written).
-#
-# If you need the old rules, uncomment ## lines.
-# Compile this *without* leap second correction for true conformance.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	SystemV	min	1973	-	Apr	lastSun	2:00	1:00	D
-Rule	SystemV	min	1973	-	Oct	lastSun	2:00	0	S
-Rule	SystemV	1974	only	-	Jan	6	2:00	1:00	D
-Rule	SystemV	1974	only	-	Nov	lastSun	2:00	0	S
-Rule	SystemV	1975	only	-	Feb	23	2:00	1:00	D
-Rule	SystemV	1975	only	-	Oct	lastSun	2:00	0	S
-Rule	SystemV	1976	max	-	Apr	lastSun	2:00	1:00	D
-Rule	SystemV	1976	max	-	Oct	lastSun	2:00	0	S
-
-# Zone	NAME		GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
-## Zone	SystemV/AST4ADT	-4:00	SystemV		A%sT
-## Zone	SystemV/EST5EDT	-5:00	SystemV		E%sT
-## Zone	SystemV/CST6CDT	-6:00	SystemV		C%sT
-## Zone	SystemV/MST7MDT	-7:00	SystemV		M%sT
-## Zone	SystemV/PST8PDT	-8:00	SystemV		P%sT
-## Zone	SystemV/YST9YDT	-9:00	SystemV		Y%sT
-## Zone	SystemV/AST4	-4:00	-		AST
-## Zone	SystemV/EST5	-5:00	-		EST
-## Zone	SystemV/CST6	-6:00	-		CST
-## Zone	SystemV/MST7	-7:00	-		MST
-## Zone	SystemV/PST8	-8:00	-		PST
-## Zone	SystemV/YST9	-9:00	-		YST
-## Zone	SystemV/HST10	-10:00	-		HST
diff --git a/tools/java/org/unicode/cldr/util/data/tlds-alpha-by-domain.txt b/tools/java/org/unicode/cldr/util/data/tlds-alpha-by-domain.txt
index 02ac0c4..bd1ecaf 100644
--- a/tools/java/org/unicode/cldr/util/data/tlds-alpha-by-domain.txt
+++ b/tools/java/org/unicode/cldr/util/data/tlds-alpha-by-domain.txt
@@ -1,4 +1,4 @@
-# Version 2019120500, Last Updated Thu Dec  5 07:07:01 2019 UTC
+# Version 2020082200, Last Updated Sat Aug 22 07:07:01 2020 UTC
 AAA
 AARP
 ABARTH
@@ -33,7 +33,6 @@
 AGENCY
 AI
 AIG
-AIGO
 AIRBUS
 AIRFORCE
 AIRTEL
@@ -48,6 +47,7 @@
 ALSACE
 ALSTOM
 AM
+AMAZON
 AMERICANEXPRESS
 AMERICANFAMILY
 AMEX
@@ -392,7 +392,6 @@
 ES
 ESQ
 ESTATE
-ESURANCE
 ET
 ETISALAT
 EU
@@ -712,7 +711,6 @@
 LEXUS
 LGBT
 LI
-LIAISON
 LIDL
 LIFE
 LIFEINSURANCE
@@ -731,6 +729,7 @@
 LIXIL
 LK
 LLC
+LLP
 LOAN
 LOANS
 LOCKER
@@ -820,7 +819,6 @@
 MOTORCYCLES
 MOV
 MOVIE
-MOVISTAR
 MP
 MQ
 MR
@@ -839,7 +837,6 @@
 MZ
 NA
 NAB
-NADEX
 NAGOYA
 NAME
 NATIONWIDE
@@ -1022,7 +1019,6 @@
 RICH
 RICHARDLI
 RICOH
-RIGHTATHOME
 RIL
 RIO
 RIP
@@ -1073,7 +1069,6 @@
 SCHWARZ
 SCIENCE
 SCJOHNSON
-SCOR
 SCOT
 SD
 SE
@@ -1172,7 +1167,6 @@
 SX
 SY
 SYDNEY
-SYMANTEC
 SYSTEMS
 SZ
 TAB
@@ -1193,7 +1187,6 @@
 TECH
 TECHNOLOGY
 TEL
-TELEFONICA
 TEMASEK
 TENNIS
 TEVA
@@ -1286,7 +1279,6 @@
 VIRGIN
 VISA
 VISION
-VISTAPRINT
 VIVA
 VIVO
 VLAANDEREN
@@ -1380,6 +1372,7 @@
 XN--C1AVG
 XN--C2BR7G
 XN--CCK2B3B
+XN--CCKWCXETD
 XN--CG4BKI
 XN--CLCHC0EA0B2G2A9GCD
 XN--CZR694B
@@ -1390,7 +1383,6 @@
 XN--E1A4C
 XN--ECKVDTC9D
 XN--EFVY88H
-XN--ESTV75G
 XN--FCT429K
 XN--FHBEI
 XN--FIQ228C5HS
@@ -1416,12 +1408,12 @@
 XN--J1AEF
 XN--J1AMH
 XN--J6W193G
+XN--JLQ480N2RG
 XN--JLQ61U9W7B
 XN--JVR189M
 XN--KCRX77D1X4A
 XN--KPRW13D
 XN--KPRY57D
-XN--KPU716F
 XN--KPUT3I
 XN--L1ACC
 XN--LGBBAT1AD8J
@@ -1439,6 +1431,7 @@
 XN--MGBBH1A71E
 XN--MGBC0A9AZCG
 XN--MGBCA7DZDO
+XN--MGBCPQ6GPA1A
 XN--MGBERP4A5D4AR
 XN--MGBGU82A
 XN--MGBI4ECEXP
@@ -1461,9 +1454,9 @@
 XN--OTU796D
 XN--P1ACF
 XN--P1AI
-XN--PBT977C
 XN--PGBS0DH
 XN--PSSY2U
+XN--Q7CE6A
 XN--Q9JYB4C
 XN--QCKA1PMC
 XN--QXA6A
diff --git a/tools/java/org/unicode/cldr/util/data/tzdb-version.txt b/tools/java/org/unicode/cldr/util/data/tzdb-version.txt
index c5bbdc4..f3edeca 100644
--- a/tools/java/org/unicode/cldr/util/data/tzdb-version.txt
+++ b/tools/java/org/unicode/cldr/util/data/tzdb-version.txt
@@ -1 +1 @@
-2017b
+2020b
diff --git a/tools/java/org/unicode/cldr/util/data/zone.tab b/tools/java/org/unicode/cldr/util/data/zone.tab
index 27e1dee..8d056e3 100644
--- a/tools/java/org/unicode/cldr/util/data/zone.tab
+++ b/tools/java/org/unicode/cldr/util/data/zone.tab
@@ -131,8 +131,8 @@
 CA	+5946-12014	America/Dawson_Creek	MST - BC (Dawson Cr, Ft St John)
 CA	+5848-12242	America/Fort_Nelson	MST - BC (Ft Nelson)
 CA	+4916-12307	America/Vancouver	Pacific - BC (most areas)
-CA	+6043-13503	America/Whitehorse	Pacific - Yukon (south)
-CA	+6404-13925	America/Dawson	Pacific - Yukon (north)
+CA	+6043-13503	America/Whitehorse	Pacific - Yukon (east)
+CA	+6404-13925	America/Dawson	Pacific - Yukon (west)
 CC	-1210+09655	Indian/Cocos
 CD	-0418+01518	Africa/Kinshasa	Dem. Rep. of Congo (west)
 CD	-1140+02728	Africa/Lubumbashi	Dem. Rep. of Congo (east)
@@ -189,7 +189,7 @@
 GG	+492717-0023210	Europe/Guernsey
 GH	+0533-00013	Africa/Accra
 GI	+3608-00521	Europe/Gibraltar
-GL	+6411-05144	America/Godthab	Greenland (most areas)
+GL	+6411-05144	America/Nuuk	Greenland (most areas)
 GL	+7646-01840	America/Danmarkshavn	National Park (east coast)
 GL	+7029-02158	America/Scoresbysund	Scoresbysund/Ittoqqortoormiit
 GL	+7634-06847	America/Thule	Thule/Pituffik
@@ -332,7 +332,10 @@
 RS	+4450+02030	Europe/Belgrade
 RU	+5443+02030	Europe/Kaliningrad	MSK-01 - Kaliningrad
 RU	+554521+0373704	Europe/Moscow	MSK+00 - Moscow area
-RU	+4457+03406	Europe/Simferopol	MSK+00 - Crimea
+# The obsolescent zone.tab format cannot represent Europe/Simferopol well.
+# Put it in RU section and list as UA.  See "territorial claims" above.
+# Programs should use zone1970.tab instead; see above.
+UA	+4457+03406	Europe/Simferopol	Crimea
 RU	+5836+04939	Europe/Kirov	MSK+00 - Kirov
 RU	+4621+04803	Europe/Astrakhan	MSK+01 - Astrakhan
 RU	+4844+04425	Europe/Volgograd	MSK+01 - Volgograd
@@ -396,8 +399,8 @@
 TW	+2503+12130	Asia/Taipei
 TZ	-0648+03917	Africa/Dar_es_Salaam
 UA	+5026+03031	Europe/Kiev	Ukraine (most areas)
-UA	+4837+02218	Europe/Uzhgorod	Ruthenia
-UA	+4750+03510	Europe/Zaporozhye	Zaporozh'ye/Zaporizhia; Lugansk/Luhansk (east)
+UA	+4837+02218	Europe/Uzhgorod	Transcarpathia
+UA	+4750+03510	Europe/Zaporozhye	Zaporozhye and east Lugansk
 UG	+0019+03225	Africa/Kampala
 UM	+2813-17722	Pacific/Midway	Midway Islands
 UM	+1917+16637	Pacific/Wake	Wake Island
diff --git a/tools/java/org/unicode/cldr/util/props/BagFormatter.java b/tools/java/org/unicode/cldr/util/props/BagFormatter.java
index 4e898f6..faff758 100644
--- a/tools/java/org/unicode/cldr/util/props/BagFormatter.java
+++ b/tools/java/org/unicode/cldr/util/props/BagFormatter.java
@@ -114,7 +114,7 @@
         UnicodeSet set1,
         String name2,
         UnicodeSet set2,
-        int flags) 
+        int flags)
     {
         if (pw == null) pw = FileUtilities.CONSOLE;
         String[] names = { name1, name2 };
@@ -231,6 +231,7 @@
     }
 
     static class NullRelation extends Relation {
+        @Override
         public String getRelation(String a, String b) { return ""; }
     }
 
@@ -323,6 +324,7 @@
             noncharacter = source.getSet("noncharactercodepoint=yes");
         }
 
+        @Override
         public String getValue(int codePoint, boolean isShort) {
             String hcp = !isShort
                 ? "U+" + Utility.hex(codePoint, 4) + " "
@@ -565,15 +567,18 @@
             return result;
         }
 
+        @Override
         protected void doBefore(Object container, Object o) {
             if (showSetAlso && container instanceof UnicodeSet) {
                 toOutput("#" + container);
             }
         }
 
+        @Override
         protected void doBetween(Object container, Object lastItem, Object nextItem) {
         }
 
+        @Override
         protected void doAfter(Object container, Object o) {
             if (fullTotal != -1 && fullTotal != counter) {
                 if (showTotal) {
@@ -588,6 +593,7 @@
             }
         }
 
+        @Override
         protected void doSimpleAt(Object o) {
             if (o instanceof Map.Entry) {
                 Map.Entry oo = (Map.Entry)o;
@@ -765,8 +771,8 @@
                 if (DEBUG && limit > 0x9FD4) {
                     System.out.println(Utility.hex(limit) + ", *Label: " + s + ", Value: " + v + ", Break: " + b);
                 }
-                if (!equalTo(s, label) 
-                    || !equalTo(v, value) 
+                if (!equalTo(s, label)
+                    || !equalTo(v, value)
                     || !equalTo(b, breaker)) {
                     break;
                 }
@@ -831,6 +837,7 @@
     /**
      * @deprecated
      */
+    @Deprecated
     public static void addAll(UnicodeSet source, Collection target) {
         source.addAllTo(target);
     }
@@ -865,17 +872,21 @@
             doAt(o);
             return output.toString();
         }
+        @Override
         protected void doBefore(Object container, Object item) {
             ++depth;
             output.append(prefix);
         }
+        @Override
         protected void doAfter(Object container, Object item) {
             output.append(suffix);
             --depth;
         }
+        @Override
         protected void doBetween(Object container, Object lastItem, Object nextItem) {
             output.append(separator);
         }
+        @Override
         protected void doSimpleAt(Object o) {
             if (o != null) output.append(o.toString());
         }
diff --git a/tools/java/org/unicode/cldr/util/props/ICUPropertyFactory.java b/tools/java/org/unicode/cldr/util/props/ICUPropertyFactory.java
index c269b8f..30bf552 100644
--- a/tools/java/org/unicode/cldr/util/props/ICUPropertyFactory.java
+++ b/tools/java/org/unicode/cldr/util/props/ICUPropertyFactory.java
@@ -20,7 +20,7 @@
 import java.util.TreeMap;
 import java.util.TreeSet;
 
-import com.ibm.icu.dev.util.CollectionUtilities;
+import com.google.common.base.Joiner;
 import com.ibm.icu.dev.util.UnicodeMap;
 import com.ibm.icu.lang.UCharacter;
 import com.ibm.icu.lang.UProperty;
@@ -54,6 +54,7 @@
 
         boolean shownException = false;
 
+        @Override
         public String _getValue(int codePoint) {
             switch (propEnum) {
             case UProperty.AGE:
@@ -111,7 +112,7 @@
             case isCased:
                 return String.valueOf(UCharacter.toLowerCase(Locale.ENGLISH, UTF16.valueOf(codePoint)).equals(
                         UTF16.valueOf(codePoint)));
-            case UProperty.SCRIPT_EXTENSIONS: 
+            case UProperty.SCRIPT_EXTENSIONS:
                 return getStringScriptExtensions(codePoint);
             }
             if (propEnum < UProperty.INT_LIMIT) {
@@ -220,6 +221,7 @@
             return newValue;
         }
 
+        @Override
         public List _getNameAliases(List result) {
             if (result == null)
                 result = new ArrayList();
@@ -259,6 +261,7 @@
             }
         }
 
+        @Override
         public List _getAvailableValues(List result) {
             if (result == null)
                 result = new ArrayList();
@@ -309,6 +312,7 @@
             return AGES;
         }
 
+        @Override
         public List _getValueAliases(String valueAlias, List result) {
             if (result == null)
                 result = new ArrayList();
@@ -383,9 +387,10 @@
 
         /*
          * (non-Javadoc)
-         * 
+         *
          * @see com.ibm.icu.dev.test.util.UnicodeProperty#getVersion()
          */
+        @Override
         public String _getVersion() {
             return VersionInfo.ICU_VERSION.toString();
         }
@@ -459,12 +464,12 @@
         if (result >= 0) {
             return UScript.getName(result);
         }
-        TreeMap<String,String> sorted = new TreeMap<String,String>();
+        TreeMap<String,String> sorted = new TreeMap<>();
         for (int scriptCode = BITSET.nextSetBit(0); scriptCode >= 0; scriptCode = BITSET.nextSetBit(scriptCode+1)) {
             // sort by short form
             sorted.put(UScript.getShortName(scriptCode), UScript.getName(scriptCode));
         }
-        return CollectionUtilities.join(sorted.values(), " ");
+        return Joiner.on(" ").join(sorted.values());
     }
 
     private static ICUPropertyFactory singleton = null;
@@ -518,7 +523,7 @@
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see com.ibm.icu.dev.test.util.UnicodePropertySource#getProperty(java.lang.String)
      */
     // TODO file bug on getPropertyValueName for Canonical_Combining_Class
diff --git a/tools/java/org/unicode/cldr/util/props/RandomStringGenerator.java b/tools/java/org/unicode/cldr/util/props/RandomStringGenerator.java
index 4b1d0ce..50c3fd7 100644
--- a/tools/java/org/unicode/cldr/util/props/RandomStringGenerator.java
+++ b/tools/java/org/unicode/cldr/util/props/RandomStringGenerator.java
@@ -19,7 +19,7 @@
 public class RandomStringGenerator {
 
     private static final UnicodeSet SUPPLEMENTARIES = new UnicodeSet(0x10000, 0x10FFFF);
-    
+
     /**
      * If not null, masks off the character properties so the UnicodeSets are easier to use when debugging.
      */
@@ -77,6 +77,7 @@
     }
 
     static UnicodeMap.Composer MyComposer = new UnicodeMap.Composer() {
+        @Override
         public Object compose(int codePoint, String string, Object a, Object b) {
             if (a == null) return b;
             if (b == null) return a;
diff --git a/tools/java/org/unicode/cldr/util/props/UnicodeLabel.java b/tools/java/org/unicode/cldr/util/props/UnicodeLabel.java
index b284985..b47b2a1 100644
--- a/tools/java/org/unicode/cldr/util/props/UnicodeLabel.java
+++ b/tools/java/org/unicode/cldr/util/props/UnicodeLabel.java
@@ -10,17 +10,17 @@
 import com.ibm.icu.text.UTF16;
 
 public abstract class UnicodeLabel implements com.ibm.icu.text.Transform<Integer, String> {
-    
+
     public abstract String getValue(int codepoint, boolean isShort);
 
     @Override
     public String transform(Integer codepoint) {
         return getValue(codepoint, true);
     }
-    
+
     public String getValue(String s, String separator, boolean withCodePoint) {
         if (s.length() == 1) { // optimize simple case
-            return getValue(s.charAt(0), withCodePoint); 
+            return getValue(s.charAt(0), withCodePoint);
         }
         StringBuffer sb = new StringBuffer();
         int cp;
@@ -31,19 +31,19 @@
         }
         return sb.toString();
     }
-    
+
     public int getMaxWidth(boolean isShort) {
         return 0;
     }
-    
+
     private static class Hex extends UnicodeLabel {
         @Override
         public String getValue(int codepoint, boolean isShort) {
             if (isShort) return Utility.hex(codepoint,4);
             return "U+" + Utility.hex(codepoint,4);
-        }       
+        }
     }
-    
+
     public static class Constant extends UnicodeLabel {
         private String value;
         public Constant(String value) {
@@ -56,7 +56,7 @@
         }
         @Override
         public int getMaxWidth(boolean isShort) {
-            return value.length();      
+            return value.length();
         }
     }
     public static final UnicodeLabel NULL = new Constant("");
diff --git a/tools/java/org/unicode/cldr/util/props/UnicodeProperty.java b/tools/java/org/unicode/cldr/util/props/UnicodeProperty.java
index 077cb53..0faf70a 100644
--- a/tools/java/org/unicode/cldr/util/props/UnicodeProperty.java
+++ b/tools/java/org/unicode/cldr/util/props/UnicodeProperty.java
@@ -20,10 +20,9 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
+import java.util.function.Predicate;
 import java.util.regex.Pattern;
 
-import com.ibm.icu.dev.util.CollectionUtilities.InverseMatcher;
-import com.ibm.icu.dev.util.CollectionUtilities.ObjectMatcher;
 import com.ibm.icu.dev.util.UnicodeMap;
 import com.ibm.icu.impl.Utility;
 import com.ibm.icu.text.SymbolTable;
@@ -142,7 +141,7 @@
 
     /*
      * Name: Unicode_1_Name Name: ISO_Comment Name: Name Name: Unicode_1_Name
-     * 
+     *
      */
 
     public static final int UNKNOWN = 0, BINARY = 2, EXTENDED_BINARY = 3,
@@ -261,6 +260,7 @@
         return getAvailableValues(null);
     }
 
+    @Override
     public final String getValue(int codepoint, boolean getShortest) {
         String result = getValue(codepoint);
         if (type >= MISC || result == null || !getShortest)
@@ -270,7 +270,7 @@
 
     public final String getFirstNameAlias() {
         if (firstNameAlias == null) {
-            firstNameAlias = (String) getNameAliases().get(0);
+            firstNameAlias = getNameAliases().get(0);
         }
         return firstNameAlias;
     }
@@ -288,7 +288,7 @@
         Iterator it = getAvailableValues().iterator();
         while (it.hasNext()) {
             String value = (String) it.next();
-            String first = (String) getValueAliases(value).get(0);
+            String first = getValueAliases(value).get(0);
             if (first == null) { // internal error
                 throw new IllegalArgumentException(
                         "Value not in value aliases: " + value);
@@ -312,6 +312,7 @@
 
     private int maxFirstValueAliasWidth = -1;
 
+    @Override
     public int getMaxWidth(boolean getShortest) {
         if (maxValueWidth < 0)
             _getFirstValueAliasCache();
@@ -352,7 +353,7 @@
                 }
             }
         }
-        ObjectMatcher<String> matcher = isType(STRING_OR_MISC_MASK) ?
+        Predicate<String> matcher = isType(STRING_OR_MISC_MASK) ?
             new StringEqualityMatcher(propertyValue) : new NameMatcher(propertyValue);
         return getSet(matcher, result);
     }
@@ -386,7 +387,7 @@
 
     public static final String UNUSED = "??";
 
-    public UnicodeSet getSet(ObjectMatcher matcher, UnicodeSet result) {
+    public UnicodeSet getSet(Predicate matcher, UnicodeSet result) {
         if (result == null)
             result = new UnicodeSet();
         boolean uniformUnassigned = hasUniformUnassigned();
@@ -394,7 +395,7 @@
             for (UnicodeSetIterator usi = getStuffToTest(uniformUnassigned); usi.next();) { // int i = 0; i <= 0x10FFFF; ++i
                 int i = usi.codepoint;
                 String value = getValue(i);
-                if (value != null && matcher.matches(value)) {
+                if (value != null && matcher.test(value)) {
                     result.add(i);
                 }
             }
@@ -405,7 +406,7 @@
         Iterator it = um.getAvailableValues(null).iterator();
         main: while (it.hasNext()) {
             String value = (String) it.next();
-            if (matcher.matches(value)) {  // fastpath
+            if (matcher.test(value)) {  // fastpath
                 um.keySet(value, result);
                 continue main;
             }
@@ -414,8 +415,8 @@
             while (it2.hasNext()) {
                 String value2 = (String) it2.next();
                 // System.out.println("Values:" + value2);
-                if (matcher.matches(value2)
-                        || matcher.matches(toSkeleton(value2))) {
+                if (matcher.test(value2)
+                        || matcher.test(toSkeleton(value2))) {
                     um.keySet(value, result);
                     continue main;
                 }
@@ -427,7 +428,7 @@
     /*
      * public UnicodeSet getMatchSet(UnicodeSet result) { if (result == null)
      * result = new UnicodeSet(); addAll(matchIterator, result); return result; }
-     * 
+     *
      * public void setMatchSet(UnicodeSet set) { matchIterator = new
      * UnicodeSetIterator(set); }
      */
@@ -463,18 +464,22 @@
             }
         }
 
+        @Override
         public int compareTo(Object o) {
             return skeleton.compareTo(((Name) o).skeleton);
         }
 
+        @Override
         public boolean equals(Object o) {
             return skeleton.equals(((Name) o).skeleton);
         }
 
+        @Override
         public int hashCode() {
             return skeleton.hashCode();
         }
 
+        @Override
         public String toString() {
             return pretty;
         }
@@ -492,7 +497,7 @@
      */
     public UnicodeMap getUnicodeMap(boolean getShortest) {
         if (!getShortest)
-            return (UnicodeMap) getUnicodeMap_internal().cloneAsThawed();
+            return getUnicodeMap_internal().cloneAsThawed();
         UnicodeMap result = new UnicodeMap();
         boolean uniformUnassigned = hasUniformUnassigned();
 
@@ -575,6 +580,7 @@
      * Utility for managing property & non-string value aliases
      */
     public static final Comparator PROPERTY_COMPARATOR = new Comparator() {
+        @Override
         public int compare(Object o1, Object o2) {
             return compareNames((String) o1, (String) o2);
         }
@@ -582,7 +588,7 @@
 
     /**
      * Utility for managing property & non-string value aliases
-     * 
+     *
      */
     // TODO optimize
     public static boolean equalNames(String a, String b) {
@@ -716,7 +722,7 @@
     /**
      * Utility function for comparing codepoint to string without generating new
      * string.
-     * 
+     *
      * @param codepoint
      * @param other
      * @return true if the codepoint equals the string
@@ -744,7 +750,7 @@
 
     /**
      * Utility that should be on UnicodeSet
-     * 
+     *
      * @param source
      * @param result
      */
@@ -783,7 +789,7 @@
     static public class Factory {
         static boolean DEBUG = false;
 
-        Map<String, UnicodeProperty> canonicalNames = new TreeMap<String, UnicodeProperty>();
+        Map<String, UnicodeProperty> canonicalNames = new TreeMap<>();
 
         Map skeletonNames = new TreeMap();
 
@@ -890,6 +896,7 @@
         }
 
         private class MyXSymbolTable extends UnicodeSet.XSymbolTable {
+            @Override
             public boolean applyPropertyAlias(String propertyName,
                     String propertyValue, UnicodeSet result) {
                 if (false)
@@ -918,6 +925,7 @@
                 this.prefix = prefix;
             }
 
+            @Override
             public char[] lookup(String s) {
                 if (DEBUG)
                     System.out.println("\t(" + prefix + ")Looking up " + s);
@@ -969,10 +977,12 @@
                 return result.toString();
             }
 
+            @Override
             public UnicodeMatcher lookupMatcher(int ch) {
                 return null;
             }
 
+            @Override
             public String parseReference(String text, ParsePosition pos,
                     int limit) {
                 if (DEBUG)
@@ -1064,20 +1074,24 @@
 
         List temp = new ArrayList(1);
 
+        @Override
         public List _getAvailableValues(List result) {
             temp.clear();
             return filter.addUnique(property.getAvailableValues(temp), result);
         }
 
+        @Override
         public List _getNameAliases(List result) {
             temp.clear();
             return filter.addUnique(property.getNameAliases(temp), result);
         }
 
+        @Override
         public String _getValue(int codepoint) {
             return filter.remap(property.getValue(codepoint));
         }
 
+        @Override
         public List _getValueAliases(String valueAlias, List result) {
             if (backmap == null) {
                 backmap = new HashMap(1);
@@ -1101,6 +1115,7 @@
                     result);
         }
 
+        @Override
         public String _getVersion() {
             return property.getVersion();
         }
@@ -1142,6 +1157,7 @@
             this.valueMap = valueMap;
         }
 
+        @Override
         public String remap(String original) {
             Object changed = valueMap.get(original);
             return changed == null ? original : (String) changed;
@@ -1153,7 +1169,7 @@
     }
 
     /** Matches using .equals(). */
-    private static final class StringEqualityMatcher implements ObjectMatcher<String> {
+    private static final class StringEqualityMatcher implements Predicate<String> {
         private final String pattern;
 
         StringEqualityMatcher(String pattern) {
@@ -1161,13 +1177,13 @@
         }
 
         @Override
-        public boolean matches(String value) {
+        public boolean test(String value) {
             return pattern.equals(value);
         }
     }
 
     /** Matches skeleton strings. Computes the pattern skeleton only once. */
-    private static final class NameMatcher implements ObjectMatcher<String> {
+    private static final class NameMatcher implements Predicate<String> {
         private final String pattern;
         private final String skeleton;
 
@@ -1177,19 +1193,18 @@
         }
 
         @Override
-        public boolean matches(String value) {
+        public boolean test(String value) {
             return pattern.equals(value) || skeleton.equals(toSkeleton(value));
         }
     }
 
     private static final NameMatcher YES_MATCHER = new NameMatcher("Yes");
 
-    public interface PatternMatcher extends ObjectMatcher {
-        public PatternMatcher set(String pattern);
+    public interface PatternMatcher extends Predicate {
+        PatternMatcher set(String pattern);
     }
 
-    public static class InversePatternMatcher extends InverseMatcher implements
-    PatternMatcher {
+    public static class InversePatternMatcher implements PatternMatcher {
         PatternMatcher other;
 
         public PatternMatcher set(PatternMatcher toInverse) {
@@ -1197,10 +1212,12 @@
             return this;
         }
 
-        public boolean matches(Object value) {
-            return !other.matches(value);
+        @Override
+        public boolean test(Object value) {
+            return !other.test(value);
         }
 
+        @Override
         public PatternMatcher set(String pattern) {
             other.set(pattern);
             return this;
@@ -1217,12 +1234,14 @@
             this.pattern = pattern;
         }
 
-        public boolean matches(Object value) {
+        @Override
+        public boolean test(Object value) {
             if (comparator == null)
                 return pattern.equals(value);
             return comparator.compare(pattern, value) == 0;
         }
 
+        @Override
         public PatternMatcher set(String pattern) {
             this.pattern = pattern;
             return this;
@@ -1232,12 +1251,14 @@
     public static class RegexMatcher implements UnicodeProperty.PatternMatcher {
         private java.util.regex.Matcher matcher;
 
+        @Override
         public UnicodeProperty.PatternMatcher set(String pattern) {
             matcher = Pattern.compile(pattern).matcher("");
             return this;
         }
         UFormat foo;
-        public boolean matches(Object value) {
+        @Override
+        public boolean test(Object value) {
             matcher.reset(value.toString());
             return matcher.find();
         }
@@ -1251,7 +1272,7 @@
         private static final String[] YES_VALUES = {"Yes", "Y", "T", "True"};
 
         /**
-         * 
+         *
          */
         private static final String[][] YES_NO_ALIASES = new String[][] {YES_VALUES, NO_VALUES};
 
@@ -1274,10 +1295,12 @@
             return this;
         }
 
+        @Override
         public String _getVersion() {
             return version;
         }
 
+        @Override
         public List _getNameAliases(List result) {
             addAllUnique(propertyAliases, result);
             return result;
@@ -1303,7 +1326,7 @@
                 switch(aliasAddAction) {
                 case IGNORE_IF_MISSING: return;
                 case REQUIRE_MAIN_ALIAS: throw new IllegalArgumentException("Can't add alias for mising value: " + value);
-                case ADD_MAIN_ALIAS: 
+                case ADD_MAIN_ALIAS:
                     toValueAliases.put(value, result = new ArrayList(0));
                     break;
                 }
@@ -1312,6 +1335,7 @@
             addUnique(valueAlias, result);
         }
 
+        @Override
         protected List _getValueAliases(String valueAlias, List result) {
             if (toValueAliases == null)
                 _fixValueAliases();
@@ -1362,6 +1386,7 @@
     public static abstract class SimpleProperty extends BaseProperty {
         LinkedHashSet values;
 
+        @Override
         public UnicodeProperty addName(String alias) {
             propertyAliases.add(alias);
             return this;
@@ -1398,6 +1423,7 @@
             return this;
         }
 
+        @Override
         public List _getAvailableValues(List result) {
             if (values == null)
                 _fillValues();
@@ -1458,6 +1484,7 @@
          */
         protected UnicodeMap unicodeMap;
 
+        @Override
         protected UnicodeMap _getUnicodeMap() {
             return unicodeMap;
         }
@@ -1467,6 +1494,7 @@
             return this;
         }
 
+        @Override
         protected String _getValue(int codepoint) {
             return (String) unicodeMap.getValue(codepoint);
         }
@@ -1476,7 +1504,8 @@
          result.add(valueAlias);
          return result; // no other aliases
          }
-         */protected List _getAvailableValues(List result) {
+         */@Override
+        protected List _getAvailableValues(List result) {
              unicodeMap.getAvailableValues(result);
              if (toValueAliases != null) {
                  for (Object s : toValueAliases.keySet()) {
@@ -1493,7 +1522,7 @@
         if (isType(STRING_OR_MISC_MASK)) {
             return true;
         }
-        Collection<String> values = (Collection<String>) getAvailableValues();
+        Collection<String> values = getAvailableValues();
         for (String valueAlias : values) {
             if (UnicodeProperty.compareNames(valueAlias, propertyValue) == 0) {
                 return true;
@@ -1512,7 +1541,7 @@
         if (isType(STRING_OR_MISC_MASK)) {
             return result;
         }
-        Collection<String> values = (Collection<String>) getAvailableValues();
+        Collection<String> values = getAvailableValues();
         for (String valueAlias : values) {
             UnicodeProperty.addAllUnique(getValueAliases(valueAlias), result);
         }
@@ -1583,7 +1612,7 @@
             return equals(cp, value);
         }
         String defaultValue = getValue(getSAMPLE_UNASSIGNED());
-        return defaultValue == null ? value == null : defaultValue.equals(value);   
+        return defaultValue == null ? value == null : defaultValue.equals(value);
     }
 
     public boolean hasUniformUnassigned() {
@@ -1609,10 +1638,12 @@
             return set(new UnicodeSet(string).freeze());
         }
 
+        @Override
         protected String _getValue(int codepoint) {
             return YESNO_ARRAY[unicodeSet.contains(codepoint) ? 0 : 1];
         }
 
+        @Override
         protected List _getAvailableValues(List result) {
             return YESNO;
         }
diff --git a/tools/java/org/unicode/cldr/util/props/UnicodePropertySymbolTable.java b/tools/java/org/unicode/cldr/util/props/UnicodePropertySymbolTable.java
index f4cd9b2..91bb317 100644
--- a/tools/java/org/unicode/cldr/util/props/UnicodePropertySymbolTable.java
+++ b/tools/java/org/unicode/cldr/util/props/UnicodePropertySymbolTable.java
@@ -23,7 +23,7 @@
  * Unassigned characters (gc=Cn) are different than in ICU other than in ICU, you MUST call
  * {@code UnicodeProperty.ResetCacheProperties} afterwards. If you then call {@code UnicodeSet.setDefaultXSymbolTable}
  * with null to clear the value, you MUST also call {@code UnicodeProperty.ResetCacheProperties}.
- * 
+ *
  * @author markdavis
  */
 public class UnicodePropertySymbolTable extends UnicodeSet.XSymbolTable {
@@ -44,11 +44,12 @@
     //      String[] propertyNames = propertyName.split("[*]");
     //      for (int i = propertyNames.length - 1; i >= 0; ++i) {
     //        String pname = propertyNames[i];
-    //        
+    //
     //      }
     //      return null;
     //    }
 
+    @Override
     public boolean applyPropertyAlias(String propertyName,
             String propertyValue, UnicodeSet result) {
       boolean status = false;
@@ -59,7 +60,7 @@
           if (posNotEqual < 0) posNotEqual = propertyName.length();
           if (posColon < 0) posColon = propertyName.length();
           int opPos = posNotEqual < posColon ? posNotEqual : posColon;
-          propertyValue = propertyValue.length() == 0 ? propertyName.substring(opPos+1) 
+          propertyValue = propertyValue.length() == 0 ? propertyName.substring(opPos+1)
                   : propertyName.substring(opPos+1) + "=" + propertyValue;
           propertyName = propertyName.substring(0,opPos);
           if (posNotEqual < posColon) {
@@ -76,15 +77,15 @@
       } else {
         try {
           status = applyPropertyAlias0("gc", propertyName, result);
-        } catch (Exception e) {};
+        } catch (Exception e) {}
         if (!status) {
           try {
             status = applyPropertyAlias0("sc", propertyName, result);
-          } catch (Exception e) {};
+          } catch (Exception e) {}
           if (!status) {
             try {
               status = applyPropertyAlias0(propertyName, "Yes", result);
-            } catch (Exception e) {};
+            } catch (Exception e) {}
             if (!status) {
               status = applyPropertyAlias0(propertyName, "", result);
             }
@@ -101,30 +102,30 @@
     {
         GC_REMAP.put("c", "Cc Cf Cn Co Cs".split(" "));
         GC_REMAP.put("other", GC_REMAP.get("c"));
-        
+
         GC_REMAP.put("l", "Ll Lm Lo Lt Lu".split(" "));
         GC_REMAP.put("letter", GC_REMAP.get("l"));
-        
+
         GC_REMAP.put("lc", "Ll Lt Lu".split(" "));
         GC_REMAP.put("casedletter", GC_REMAP.get("lc"));
-        
+
         GC_REMAP.put("m", "Mc Me Mn".split(" "));
         GC_REMAP.put("mark", GC_REMAP.get("m"));
-        
+
         GC_REMAP.put("n", "Nd Nl No".split(" "));
         GC_REMAP.put("number", GC_REMAP.get("n"));
-        
+
         GC_REMAP.put("p", "Pc Pd Pe Pf Pi Po Ps".split(" "));
         GC_REMAP.put("punctuation", GC_REMAP.get("p"));
         GC_REMAP.put("punct", GC_REMAP.get("p"));
-        
+
         GC_REMAP.put("s", "Sc Sk Sm So".split(" "));
         GC_REMAP.put("symbol", GC_REMAP.get("s"));
-        
+
         GC_REMAP.put("z", "Zl Zp Zs".split(" "));
         GC_REMAP.put("separator", GC_REMAP.get("z"));
     }
-    
+
     public boolean applyPropertyAlias0(String propertyName,
             String propertyValue, UnicodeSet result) {
       result.clear();
@@ -191,7 +192,7 @@
           set = new UnicodeSet();
           List<String> values = prop.getAvailableValues();
           for (String value : values) {
-            if (patternMatcher.matches(value)) {
+            if (patternMatcher.test(value)) {
               for (String other : values) {
                 if (other.compareTo(value) <= 0) {
                   set.addAll(prop.getSet(other));
@@ -208,7 +209,7 @@
       throw new IllegalArgumentException("Illegal property: " + propertyName);
     }
 
-    
+
 
     private boolean isValid(UnicodeProperty prop, String propertyValue) {
 //      if (prop.getName().equals("General_Category")) {
@@ -234,7 +235,8 @@
             this.comparator = comparator;
           }
 
-        public boolean matches(Object value) {
+        @Override
+        public boolean test(Object value) {
           int comp = comparator.compare(pattern, value.toString());
           switch (relation) {
           case less: return comp < 0;
@@ -245,12 +247,13 @@
           }
         }
 
+        @Override
         public PatternMatcher set(String pattern) {
           this.pattern = pattern;
           return this;
         }
       }
-    
+
     /**
      * Special parser for doubles. Anything not parsable is higher than everything else.
      */
@@ -272,11 +275,11 @@
             if (Double.isNaN(d1) || Double.isNaN(d2)) {
                 throw new IllegalArgumentException();
             }
-                
-            return d1 > d2 ? 1 
+
+            return d1 > d2 ? 1
                     : d1 < d2 ? -1
                         : 0;
         }
-        
+
     };
   }
diff --git a/tools/java/pom.xml b/tools/java/pom.xml
new file mode 100644
index 0000000..f604b6a
--- /dev/null
+++ b/tools/java/pom.xml
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<artifactId>cldr</artifactId>
+
+	<name>CLDR Java Tools</name>
+
+	<url>https://unicode.org/cldr</url>
+
+	<properties>
+		<mainClass>org.unicode.cldr.tool.Main</mainClass>
+	</properties>
+
+	<scm>
+		<connection>scm:git:https://github.com/unicode-org/cldr.git</connection>
+	</scm>
+
+	<parent>
+		<groupId>org.unicode.cldr</groupId>
+		<artifactId>cldr-all</artifactId>
+		<version>38.0-SNAPSHOT</version>
+	</parent>
+
+
+	<dependencies>
+		<dependency>
+			<groupId>com.ibm.icu</groupId>
+			<artifactId>icu4j-for-cldr</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>com.ibm.icu</groupId>
+			<artifactId>utilities-for-cldr</artifactId>
+		</dependency>
+
+		<!-- test -->
+		<dependency>
+			<groupId>org.junit.jupiter</groupId>
+			<artifactId>junit-jupiter-api</artifactId>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.junit.jupiter</groupId>
+			<artifactId>junit-jupiter-engine</artifactId>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>com.google.code.gson</groupId>
+			<artifactId>gson</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.google.guava</groupId>
+			<artifactId>guava</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.ant</groupId>
+			<artifactId>ant</artifactId>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>xml-apis</groupId>
+			<artifactId>xml-apis</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>xerces</groupId>
+			<artifactId>xercesImpl</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>com.google.myanmartools</groupId>
+			<artifactId>myanmar-tools</artifactId>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<testSourceDirectory>${project.basedir}/../cldr-unittest/src</testSourceDirectory>
+		<sourceDirectory>.</sourceDirectory> <!-- TODO: fix by refactoring source dirs, CLDR-11585 -->
+		<resources>
+			<resource>
+				<directory>.</directory>
+				<includes>
+					<include>org/unicode/cldr/icu/*.html</include>
+					<include>org/unicode/cldr/icu/*.txt</include>
+					<include>org/unicode/cldr/json/*.txt</include>
+					<include>org/unicode/cldr/tool/*.css</include>
+					<include>org/unicode/cldr/tool/*.html</include>
+					<include>org/unicode/cldr/tool/*.txt</include>
+					<include>org/unicode/cldr/tool/*.xml</include>
+					<include>org/unicode/cldr/util/data/**/*</include>
+				</includes>
+			</resource>
+		</resources>
+		<testResources>
+			<testResource>
+				<directory>${project.basedir}/../cldr-unittest/src</directory>
+				<includes>
+					<include>org/unicode/cldr/unittest/*.txt</include>
+					<include>org/unicode/cldr/unittest/data/**/*</include>
+				</includes>
+			</testResource>
+		</testResources>
+
+		<plugins>
+			<plugin>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<configuration>
+					<!-- TODO: fix by refactoring source dirs, CLDR-11585 -->
+					<includes>
+						<include>com/**/*.java</include>
+						<include>org/**/*.java</include>
+					</includes>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>buildnumber-maven-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<artifactId>maven-jar-plugin</artifactId>
+				<configuration>
+					<archive>
+						<manifest>
+							<mainClass>${mainClass}</mainClass>
+						</manifest>
+						<manifestEntries>
+							<Built-By>${user.name}</Built-By>
+							<Build-Time>${maven.build.timestamp}</Build-Time>
+							<CLDR-Tools-Git-Commit>${buildNumber}</CLDR-Tools-Git-Commit>
+							<CLDR-Tools-Git-Branch>${scmBranch}</CLDR-Tools-Git-Branch>
+						</manifestEntries>
+					</archive>
+				</configuration>
+			</plugin>
+			<plugin>
+				<artifactId>maven-assembly-plugin</artifactId>
+				<configuration>
+					<descriptorRefs>
+						<descriptorRef>jar-with-dependencies</descriptorRef>
+					</descriptorRefs>
+					<archive>
+						<manifest>
+							<mainClass>${mainClass}</mainClass>
+						</manifest>
+					</archive>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+</project>
diff --git a/tools/pom.xml b/tools/pom.xml
new file mode 100644
index 0000000..f5a1b86
--- /dev/null
+++ b/tools/pom.xml
@@ -0,0 +1,289 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>org.unicode.cldr</groupId>
+	<artifactId>cldr-all</artifactId>
+	<version>38.0-SNAPSHOT</version>
+	<name>CLDR Parent</name>
+	<packaging>pom</packaging>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<maven.compiler.source>1.8</maven.compiler.source>
+		<maven.compiler.target>1.8</maven.compiler.target>
+                <!--
+                    Note: see https://github.com/unicode-org/icu/packages/411079/versions for the
+                    icu4j.version tag to use
+                -->
+		<icu4j.version>68.1-cldr-2020-10-21</icu4j.version>
+		<junit.version>4.13.1</junit.version>
+		<junit.jupiter.version>5.5.1</junit.jupiter.version>
+		<maven-surefire-plugin-version>2.22.1</maven-surefire-plugin-version>
+		<assertj-version>3.11.1</assertj-version>
+	</properties>
+
+	<modules>
+		<module>java</module>
+		<module>cldr-apps</module>
+	</modules>
+
+	<dependencyManagement>
+		<dependencies>
+			<!-- CLDR -->
+			<dependency>
+				<groupId>org.unicode.cldr</groupId>
+				<artifactId>cldr</artifactId>
+				<version>${project.version}</version> <!-- this seems to work -->
+			</dependency>
+
+			<!-- ICU -->
+			<dependency>
+				<groupId>com.ibm.icu</groupId>
+				<artifactId>icu4j-for-cldr</artifactId>
+				<version>${icu4j.version}</version>
+			</dependency>
+			<dependency>
+				<groupId>com.ibm.icu</groupId>
+				<artifactId>utilities-for-cldr</artifactId>
+				<version>${icu4j.version}</version>
+			</dependency>
+
+			<!-- Misc Libs -->
+			<dependency>
+				<groupId>com.google.code.gson</groupId>
+				<artifactId>gson</artifactId>
+				<version>2.8.6</version>
+			</dependency>
+
+			<dependency>
+				<groupId>com.google.guava</groupId>
+				<artifactId>guava</artifactId>
+				<version>29.0-jre</version>
+			</dependency>
+
+			<dependency>
+				<groupId>org.apache.ant</groupId>
+				<artifactId>ant</artifactId>
+				<version>1.10.8</version>
+			</dependency>
+
+			<dependency>
+				<groupId>xerces</groupId>
+				<artifactId>xercesImpl</artifactId>
+				<version>2.12.0</version>
+			</dependency>
+			<dependency>
+				<groupId>xml-apis</groupId>
+				<artifactId>xml-apis</artifactId>
+				<version>1.4.01</version>
+				<scope>compile</scope>
+			</dependency>
+
+			<dependency>
+				<groupId>com.google.myanmartools</groupId>
+				<artifactId>myanmar-tools</artifactId>
+				<version>1.1.1</version>
+			</dependency>
+			<!-- codec/util -->
+			<dependency>
+				<groupId>commons-codec</groupId>
+				<artifactId>commons-codec</artifactId>
+				<version>1.9</version>
+			</dependency>
+			<dependency>
+				<groupId>commons-fileupload</groupId>
+				<artifactId>commons-fileupload</artifactId>
+				<version>1.3.3</version>
+			</dependency>
+			<dependency>
+				<groupId>commons-io</groupId>
+				<artifactId>commons-io</artifactId>
+				<version>2.4</version>
+			</dependency>
+
+
+			<!-- API -->
+			<dependency>
+				<groupId>javax.servlet</groupId>
+				<artifactId>javax.servlet-api</artifactId>
+				<version>3.1.0</version>
+				<scope>provided</scope>
+			</dependency>
+
+			<dependency>
+				<groupId>javax.servlet.jsp</groupId>
+				<artifactId>javax.servlet.jsp-api</artifactId>
+				<version>2.3.1</version>
+				<scope>provided</scope>
+			</dependency>
+
+			<dependency>
+				<groupId>javax.xml.bind</groupId>
+				<artifactId>jaxb-api</artifactId>
+				<version>2.3.1</version>
+				<scope>provided</scope>
+			</dependency>
+
+			<!-- mail / rss -->
+			<dependency>
+				<groupId>rome</groupId>
+				<artifactId>rome</artifactId>
+				<version>1.0</version>
+			</dependency>
+
+			<dependency>
+				<groupId>javax.mail</groupId>
+				<artifactId>mail</artifactId>
+				<version>1.5.0-b01</version>
+			</dependency>
+
+
+			<dependency>
+				<groupId>com.sun.activation</groupId>
+				<artifactId>javax.activation</artifactId>
+				<version>1.2.0</version>
+			</dependency>
+
+			<!-- https://mvnrepository.com/artifact/org.json/json -->
+			<dependency>
+				<groupId>org.json</groupId>
+				<artifactId>json</artifactId>
+				<version>20190722</version>
+			</dependency>
+
+			<!-- scm -->
+			<dependency>
+				<groupId>org.tmatesoft.svnkit</groupId>
+				<artifactId>svnkit</artifactId>
+				<version>1.7.4-v1</version>
+			</dependency>
+
+
+
+			<!-- db connectors -->
+			<dependency>
+				<groupId>org.apache.derby</groupId>
+				<artifactId>derby</artifactId>
+				<version>10.10.1.1</version>
+			</dependency>
+
+			<dependency>
+				<groupId>mysql</groupId>
+				<artifactId>mysql-connector-java</artifactId>
+				<version>8.0.21</version>
+			</dependency>
+			<!-- test -->
+			<dependency>
+				<groupId>junit</groupId>
+				<artifactId>junit</artifactId>
+				<version>${junit.version}</version>
+				<scope>test</scope>
+			</dependency>
+
+			<dependency>
+				<groupId>org.junit.jupiter</groupId>
+				<artifactId>junit-jupiter-api</artifactId>
+				<version>${junit.jupiter.version}</version>
+				<scope>test</scope>
+			</dependency>
+			<dependency>
+				<groupId>org.junit.jupiter</groupId>
+				<artifactId>junit-jupiter-engine</artifactId>
+				<version>${junit.jupiter.version}</version>
+				<scope>test</scope>
+			</dependency>
+		</dependencies>
+	</dependencyManagement>
+
+	<repositories>
+		<repository>
+			<id>githubicu</id>
+			<name>GitHub unicode-org/icu Apache Maven Packages</name>
+			<url>https://maven.pkg.github.com/unicode-org/icu</url>
+		</repository>
+	</repositories>
+
+	<build>
+		<pluginManagement>
+			<plugins>
+				<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
+				<plugin>
+					<artifactId>maven-clean-plugin</artifactId>
+					<version>3.1.0</version>
+				</plugin>
+				<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
+				<plugin>
+					<artifactId>maven-resources-plugin</artifactId>
+					<version>3.0.2</version>
+				</plugin>
+				<plugin>
+					<artifactId>maven-compiler-plugin</artifactId>
+					<version>3.8.0</version>
+				</plugin>
+				<plugin>
+					<artifactId>maven-surefire-plugin</artifactId>
+					<version>${maven-surefire-plugin-version}</version>
+					<configuration>
+						<systemPropertyVariables>
+							<CLDR_DIR>${project.basedir}/../../</CLDR_DIR> <!-- this is valid for tools/java and tools/cldr-apps-->
+							<CLDR_ENVIRONMENT>UNITTEST</CLDR_ENVIRONMENT>
+							<java.awt.headless>true</java.awt.headless>
+						</systemPropertyVariables>
+						<argLine>-Xmx6g -enableassertions</argLine>
+					</configuration>
+				</plugin>
+				<plugin>
+					<artifactId>maven-jar-plugin</artifactId>
+					<version>3.0.2</version>
+				</plugin>
+				<plugin>
+					<artifactId>maven-war-plugin</artifactId>
+					<version>3.2.2</version>
+				</plugin>
+				<plugin>
+					<artifactId>maven-install-plugin</artifactId>
+					<version>2.5.2</version>
+				</plugin>
+				<plugin>
+					<artifactId>maven-deploy-plugin</artifactId>
+					<version>2.8.2</version>
+				</plugin>
+				<plugin>
+					<artifactId>maven-assembly-plugin</artifactId>
+					<version>3.3.0</version>
+				</plugin>
+				<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
+				<plugin>
+					<artifactId>maven-site-plugin</artifactId>
+					<version>3.7.1</version>
+				</plugin>
+				<plugin>
+					<artifactId>maven-project-info-reports-plugin</artifactId>
+					<version>3.0.0</version>
+				</plugin>
+				<plugin>
+					<groupId>org.codehaus.mojo</groupId>
+					<artifactId>buildnumber-maven-plugin</artifactId>
+					<version>1.4</version>
+					<executions>
+						<execution>
+							<phase>validate</phase>
+							<goals>
+								<goal>create</goal>
+							</goals>
+						</execution>
+					</executions>
+					<configuration>
+						<getRevisionOnlyOnce>true</getRevisionOnlyOnce>
+						<attach>true</attach>
+						<addOutputDirectoryToResources>true</addOutputDirectoryToResources>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+	</build>
+</project>
diff --git a/tools/scripts/ansible/.gitignore b/tools/scripts/ansible/.gitignore
new file mode 100644
index 0000000..a30471c
--- /dev/null
+++ b/tools/scripts/ansible/.gitignore
@@ -0,0 +1,3 @@
+/local-*
+/.vagrant
+/*.log
diff --git a/tools/scripts/ansible/README.md b/tools/scripts/ansible/README.md
new file mode 100644
index 0000000..dfd8eda
--- /dev/null
+++ b/tools/scripts/ansible/README.md
@@ -0,0 +1,147 @@
+# Ansible for Survey Tool
+
+These are ansible scripts for setup and maintenance of the Survey Tool.
+
+## Scope
+
+Right now, the test setup mostly controls Tomcat, but not the nginx proxy
+due to public port issues (https).
+
+## Setup
+
+### Setup: Control system
+
+This is your local system, where you control the others from.
+
+- Install Ansible <https://ansible.com>
+- Install some prereqs:
+
+```shell
+ansible-galaxy install -r roles.yml
+```
+
+- Make sure you can `ssh` into all of the needed systems. For example,
+`ssh cldr-ref.unicode.org` should succeed without needing a password.
+
+- You should be able to run `ansible all -m ping` and get something back
+like the following:
+
+```shell
+cldr-ref.unicode.org | SUCCESS => {
+    "ansible_facts": {
+        "discovered_interpreter_python": "/usr/bin/python"
+    },
+    "changed": false,
+    "ping": "pong"
+}
+```
+
+### Setup: Managed systems
+
+- Install python3. Make sure `python --version`
+or `python3 --version` returns "Python 3…"
+
+- TODO: these shouldn't be needed, but they are. Here's the entire
+install command:
+
+```shell
+sudo apt-get update && sudo apt-get install python3 python-apt python3-pymysql
+```
+
+### Setup: surveytool keypair
+
+Create a RSA keypair with no password for the buildbot:
+
+```shell
+mkdir -p ./local-vars
+ssh-keygen -t rsa -b 4096 -f ./local-vars/surveytool -P '' -C 'surveytool deploy'
+```
+
+The contents of the `local-vars/surveytool.pub` file is used for the
+`key:` parameter below in `local.yml`. The `local-vars/surveytool`
+private key is used in the secret `RSA_KEY_SURVEYTOOL`.
+
+Then setup github secrets as shown:
+
+- `SMOKETEST_HOST` -
+  hostname of smoketest
+- `SMOKETEST_PORT` -
+  port of smoketest
+- `RSA_KEY_SURVEYTOOL` -
+  contents of `local-vars/surveytool` (the secret key)
+- `SMOKETEST_KNOWNHOSTS` -
+  run `ssh-keyscan smoketest.example.com` where _smoketest.example.com_
+  is the name of the smoketest server.  Put the results into this
+  secret. One of these lines should match `~/.ssh/known_hosts` on your
+  own system when you ssh into smoketest.
+  Try `grep -i smoke ~/.ssh/known_hosts`
+
+Create a folder "cldrbackup" inside local-vars
+```shell
+mkdir -p ./local-vars/cldrbackup
+```
+
+Add three files inside local-vars/cldrbackup-vars: id_rsa, id_rsa.pub, and known_hosts. These must correspond to the public key for cldrbackup on corp.unicode.org. Copy existing versions if you have them. Otherwise, create new ones with `ssh-keygen -t rsa` and copy the public key to corp.unicode.org with `ssh-copy-id -i ~/.ssh/id_rsa cldrbackup@corp.unicode.org`
+
+### Setup: Config file
+
+- Create a file `local-vars/local.yml` matching the example values in [test-local-vars/local.yml](test-local-vars/local.yml) (but with a secure password instead of `hunter42`!.)
+
+```yaml
+mysql_users:
+  - name: surveytool
+    host: localhost
+    password: hunter42
+    priv: 'cldrdb.*:ALL'
+surveytooldeploy:
+  password: hunter43
+  vap: hunter44
+  testpw: hunter45
+  oldversion: 36
+  newversion: 37
+  key: ssh-rsa …  ( SSH key goes here)
+```
+
+## Configure
+
+Run the setup playbook.
+
+```shell
+ansible-playbook --check setup-playbook.yml
+```
+
+This is in dry run mode. When it looks good to you, take the
+`--check` out and run it again.
+
+You can also use the `-l cldr-smoke.unicode.org` option to limit
+the operation to a single host.
+
+## Local Test
+
+- install vagrant and some provider such as virtualbox or libvirt
+
+```shell
+vagrant up
+```
+
+- To log into the new host, run `vagrant ssh`
+
+- To iterate, trying to reapply ansible, run `vagrant provision --provision-with=ansible`
+
+- to deploy ST to this, use the following:
+
+```shell
+(cd ../../cldr-apps ; ant war) # to build ST if not already built
+vagrant ssh -- sudo -u surveytool /usr/local/bin/deploy-to-tomcat.sh $(git rev-parse HEAD) < ../../cldr-apps/cldr-apps.war
+```
+
+- Now you should be able to login at <http://127.0.0.1:8880/cldr-apps/>
+
+- If you need to get directly to the tomcat server, use:
+
+```shell
+vagrant ssh -- -L 8080:127.0.0.1:8080
+# leave this shell window open.
+```
+
+Then, you can go to <http://127.0.0.1:8080> and directly access tomcat.
diff --git a/tools/scripts/ansible/Vagrantfile b/tools/scripts/ansible/Vagrantfile
new file mode 100644
index 0000000..7172fe9
--- /dev/null
+++ b/tools/scripts/ansible/Vagrantfile
@@ -0,0 +1,18 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+Vagrant.configure("2") do |config|
+  config.vm.box = "ubuntu/bionic64"
+  config.vm.define "surveytool"
+  config.vm.hostname = "surveytool"
+  # forward http and https
+  config.vm.network "forwarded_port", guest: 80,   host: 8880
+  # Just the minimum to get ansible going
+  config.vm.provision "shell", inline: <<-SHELL
+    apt-get update
+    apt-get install -y python3 sudo
+  SHELL
+  config.vm.provision "ansible" do |ansible|
+    ansible.playbook = "setup-playbook.yml"
+  end
+end
diff --git a/tools/scripts/ansible/ansible.cfg b/tools/scripts/ansible/ansible.cfg
new file mode 100644
index 0000000..17abc8e
--- /dev/null
+++ b/tools/scripts/ansible/ansible.cfg
@@ -0,0 +1,3 @@
+[defaults]
+inventory = ./hosts
+deprecation_warnings=False
diff --git a/tools/scripts/ansible/backup-db-playbook.yml b/tools/scripts/ansible/backup-db-playbook.yml
new file mode 100644
index 0000000..c2d969a
--- /dev/null
+++ b/tools/scripts/ansible/backup-db-playbook.yml
@@ -0,0 +1,75 @@
+- hosts: backupdb
+  become: yes
+  vars_files:
+    - vars/main.yml
+    - local-vars/local.yml
+  tasks:
+    - name: ensure cldrbackup group is there
+      group:
+        name: cldrbackup
+        state: present
+    - name: ensure cldrbackup user is there
+      user:
+        name: cldrbackup
+        groups:
+          - cldrbackup
+        append: yes # add to the groups, do not remove
+        state: present
+        create_home: true
+    - name: set up /home/cldrbackup/.my.cnf
+      no_log: true
+      template:
+        src: templates/mycnf.j2
+        dest: /home/cldrbackup/.my.cnf
+        owner: cldrbackup
+        group: cldrbackup
+        mode: '0640'
+    - name: set up /home/cldrbackup/.ssh/
+      file:
+        path: /home/cldrbackup/.ssh/
+        owner: cldrbackup
+        group: cldrbackup
+        mode: '0700'
+        state: directory
+    - name: set up /home/cldrbackup/.ssh/config
+      template:
+        src: templates/cldrbackup/config.j2
+        dest: /home/cldrbackup/.ssh/config.j2
+        owner: cldrbackup
+        group: cldrbackup
+        mode: '0640'
+    - name: set up /home/cldrbackup/.ssh/id_rsa
+      no_log: true
+      copy:
+        src: local-vars/cldrbackup/id_rsa
+        dest: /home/cldrbackup/.ssh/id_rsa
+        owner: cldrbackup
+        group: cldrbackup
+        mode: '0640'
+    - name: set up /home/cldrbackup/.ssh/id_rsa.pub
+      copy:
+        src: local-vars/cldrbackup/id_rsa.pub
+        dest: /home/cldrbackup/.ssh/id_rsa.pub
+        owner: cldrbackup
+        group: cldrbackup
+        mode: '0640'
+    - name: set up /home/cldrbackup/.ssh/known_hosts
+      copy:
+        src: local-vars/cldrbackup/known_hosts
+        dest: /home/cldrbackup/.ssh/known_hosts
+        owner: cldrbackup
+        group: cldrbackup
+        mode: '0640'
+    - name: set up /home/cldrbackup/backup.sh
+      template:
+        src: templates/cldrbackup/backup_sh.j2
+        dest: /home/cldrbackup/.ssh/backup.sh
+        owner: cldrbackup
+        group: cldrbackup
+        mode: '0640'
+    - name: set up daily db backup cron job
+      cron:
+        name: "backup db"
+        minute: "37"
+        hour: "7"
+        job: "sh /home/cldrbackup/backup.sh >/dev/null 2>&1"
diff --git a/tools/scripts/ansible/hosts b/tools/scripts/ansible/hosts
new file mode 100644
index 0000000..6bbe1a4
--- /dev/null
+++ b/tools/scripts/ansible/hosts
@@ -0,0 +1,18 @@
+[staging]
+cldr-smoke.unicode.org
+
+[prod]
+st.unicode.org
+
+# "surveytool" includes both prod and staging
+[surveytool:children]
+staging
+prod
+
+# encrypt all of the surveytool hosts
+[letsencrypt:children]
+surveytool
+
+# auto-backup cldr db only for production
+[backupdb:children]
+prod
diff --git a/tools/scripts/ansible/requirements.yml b/tools/scripts/ansible/requirements.yml
new file mode 100644
index 0000000..c4e26ac
--- /dev/null
+++ b/tools/scripts/ansible/requirements.yml
@@ -0,0 +1,3 @@
+sprylab.tomcat-ubuntu
+geerlingguy.mysql
+derjd.journald
diff --git a/tools/scripts/ansible/roles.yml b/tools/scripts/ansible/roles.yml
new file mode 100644
index 0000000..b0db652
--- /dev/null
+++ b/tools/scripts/ansible/roles.yml
@@ -0,0 +1,8 @@
+- src: geerlingguy.mysql
+  version: 3.3.0
+- src: geerlingguy.nginx
+  version: 2.8.0
+- src: derjd.journald
+  version: 0.0.1
+# - src: geerlingguy.certbot
+#   version: 3.1.0
\ No newline at end of file
diff --git a/tools/scripts/ansible/setup-playbook.yml b/tools/scripts/ansible/setup-playbook.yml
new file mode 100644
index 0000000..580ac0c
--- /dev/null
+++ b/tools/scripts/ansible/setup-playbook.yml
@@ -0,0 +1,201 @@
+- hosts: surveytool
+  become: yes
+  vars_files:
+    - vars/main.yml
+    - local-vars/local.yml
+  roles:
+    - { role: geerlingguy.mysql }
+    - { role: geerlingguy.nginx }
+  tasks:
+    - name: Install server packages
+      apt:
+        pkg:
+          - tomcat8
+          - tomcat8-admin # needed for deploy
+          - unzip # needed for deploy
+          # for monitoring
+          - prometheus-mysqld-exporter
+          # - prometheus-nginx-exporter # (not there yet)
+    - name: Setup Server Context
+      template:
+        src: templates/context.j2
+        dest: /etc/tomcat8/context.xml
+        owner: root
+        group: tomcat8
+        mode: '0640'
+      notify: Restart Tomcat
+    - name: Setup tomcat8/server.xml
+      copy:
+        src: templates/server.xml
+        dest: /etc/tomcat8/server.xml
+        owner: root
+        group: tomcat8
+        mode: '0640'
+      notify: Restart Tomcat
+    - name: Setup Server Users
+      template:
+        src: templates/users.j2
+        dest: /etc/tomcat8/tomcat-users.xml
+        owner: root
+        group: tomcat8
+        mode: '0640'
+      notify: Restart Tomcat
+    - name: Create CLDR dir
+      file:
+        path: /var/lib/tomcat8/cldr
+        state: directory
+        owner: tomcat8
+        group: tomcat8
+        mode: 0775
+    - name: Create cldr.properties
+      template:
+        dest: /var/lib/tomcat8/cldr/cldr.properties
+        src: templates/cldr-properties.j2
+        force: no
+        owner: tomcat8
+        group: tomcat8
+        mode: "0644"
+      notify: Restart Tomcat
+    - name: Checkout CLDR trunk
+      git:
+        repo: https://github.com/unicode-org/cldr.git
+        dest: /var/lib/tomcat8/cldr/cldr-trunk
+        force: no
+        update: no
+        version: master
+        # this is deep because we will need to keep updating
+        # it with history. It does not include LFS as that
+        # is not needed for the surveytool.
+    - name: Setup index.html
+      copy:
+        src: templates/index.html
+        dest: /var/www/html
+        owner: root
+        group: root
+        mode: '0644'
+    - name: Setup reverse proxy
+      blockinfile:
+        path: /etc/nginx/sites-enabled/default
+        block: |
+          # proxy /cldr-apps/ to tomcat
+          location /cldr-apps/ {
+            rewrite ^/(.+)\._[\da-f]+_\.(js|css)$ /$1.$2 break;
+            allow all;
+            proxy_pass http://localhost:8080/cldr-apps/;
+            proxy_set_header Host $host;
+            proxy_set_header X-Real-IP $remote_addr;
+            proxy_set_header X-Forwarded-For $remote_addr;
+          }
+        marker: '# {mark} ANSIBLE MANAGED BLOCK'
+        insertafter: '^[\s]*server_name' # the LAST uncommented server block
+      notify: 'Restart Nginx'
+    - name: Setup surveytool user for deploy
+      user:
+        name: surveytool
+        shell: /bin/bash
+    - name: Give access to surveytool user
+      file:
+        path: /var/lib/tomcat8/cldr/cldr-trunk
+        owner: surveytool
+        recurse: yes
+    - name: Setup surveytool auth
+      authorized_key:
+        user: surveytool
+        key: '{{ surveytooldeploy.key }}'
+    - name: Setup deploy-to-tomcat.sh
+      template:
+        src: templates/deploy-sh.j2
+        dest: /usr/local/bin/deploy-to-tomcat.sh
+        owner: root
+        group: root
+        mode: '0755'
+    - name: ensure cldradmin group is there
+      group:
+        name: cldradmin
+        state: present
+    - name: ensure cldradmin user is there
+      user:
+        name: cldradmin
+        comment: CLDR Admin
+        groups:
+          - cldradmin
+        append: yes # add to the groups, do not remove
+        state: present
+        create_home: true
+    - name: Setup /home/cldradmin/.my.cnf
+      template:
+        src: templates/mycnf.j2
+        dest: /home/cldradmin/.my.cnf
+        owner: cldradmin
+        group: cldradmin
+        mode: '0640'
+    - name: make sure /home/cldradmin/.ssh/ exists
+      file:
+        path: /home/cldradmin/.ssh/
+        owner: cldradmin
+        group: cldradmin
+        mode: '0700'
+        state: directory
+    - name: make sure /home/cldradmin/.ssh/authorized_keys exists
+      file:
+        dest: /home/cldradmin/.ssh/authorized_keys
+        owner: cldradmin
+        group: cldradmin
+        mode: '0600'
+        state: touch #https://github.com/ansible/ansible/issues/7490#issuecomment-497373505
+        modification_time: preserve
+        access_time: preserve
+    - name: add cldradmin to sudoers
+      template:
+        dest: /etc/sudoers.d/55-cldradmin-users
+        owner: root
+        group: root
+        mode: '440'
+        src: templates/55-cldradmin.conf
+  handlers:
+    - name: Restart Tomcat
+      service:
+        name: tomcat8
+        state: restarted
+    - name: Restart Nginx
+      service:
+        name: nginx
+        state: restarted
+
+- hosts: all
+  become: yes
+  roles:
+     - role: derJD.journald
+       vars:
+          journald_options:
+            SystemMaxUse: 512M  #reduce logfile use
+  tasks:
+    - name: Install some packages
+      apt:
+        pkg:
+          # these are for convenience of the user
+          - mosh
+          - emacs-nox
+          - byobu
+          # these are for monitoring
+          - prometheus-node-exporter
+
+- hosts: letsencrypt
+  become: yes
+  vars_files:
+    - vars/main.yml
+    - local-vars/local.yml
+  tasks:
+    - name: Install certbot packages
+      apt:
+        pkg:
+          - python3-certbot-nginx
+    - name: setup certbot
+      command: >
+        sudo certbot --nginx --agree-tos -m {{ certbot_admin_email }}
+        -d {{ inventory_hostname }} --non-interactive
+        --keep --redirect --uir --hsts --staple-ocsp --must-staple
+      args:
+        creates: /etc/letsencrypt/renewal/{{ inventory_hostname }}.conf
+
+- import_playbook: backup-db-playbook.yml
diff --git a/tools/scripts/ansible/templates/55-cldradmin.conf b/tools/scripts/ansible/templates/55-cldradmin.conf
new file mode 100644
index 0000000..933a1e2
--- /dev/null
+++ b/tools/scripts/ansible/templates/55-cldradmin.conf
@@ -0,0 +1,2 @@
+# managed by ansible setup-playbook.yml
+cldradmin ALL=(ALL) NOPASSWD:ALL
diff --git a/tools/scripts/ansible/templates/cldr-properties.j2 b/tools/scripts/ansible/templates/cldr-properties.j2
new file mode 100644
index 0000000..8124458
--- /dev/null
+++ b/tools/scripts/ansible/templates/cldr-properties.j2
@@ -0,0 +1,32 @@
+CLDR_MAINTENANCE=false
+
+## your password. Login as user 'admin@' and this password for admin access.
+CLDR_VAP={{ surveytooldeploy.vap }}
+
+## Special Test Enablement.
+CLDR_TESTPW={{ surveytooldeploy.testpw }}
+
+## Special message shown to users as to why survey tool is down.
+## Comment out for normal start-up.
+#CLDR_MESSAGE=
+
+## Special message shown to users.
+CLDR_HEADER=Welcome to SurveyTool@surveytool. Please edit /var/lib/tomcat8/cldr/cldr.properties to change CLDR_HEADER (to change this message), or comment it out entirely. Also see /var/lib/tomcat8/cldr/admin.html to get to the admin panel.
+
+## Current SurveyTool phase 
+CLDR_PHASE=BETA
+
+## 'old' (previous) version
+CLDR_OLDVERSION={{ surveytooldeploy.oldversion }}
+
+## 'new'  version
+CLDR_NEWVERSION={{ surveytooldeploy.newversion }}
+
+## Current SurveyTool phase 
+CLDR_PHASE=BETA
+
+## CLDR trunk. Default value shown
+CLDR_DIR=/var/lib/tomcat8/cldr/cldr-trunk
+
+## SMTP server. Mail is disabled by default.
+#CLDR_SMTP=127.0.0.1
diff --git a/tools/scripts/ansible/templates/cldrbackup/backup_sh.j2 b/tools/scripts/ansible/templates/cldrbackup/backup_sh.j2
new file mode 100644
index 0000000..33e85cf
--- /dev/null
+++ b/tools/scripts/ansible/templates/cldrbackup/backup_sh.j2
@@ -0,0 +1,13 @@
+#!/bin/bash
+#
+# A cron job may call this with a line such as:
+#     37 7 * * * sh /home/cldrbackup/backup.sh >/dev/null 2>&1
+
+DATABASE_NAME={{ cldr_database_name }}
+FNAME={{ cldr_database_name }}-DUMP-`date +%Y-%m-%d`
+RSYNC_DEST={{ cldr_db_backup_destination }}
+
+cd /home/cldrbackup
+mysqldump ${DATABASE_NAME} --add-drop-table --create-options --default-character-set=utf8mb4 > ${FNAME}.sql
+xz ${FNAME}.sql
+rsync -q ${FNAME}.sql.xz ${RSYNC_DEST}
diff --git a/tools/scripts/ansible/templates/cldrbackup/config.j2 b/tools/scripts/ansible/templates/cldrbackup/config.j2
new file mode 100644
index 0000000..ed38142
--- /dev/null
+++ b/tools/scripts/ansible/templates/cldrbackup/config.j2
@@ -0,0 +1,3 @@
+Host {{ cldr_db_backup_host }}
+ User {{ cldr_db_backup_user }}
+ IdentityFile ~/.ssh/id_rsa
diff --git a/tools/scripts/ansible/templates/context.j2 b/tools/scripts/ansible/templates/context.j2
new file mode 100644
index 0000000..dbe5e51
--- /dev/null
+++ b/tools/scripts/ansible/templates/context.j2
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Context>
+<WatchedResource>WEB-INF/web.xml</WatchedResource>
+<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
+<Resource name="jdbc/SurveyTool"
+  auth="Container" type="javax.sql.DataSource"
+  username="surveytool"
+  driverClassName="com.mysql.jdbc.Driver"
+  password="{{ mysql_users[0].password }}"
+  url="jdbc:mysql://localhost:3306/cldrdb?ConnectionRetryCount=5&amp;ConnectionRetryDelay=20&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC"
+  maxActive="8" maxIdle="4" removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true" defaultAutoCommit="false"
+  poolPreparedStatements="true" maxOpenPreparedStatements="150"
+/>
+</Context>
\ No newline at end of file
diff --git a/tools/scripts/ansible/templates/deploy-sh.j2 b/tools/scripts/ansible/templates/deploy-sh.j2
new file mode 100644
index 0000000..2881e74
--- /dev/null
+++ b/tools/scripts/ansible/templates/deploy-sh.j2
@@ -0,0 +1,64 @@
+#!/bin/bash
+# Note: this is managed by Ansible, as deploy-sh.j2
+# Don't modify this file.
+GITHUB_SHA=$1
+UNLOCK=$2
+WORKDIR=${TMPDIR-/tmp} # keep all random files here
+export TPASS={{ surveytooldeploy.password }} # from surveytooldeploy.password
+export TUSER=surveytooldeploy # fixed for now
+
+dogit() {
+    rm -f ${WORKDIR}/git-list.txt
+    if [[ ${GITHUB_SHA} = "master" ]];
+    then
+	echo "changing 'master' to 'origin/master' to get the latest"
+	GITHUB_SHA=origin/master
+    fi
+    git fetch -p || exit 1
+    git clean -f -d || echo 'warning: err on cleanup'
+    # what are we deploying?
+
+    echo    "cldr-trunk was at  :" $(git rev-parse --short HEAD)
+    echo -n "you want to move to:"
+    git rev-parse --short "${GITHUB_SHA}" || exit 1 # fail on err
+    if [[ $(git rev-parse --short HEAD) = $(git rev-parse --short "${GITHUB_SHA}") ]];
+    then
+	echo "No checkout needed. Continuing with redeploy."
+    else
+	echo "Deploy will include these new items:"
+	echo "---"
+	(git log --oneline HEAD..${GITHUB_SHA} | tee ${WORKDIR}/git-list.txt) || exit 1
+	echo "---"
+	if [[ ! -s ${WORKDIR}/git-list.txt ]]; # if empty..
+	then
+	    echo "Note, ${GITHUB_SHA} is not ahead of HEAD"  $(git rev-parse --short HEAD)
+	    echo "Checking for items that would be REVERTED if we proceed:"
+	    echo "---"
+	    git log --oneline ${GITHUB_SHA}..HEAD
+	    echo "---"
+	    if [[ "${UNLOCK}" = "--override" ]];
+	    then
+		echo ".. continuing anyway! due to " "${UNLOCK}"
+	    else
+		echo "STOP. Check the override box if you really want to do this"
+		exit 1
+	    fi
+	fi
+	git checkout -f ${GITHUB_SHA}
+	echo "HEAD is now at" $(git rev-parse --short HEAD) "!"
+     fi
+}
+
+# Check git first, before undeploying. Want to exit early
+(cd  /var/lib/tomcat8/cldr/cldr-trunk/ && dogit ) || exit 1
+# undeploy old ST
+curl -u ${TUSER}:${TPASS} 'http://localhost:8080/manager/text/undeploy?path=/cldr-apps'
+# reset last deploy status
+rm -fv ${WORKDIR}/cldr-apps.war ${WORKDIR}/deploystatus
+# copy cldr-apps.war from action runner to server
+dd bs=1024000 status=progress of=${WORKDIR}/cldr-apps.war
+# this counts the # of files to make sure it's not too short, but also verifies that unzip is OK
+echo ; echo -n 'Unzip check, # of files in cldr-apps.war: '
+(unzip -l ${WORKDIR}/cldr-apps.war | wc -l ) || exit 1
+# Now, do the deployment!
+curl -q -u ${TUSER}:${TPASS} 'http://localhost:8080/manager/text/deploy?path=/cldr-apps&tag=cldr-apps&update=true' -T ${WORKDIR}/cldr-apps.war | tee ${WORKDIR}/deploystatus
diff --git a/tools/scripts/ansible/templates/index.html b/tools/scripts/ansible/templates/index.html
new file mode 100644
index 0000000..6141ed1
--- /dev/null
+++ b/tools/scripts/ansible/templates/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset='utf-8'>
+    <meta http-equiv="refresh" content="0; url=./cldr-apps/v" />
+    <title>CLDR Survey Tool</title>
+</head>
+<body>
+    Redirecting to CLDR Survey Tool (cldr-apps/v)...
+</body>
+</html>
diff --git a/tools/scripts/ansible/templates/mycnf.j2 b/tools/scripts/ansible/templates/mycnf.j2
new file mode 100644
index 0000000..3fd9c7f
--- /dev/null
+++ b/tools/scripts/ansible/templates/mycnf.j2
@@ -0,0 +1,5 @@
+# managed by ansible setup-playboook.yml
+[client]
+user=cldradmin
+database={{ cldr_database_name }}
+password={{ cldradmin_pw }}
diff --git a/tools/scripts/ansible/templates/server.xml b/tools/scripts/ansible/templates/server.xml
new file mode 100644
index 0000000..f58cdd8
--- /dev/null
+++ b/tools/scripts/ansible/templates/server.xml
@@ -0,0 +1,145 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!-- Note:  A "Server" is not itself a "Container", so you may not
+     define subcomponents such as "Valves" at this level.
+     Documentation at /docs/config/server.html
+ -->
+<Server address="127.0.0.1" port="8005" shutdown="SHUTDOWN">
+  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
+  <!-- Security listener. Documentation at /docs/config/listeners.html
+  <Listener className="org.apache.catalina.security.SecurityListener" />
+  -->
+  <!--APR library loader. Documentation at /docs/apr.html -->
+  <!--
+  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
+  -->
+  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
+  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
+  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
+  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
+
+  <!-- Global JNDI resources
+       Documentation at /docs/jndi-resources-howto.html
+  -->
+  <GlobalNamingResources>
+    <!-- Editable user database that can also be used by
+         UserDatabaseRealm to authenticate users
+    -->
+    <Resource name="UserDatabase" auth="Container"
+              type="org.apache.catalina.UserDatabase"
+              description="User database that can be updated and saved"
+              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
+              pathname="conf/tomcat-users.xml" />
+  </GlobalNamingResources>
+
+  <!-- A "Service" is a collection of one or more "Connectors" that share
+       a single "Container" Note:  A "Service" is not itself a "Container",
+       so you may not define subcomponents such as "Valves" at this level.
+       Documentation at /docs/config/service.html
+   -->
+  <Service name="Catalina">
+
+    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
+    <!--
+    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
+        maxThreads="150" minSpareThreads="4"/>
+    -->
+
+
+    <!-- A "Connector" represents an endpoint by which requests are received
+         and responses are returned. Documentation at :
+         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
+         Java AJP  Connector: /docs/config/ajp.html
+         APR (HTTP/AJP) Connector: /docs/apr.html
+         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
+    -->
+    <Connector address="127.0.0.1" port="8080" protocol="HTTP/1.1"
+               connectionTimeout="20000"
+               URIEncoding="UTF-8"
+               redirectPort="8443" />
+    <!-- A "Connector" using the shared thread pool-->
+    <!--
+    <Connector executor="tomcatThreadPool"
+               address="127.0.0.1" port="8080" protocol="HTTP/1.1"
+               connectionTimeout="20000"
+               redirectPort="8443" />
+    -->
+    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
+         This connector uses the NIO implementation that requires the JSSE
+         style configuration. When using the APR/native implementation, the
+         OpenSSL style configuration is required as described in the APR/native
+         documentation -->
+    <!--
+    <Connector address="127.0.0.1" port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
+               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
+               clientAuth="false" sslProtocol="TLS" />
+    -->
+
+    <!-- Define an AJP 1.3 Connector on port 8009 -->
+    <Connector address="127.0.0.1" port="8009" protocol="AJP/1.3" redirectPort="8443" />
+
+
+    <!-- An Engine represents the entry point (within Catalina) that processes
+         every request.  The Engine implementation for Tomcat stand alone
+         analyzes the HTTP headers included with the request, and passes them
+         on to the appropriate Host (virtual host).
+         Documentation at /docs/config/engine.html -->
+
+    <!-- You should set jvmRoute to support load-balancing via AJP ie :
+    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
+    -->
+    <Engine name="Catalina" defaultHost="localhost">
+
+      <!--For clustering, please take a look at documentation at:
+          /docs/cluster-howto.html  (simple how to)
+          /docs/config/cluster.html (reference documentation) -->
+      <!--
+      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
+      -->
+
+      <!-- Use the LockOutRealm to prevent attempts to guess user passwords
+           via a brute-force attack -->
+      <Realm className="org.apache.catalina.realm.LockOutRealm">
+        <!-- This Realm uses the UserDatabase configured in the global JNDI
+             resources under the key "UserDatabase".  Any edits
+             that are performed against this UserDatabase are immediately
+             available for use by the Realm.  -->
+        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
+               resourceName="UserDatabase"/>
+      </Realm>
+
+      <Host name="localhost"  appBase="webapps"
+            unpackWARs="true" autoDeploy="true">
+
+        <!-- SingleSignOn valve, share authentication between web applications
+             Documentation at: /docs/config/valve.html -->
+        <!--
+        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
+        -->
+
+        <!-- Access log processes all example.
+             Documentation at: /docs/config/valve.html
+             Note: The pattern used is equivalent to using pattern="common" -->
+        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
+               prefix="localhost_access_log" suffix=".txt"
+               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
+
+      </Host>
+    </Engine>
+  </Service>
+</Server>
diff --git a/tools/scripts/ansible/templates/users.j2 b/tools/scripts/ansible/templates/users.j2
new file mode 100644
index 0000000..11496eb
--- /dev/null
+++ b/tools/scripts/ansible/templates/users.j2
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tomcat-users xmlns="http://tomcat.apache.org/xml"
+              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
+              version="1.0">
+<!-- user for deploying cldr-apps -->
+<user username="surveytooldeploy" password="{{ surveytooldeploy.password }}" roles="standard,manager-script" />
+</tomcat-users>
\ No newline at end of file
diff --git a/tools/scripts/ansible/test-local-vars/local.yml b/tools/scripts/ansible/test-local-vars/local.yml
new file mode 100644
index 0000000..22004a4
--- /dev/null
+++ b/tools/scripts/ansible/test-local-vars/local.yml
@@ -0,0 +1,24 @@
+# these are used for CI testing
+# and, they also serve as an example of how to
+# configure local-vars/local.yml
+
+cldradmin_pw: hunter46 # needs to match cldradmin pw below
+mysql_users:
+  # this is the account used by the survey tool itself
+  - name: surveytool
+    host: localhost
+    password: hunter42
+    priv: 'cldrdb.*:ALL'
+  # this is the account used for administrative tasks
+  - name: cldradmin
+    password: hunter46
+    priv: 'cldrdb.*:ALL/*.*:PROCESS'
+    append_privs: yes
+# this is the account used for deployment
+surveytooldeploy:
+  password: hunter43
+  vap: hunter44
+  testpw: hunter45
+  oldversion: 36
+  newversion: 37
+  key: ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJ5TcIs3HNzv6PIlkJVifUTaWj8CEJmLngvE45F/sL4+oHdOSBHyG/rU04psIuvDjukrQY8a0ZhohGkpcwl1WIY= dummy value just for test
diff --git a/tools/scripts/ansible/upgrade-playbook.yml b/tools/scripts/ansible/upgrade-playbook.yml
new file mode 100644
index 0000000..859e857
--- /dev/null
+++ b/tools/scripts/ansible/upgrade-playbook.yml
@@ -0,0 +1,7 @@
+# A playbook for upgrading packages
+- hosts: all
+  become: yes
+  tasks:
+  - name: Update all packages to the latest version
+    apt:
+      upgrade: dist
diff --git a/tools/scripts/ansible/vars/main.yml b/tools/scripts/ansible/vars/main.yml
new file mode 100644
index 0000000..2655aa3
--- /dev/null
+++ b/tools/scripts/ansible/vars/main.yml
@@ -0,0 +1,11 @@
+cldr_database_name: cldrdb
+cldr_db_backup_host: corp.unicode.org
+cldr_db_backup_user: cldrbackup
+cldr_db_backup_destination: "{{ cldr_db_backup_host }}:/home/users/{{ cldr_db_backup_user }}"
+mysql_databases:
+  - name: "{{ cldr_database_name }}"
+    encoding: latin1
+    collation: latin1_bin
+mysql_enabled_on_startup: true
+mysql_bind_address: localhost
+ansible_python_interpreter: python3
diff --git a/tools/st-prom-exporter/.gitignore b/tools/st-prom-exporter/.gitignore
new file mode 100644
index 0000000..c01727e
--- /dev/null
+++ b/tools/st-prom-exporter/.gitignore
@@ -0,0 +1,2 @@
+/node_modules
+/config.json
diff --git a/tools/st-prom-exporter/README.md b/tools/st-prom-exporter/README.md
new file mode 100644
index 0000000..086ef38
--- /dev/null
+++ b/tools/st-prom-exporter/README.md
@@ -0,0 +1,32 @@
+# Prom exporter for SurveyTool
+
+What is this? An exporter for <https://prometheus.io> that reads from the
+Survey Tool.
+
+## Config/Installation
+
+1. `npm i`
+
+2. setup `config.json` as below:
+
+```json
+{
+    "instances": {
+        "cldr-smoke.unicode.org": "https://cldr-smoke.unicode.org/cldr-apps/SurveyAjax?what=status",
+        "st.unicode.org": "https://st.unicode.org/cldr-apps/SurveyAjax?what=status"
+    },
+    "port": 9099
+}
+```
+
+3. `node index.js`
+
+Now, the exporter is listening on port 9099 and re-exporting ST metrics as Prometheus metrics.
+
+## License and Copyright
+
+©2020 Unicode, Inc. All Rights Reserved.
+
+For license and copyright see
+https://www.unicode.org/copyright.html
+or [../../unicode-license.txt](../../unicode-license.txt)
\ No newline at end of file
diff --git a/tools/st-prom-exporter/index.js b/tools/st-prom-exporter/index.js
new file mode 100644
index 0000000..d37c24d
--- /dev/null
+++ b/tools/st-prom-exporter/index.js
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2929, Unicode, Inc.
+ * For terms of use, see http://www.unicode.org/terms_of_use.html
+ */
+
+const express = require('express');
+const process = require('process');
+const server = express();
+const client = require('prom-client');
+const bent = require('bent');
+const getJson = bent('json');
+const config = require('./config.json');
+const {register} = client; // global registry
+
+const items = {
+  responses: new client.Counter({
+    name: 'surveytool_exporter_responses',
+    help: 'Number of pages served by this exporter'
+  }),
+  oks: new client.Counter({
+    name: 'surveytool_exporter_oks',
+    help: 'Number of OK fetches',
+    labelNames: ['instance']
+  }),
+  fails: new client.Counter({
+    name: 'surveytool_exporter_fails',
+    help: 'Number of failed fetches',
+    labelNames: ['instance']
+  }),
+  ok: new client.Gauge({
+    name: 'surveytool_ok',
+    help: '1 if the surveytool is ok, otherwise 0',
+    labelNames: ['instance']
+  }),
+  isSetup: new client.Gauge({
+    name: 'surveytool_setup',
+    help: '1 if the surveytool is setup, otherwise 0',
+    labelNames: ['instance']
+  }),
+  isBusted: new client.Gauge({
+    name: 'surveytool_busted',
+    help: '1 if the surveytool is busted, otherwise 0',
+    labelNames: ['instance'/*, 'err'*/]
+  }),
+  fetchTime: new client.Gauge({
+    name: 'surveytool_fetchTime',
+    help: 'time of successful fetch',
+    labelNames: ['instance']
+  }),
+  fetchErr: new client.Gauge({
+    name: 'surveytool_fetchErr',
+    help: 'error code on failed fetch, or 200',
+    labelNames: ['instance'/*, 'err'*/]
+  }),
+  pages: new client.Gauge({
+    name: 'surveytool_pages',
+    help: 'page count',
+    labelNames: ['instance']
+  }),
+  users: new client.Gauge({
+    name: 'surveytool_users',
+    help: 'user count',
+    labelNames: ['instance']
+  }),
+  stamp: new client.Gauge({
+    name: 'surveytool_stamp',
+    help: 'survey running stamp',
+    labelNames: ['instance' /*,
+  'phase', 'sysprocs', 'environment', 'currev', 'newVersion'*/]
+  }),
+  memtotal: new client.Gauge({
+    name: 'surveytool_memtotal',
+    help: 'total memory in process',
+    labelNames: ['instance']
+  }),
+  memfree: new client.Gauge({
+    name: 'surveytool_memfree',
+    help: 'total free memory',
+    labelNames: ['instance']
+  }),
+  dbused: new client.Gauge({
+    name: 'surveytool_dbused',
+    help: 'db queries used',
+    labelNames: ['instance']
+  }),
+  sysload: new client.Gauge({
+    name: 'surveytool_sysload',
+    help: 'system load, if available',
+    labelNames: ['instance']
+  }),
+};
+
+async function update(e) {
+  const [instance, url] = e;
+  try {
+    const res = await getJson(url);
+    items.oks.inc({instance});
+    items.fetchErr.set({ instance }, 200);
+    items.fetchTime.set({ instance }, new Date().getTime()/1000);
+    items.ok.set({instance}, Number(res.SurveyOK));
+    items.isSetup.set({instance}, Number(res.isSetup));
+    if(res.status) {
+      const{phase, memtotal, sysprocs, isBusted, isUnofficial, lockOut,
+        users, uptime, memfree, environment, pages, specialHeader, currev,
+        dbopen, surveyRunningStamp, guests, dbused,sysload, isSetup, newVersion} = res.status;
+        items.pages.set({instance}, Number(pages));
+        items.users.set({instance}, Number(users));
+        items.memtotal.set({instance}, Number(memtotal));
+        items.memfree.set({instance}, Number(memfree));
+        items.dbused.set({instance}, Number(dbused));
+        items.sysload.set({instance}, Number(sysload));
+        items.stamp.set({instance /*,
+        phase, sysprocs, environment, currev, newVersion*/},
+          surveyRunningStamp);
+        if(isBusted) {
+          items.isBusted.set({instance/*, err: isBusted*/}, Number(1));
+        } else {
+          items.isBusted.set({instance/*, err: (res.err || '')*/}, Number(res.isBusted));
+        }
+    } else {
+      items.isBusted.set({instance/*, err: (res.err || '')*/}, Number(res.isBusted));
+    }
+  } catch(ex) {
+    items.fails.inc({instance});
+    items.fetchErr.set({ instance /*, err: ex.toString()*/ }, 999);
+  }
+}
+
+async function updateAll() {
+  return Promise.all(Object.entries(config.instances)
+    .map(e => update(e)));
+}
+
+server.get('/metrics', async (req, res) => {
+  items.responses.inc();
+  res.contentType(register.contentType);
+  await updateAll();
+  res.end(register.metrics());
+});
+
+const port = process.env.PORT || config.port || 3000;
+
+server.listen(port, () => {
+  console.log('ST exporter listening on port ' + port);
+});
\ No newline at end of file
diff --git a/tools/st-prom-exporter/package-lock.json b/tools/st-prom-exporter/package-lock.json
new file mode 100644
index 0000000..34c7eaf
--- /dev/null
+++ b/tools/st-prom-exporter/package-lock.json
@@ -0,0 +1,420 @@
+{
+  "name": "@unicode-org/st-prom-exporter",
+  "version": "1.0.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "accepts": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+      "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+      "requires": {
+        "mime-types": "~2.1.24",
+        "negotiator": "0.6.2"
+      }
+    },
+    "array-flatten": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+      "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+    },
+    "bent": {
+      "version": "7.3.10",
+      "resolved": "https://registry.npmjs.org/bent/-/bent-7.3.10.tgz",
+      "integrity": "sha512-X2P2nGRWejGn6IjJfL4usOuAVMng1DdyuRhXLGOcUvEblBcLZenrSjlkgS8ob1s3tbq3mo1FDxKhCRNvcf0y0Q==",
+      "requires": {
+        "bytesish": "^0.4.1",
+        "caseless": "~0.12.0",
+        "is-stream": "^2.0.0"
+      }
+    },
+    "bintrees": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.1.tgz",
+      "integrity": "sha1-DmVcm5wkNeqraL9AJyJtK1WjRSQ="
+    },
+    "body-parser": {
+      "version": "1.19.0",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+      "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+      "requires": {
+        "bytes": "3.1.0",
+        "content-type": "~1.0.4",
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "http-errors": "1.7.2",
+        "iconv-lite": "0.4.24",
+        "on-finished": "~2.3.0",
+        "qs": "6.7.0",
+        "raw-body": "2.4.0",
+        "type-is": "~1.6.17"
+      }
+    },
+    "bytes": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+      "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+    },
+    "bytesish": {
+      "version": "0.4.3",
+      "resolved": "https://registry.npmjs.org/bytesish/-/bytesish-0.4.3.tgz",
+      "integrity": "sha512-OuwahLpcvvYfFnxZL0E/Gx6D7U2A72JM8cXL+5uiiZP/x84B/arG5kL8QfRLCLKb/Ttp1Jk2bPDLeltP96dtbw=="
+    },
+    "caseless": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+    },
+    "content-disposition": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+      "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+      "requires": {
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "content-type": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+      "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+    },
+    "cookie": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+      "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
+    },
+    "cookie-signature": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+    },
+    "debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "requires": {
+        "ms": "2.0.0"
+      }
+    },
+    "depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+    },
+    "destroy": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+    },
+    "ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+    },
+    "encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+    },
+    "escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+    },
+    "etag": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+    },
+    "express": {
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+      "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+      "requires": {
+        "accepts": "~1.3.7",
+        "array-flatten": "1.1.1",
+        "body-parser": "1.19.0",
+        "content-disposition": "0.5.3",
+        "content-type": "~1.0.4",
+        "cookie": "0.4.0",
+        "cookie-signature": "1.0.6",
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "finalhandler": "~1.1.2",
+        "fresh": "0.5.2",
+        "merge-descriptors": "1.0.1",
+        "methods": "~1.1.2",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.3",
+        "path-to-regexp": "0.1.7",
+        "proxy-addr": "~2.0.5",
+        "qs": "6.7.0",
+        "range-parser": "~1.2.1",
+        "safe-buffer": "5.1.2",
+        "send": "0.17.1",
+        "serve-static": "1.14.1",
+        "setprototypeof": "1.1.1",
+        "statuses": "~1.5.0",
+        "type-is": "~1.6.18",
+        "utils-merge": "1.0.1",
+        "vary": "~1.1.2"
+      }
+    },
+    "finalhandler": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+      "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+      "requires": {
+        "debug": "2.6.9",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.3",
+        "statuses": "~1.5.0",
+        "unpipe": "~1.0.0"
+      }
+    },
+    "forwarded": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+      "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+    },
+    "fresh": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+    },
+    "http-errors": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+      "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+      "requires": {
+        "depd": "~1.1.2",
+        "inherits": "2.0.3",
+        "setprototypeof": "1.1.1",
+        "statuses": ">= 1.5.0 < 2",
+        "toidentifier": "1.0.0"
+      }
+    },
+    "iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "requires": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      }
+    },
+    "inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+    },
+    "ipaddr.js": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
+    },
+    "is-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+      "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="
+    },
+    "media-typer": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+    },
+    "merge-descriptors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+      "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+    },
+    "methods": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+    },
+    "mime": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+    },
+    "mime-db": {
+      "version": "1.44.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+      "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
+    },
+    "mime-types": {
+      "version": "2.1.27",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+      "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+      "requires": {
+        "mime-db": "1.44.0"
+      }
+    },
+    "ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+    },
+    "negotiator": {
+      "version": "0.6.2",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+      "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
+    },
+    "on-finished": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+      "requires": {
+        "ee-first": "1.1.1"
+      }
+    },
+    "parseurl": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
+    },
+    "path-to-regexp": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+      "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+    },
+    "prom-client": {
+      "version": "12.0.0",
+      "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-12.0.0.tgz",
+      "integrity": "sha512-JbzzHnw0VDwCvoqf8y1WDtq4wSBAbthMB1pcVI/0lzdqHGJI3KBJDXle70XK+c7Iv93Gihqo0a5LlOn+g8+DrQ==",
+      "requires": {
+        "tdigest": "^0.1.1"
+      }
+    },
+    "proxy-addr": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
+      "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
+      "requires": {
+        "forwarded": "~0.1.2",
+        "ipaddr.js": "1.9.1"
+      }
+    },
+    "qs": {
+      "version": "6.7.0",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+      "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+    },
+    "range-parser": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
+    },
+    "raw-body": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+      "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+      "requires": {
+        "bytes": "3.1.0",
+        "http-errors": "1.7.2",
+        "iconv-lite": "0.4.24",
+        "unpipe": "1.0.0"
+      }
+    },
+    "safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+    },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+    },
+    "send": {
+      "version": "0.17.1",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+      "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+      "requires": {
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "destroy": "~1.0.4",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "~1.7.2",
+        "mime": "1.6.0",
+        "ms": "2.1.1",
+        "on-finished": "~2.3.0",
+        "range-parser": "~1.2.1",
+        "statuses": "~1.5.0"
+      },
+      "dependencies": {
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
+        }
+      }
+    },
+    "serve-static": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+      "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+      "requires": {
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
+        "send": "0.17.1"
+      }
+    },
+    "setprototypeof": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+      "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+    },
+    "statuses": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+      "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+    },
+    "tdigest": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.1.tgz",
+      "integrity": "sha1-Ljyyw56kSeVdHmzZEReszKRYgCE=",
+      "requires": {
+        "bintrees": "1.0.1"
+      }
+    },
+    "toidentifier": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+      "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
+    },
+    "type-is": {
+      "version": "1.6.18",
+      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+      "requires": {
+        "media-typer": "0.3.0",
+        "mime-types": "~2.1.24"
+      }
+    },
+    "unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+    },
+    "utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+    },
+    "vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+    }
+  }
+}
diff --git a/tools/st-prom-exporter/package.json b/tools/st-prom-exporter/package.json
new file mode 100644
index 0000000..57b2379
--- /dev/null
+++ b/tools/st-prom-exporter/package.json
@@ -0,0 +1,22 @@
+{
+  "name": "@unicode-org/st-prom-exporter",
+  "version": "1.0.0",
+  "description": "Reads Survey Tool status JSON and exports as Prometheus",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1",
+    "start": "node index.js"
+  },
+  "keywords": [],
+  "author": "Steven R. Loomis <srl295@gmail.com>",
+  "license": "Unicode-DFS-2016",
+  "dependencies": {
+    "bent": "^7.3.10",
+    "express": "^4.17.1",
+    "prom-client": "^12.0.0"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/unicode-org/cldr.git"
+  }
+}
