Snap for 10453563 from a7203a368f3ae6eeb1ea563c2d47fed8f815dca8 to mainline-documentsui-release

Change-Id: I8a9639525ba5b47c0a0dd0c89452d3719e87ab79
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json
index 3d660d5..734f7be 100644
--- a/.cargo_vcs_info.json
+++ b/.cargo_vcs_info.json
@@ -1,5 +1,6 @@
 {
   "git": {
-    "sha1": "3ea9e3eca7b762c30fbc09205522e3935cd70052"
-  }
-}
+    "sha1": "72d482f911c4057f9a31f7f434dfe27c929a8913"
+  },
+  "path_in_vcs": "regex-syntax"
+}
\ No newline at end of file
diff --git a/Android.bp b/Android.bp
index c2dad87..d04c7c4 100644
--- a/Android.bp
+++ b/Android.bp
@@ -43,7 +43,7 @@
     host_supported: true,
     crate_name: "regex_syntax",
     cargo_env_compat: true,
-    cargo_pkg_version: "0.6.25",
+    cargo_pkg_version: "0.6.29",
     srcs: ["src/lib.rs"],
     edition: "2018",
     features: [
@@ -62,6 +62,8 @@
         "com.android.compos",
         "com.android.virt",
     ],
+    product_available: true,
+    vendor_available: true,
 }
 
 rust_test {
@@ -69,7 +71,7 @@
     host_supported: true,
     crate_name: "regex_syntax",
     cargo_env_compat: true,
-    cargo_pkg_version: "0.6.25",
+    cargo_pkg_version: "0.6.29",
     srcs: ["src/lib.rs"],
     test_suites: ["general-tests"],
     auto_gen_config: true,
diff --git a/Cargo.toml b/Cargo.toml
index ca93a6e..72e9856 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -3,27 +3,35 @@
 # When uploading crates to the registry Cargo will automatically
 # "normalize" Cargo.toml files for maximal compatibility
 # with all versions of Cargo and also rewrite `path` dependencies
-# to registry (e.g., crates.io) dependencies
+# to registry (e.g., crates.io) dependencies.
 #
-# If you believe there's an error in this file please file an
-# issue against the rust-lang/cargo repository. If you're
-# editing this file be aware that the upstream Cargo.toml
-# will likely look very different (and much more reasonable)
+# If you are reading this file be aware that the original Cargo.toml
+# will likely look very different (and much more reasonable).
+# See Cargo.toml.orig for the original contents.
 
 [package]
 edition = "2018"
 name = "regex-syntax"
-version = "0.6.25"
+version = "0.6.29"
 authors = ["The Rust Project Developers"]
 description = "A regular expression parser."
 homepage = "https://github.com/rust-lang/regex"
 documentation = "https://docs.rs/regex-syntax"
-license = "MIT/Apache-2.0"
+readme = "README.md"
+license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-lang/regex"
 
 [features]
 default = ["unicode"]
-unicode = ["unicode-age", "unicode-bool", "unicode-case", "unicode-gencat", "unicode-perl", "unicode-script", "unicode-segment"]
+unicode = [
+    "unicode-age",
+    "unicode-bool",
+    "unicode-case",
+    "unicode-gencat",
+    "unicode-perl",
+    "unicode-script",
+    "unicode-segment",
+]
 unicode-age = []
 unicode-bool = []
 unicode-case = []
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
index 1359aa1..be9aeb5 100644
--- a/Cargo.toml.orig
+++ b/Cargo.toml.orig
@@ -1,8 +1,8 @@
 [package]
 name = "regex-syntax"
-version = "0.6.25"  #:version
+version = "0.6.29"  #:version
 authors = ["The Rust Project Developers"]
-license = "MIT/Apache-2.0"
+license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-lang/regex"
 documentation = "https://docs.rs/regex-syntax"
 homepage = "https://github.com/rust-lang/regex"
diff --git a/METADATA b/METADATA
index b0811ec..5af87a5 100644
--- a/METADATA
+++ b/METADATA
@@ -1,3 +1,7 @@
+# This project was upgraded with external_updater.
+# Usage: tools/external_updater/updater.sh update rust/crates/regex-syntax
+# For more info, check https://cs.android.com/android/platform/superproject/+/master:tools/external_updater/README.md
+
 name: "regex-syntax"
 description: "A regular expression parser."
 third_party {
@@ -7,13 +11,13 @@
   }
   url {
     type: ARCHIVE
-    value: "https://static.crates.io/crates/regex-syntax/regex-syntax-0.6.25.crate"
+    value: "https://static.crates.io/crates/regex-syntax/regex-syntax-0.6.29.crate"
   }
-  version: "0.6.25"
+  version: "0.6.29"
   license_type: NOTICE
   last_upgrade_date {
-    year: 2021
-    month: 5
-    day: 19
+    year: 2023
+    month: 4
+    day: 3
   }
 }
diff --git a/README.md b/README.md
index e904601..592f842 100644
--- a/README.md
+++ b/README.md
@@ -2,9 +2,8 @@
 ============
 This crate provides a robust regular expression parser.
 
-[![Build status](https://travis-ci.com/rust-lang/regex.svg?branch=master)](https://travis-ci.com/rust-lang/regex)
-[![Build status](https://ci.appveyor.com/api/projects/status/github/rust-lang/regex?svg=true)](https://ci.appveyor.com/project/rust-lang-libs/regex)
-[![](https://meritbadge.herokuapp.com/regex-syntax)](https://crates.io/crates/regex-syntax)
+[![Build status](https://github.com/rust-lang/regex/workflows/ci/badge.svg)](https://github.com/rust-lang/regex/actions)
+[![Crates.io](https://img.shields.io/crates/v/regex-syntax.svg)](https://crates.io/crates/regex-syntax)
 [![Rust](https://img.shields.io/badge/rust-1.28.0%2B-blue.svg?maxAge=3600)](https://github.com/rust-lang/regex)
 
 
@@ -53,7 +52,7 @@
 
 The standard for using `unsafe` in this crate is extremely high because this
 crate is intended to be reasonably safe to use with user supplied regular
-expressions. Therefore, while their may be bugs in the regex parser itself,
+expressions. Therefore, while there may be bugs in the regex parser itself,
 they should _never_ result in memory unsafety unless there is either a bug
 in the compiler or the standard library. (Since `regex-syntax` has zero
 dependencies.)
diff --git a/TEST_MAPPING b/TEST_MAPPING
index d661318..afa287b 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -5,6 +5,9 @@
       "path": "external/rust/crates/base64"
     },
     {
+      "path": "external/rust/crates/clap/2.33.3"
+    },
+    {
       "path": "external/rust/crates/libsqlite3-sys"
     },
     {
@@ -21,34 +24,28 @@
     },
     {
       "path": "external/rust/crates/unicode-xid"
+    },
+    {
+      "path": "packages/modules/Virtualization/virtualizationmanager"
+    },
+    {
+      "path": "system/keymint/hal"
+    },
+    {
+      "path": "system/security/keystore2"
+    },
+    {
+      "path": "system/security/keystore2/legacykeystore"
     }
   ],
   "presubmit": [
     {
-      "name": "keystore2_test"
-    },
-    {
-      "name": "legacykeystore_test"
-    },
-    {
       "name": "regex-syntax_test_src_lib"
-    },
-    {
-      "name": "virtualizationservice_device_test"
     }
   ],
   "presubmit-rust": [
     {
-      "name": "keystore2_test"
-    },
-    {
-      "name": "legacykeystore_test"
-    },
-    {
       "name": "regex-syntax_test_src_lib"
-    },
-    {
-      "name": "virtualizationservice_device_test"
     }
   ]
 }
diff --git a/cargo2android.json b/cargo2android.json
index 0e54308..bef74ca 100644
--- a/cargo2android.json
+++ b/cargo2android.json
@@ -7,5 +7,6 @@
   "dependencies": true,
   "device": true,
   "run": true,
-  "tests": true
+  "tests": true,
+  "vendor-available": true
 }
diff --git a/src/ast/mod.rs b/src/ast/mod.rs
index 9b9127b..9db9afa 100644
--- a/src/ast/mod.rs
+++ b/src/ast/mod.rs
@@ -15,7 +15,7 @@
 /// An error that occurred while parsing a regular expression into an abstract
 /// syntax tree.
 ///
-/// Note that note all ASTs represents a valid regular expression. For example,
+/// Note that not all ASTs represents a valid regular expression. For example,
 /// an AST is constructed without error for `\p{Quux}`, but `Quux` is not a
 /// valid Unicode property name. That particular error is reported when
 /// translating an AST to the high-level intermediate representation (`HIR`).
@@ -385,7 +385,7 @@
 impl Span {
     /// Create a new span with the given positions.
     pub fn new(start: Position, end: Position) -> Span {
-        Span { start: start, end: end }
+        Span { start, end }
     }
 
     /// Create a new span using the given position as the start and end.
@@ -427,7 +427,7 @@
     ///
     /// `column` is the approximate column number, starting at `1`.
     pub fn new(offset: usize, line: usize, column: usize) -> Position {
-        Position { offset: offset, line: line, column: column }
+        Position { offset, line, column }
     }
 }
 
@@ -1492,8 +1492,19 @@
 
         // We run our test on a thread with a small stack size so we can
         // force the issue more easily.
+        //
+        // NOTE(2023-03-21): It turns out that some platforms (like FreeBSD)
+        // will just barf with very small stack sizes. So we bump this up a bit
+        // to give more room to breath. When I did this, I confirmed that if
+        // I remove the custom `Drop` impl for `Ast`, then this test does
+        // indeed still fail with a stack overflow. (At the time of writing, I
+        // had to bump it all the way up to 32K before the test would pass even
+        // without the custom `Drop` impl. So 16K seems like a safe number
+        // here.)
+        //
+        // See: https://github.com/rust-lang/regex/issues/967
         thread::Builder::new()
-            .stack_size(1 << 10)
+            .stack_size(16 << 10)
             .spawn(run)
             .unwrap()
             .join()
diff --git a/src/ast/parse.rs b/src/ast/parse.rs
index e62a7c2..6e9c9ac 100644
--- a/src/ast/parse.rs
+++ b/src/ast/parse.rs
@@ -167,7 +167,7 @@
     /// they should impose a limit on the length, in bytes, of the concrete
     /// pattern string. In particular, this is viable since this parser
     /// implementation will limit itself to heap space proportional to the
-    /// lenth of the pattern string.
+    /// length of the pattern string.
     ///
     /// Note that a nest limit of `0` will return a nest limit error for most
     /// patterns but not all. For example, a nest limit of `0` permits `a` but
@@ -202,7 +202,7 @@
 
     /// Enable verbose mode in the regular expression.
     ///
-    /// When enabled, verbose mode permits insigificant whitespace in many
+    /// When enabled, verbose mode permits insignificant whitespace in many
     /// places in the regular expression, as well as comments. Comments are
     /// started using `#` and continue until the end of the line.
     ///
@@ -236,7 +236,7 @@
     /// supported.
     octal: bool,
     /// The initial setting for `ignore_whitespace` as provided by
-    /// Th`ParserBuilder`. is is used when reseting the parser's state.
+    /// `ParserBuilder`. It is used when resetting the parser's state.
     initial_ignore_whitespace: bool,
     /// Whether whitespace should be ignored. When enabled, comments are
     /// also permitted.
@@ -366,7 +366,7 @@
 impl<'s, P: Borrow<Parser>> ParserI<'s, P> {
     /// Build an internal parser from a parser configuration and a pattern.
     fn new(parser: P, pattern: &'s str) -> ParserI<'s, P> {
-        ParserI { parser: parser, pattern: pattern }
+        ParserI { parser, pattern }
     }
 
     /// Return a reference to the parser state.
@@ -381,11 +381,7 @@
 
     /// Create a new error with the given span and error type.
     fn error(&self, span: Span, kind: ast::ErrorKind) -> ast::Error {
-        ast::Error {
-            kind: kind,
-            pattern: self.pattern().to_string(),
-            span: span,
-        }
+        ast::Error { kind, pattern: self.pattern().to_string(), span }
     }
 
     /// Return the current offset of the parser.
@@ -481,11 +477,7 @@
             column = column.checked_add(1).unwrap();
         }
         offset += self.char().len_utf8();
-        self.parser().pos.set(Position {
-            offset: offset,
-            line: line,
-            column: column,
-        });
+        self.parser().pos.set(Position { offset, line, column });
         self.pattern()[self.offset()..].chars().next().is_some()
     }
 
@@ -703,8 +695,8 @@
                     .unwrap_or(old_ignore_whitespace);
                 self.parser().stack_group.borrow_mut().push(
                     GroupState::Group {
-                        concat: concat,
-                        group: group,
+                        concat,
+                        group,
                         ignore_whitespace: old_ignore_whitespace,
                     },
                 );
@@ -899,12 +891,8 @@
     #[inline(never)]
     fn unclosed_class_error(&self) -> ast::Error {
         for state in self.parser().stack_class.borrow().iter().rev() {
-            match *state {
-                ClassState::Open { ref set, .. } => {
-                    return self
-                        .error(set.span, ast::ErrorKind::ClassUnclosed);
-                }
-                _ => {}
+            if let ClassState::Open { ref set, .. } = *state {
+                return self.error(set.span, ast::ErrorKind::ClassUnclosed);
             }
         }
         // We are guaranteed to have a non-empty stack with at least
@@ -950,8 +938,8 @@
         };
         let span = Span::new(lhs.span().start, rhs.span().end);
         ast::ClassSet::BinaryOp(ast::ClassSetBinaryOp {
-            span: span,
-            kind: kind,
+            span,
+            kind,
             lhs: Box::new(lhs),
             rhs: Box::new(rhs),
         })
@@ -1010,7 +998,7 @@
         let ast = self.pop_group_end(concat)?;
         NestLimiter::new(self).check(&ast)?;
         Ok(ast::WithComments {
-            ast: ast,
+            ast,
             comments: mem::replace(
                 &mut *self.parser().comments.borrow_mut(),
                 vec![],
@@ -1023,7 +1011,7 @@
     /// The given `kind` should correspond to the operator observed by the
     /// caller.
     ///
-    /// This assumes that the paser is currently positioned at the repetition
+    /// This assumes that the parser is currently positioned at the repetition
     /// operator and advances the parser to the first character after the
     /// operator. (Note that the operator may include a single additional `?`,
     /// which makes the operator ungreedy.)
@@ -1066,9 +1054,9 @@
             span: ast.span().with_end(self.pos()),
             op: ast::RepetitionOp {
                 span: Span::new(op_start, self.pos()),
-                kind: kind,
+                kind,
             },
-            greedy: greedy,
+            greedy,
             ast: Box::new(ast),
         }));
         Ok(concat)
@@ -1078,7 +1066,7 @@
     /// corresponds to the {m,n} syntax, and does not include the ?, * or +
     /// operators.
     ///
-    /// This assumes that the paser is currently positioned at the opening `{`
+    /// This assumes that the parser is currently positioned at the opening `{`
     /// and advances the parser to the first character after the operator.
     /// (Note that the operator may include a single additional `?`, which
     /// makes the operator ungreedy.)
@@ -1170,7 +1158,7 @@
                 span: op_span,
                 kind: ast::RepetitionKind::Range(range),
             },
-            greedy: greedy,
+            greedy,
             ast: Box::new(ast),
         }));
         Ok(concat)
@@ -1235,7 +1223,7 @@
                 }
                 Ok(Either::Left(ast::SetFlags {
                     span: Span { end: self.pos(), ..open_span },
-                    flags: flags,
+                    flags,
                 }))
             } else {
                 assert_eq!(char_end, ':');
@@ -1428,7 +1416,7 @@
                 let ast = Primitive::Literal(ast::Literal {
                     span: self.span_char(),
                     kind: ast::LiteralKind::Verbatim,
-                    c: c,
+                    c,
                 });
                 self.bump();
                 Ok(ast)
@@ -1494,16 +1482,16 @@
         let span = Span::new(start, self.pos());
         if is_meta_character(c) {
             return Ok(Primitive::Literal(ast::Literal {
-                span: span,
+                span,
                 kind: ast::LiteralKind::Punctuation,
-                c: c,
+                c,
             }));
         }
         let special = |kind, c| {
             Ok(Primitive::Literal(ast::Literal {
-                span: span,
+                span,
                 kind: ast::LiteralKind::Special(kind),
-                c: c,
+                c,
             }))
         };
         match c {
@@ -1517,19 +1505,19 @@
                 special(ast::SpecialLiteralKind::Space, ' ')
             }
             'A' => Ok(Primitive::Assertion(ast::Assertion {
-                span: span,
+                span,
                 kind: ast::AssertionKind::StartText,
             })),
             'z' => Ok(Primitive::Assertion(ast::Assertion {
-                span: span,
+                span,
                 kind: ast::AssertionKind::EndText,
             })),
             'b' => Ok(Primitive::Assertion(ast::Assertion {
-                span: span,
+                span,
                 kind: ast::AssertionKind::WordBoundary,
             })),
             'B' => Ok(Primitive::Assertion(ast::Assertion {
-                span: span,
+                span,
                 kind: ast::AssertionKind::NotWordBoundary,
             })),
             _ => Err(self.error(span, ast::ErrorKind::EscapeUnrecognized)),
@@ -1569,7 +1557,7 @@
         ast::Literal {
             span: Span::new(start, end),
             kind: ast::LiteralKind::Octal,
-            c: c,
+            c,
         }
     }
 
@@ -1645,7 +1633,7 @@
             Some(c) => Ok(ast::Literal {
                 span: Span::new(start, end),
                 kind: ast::LiteralKind::HexFixed(kind),
-                c: c,
+                c,
             }),
         }
     }
@@ -1700,7 +1688,7 @@
             Some(c) => Ok(ast::Literal {
                 span: Span::new(start, self.pos()),
                 kind: ast::LiteralKind::HexBrace(kind),
-                c: c,
+                c,
             }),
         }
     }
@@ -1927,7 +1915,7 @@
             }));
             if !self.bump_and_bump_space() {
                 return Err(self.error(
-                    Span::new(start, self.pos()),
+                    Span::new(start, start),
                     ast::ErrorKind::ClassUnclosed,
                 ));
             }
@@ -1949,7 +1937,7 @@
         }
         let set = ast::ClassBracketed {
             span: Span::new(start, self.pos()),
-            negated: negated,
+            negated,
             kind: ast::ClassSet::union(ast::ClassSetUnion {
                 span: Span::new(union.span.start, union.span.start),
                 items: vec![],
@@ -2026,8 +2014,8 @@
         };
         Some(ast::ClassAscii {
             span: Span::new(start, self.pos()),
-            kind: kind,
-            negated: negated,
+            kind,
+            negated,
         })
     }
 
@@ -2108,8 +2096,8 @@
         };
         Ok(ast::ClassUnicode {
             span: Span::new(start, self.pos()),
-            negated: negated,
-            kind: kind,
+            negated,
+            kind,
         })
     }
 
@@ -2130,7 +2118,7 @@
             'W' => (true, ast::ClassPerlKind::Word),
             c => panic!("expected valid Perl class but got '{}'", c),
         };
-        ast::ClassPerl { span: span, kind: kind, negated: negated }
+        ast::ClassPerl { span, kind, negated }
     }
 }
 
@@ -2146,7 +2134,7 @@
 
 impl<'p, 's, P: Borrow<Parser>> NestLimiter<'p, 's, P> {
     fn new(p: &'p ParserI<'s, P>) -> NestLimiter<'p, 's, P> {
-        NestLimiter { p: p, depth: 0 }
+        NestLimiter { p, depth: 0 }
     }
 
     #[inline(never)]
@@ -2429,18 +2417,18 @@
     /// Create a punctuation literal starting at the given position.
     fn punct_lit(c: char, span: Span) -> Ast {
         Ast::Literal(ast::Literal {
-            span: span,
+            span,
             kind: ast::LiteralKind::Punctuation,
-            c: c,
+            c,
         })
     }
 
     /// Create a verbatim literal with the given span.
     fn lit_with(c: char, span: Span) -> Ast {
         Ast::Literal(ast::Literal {
-            span: span,
+            span,
             kind: ast::LiteralKind::Verbatim,
-            c: c,
+            c,
         })
     }
 
@@ -2451,12 +2439,12 @@
 
     /// Create a concatenation with the given span.
     fn concat_with(span: Span, asts: Vec<Ast>) -> Ast {
-        Ast::Concat(ast::Concat { span: span, asts: asts })
+        Ast::Concat(ast::Concat { span, asts })
     }
 
     /// Create an alternation with the given span.
     fn alt(range: Range<usize>, asts: Vec<Ast>) -> Ast {
-        Ast::Alternation(ast::Alternation { span: span(range), asts: asts })
+        Ast::Alternation(ast::Alternation { span: span(range), asts })
     }
 
     /// Create a capturing group with the given span.
@@ -2498,7 +2486,7 @@
             span: span_range(pat, range.clone()),
             flags: ast::Flags {
                 span: span_range(pat, (range.start + 2)..(range.end - 1)),
-                items: items,
+                items,
             },
         })
     }
@@ -4208,7 +4196,7 @@
                 Ok(Primitive::Literal(ast::Literal {
                     span: span(0..2),
                     kind: ast::LiteralKind::Special(kind.clone()),
-                    c: c,
+                    c,
                 }))
             );
         }
@@ -4402,7 +4390,7 @@
                     kind: ast::LiteralKind::HexFixed(
                         ast::HexLiteralKind::UnicodeShort
                     ),
-                    c: c,
+                    c,
                 }))
             );
         }
@@ -4466,7 +4454,7 @@
                     kind: ast::LiteralKind::HexFixed(
                         ast::HexLiteralKind::UnicodeLong
                     ),
-                    c: c,
+                    c,
                 }))
             );
         }
@@ -4667,10 +4655,7 @@
     #[test]
     fn parse_set_class() {
         fn union(span: Span, items: Vec<ast::ClassSetItem>) -> ast::ClassSet {
-            ast::ClassSet::union(ast::ClassSetUnion {
-                span: span,
-                items: items,
-            })
+            ast::ClassSet::union(ast::ClassSetUnion { span, items })
         }
 
         fn intersection(
@@ -4679,7 +4664,7 @@
             rhs: ast::ClassSet,
         ) -> ast::ClassSet {
             ast::ClassSet::BinaryOp(ast::ClassSetBinaryOp {
-                span: span,
+                span,
                 kind: ast::ClassSetBinaryOpKind::Intersection,
                 lhs: Box::new(lhs),
                 rhs: Box::new(rhs),
@@ -4692,7 +4677,7 @@
             rhs: ast::ClassSet,
         ) -> ast::ClassSet {
             ast::ClassSet::BinaryOp(ast::ClassSetBinaryOp {
-                span: span,
+                span,
                 kind: ast::ClassSetBinaryOpKind::Difference,
                 lhs: Box::new(lhs),
                 rhs: Box::new(rhs),
@@ -4705,7 +4690,7 @@
             rhs: ast::ClassSet,
         ) -> ast::ClassSet {
             ast::ClassSet::BinaryOp(ast::ClassSetBinaryOp {
-                span: span,
+                span,
                 kind: ast::ClassSetBinaryOpKind::SymmetricDifference,
                 lhs: Box::new(lhs),
                 rhs: Box::new(rhs),
@@ -4734,9 +4719,9 @@
 
         fn lit(span: Span, c: char) -> ast::ClassSetItem {
             ast::ClassSetItem::Literal(ast::Literal {
-                span: span,
+                span,
                 kind: ast::LiteralKind::Verbatim,
-                c: c,
+                c,
             })
         }
 
@@ -4756,7 +4741,7 @@
                 ..span.end
             };
             ast::ClassSetItem::Range(ast::ClassSetRange {
-                span: span,
+                span,
                 start: ast::Literal {
                     span: Span { end: pos1, ..span },
                     kind: ast::LiteralKind::Verbatim,
@@ -4771,19 +4756,11 @@
         }
 
         fn alnum(span: Span, negated: bool) -> ast::ClassAscii {
-            ast::ClassAscii {
-                span: span,
-                kind: ast::ClassAsciiKind::Alnum,
-                negated: negated,
-            }
+            ast::ClassAscii { span, kind: ast::ClassAsciiKind::Alnum, negated }
         }
 
         fn lower(span: Span, negated: bool) -> ast::ClassAscii {
-            ast::ClassAscii {
-                span: span,
-                kind: ast::ClassAsciiKind::Lower,
-                negated: negated,
-            }
+            ast::ClassAscii { span, kind: ast::ClassAsciiKind::Lower, negated }
         }
 
         assert_eq!(
@@ -5515,14 +5492,23 @@
         assert_eq!(
             parser("[-").parse_set_class_open().unwrap_err(),
             TestError {
-                span: span(0..2),
+                span: span(0..0),
                 kind: ast::ErrorKind::ClassUnclosed,
             }
         );
         assert_eq!(
             parser("[--").parse_set_class_open().unwrap_err(),
             TestError {
-                span: span(0..3),
+                span: span(0..0),
+                kind: ast::ErrorKind::ClassUnclosed,
+            }
+        );
+
+        // See: https://github.com/rust-lang/regex/issues/792
+        assert_eq!(
+            parser("(?x)[-#]").parse_with_comments().unwrap_err(),
+            TestError {
+                span: span(4..4),
                 kind: ast::ErrorKind::ClassUnclosed,
             }
         );
diff --git a/src/ast/print.rs b/src/ast/print.rs
index 283ce4c..045de2e 100644
--- a/src/ast/print.rs
+++ b/src/ast/print.rs
@@ -57,17 +57,16 @@
     /// here are a `fmt::Formatter` (which is available in `fmt::Display`
     /// implementations) or a `&mut String`.
     pub fn print<W: fmt::Write>(&mut self, ast: &Ast, wtr: W) -> fmt::Result {
-        visitor::visit(ast, Writer { printer: self, wtr: wtr })
+        visitor::visit(ast, Writer { wtr })
     }
 }
 
 #[derive(Debug)]
-struct Writer<'p, W> {
-    printer: &'p mut Printer,
+struct Writer<W> {
     wtr: W,
 }
 
-impl<'p, W: fmt::Write> Visitor for Writer<'p, W> {
+impl<W: fmt::Write> Visitor for Writer<W> {
     type Output = ();
     type Err = fmt::Error;
 
@@ -153,7 +152,7 @@
     }
 }
 
-impl<'p, W: fmt::Write> Writer<'p, W> {
+impl<W: fmt::Write> Writer<W> {
     fn fmt_group_pre(&mut self, ast: &ast::Group) -> fmt::Result {
         use crate::ast::GroupKind::*;
         match ast.kind {
diff --git a/src/ast/visitor.rs b/src/ast/visitor.rs
index a0d1e7d..78ee487 100644
--- a/src/ast/visitor.rs
+++ b/src/ast/visitor.rs
@@ -388,7 +388,7 @@
                         Some(ClassFrame::Union { head: item, tail: &[] })
                     }
                     ast::ClassSet::BinaryOp(ref op) => {
-                        Some(ClassFrame::Binary { op: op })
+                        Some(ClassFrame::Binary { op })
                     }
                 }
             }
@@ -402,11 +402,9 @@
                     })
                 }
             }
-            ClassInduct::BinaryOp(op) => Some(ClassFrame::BinaryLHS {
-                op: op,
-                lhs: &op.lhs,
-                rhs: &op.rhs,
-            }),
+            ClassInduct::BinaryOp(op) => {
+                Some(ClassFrame::BinaryLHS { op, lhs: &op.lhs, rhs: &op.rhs })
+            }
             _ => None,
         }
     }
@@ -427,7 +425,7 @@
             }
             ClassFrame::Binary { .. } => None,
             ClassFrame::BinaryLHS { op, rhs, .. } => {
-                Some(ClassFrame::BinaryRHS { op: op, rhs: rhs })
+                Some(ClassFrame::BinaryRHS { op, rhs })
             }
             ClassFrame::BinaryRHS { .. } => None,
         }
diff --git a/src/error.rs b/src/error.rs
index 71cfa42..1230d2f 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -182,7 +182,7 @@
             if line_count <= 1 { 0 } else { line_count.to_string().len() };
         let mut spans = Spans {
             pattern: &fmter.pattern,
-            line_number_width: line_number_width,
+            line_number_width,
             by_line: vec![vec![]; line_count],
             multi_line: vec![],
         };
@@ -288,7 +288,7 @@
 mod tests {
     use crate::ast::parse::Parser;
 
-    fn assert_panic_message(pattern: &str, expected_msg: &str) -> () {
+    fn assert_panic_message(pattern: &str, expected_msg: &str) {
         let result = Parser::new().parse(pattern);
         match result {
             Ok(_) => {
diff --git a/src/hir/interval.rs b/src/hir/interval.rs
index cfaa2cb..56698c5 100644
--- a/src/hir/interval.rs
+++ b/src/hir/interval.rs
@@ -114,8 +114,8 @@
         // we're done.
         let drain_end = self.ranges.len();
 
-        let mut ita = (0..drain_end).into_iter();
-        let mut itb = (0..other.ranges.len()).into_iter();
+        let mut ita = 0..drain_end;
+        let mut itb = 0..other.ranges.len();
         let mut a = ita.next().unwrap();
         let mut b = itb.next().unwrap();
         loop {
diff --git a/src/hir/literal/mod.rs b/src/hir/literal/mod.rs
index 25ee88b..fbc5d3c 100644
--- a/src/hir/literal/mod.rs
+++ b/src/hir/literal/mod.rs
@@ -225,7 +225,7 @@
         if self.lits.is_empty() {
             return self.to_empty();
         }
-        let mut old: Vec<Literal> = self.lits.iter().cloned().collect();
+        let mut old = self.lits.to_vec();
         let mut new = self.to_empty();
         'OUTER: while let Some(mut candidate) = old.pop() {
             if candidate.is_empty() {
@@ -256,15 +256,13 @@
                         old.push(lit3);
                         lit2.clear();
                     }
-                } else {
-                    if let Some(i) = position(&lit2, &candidate) {
-                        lit2.cut();
-                        let mut new_candidate = candidate.clone();
-                        new_candidate.truncate(i);
-                        new_candidate.cut();
-                        old.push(new_candidate);
-                        candidate.clear();
-                    }
+                } else if let Some(i) = position(&lit2, &candidate) {
+                    lit2.cut();
+                    let mut new_candidate = candidate.clone();
+                    new_candidate.truncate(i);
+                    new_candidate.cut();
+                    old.push(new_candidate);
+                    candidate.clear();
                 }
                 // Oops, the candidate is already represented in the set.
                 if candidate.is_empty() {
@@ -735,18 +733,18 @@
     lits: &mut Literals,
     mut f: F,
 ) {
-    let (mut lits2, mut lits3) = (lits.clone(), lits.to_empty());
-    lits3.set_limit_size(lits.limit_size() / 2);
-    f(e, &mut lits3);
-
-    if lits3.is_empty() || !lits2.cross_product(&lits3) {
-        lits.cut();
-        return;
-    }
-    lits2.add(Literal::empty());
-    if !lits.union(lits2) {
-        lits.cut();
-    }
+    f(
+        &Hir::repetition(hir::Repetition {
+            kind: hir::RepetitionKind::ZeroOrMore,
+            // FIXME: Our literal extraction doesn't care about greediness.
+            // Which is partially why we're treating 'e?' as 'e*'. Namely,
+            // 'ab??' yields [Complete(ab), Complete(a)], but it should yield
+            // [Complete(a), Complete(ab)] because of the non-greediness.
+            greedy: true,
+            hir: Box::new(e.clone()),
+        }),
+        lits,
+    );
 }
 
 fn repeat_zero_or_more_literals<F: FnMut(&Hir, &mut Literals)>(
@@ -793,7 +791,7 @@
         f(
             &Hir::repetition(hir::Repetition {
                 kind: hir::RepetitionKind::ZeroOrMore,
-                greedy: greedy,
+                greedy,
                 hir: Box::new(e.clone()),
             }),
             lits,
@@ -932,12 +930,10 @@
         if c.is_whitespace() {
             let escaped = if c as u32 <= 0x7F {
                 escape_byte(c as u8)
+            } else if c as u32 <= 0xFFFF {
+                format!(r"\u{{{:04x}}}", c as u32)
             } else {
-                if c as u32 <= 0xFFFF {
-                    format!(r"\u{{{:04x}}}", c as u32)
-                } else {
-                    format!(r"\U{{{:08x}}}", c as u32)
-                }
+                format!(r"\U{{{:08x}}}", c as u32)
             };
             space_escaped.push_str(&escaped);
         } else {
@@ -1141,6 +1137,11 @@
     test_lit!(pfx_group1, prefixes, "(a)", M("a"));
     test_lit!(pfx_rep_zero_or_one1, prefixes, "a?");
     test_lit!(pfx_rep_zero_or_one2, prefixes, "(?:abc)?");
+    test_lit!(pfx_rep_zero_or_one_cat1, prefixes, "ab?", C("ab"), M("a"));
+    // FIXME: This should return [M("a"), M("ab")] because of the non-greedy
+    // repetition. As a work-around, we rewrite ab?? as ab*?, and thus we get
+    // a cut literal.
+    test_lit!(pfx_rep_zero_or_one_cat2, prefixes, "ab??", C("ab"), M("a"));
     test_lit!(pfx_rep_zero_or_more1, prefixes, "a*");
     test_lit!(pfx_rep_zero_or_more2, prefixes, "(?:abc)*");
     test_lit!(pfx_rep_one_or_more1, prefixes, "a+", C("a"));
@@ -1249,8 +1250,8 @@
         pfx_crazy1,
         prefixes,
         r"M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]",
-        C("Mo\\'am"),
-        C("Mu\\'am"),
+        C("Mo\\'"),
+        C("Mu\\'"),
         C("Moam"),
         C("Muam")
     );
diff --git a/src/hir/mod.rs b/src/hir/mod.rs
index 4969f12..156bcc2 100644
--- a/src/hir/mod.rs
+++ b/src/hir/mod.rs
@@ -243,7 +243,7 @@
         info.set_match_empty(true);
         info.set_literal(false);
         info.set_alternation_literal(false);
-        Hir { kind: HirKind::Empty, info: info }
+        Hir { kind: HirKind::Empty, info }
     }
 
     /// Creates a literal HIR expression.
@@ -268,7 +268,7 @@
         info.set_match_empty(false);
         info.set_literal(true);
         info.set_alternation_literal(true);
-        Hir { kind: HirKind::Literal(lit), info: info }
+        Hir { kind: HirKind::Literal(lit), info }
     }
 
     /// Creates a class HIR expression.
@@ -285,7 +285,7 @@
         info.set_match_empty(false);
         info.set_literal(false);
         info.set_alternation_literal(false);
-        Hir { kind: HirKind::Class(class), info: info }
+        Hir { kind: HirKind::Class(class), info }
     }
 
     /// Creates an anchor assertion HIR expression.
@@ -318,7 +318,7 @@
         if let Anchor::EndLine = anchor {
             info.set_line_anchored_end(true);
         }
-        Hir { kind: HirKind::Anchor(anchor), info: info }
+        Hir { kind: HirKind::Anchor(anchor), info }
     }
 
     /// Creates a word boundary assertion HIR expression.
@@ -334,14 +334,18 @@
         info.set_any_anchored_end(false);
         info.set_literal(false);
         info.set_alternation_literal(false);
-        // A negated word boundary matches the empty string, but a normal
-        // word boundary does not!
-        info.set_match_empty(word_boundary.is_negated());
+        // A negated word boundary matches '', so that's fine. But \b does not
+        // match \b, so why do we say it can match the empty string? Well,
+        // because, if you search for \b against 'a', it will report [0, 0) and
+        // [1, 1) as matches, and both of those matches correspond to the empty
+        // string. Thus, only *certain* empty strings match \b, which similarly
+        // applies to \B.
+        info.set_match_empty(true);
         // Negated ASCII word boundaries can match invalid UTF-8.
         if let WordBoundary::AsciiNegate = word_boundary {
             info.set_always_utf8(false);
         }
-        Hir { kind: HirKind::WordBoundary(word_boundary), info: info }
+        Hir { kind: HirKind::WordBoundary(word_boundary), info }
     }
 
     /// Creates a repetition HIR expression.
@@ -368,7 +372,7 @@
         info.set_match_empty(rep.is_match_empty() || rep.hir.is_match_empty());
         info.set_literal(false);
         info.set_alternation_literal(false);
-        Hir { kind: HirKind::Repetition(rep), info: info }
+        Hir { kind: HirKind::Repetition(rep), info }
     }
 
     /// Creates a group HIR expression.
@@ -385,7 +389,7 @@
         info.set_match_empty(group.hir.is_match_empty());
         info.set_literal(false);
         info.set_alternation_literal(false);
-        Hir { kind: HirKind::Group(group), info: info }
+        Hir { kind: HirKind::Group(group), info }
     }
 
     /// Returns the concatenation of the given expressions.
@@ -476,7 +480,7 @@
                         })
                         .any(|e| e.is_line_anchored_end()),
                 );
-                Hir { kind: HirKind::Concat(exprs), info: info }
+                Hir { kind: HirKind::Concat(exprs), info }
             }
         }
     }
@@ -538,7 +542,7 @@
                     let x = info.is_alternation_literal() && e.is_literal();
                     info.set_alternation_literal(x);
                 }
-                Hir { kind: HirKind::Alternation(exprs), info: info }
+                Hir { kind: HirKind::Alternation(exprs), info }
             }
         }
     }
@@ -661,8 +665,8 @@
     /// Return true if and only if the empty string is part of the language
     /// matched by this regular expression.
     ///
-    /// This includes `a*`, `a?b*`, `a{0}`, `()`, `()+`, `^$`, `a|b?`, `\B`,
-    /// but not `a`, `a+` or `\b`.
+    /// This includes `a*`, `a?b*`, `a{0}`, `()`, `()+`, `^$`, `a|b?`, `\b`
+    /// and `\B`, but not `a` or `a+`.
     pub fn is_match_empty(&self) -> bool {
         self.info.is_match_empty()
     }
@@ -2282,8 +2286,11 @@
 
         // We run our test on a thread with a small stack size so we can
         // force the issue more easily.
+        //
+        // NOTE(2023-03-21): See the corresponding test in 'crate::ast::tests'
+        // for context on the specific stack size chosen here.
         thread::Builder::new()
-            .stack_size(1 << 10)
+            .stack_size(16 << 10)
             .spawn(run)
             .unwrap()
             .join()
diff --git a/src/hir/print.rs b/src/hir/print.rs
index ff18c6e..b71f389 100644
--- a/src/hir/print.rs
+++ b/src/hir/print.rs
@@ -65,17 +65,16 @@
     /// here are a `fmt::Formatter` (which is available in `fmt::Display`
     /// implementations) or a `&mut String`.
     pub fn print<W: fmt::Write>(&mut self, hir: &Hir, wtr: W) -> fmt::Result {
-        visitor::visit(hir, Writer { printer: self, wtr: wtr })
+        visitor::visit(hir, Writer { wtr })
     }
 }
 
 #[derive(Debug)]
-struct Writer<'p, W> {
-    printer: &'p mut Printer,
+struct Writer<W> {
     wtr: W,
 }
 
-impl<'p, W: fmt::Write> Visitor for Writer<'p, W> {
+impl<W: fmt::Write> Visitor for Writer<W> {
     type Output = ();
     type Err = fmt::Error;
 
@@ -209,7 +208,7 @@
     }
 }
 
-impl<'p, W: fmt::Write> Writer<'p, W> {
+impl<W: fmt::Write> Writer<W> {
     fn write_literal_char(&mut self, c: char) -> fmt::Result {
         if is_meta_character(c) {
             self.wtr.write_str("\\")?;
diff --git a/src/hir/translate.rs b/src/hir/translate.rs
index 99c9493..890e160 100644
--- a/src/hir/translate.rs
+++ b/src/hir/translate.rs
@@ -434,20 +434,14 @@
             }
             ast::ClassSetItem::Ascii(ref x) => {
                 if self.flags().unicode() {
+                    let xcls = self.hir_ascii_unicode_class(x)?;
                     let mut cls = self.pop().unwrap().unwrap_class_unicode();
-                    for &(s, e) in ascii_class(&x.kind) {
-                        cls.push(hir::ClassUnicodeRange::new(s, e));
-                    }
-                    self.unicode_fold_and_negate(
-                        &x.span, x.negated, &mut cls,
-                    )?;
+                    cls.union(&xcls);
                     self.push(HirFrame::ClassUnicode(cls));
                 } else {
+                    let xcls = self.hir_ascii_byte_class(x)?;
                     let mut cls = self.pop().unwrap().unwrap_class_bytes();
-                    for &(s, e) in ascii_class(&x.kind) {
-                        cls.push(hir::ClassBytesRange::new(s as u8, e as u8));
-                    }
-                    self.bytes_fold_and_negate(&x.span, x.negated, &mut cls)?;
+                    cls.union(&xcls);
                     self.push(HirFrame::ClassBytes(cls));
                 }
             }
@@ -595,7 +589,7 @@
 impl<'t, 'p> TranslatorI<'t, 'p> {
     /// Build a new internal translator.
     fn new(trans: &'t Translator, pattern: &'p str) -> TranslatorI<'t, 'p> {
-        TranslatorI { trans: trans, pattern: pattern }
+        TranslatorI { trans, pattern }
     }
 
     /// Return a reference to the underlying translator.
@@ -615,7 +609,7 @@
 
     /// Create a new error with the given span and error type.
     fn error(&self, span: Span, kind: ErrorKind) -> Error {
-        Error { kind: kind, pattern: self.pattern.to_string(), span: span }
+        Error { kind, pattern: self.pattern.to_string(), span }
     }
 
     /// Return a copy of the active flags.
@@ -785,7 +779,7 @@
             }
             ast::GroupKind::NonCapturing(_) => hir::GroupKind::NonCapturing,
         };
-        Hir::group(hir::Group { kind: kind, hir: Box::new(expr) })
+        Hir::group(hir::Group { kind, hir: Box::new(expr) })
     }
 
     fn hir_repetition(&self, rep: &ast::Repetition, expr: Hir) -> Hir {
@@ -808,11 +802,7 @@
         };
         let greedy =
             if self.flags().swap_greed() { !rep.greedy } else { rep.greedy };
-        Hir::repetition(hir::Repetition {
-            kind: kind,
-            greedy: greedy,
-            hir: Box::new(expr),
-        })
+        Hir::repetition(hir::Repetition { kind, greedy, hir: Box::new(expr) })
     }
 
     fn hir_unicode_class(
@@ -853,6 +843,32 @@
         result
     }
 
+    fn hir_ascii_unicode_class(
+        &self,
+        ast: &ast::ClassAscii,
+    ) -> Result<hir::ClassUnicode> {
+        let mut cls = hir::ClassUnicode::new(
+            ascii_class(&ast.kind)
+                .iter()
+                .map(|&(s, e)| hir::ClassUnicodeRange::new(s, e)),
+        );
+        self.unicode_fold_and_negate(&ast.span, ast.negated, &mut cls)?;
+        Ok(cls)
+    }
+
+    fn hir_ascii_byte_class(
+        &self,
+        ast: &ast::ClassAscii,
+    ) -> Result<hir::ClassBytes> {
+        let mut cls = hir::ClassBytes::new(
+            ascii_class(&ast.kind)
+                .iter()
+                .map(|&(s, e)| hir::ClassBytesRange::new(s as u8, e as u8)),
+        );
+        self.bytes_fold_and_negate(&ast.span, ast.negated, &mut cls)?;
+        Ok(cls)
+    }
+
     fn hir_perl_unicode_class(
         &self,
         ast_class: &ast::ClassPerl,
@@ -948,7 +964,7 @@
         class: &mut hir::ClassBytes,
     ) -> Result<()> {
         // Note that we must apply case folding before negation!
-        // Consider `(?i)[^x]`. If we applied negation field, then
+        // Consider `(?i)[^x]`. If we applied negation first, then
         // the result would be the character class that matched any
         // Unicode scalar value.
         if self.flags().case_insensitive() {
@@ -1218,7 +1234,7 @@
     fn hir_quest(greedy: bool, expr: Hir) -> Hir {
         Hir::repetition(hir::Repetition {
             kind: hir::RepetitionKind::ZeroOrOne,
-            greedy: greedy,
+            greedy,
             hir: Box::new(expr),
         })
     }
@@ -1226,7 +1242,7 @@
     fn hir_star(greedy: bool, expr: Hir) -> Hir {
         Hir::repetition(hir::Repetition {
             kind: hir::RepetitionKind::ZeroOrMore,
-            greedy: greedy,
+            greedy,
             hir: Box::new(expr),
         })
     }
@@ -1234,7 +1250,7 @@
     fn hir_plus(greedy: bool, expr: Hir) -> Hir {
         Hir::repetition(hir::Repetition {
             kind: hir::RepetitionKind::OneOrMore,
-            greedy: greedy,
+            greedy,
             hir: Box::new(expr),
         })
     }
@@ -1242,7 +1258,7 @@
     fn hir_range(greedy: bool, range: hir::RepetitionRange, expr: Hir) -> Hir {
         Hir::repetition(hir::Repetition {
             kind: hir::RepetitionKind::Range(range),
-            greedy: greedy,
+            greedy,
             hir: Box::new(expr),
         })
     }
@@ -1944,6 +1960,25 @@
     }
 
     #[test]
+    fn class_ascii_multiple() {
+        // See: https://github.com/rust-lang/regex/issues/680
+        assert_eq!(
+            t("[[:alnum:][:^ascii:]]"),
+            hir_union(
+                hir_uclass(ascii_class(&ast::ClassAsciiKind::Alnum)),
+                hir_uclass(&[('\u{80}', '\u{10FFFF}')]),
+            ),
+        );
+        assert_eq!(
+            t_bytes("(?-u)[[:alnum:][:^ascii:]]"),
+            hir_union(
+                hir_bclass_from_char(ascii_class(&ast::ClassAsciiKind::Alnum)),
+                hir_bclass(&[(0x80, 0xFF)]),
+            ),
+        );
+    }
+
+    #[test]
     #[cfg(feature = "unicode-perl")]
     fn class_perl() {
         // Unicode
@@ -3100,6 +3135,9 @@
         assert!(t(r"\pL*").is_match_empty());
         assert!(t(r"a*|b").is_match_empty());
         assert!(t(r"b|a*").is_match_empty());
+        assert!(t(r"a|").is_match_empty());
+        assert!(t(r"|a").is_match_empty());
+        assert!(t(r"a||b").is_match_empty());
         assert!(t(r"a*a?(abcd)*").is_match_empty());
         assert!(t(r"^").is_match_empty());
         assert!(t(r"$").is_match_empty());
@@ -3109,6 +3147,8 @@
         assert!(t(r"\z").is_match_empty());
         assert!(t(r"\B").is_match_empty());
         assert!(t_bytes(r"(?-u)\B").is_match_empty());
+        assert!(t(r"\b").is_match_empty());
+        assert!(t(r"(?-u)\b").is_match_empty());
 
         // Negative examples.
         assert!(!t(r"a+").is_match_empty());
@@ -3118,8 +3158,6 @@
         assert!(!t(r"a{1,10}").is_match_empty());
         assert!(!t(r"b|a").is_match_empty());
         assert!(!t(r"a*a+(abcd)*").is_match_empty());
-        assert!(!t(r"\b").is_match_empty());
-        assert!(!t(r"(?-u)\b").is_match_empty());
     }
 
     #[test]
diff --git a/src/lib.rs b/src/lib.rs
index 9e9af75..1dfb38a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -195,7 +195,7 @@
     }
 }
 
-/// Returns true if the give character has significance in a regex.
+/// Returns true if the given character has significance in a regex.
 ///
 /// These are the only characters that are allowed to be escaped, with one
 /// exception: an ASCII space character may be escaped when extended mode (with
diff --git a/src/parser.rs b/src/parser.rs
index eb363ca..ded95b2 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -45,7 +45,7 @@
     /// they should impose a limit on the length, in bytes, of the concrete
     /// pattern string. In particular, this is viable since this parser
     /// implementation will limit itself to heap space proportional to the
-    /// lenth of the pattern string.
+    /// length of the pattern string.
     ///
     /// Note that a nest limit of `0` will return a nest limit error for most
     /// patterns but not all. For example, a nest limit of `0` permits `a` but
@@ -96,7 +96,7 @@
 
     /// Enable verbose mode in the regular expression.
     ///
-    /// When enabled, verbose mode permits insigificant whitespace in many
+    /// When enabled, verbose mode permits insignificant whitespace in many
     /// places in the regular expression, as well as comments. Comments are
     /// started using `#` and continue until the end of the line.
     ///
diff --git a/src/unicode.rs b/src/unicode.rs
index b894c7d..8194d7f 100644
--- a/src/unicode.rs
+++ b/src/unicode.rs
@@ -99,7 +99,7 @@
 
         Ok(CASE_FOLDING_SIMPLE
             .binary_search_by_key(&c, |&(c1, _)| c1)
-            .map(|i| CASE_FOLDING_SIMPLE[i].1.iter().map(|&c| c))
+            .map(|i| CASE_FOLDING_SIMPLE[i].1.iter().copied())
             .map_err(|i| {
                 if i >= CASE_FOLDING_SIMPLE.len() {
                     None
@@ -580,7 +580,7 @@
     fn imp(canonical_age: &str) -> Result<impl Iterator<Item = Range>> {
         use crate::unicode_tables::age;
 
-        const AGES: &'static [(&'static str, Range)] = &[
+        const AGES: &[(&str, Range)] = &[
             ("V1_1", age::V1_1),
             ("V2_0", age::V2_0),
             ("V2_1", age::V2_1),
@@ -604,13 +604,15 @@
             ("V12_0", age::V12_0),
             ("V12_1", age::V12_1),
             ("V13_0", age::V13_0),
+            ("V14_0", age::V14_0),
+            ("V15_0", age::V15_0),
         ];
         assert_eq!(AGES.len(), age::BY_NAME.len(), "ages are out of sync");
 
         let pos = AGES.iter().position(|&(age, _)| canonical_age == age);
         match pos {
             None => Err(Error::PropertyValueNotFound),
-            Some(i) => Ok(AGES[..i + 1].iter().map(|&(_, classes)| classes)),
+            Some(i) => Ok(AGES[..=i].iter().map(|&(_, classes)| classes)),
         }
     }
 
diff --git a/src/unicode_tables/age.rs b/src/unicode_tables/age.rs
index 7772919..71f4861 100644
--- a/src/unicode_tables/age.rs
+++ b/src/unicode_tables/age.rs
@@ -1,10 +1,10 @@
 // DO NOT EDIT THIS FILE. IT WAS AUTOMATICALLY GENERATED BY:
 //
-//   ucd-generate age ucd-13.0.0 --chars
+//   ucd-generate age ucd-15.0.0 --chars
 //
-// Unicode version: 13.0.0.
+// Unicode version: 15.0.0.
 //
-// ucd-generate 0.2.8 is available on crates.io.
+// ucd-generate 0.2.14 is available on crates.io.
 
 pub const BY_NAME: &'static [(&'static str, &'static [(char, char)])] = &[
     ("V10_0", V10_0),
@@ -12,6 +12,8 @@
     ("V12_0", V12_0),
     ("V12_1", V12_1),
     ("V13_0", V13_0),
+    ("V14_0", V14_0),
+    ("V15_0", V15_0),
     ("V1_1", V1_1),
     ("V2_0", V2_0),
     ("V2_1", V2_1),
@@ -203,69 +205,185 @@
 pub const V12_1: &'static [(char, char)] = &[('㋿', '㋿')];
 
 pub const V13_0: &'static [(char, char)] = &[
-    ('\u{8be}', '\u{8c7}'),
+    ('ࢾ', 'ࣇ'),
     ('\u{b55}', '\u{b55}'),
-    ('\u{d04}', '\u{d04}'),
+    ('ഄ', 'ഄ'),
     ('\u{d81}', '\u{d81}'),
     ('\u{1abf}', '\u{1ac0}'),
-    ('\u{2b97}', '\u{2b97}'),
-    ('\u{2e50}', '\u{2e52}'),
-    ('\u{31bb}', '\u{31bf}'),
-    ('\u{4db6}', '\u{4dbf}'),
-    ('\u{9ff0}', '\u{9ffc}'),
-    ('\u{a7c7}', '\u{a7ca}'),
-    ('\u{a7f5}', '\u{a7f6}'),
+    ('⮗', '⮗'),
+    ('⹐', '⹒'),
+    ('ㆻ', 'ㆿ'),
+    ('䶶', '䶿'),
+    ('鿰', '鿼'),
+    ('Ꟈ', 'ꟊ'),
+    ('Ꟶ', 'ꟶ'),
     ('\u{a82c}', '\u{a82c}'),
-    ('\u{ab68}', '\u{ab6b}'),
-    ('\u{1019c}', '\u{1019c}'),
-    ('\u{10e80}', '\u{10ea9}'),
-    ('\u{10eab}', '\u{10ead}'),
-    ('\u{10eb0}', '\u{10eb1}'),
-    ('\u{10fb0}', '\u{10fcb}'),
-    ('\u{11147}', '\u{11147}'),
-    ('\u{111ce}', '\u{111cf}'),
-    ('\u{1145a}', '\u{1145a}'),
-    ('\u{11460}', '\u{11461}'),
-    ('\u{11900}', '\u{11906}'),
-    ('\u{11909}', '\u{11909}'),
-    ('\u{1190c}', '\u{11913}'),
-    ('\u{11915}', '\u{11916}'),
-    ('\u{11918}', '\u{11935}'),
-    ('\u{11937}', '\u{11938}'),
-    ('\u{1193b}', '\u{11946}'),
-    ('\u{11950}', '\u{11959}'),
-    ('\u{11fb0}', '\u{11fb0}'),
+    ('ꭨ', '꭫'),
+    ('𐆜', '𐆜'),
+    ('𐺀', '𐺩'),
+    ('\u{10eab}', '𐺭'),
+    ('𐺰', '𐺱'),
+    ('𐾰', '𐿋'),
+    ('𑅇', '𑅇'),
+    ('𑇎', '\u{111cf}'),
+    ('𑑚', '𑑚'),
+    ('𑑠', '𑑡'),
+    ('𑤀', '𑤆'),
+    ('𑤉', '𑤉'),
+    ('𑤌', '𑤓'),
+    ('𑤕', '𑤖'),
+    ('𑤘', '𑤵'),
+    ('𑤷', '𑤸'),
+    ('\u{1193b}', '𑥆'),
+    ('𑥐', '𑥙'),
+    ('𑾰', '𑾰'),
     ('\u{16fe4}', '\u{16fe4}'),
-    ('\u{16ff0}', '\u{16ff1}'),
-    ('\u{18af3}', '\u{18cd5}'),
-    ('\u{18d00}', '\u{18d08}'),
-    ('\u{1f10d}', '\u{1f10f}'),
-    ('\u{1f16d}', '\u{1f16f}'),
-    ('\u{1f1ad}', '\u{1f1ad}'),
-    ('\u{1f6d6}', '\u{1f6d7}'),
-    ('\u{1f6fb}', '\u{1f6fc}'),
-    ('\u{1f8b0}', '\u{1f8b1}'),
-    ('\u{1f90c}', '\u{1f90c}'),
-    ('\u{1f972}', '\u{1f972}'),
-    ('\u{1f977}', '\u{1f978}'),
-    ('\u{1f9a3}', '\u{1f9a4}'),
-    ('\u{1f9ab}', '\u{1f9ad}'),
-    ('\u{1f9cb}', '\u{1f9cb}'),
-    ('\u{1fa74}', '\u{1fa74}'),
-    ('\u{1fa83}', '\u{1fa86}'),
-    ('\u{1fa96}', '\u{1faa8}'),
-    ('\u{1fab0}', '\u{1fab6}'),
-    ('\u{1fac0}', '\u{1fac2}'),
-    ('\u{1fad0}', '\u{1fad6}'),
-    ('\u{1fb00}', '\u{1fb92}'),
-    ('\u{1fb94}', '\u{1fbca}'),
-    ('\u{1fbf0}', '\u{1fbf9}'),
-    ('\u{2a6d7}', '\u{2a6dd}'),
-    ('\u{30000}', '\u{3134a}'),
+    ('𖿰', '𖿱'),
+    ('𘫳', '𘳕'),
+    ('𘴀', '𘴈'),
+    ('🄍', '🄏'),
+    ('🅭', '🅯'),
+    ('🆭', '🆭'),
+    ('🛖', '🛗'),
+    ('🛻', '🛼'),
+    ('🢰', '🢱'),
+    ('🤌', '🤌'),
+    ('🥲', '🥲'),
+    ('🥷', '🥸'),
+    ('🦣', '🦤'),
+    ('🦫', '🦭'),
+    ('🧋', '🧋'),
+    ('🩴', '🩴'),
+    ('🪃', '🪆'),
+    ('🪖', '🪨'),
+    ('🪰', '🪶'),
+    ('🫀', '🫂'),
+    ('🫐', '🫖'),
+    ('🬀', '🮒'),
+    ('🮔', '🯊'),
+    ('🯰', '🯹'),
+    ('𪛗', '𪛝'),
+    ('𰀀', '𱍊'),
+];
+
+pub const V14_0: &'static [(char, char)] = &[
+    ('؝', '؝'),
+    ('ࡰ', 'ࢎ'),
+    ('\u{890}', '\u{891}'),
+    ('\u{898}', '\u{89f}'),
+    ('ࢵ', 'ࢵ'),
+    ('ࣈ', '\u{8d2}'),
+    ('\u{c3c}', '\u{c3c}'),
+    ('ౝ', 'ౝ'),
+    ('ೝ', 'ೝ'),
+    ('ᜍ', 'ᜍ'),
+    ('᜕', '᜕'),
+    ('ᜟ', 'ᜟ'),
+    ('\u{180f}', '\u{180f}'),
+    ('\u{1ac1}', '\u{1ace}'),
+    ('ᭌ', 'ᭌ'),
+    ('᭽', '᭾'),
+    ('\u{1dfa}', '\u{1dfa}'),
+    ('⃀', '⃀'),
+    ('Ⱟ', 'Ⱟ'),
+    ('ⱟ', 'ⱟ'),
+    ('⹓', '⹝'),
+    ('鿽', '鿿'),
+    ('Ꟁ', 'ꟁ'),
+    ('Ꟑ', 'ꟑ'),
+    ('ꟓ', 'ꟓ'),
+    ('ꟕ', 'ꟙ'),
+    ('ꟲ', 'ꟴ'),
+    ('﯂', '﯂'),
+    ('﵀', '﵏'),
+    ('﷏', '﷏'),
+    ('﷾', '﷿'),
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
+    ('𐞀', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
+    ('𐽰', '𐾉'),
+    ('\u{11070}', '𑁵'),
+    ('\u{110c2}', '\u{110c2}'),
+    ('𑚹', '𑚹'),
+    ('𑝀', '𑝆'),
+    ('𑪰', '𑪿'),
+    ('𒾐', '𒿲'),
+    ('𖩰', '𖪾'),
+    ('𖫀', '𖫉'),
+    ('𚿰', '𚿳'),
+    ('𚿵', '𚿻'),
+    ('𚿽', '𚿾'),
+    ('𛄟', '𛄢'),
+    ('\u{1cf00}', '\u{1cf2d}'),
+    ('\u{1cf30}', '\u{1cf46}'),
+    ('𜽐', '𜿃'),
+    ('𝇩', '𝇪'),
+    ('𝼀', '𝼞'),
+    ('𞊐', '\u{1e2ae}'),
+    ('𞟠', '𞟦'),
+    ('𞟨', '𞟫'),
+    ('𞟭', '𞟮'),
+    ('𞟰', '𞟾'),
+    ('🛝', '🛟'),
+    ('🟰', '🟰'),
+    ('🥹', '🥹'),
+    ('🧌', '🧌'),
+    ('🩻', '🩼'),
+    ('🪩', '🪬'),
+    ('🪷', '🪺'),
+    ('🫃', '🫅'),
+    ('🫗', '🫙'),
+    ('🫠', '🫧'),
+    ('🫰', '🫶'),
+    ('𪛞', '𪛟'),
+    ('𫜵', '𫜸'),
+];
+
+pub const V15_0: &'static [(char, char)] = &[
+    ('ೳ', 'ೳ'),
+    ('\u{ece}', '\u{ece}'),
+    ('\u{10efd}', '\u{10eff}'),
+    ('𑈿', '\u{11241}'),
+    ('𑬀', '𑬉'),
+    ('\u{11f00}', '𑼐'),
+    ('𑼒', '\u{11f3a}'),
+    ('𑼾', '𑽙'),
+    ('𓐯', '𓐯'),
+    ('\u{13439}', '\u{13455}'),
+    ('𛄲', '𛄲'),
+    ('𛅕', '𛅕'),
+    ('𝋀', '𝋓'),
+    ('𝼥', '𝼪'),
+    ('𞀰', '𞁭'),
+    ('\u{1e08f}', '\u{1e08f}'),
+    ('𞓐', '𞓹'),
+    ('🛜', '🛜'),
+    ('🝴', '🝶'),
+    ('🝻', '🝿'),
+    ('🟙', '🟙'),
+    ('🩵', '🩷'),
+    ('🪇', '🪈'),
+    ('🪭', '🪯'),
+    ('🪻', '🪽'),
+    ('🪿', '🪿'),
+    ('🫎', '🫏'),
+    ('🫚', '🫛'),
+    ('🫨', '🫨'),
+    ('🫷', '🫸'),
+    ('𫜹', '𫜹'),
+    ('𱍐', '𲎯'),
 ];
 
 pub const V1_1: &'static [(char, char)] = &[
-    ('\u{0}', 'ǵ'),
+    ('\0', 'ǵ'),
     ('Ǻ', 'ȗ'),
     ('ɐ', 'ʨ'),
     ('ʰ', '˞'),
diff --git a/src/unicode_tables/case_folding_simple.rs b/src/unicode_tables/case_folding_simple.rs
index cfb83f3..23f9364 100644
--- a/src/unicode_tables/case_folding_simple.rs
+++ b/src/unicode_tables/case_folding_simple.rs
@@ -1,10 +1,10 @@
 // DO NOT EDIT THIS FILE. IT WAS AUTOMATICALLY GENERATED BY:
 //
-//   ucd-generate case-folding-simple ucd-13.0.0 --chars --all-pairs
+//   ucd-generate case-folding-simple ucd-15.0.0 --chars --all-pairs
 //
-// Unicode version: 13.0.0.
+// Unicode version: 15.0.0.
 //
-// ucd-generate 0.2.8 is available on crates.io.
+// ucd-generate 0.2.14 is available on crates.io.
 
 pub const CASE_FOLDING_SIMPLE: &'static [(char, &'static [char])] = &[
     ('A', &['a']),
@@ -1781,6 +1781,7 @@
     ('Ⱜ', &['ⱜ']),
     ('Ⱝ', &['ⱝ']),
     ('Ⱞ', &['ⱞ']),
+    ('Ⱟ', &['ⱟ']),
     ('ⰰ', &['Ⰰ']),
     ('ⰱ', &['Ⰱ']),
     ('ⰲ', &['Ⰲ']),
@@ -1828,6 +1829,7 @@
     ('ⱜ', &['Ⱜ']),
     ('ⱝ', &['Ⱝ']),
     ('ⱞ', &['Ⱞ']),
+    ('ⱟ', &['Ⱟ']),
     ('Ⱡ', &['ⱡ']),
     ('ⱡ', &['Ⱡ']),
     ('Ɫ', &['ɫ']),
@@ -2211,17 +2213,25 @@
     ('ꞽ', &['Ꞽ']),
     ('Ꞿ', &['ꞿ']),
     ('ꞿ', &['Ꞿ']),
+    ('Ꟁ', &['ꟁ']),
+    ('ꟁ', &['Ꟁ']),
     ('Ꟃ', &['ꟃ']),
     ('ꟃ', &['Ꟃ']),
     ('Ꞔ', &['ꞔ']),
     ('Ʂ', &['ʂ']),
     ('Ᶎ', &['ᶎ']),
-    ('\u{a7c7}', &['\u{a7c8}']),
-    ('\u{a7c8}', &['\u{a7c7}']),
-    ('\u{a7c9}', &['\u{a7ca}']),
-    ('\u{a7ca}', &['\u{a7c9}']),
-    ('\u{a7f5}', &['\u{a7f6}']),
-    ('\u{a7f6}', &['\u{a7f5}']),
+    ('Ꟈ', &['ꟈ']),
+    ('ꟈ', &['Ꟈ']),
+    ('Ꟊ', &['ꟊ']),
+    ('ꟊ', &['Ꟊ']),
+    ('Ꟑ', &['ꟑ']),
+    ('ꟑ', &['Ꟑ']),
+    ('Ꟗ', &['ꟗ']),
+    ('ꟗ', &['Ꟗ']),
+    ('Ꟙ', &['ꟙ']),
+    ('ꟙ', &['Ꟙ']),
+    ('Ꟶ', &['ꟶ']),
+    ('ꟶ', &['Ꟶ']),
     ('ꭓ', &['Ꭓ']),
     ('ꭰ', &['Ꭰ']),
     ('ꭱ', &['Ꭱ']),
@@ -2507,6 +2517,76 @@
     ('𐓹', &['𐓑']),
     ('𐓺', &['𐓒']),
     ('𐓻', &['𐓓']),
+    ('𐕰', &['𐖗']),
+    ('𐕱', &['𐖘']),
+    ('𐕲', &['𐖙']),
+    ('𐕳', &['𐖚']),
+    ('𐕴', &['𐖛']),
+    ('𐕵', &['𐖜']),
+    ('𐕶', &['𐖝']),
+    ('𐕷', &['𐖞']),
+    ('𐕸', &['𐖟']),
+    ('𐕹', &['𐖠']),
+    ('𐕺', &['𐖡']),
+    ('𐕼', &['𐖣']),
+    ('𐕽', &['𐖤']),
+    ('𐕾', &['𐖥']),
+    ('𐕿', &['𐖦']),
+    ('𐖀', &['𐖧']),
+    ('𐖁', &['𐖨']),
+    ('𐖂', &['𐖩']),
+    ('𐖃', &['𐖪']),
+    ('𐖄', &['𐖫']),
+    ('𐖅', &['𐖬']),
+    ('𐖆', &['𐖭']),
+    ('𐖇', &['𐖮']),
+    ('𐖈', &['𐖯']),
+    ('𐖉', &['𐖰']),
+    ('𐖊', &['𐖱']),
+    ('𐖌', &['𐖳']),
+    ('𐖍', &['𐖴']),
+    ('𐖎', &['𐖵']),
+    ('𐖏', &['𐖶']),
+    ('𐖐', &['𐖷']),
+    ('𐖑', &['𐖸']),
+    ('𐖒', &['𐖹']),
+    ('𐖔', &['𐖻']),
+    ('𐖕', &['𐖼']),
+    ('𐖗', &['𐕰']),
+    ('𐖘', &['𐕱']),
+    ('𐖙', &['𐕲']),
+    ('𐖚', &['𐕳']),
+    ('𐖛', &['𐕴']),
+    ('𐖜', &['𐕵']),
+    ('𐖝', &['𐕶']),
+    ('𐖞', &['𐕷']),
+    ('𐖟', &['𐕸']),
+    ('𐖠', &['𐕹']),
+    ('𐖡', &['𐕺']),
+    ('𐖣', &['𐕼']),
+    ('𐖤', &['𐕽']),
+    ('𐖥', &['𐕾']),
+    ('𐖦', &['𐕿']),
+    ('𐖧', &['𐖀']),
+    ('𐖨', &['𐖁']),
+    ('𐖩', &['𐖂']),
+    ('𐖪', &['𐖃']),
+    ('𐖫', &['𐖄']),
+    ('𐖬', &['𐖅']),
+    ('𐖭', &['𐖆']),
+    ('𐖮', &['𐖇']),
+    ('𐖯', &['𐖈']),
+    ('𐖰', &['𐖉']),
+    ('𐖱', &['𐖊']),
+    ('𐖳', &['𐖌']),
+    ('𐖴', &['𐖍']),
+    ('𐖵', &['𐖎']),
+    ('𐖶', &['𐖏']),
+    ('𐖷', &['𐖐']),
+    ('𐖸', &['𐖑']),
+    ('𐖹', &['𐖒']),
+    ('𐖻', &['𐖔']),
+    ('𐖼', &['𐖕']),
     ('𐲀', &['𐳀']),
     ('𐲁', &['𐳁']),
     ('𐲂', &['𐳂']),
diff --git a/src/unicode_tables/general_category.rs b/src/unicode_tables/general_category.rs
index 33b7b7e..8fc9289 100644
--- a/src/unicode_tables/general_category.rs
+++ b/src/unicode_tables/general_category.rs
@@ -1,10 +1,10 @@
 // DO NOT EDIT THIS FILE. IT WAS AUTOMATICALLY GENERATED BY:
 //
-//   ucd-generate general-category ucd-13.0.0 --chars --exclude surrogate
+//   ucd-generate general-category ucd-15.0.0 --chars --exclude surrogate
 //
-// Unicode version: 13.0.0.
+// Unicode version: 15.0.0.
 //
-// ucd-generate 0.2.8 is available on crates.io.
+// ucd-generate 0.2.14 is available on crates.io.
 
 pub const BY_NAME: &'static [(&'static str, &'static [(char, char)])] = &[
     ("Cased_Letter", CASED_LETTER),
@@ -116,9 +116,7 @@
     ('ⅅ', 'ⅉ'),
     ('ⅎ', 'ⅎ'),
     ('Ↄ', 'ↄ'),
-    ('Ⰰ', 'Ⱞ'),
-    ('ⰰ', 'ⱞ'),
-    ('Ⱡ', 'ⱻ'),
+    ('Ⰰ', 'ⱻ'),
     ('Ȿ', 'ⳤ'),
     ('Ⳬ', 'ⳮ'),
     ('Ⳳ', 'ⳳ'),
@@ -130,12 +128,14 @@
     ('Ꜣ', 'ꝯ'),
     ('ꝱ', 'ꞇ'),
     ('Ꞌ', 'ꞎ'),
-    ('Ꞑ', 'ꞿ'),
-    ('Ꟃ', '\u{a7ca}'),
-    ('\u{a7f5}', '\u{a7f6}'),
+    ('Ꞑ', 'ꟊ'),
+    ('Ꟑ', 'ꟑ'),
+    ('ꟓ', 'ꟓ'),
+    ('ꟕ', 'ꟙ'),
+    ('Ꟶ', 'ꟶ'),
     ('ꟺ', 'ꟺ'),
     ('ꬰ', 'ꭚ'),
-    ('ꭠ', '\u{ab68}'),
+    ('ꭠ', 'ꭨ'),
     ('ꭰ', 'ꮿ'),
     ('ff', 'st'),
     ('ﬓ', 'ﬗ'),
@@ -144,6 +144,14 @@
     ('𐐀', '𐑏'),
     ('𐒰', '𐓓'),
     ('𐓘', '𐓻'),
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
     ('𐲀', '𐲲'),
     ('𐳀', '𐳲'),
     ('𑢠', '𑣟'),
@@ -178,6 +186,9 @@
     ('𝞊', '𝞨'),
     ('𝞪', '𝟂'),
     ('𝟄', '𝟋'),
+    ('𝼀', '𝼉'),
+    ('𝼋', '𝼞'),
+    ('𝼥', '𝼪'),
     ('𞤀', '𞥃'),
 ];
 
@@ -225,6 +236,10 @@
     ('⸥', '⸥'),
     ('⸧', '⸧'),
     ('⸩', '⸩'),
+    ('⹖', '⹖'),
+    ('⹘', '⹘'),
+    ('⹚', '⹚'),
+    ('⹜', '⹜'),
     ('〉', '〉'),
     ('》', '》'),
     ('」', '」'),
@@ -266,7 +281,7 @@
 ];
 
 pub const CONTROL: &'static [(char, char)] =
-    &[('\u{0}', '\u{1f}'), ('\u{7f}', '\u{9f}')];
+    &[('\0', '\u{1f}'), ('\u{7f}', '\u{9f}')];
 
 pub const CURRENCY_SYMBOL: &'static [(char, char)] = &[
     ('$', '$'),
@@ -280,7 +295,7 @@
     ('௹', '௹'),
     ('฿', '฿'),
     ('៛', '៛'),
-    ('₠', '₿'),
+    ('₠', '⃀'),
     ('꠸', '꠸'),
     ('﷼', '﷼'),
     ('﹩', '﹩'),
@@ -303,6 +318,7 @@
     ('⸚', '⸚'),
     ('⸺', '⸻'),
     ('⹀', '⹀'),
+    ('⹝', '⹝'),
     ('〜', '〜'),
     ('〰', '〰'),
     ('゠', '゠'),
@@ -310,7 +326,7 @@
     ('﹘', '﹘'),
     ('﹣', '﹣'),
     ('-', '-'),
-    ('\u{10ead}', '\u{10ead}'),
+    ('𐺭', '𐺭'),
 ];
 
 pub const DECIMAL_NUMBER: &'static [(char, char)] = &[
@@ -364,17 +380,20 @@
     ('𑛀', '𑛉'),
     ('𑜰', '𑜹'),
     ('𑣠', '𑣩'),
-    ('\u{11950}', '\u{11959}'),
+    ('𑥐', '𑥙'),
     ('𑱐', '𑱙'),
     ('𑵐', '𑵙'),
     ('𑶠', '𑶩'),
+    ('𑽐', '𑽙'),
     ('𖩠', '𖩩'),
+    ('𖫀', '𖫉'),
     ('𖭐', '𖭙'),
     ('𝟎', '𝟿'),
     ('𞅀', '𞅉'),
     ('𞋰', '𞋹'),
+    ('𞓰', '𞓹'),
     ('𞥐', '𞥙'),
-    ('\u{1fbf0}', '\u{1fbf9}'),
+    ('🯰', '🯹'),
 ];
 
 pub const ENCLOSING_MARK: &'static [(char, char)] = &[
@@ -404,6 +423,7 @@
     ('\u{61c}', '\u{61c}'),
     ('\u{6dd}', '\u{6dd}'),
     ('\u{70f}', '\u{70f}'),
+    ('\u{890}', '\u{891}'),
     ('\u{8e2}', '\u{8e2}'),
     ('\u{180e}', '\u{180e}'),
     ('\u{200b}', '\u{200f}'),
@@ -414,7 +434,7 @@
     ('\u{fff9}', '\u{fffb}'),
     ('\u{110bd}', '\u{110bd}'),
     ('\u{110cd}', '\u{110cd}'),
-    ('\u{13430}', '\u{13438}'),
+    ('\u{13430}', '\u{1343f}'),
     ('\u{1bca0}', '\u{1bca3}'),
     ('\u{1d173}', '\u{1d17a}'),
     ('\u{e0001}', '\u{e0001}'),
@@ -485,8 +505,9 @@
     ('ࠨ', 'ࠨ'),
     ('ࡀ', 'ࡘ'),
     ('ࡠ', 'ࡪ'),
-    ('ࢠ', 'ࢴ'),
-    ('ࢶ', '\u{8c7}'),
+    ('ࡰ', 'ࢇ'),
+    ('ࢉ', 'ࢎ'),
+    ('ࢠ', 'ࣉ'),
     ('ऄ', 'ह'),
     ('ऽ', 'ऽ'),
     ('ॐ', 'ॐ'),
@@ -551,6 +572,7 @@
     ('ప', 'హ'),
     ('ఽ', 'ఽ'),
     ('ౘ', 'ౚ'),
+    ('ౝ', 'ౝ'),
     ('ౠ', 'ౡ'),
     ('ಀ', 'ಀ'),
     ('ಅ', 'ಌ'),
@@ -559,10 +581,10 @@
     ('ಪ', 'ಳ'),
     ('ವ', 'ಹ'),
     ('ಽ', 'ಽ'),
-    ('ೞ', 'ೞ'),
+    ('ೝ', 'ೞ'),
     ('ೠ', 'ೡ'),
     ('ೱ', 'ೲ'),
-    ('\u{d04}', 'ഌ'),
+    ('ഄ', 'ഌ'),
     ('എ', 'ഐ'),
     ('ഒ', 'ഺ'),
     ('ഽ', 'ഽ'),
@@ -630,9 +652,8 @@
     ('ᚁ', 'ᚚ'),
     ('ᚠ', 'ᛪ'),
     ('ᛱ', 'ᛸ'),
-    ('ᜀ', 'ᜌ'),
-    ('ᜎ', 'ᜑ'),
-    ('ᜠ', 'ᜱ'),
+    ('ᜀ', 'ᜑ'),
+    ('ᜟ', 'ᜱ'),
     ('ᝀ', 'ᝑ'),
     ('ᝠ', 'ᝬ'),
     ('ᝮ', 'ᝰ'),
@@ -653,7 +674,7 @@
     ('ᨠ', 'ᩔ'),
     ('ᪧ', 'ᪧ'),
     ('ᬅ', 'ᬳ'),
-    ('ᭅ', 'ᭋ'),
+    ('ᭅ', 'ᭌ'),
     ('ᮃ', 'ᮠ'),
     ('ᮮ', 'ᮯ'),
     ('ᮺ', 'ᯥ'),
@@ -704,9 +725,7 @@
     ('ⅅ', 'ⅉ'),
     ('ⅎ', 'ⅎ'),
     ('Ↄ', 'ↄ'),
-    ('Ⰰ', 'Ⱞ'),
-    ('ⰰ', 'ⱞ'),
-    ('Ⱡ', 'ⳤ'),
+    ('Ⰰ', 'ⳤ'),
     ('Ⳬ', 'ⳮ'),
     ('Ⳳ', 'ⳳ'),
     ('ⴀ', 'ⴥ'),
@@ -733,11 +752,10 @@
     ('ー', 'ヿ'),
     ('ㄅ', 'ㄯ'),
     ('ㄱ', 'ㆎ'),
-    ('ㆠ', '\u{31bf}'),
+    ('ㆠ', 'ㆿ'),
     ('ㇰ', 'ㇿ'),
-    ('㐀', '\u{4dbf}'),
-    ('一', '\u{9ffc}'),
-    ('ꀀ', 'ꒌ'),
+    ('㐀', '䶿'),
+    ('一', 'ꒌ'),
     ('ꓐ', 'ꓽ'),
     ('ꔀ', 'ꘌ'),
     ('ꘐ', 'ꘟ'),
@@ -747,9 +765,11 @@
     ('ꚠ', 'ꛥ'),
     ('ꜗ', 'ꜟ'),
     ('Ꜣ', 'ꞈ'),
-    ('Ꞌ', 'ꞿ'),
-    ('Ꟃ', '\u{a7ca}'),
-    ('\u{a7f5}', 'ꠁ'),
+    ('Ꞌ', 'ꟊ'),
+    ('Ꟑ', 'ꟑ'),
+    ('ꟓ', 'ꟓ'),
+    ('ꟕ', 'ꟙ'),
+    ('ꟲ', 'ꠁ'),
     ('ꠃ', 'ꠅ'),
     ('ꠇ', 'ꠊ'),
     ('ꠌ', 'ꠢ'),
@@ -786,7 +806,7 @@
     ('ꬠ', 'ꬦ'),
     ('ꬨ', 'ꬮ'),
     ('ꬰ', 'ꭚ'),
-    ('ꭜ', '\u{ab69}'),
+    ('ꭜ', 'ꭩ'),
     ('ꭰ', 'ꯢ'),
     ('가', '힣'),
     ('ힰ', 'ퟆ'),
@@ -837,9 +857,20 @@
     ('𐓘', '𐓻'),
     ('𐔀', '𐔧'),
     ('𐔰', '𐕣'),
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
     ('𐘀', '𐜶'),
     ('𐝀', '𐝕'),
     ('𐝠', '𐝧'),
+    ('𐞀', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
     ('𐠀', '𐠅'),
     ('𐠈', '𐠈'),
     ('𐠊', '𐠵'),
@@ -870,19 +901,22 @@
     ('𐲀', '𐲲'),
     ('𐳀', '𐳲'),
     ('𐴀', '𐴣'),
-    ('\u{10e80}', '\u{10ea9}'),
-    ('\u{10eb0}', '\u{10eb1}'),
+    ('𐺀', '𐺩'),
+    ('𐺰', '𐺱'),
     ('𐼀', '𐼜'),
     ('𐼧', '𐼧'),
     ('𐼰', '𐽅'),
-    ('\u{10fb0}', '\u{10fc4}'),
+    ('𐽰', '𐾁'),
+    ('𐾰', '𐿄'),
     ('𐿠', '𐿶'),
     ('𑀃', '𑀷'),
+    ('𑁱', '𑁲'),
+    ('𑁵', '𑁵'),
     ('𑂃', '𑂯'),
     ('𑃐', '𑃨'),
     ('𑄃', '𑄦'),
     ('𑅄', '𑅄'),
-    ('\u{11147}', '\u{11147}'),
+    ('𑅇', '𑅇'),
     ('𑅐', '𑅲'),
     ('𑅶', '𑅶'),
     ('𑆃', '𑆲'),
@@ -891,6 +925,7 @@
     ('𑇜', '𑇜'),
     ('𑈀', '𑈑'),
     ('𑈓', '𑈫'),
+    ('𑈿', '𑉀'),
     ('𑊀', '𑊆'),
     ('𑊈', '𑊈'),
     ('𑊊', '𑊍'),
@@ -908,7 +943,7 @@
     ('𑍝', '𑍡'),
     ('𑐀', '𑐴'),
     ('𑑇', '𑑊'),
-    ('𑑟', '\u{11461}'),
+    ('𑑟', '𑑡'),
     ('𑒀', '𑒯'),
     ('𑓄', '𑓅'),
     ('𑓇', '𑓇'),
@@ -919,15 +954,16 @@
     ('𑚀', '𑚪'),
     ('𑚸', '𑚸'),
     ('𑜀', '𑜚'),
+    ('𑝀', '𑝆'),
     ('𑠀', '𑠫'),
     ('𑢠', '𑣟'),
-    ('𑣿', '\u{11906}'),
-    ('\u{11909}', '\u{11909}'),
-    ('\u{1190c}', '\u{11913}'),
-    ('\u{11915}', '\u{11916}'),
-    ('\u{11918}', '\u{1192f}'),
-    ('\u{1193f}', '\u{1193f}'),
-    ('\u{11941}', '\u{11941}'),
+    ('𑣿', '𑤆'),
+    ('𑤉', '𑤉'),
+    ('𑤌', '𑤓'),
+    ('𑤕', '𑤖'),
+    ('𑤘', '𑤯'),
+    ('𑤿', '𑤿'),
+    ('𑥁', '𑥁'),
     ('𑦠', '𑦧'),
     ('𑦪', '𑧐'),
     ('𑧡', '𑧡'),
@@ -938,7 +974,7 @@
     ('𑩐', '𑩐'),
     ('𑩜', '𑪉'),
     ('𑪝', '𑪝'),
-    ('𑫀', '𑫸'),
+    ('𑪰', '𑫸'),
     ('𑰀', '𑰈'),
     ('𑰊', '𑰮'),
     ('𑱀', '𑱀'),
@@ -952,13 +988,19 @@
     ('𑵪', '𑶉'),
     ('𑶘', '𑶘'),
     ('𑻠', '𑻲'),
-    ('\u{11fb0}', '\u{11fb0}'),
+    ('𑼂', '𑼂'),
+    ('𑼄', '𑼐'),
+    ('𑼒', '𑼳'),
+    ('𑾰', '𑾰'),
     ('𒀀', '𒎙'),
     ('𒒀', '𒕃'),
-    ('𓀀', '𓐮'),
+    ('𒾐', '𒿰'),
+    ('𓀀', '𓐯'),
+    ('𓑁', '𓑆'),
     ('𔐀', '𔙆'),
     ('𖠀', '𖨸'),
     ('𖩀', '𖩞'),
+    ('𖩰', '𖪾'),
     ('𖫐', '𖫭'),
     ('𖬀', '𖬯'),
     ('𖭀', '𖭃'),
@@ -971,10 +1013,15 @@
     ('𖿠', '𖿡'),
     ('𖿣', '𖿣'),
     ('𗀀', '𘟷'),
-    ('𘠀', '\u{18cd5}'),
-    ('\u{18d00}', '\u{18d08}'),
-    ('𛀀', '𛄞'),
+    ('𘠀', '𘳕'),
+    ('𘴀', '𘴈'),
+    ('𚿰', '𚿳'),
+    ('𚿵', '𚿻'),
+    ('𚿽', '𚿾'),
+    ('𛀀', '𛄢'),
+    ('𛄲', '𛄲'),
     ('𛅐', '𛅒'),
+    ('𛅕', '𛅕'),
     ('𛅤', '𛅧'),
     ('𛅰', '𛋻'),
     ('𛰀', '𛱪'),
@@ -1011,10 +1058,19 @@
     ('𝞊', '𝞨'),
     ('𝞪', '𝟂'),
     ('𝟄', '𝟋'),
+    ('𝼀', '𝼞'),
+    ('𝼥', '𝼪'),
+    ('𞀰', '𞁭'),
     ('𞄀', '𞄬'),
     ('𞄷', '𞄽'),
     ('𞅎', '𞅎'),
+    ('𞊐', '𞊭'),
     ('𞋀', '𞋫'),
+    ('𞓐', '𞓫'),
+    ('𞟠', '𞟦'),
+    ('𞟨', '𞟫'),
+    ('𞟭', '𞟮'),
+    ('𞟰', '𞟾'),
     ('𞠀', '𞣄'),
     ('𞤀', '𞥃'),
     ('𞥋', '𞥋'),
@@ -1051,13 +1107,14 @@
     ('𞺡', '𞺣'),
     ('𞺥', '𞺩'),
     ('𞺫', '𞺻'),
-    ('𠀀', '\u{2a6dd}'),
-    ('𪜀', '𫜴'),
+    ('𠀀', '𪛟'),
+    ('𪜀', '𫜹'),
     ('𫝀', '𫠝'),
     ('𫠠', '𬺡'),
     ('𬺰', '𮯠'),
     ('丽', '𪘀'),
-    ('\u{30000}', '\u{3134a}'),
+    ('𰀀', '𱍊'),
+    ('𱍐', '𲎯'),
 ];
 
 pub const LETTER_NUMBER: &'static [(char, char)] = &[
@@ -1510,7 +1567,7 @@
     ('ⅆ', 'ⅉ'),
     ('ⅎ', 'ⅎ'),
     ('ↄ', 'ↄ'),
-    ('ⰰ', 'ⱞ'),
+    ('ⰰ', 'ⱟ'),
     ('ⱡ', 'ⱡ'),
     ('ⱥ', 'ⱦ'),
     ('ⱨ', 'ⱨ'),
@@ -1679,19 +1736,29 @@
     ('ꞻ', 'ꞻ'),
     ('ꞽ', 'ꞽ'),
     ('ꞿ', 'ꞿ'),
+    ('ꟁ', 'ꟁ'),
     ('ꟃ', 'ꟃ'),
-    ('\u{a7c8}', '\u{a7c8}'),
-    ('\u{a7ca}', '\u{a7ca}'),
-    ('\u{a7f6}', '\u{a7f6}'),
+    ('ꟈ', 'ꟈ'),
+    ('ꟊ', 'ꟊ'),
+    ('ꟑ', 'ꟑ'),
+    ('ꟓ', 'ꟓ'),
+    ('ꟕ', 'ꟕ'),
+    ('ꟗ', 'ꟗ'),
+    ('ꟙ', 'ꟙ'),
+    ('ꟶ', 'ꟶ'),
     ('ꟺ', 'ꟺ'),
     ('ꬰ', 'ꭚ'),
-    ('ꭠ', '\u{ab68}'),
+    ('ꭠ', 'ꭨ'),
     ('ꭰ', 'ꮿ'),
     ('ff', 'st'),
     ('ﬓ', 'ﬗ'),
     ('a', 'z'),
     ('𐐨', '𐑏'),
     ('𐓘', '𐓻'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
     ('𐳀', '𐳲'),
     ('𑣀', '𑣟'),
     ('𖹠', '𖹿'),
@@ -1723,6 +1790,9 @@
     ('𝞪', '𝟂'),
     ('𝟄', '𝟉'),
     ('𝟋', '𝟋'),
+    ('𝼀', '𝼉'),
+    ('𝼋', '𝼞'),
+    ('𝼥', '𝼪'),
     ('𞤢', '𞥃'),
 ];
 
@@ -1751,7 +1821,8 @@
     ('\u{825}', '\u{827}'),
     ('\u{829}', '\u{82d}'),
     ('\u{859}', '\u{85b}'),
-    ('\u{8d3}', '\u{8e1}'),
+    ('\u{898}', '\u{89f}'),
+    ('\u{8ca}', '\u{8e1}'),
     ('\u{8e3}', 'ः'),
     ('\u{93a}', '\u{93c}'),
     ('ा', 'ॏ'),
@@ -1793,6 +1864,7 @@
     ('ொ', '\u{bcd}'),
     ('\u{bd7}', '\u{bd7}'),
     ('\u{c00}', '\u{c04}'),
+    ('\u{c3c}', '\u{c3c}'),
     ('\u{c3e}', 'ౄ'),
     ('\u{c46}', '\u{c48}'),
     ('\u{c4a}', '\u{c4d}'),
@@ -1805,6 +1877,7 @@
     ('ೊ', '\u{ccd}'),
     ('\u{cd5}', '\u{cd6}'),
     ('\u{ce2}', '\u{ce3}'),
+    ('ೳ', 'ೳ'),
     ('\u{d00}', 'ഃ'),
     ('\u{d3b}', '\u{d3c}'),
     ('\u{d3e}', '\u{d44}'),
@@ -1823,7 +1896,7 @@
     ('\u{e47}', '\u{e4e}'),
     ('\u{eb1}', '\u{eb1}'),
     ('\u{eb4}', '\u{ebc}'),
-    ('\u{ec8}', '\u{ecd}'),
+    ('\u{ec8}', '\u{ece}'),
     ('\u{f18}', '\u{f19}'),
     ('\u{f35}', '\u{f35}'),
     ('\u{f37}', '\u{f37}'),
@@ -1844,13 +1917,14 @@
     ('ႏ', 'ႏ'),
     ('ႚ', '\u{109d}'),
     ('\u{135d}', '\u{135f}'),
-    ('\u{1712}', '\u{1714}'),
-    ('\u{1732}', '\u{1734}'),
+    ('\u{1712}', '᜕'),
+    ('\u{1732}', '᜴'),
     ('\u{1752}', '\u{1753}'),
     ('\u{1772}', '\u{1773}'),
     ('\u{17b4}', '\u{17d3}'),
     ('\u{17dd}', '\u{17dd}'),
     ('\u{180b}', '\u{180d}'),
+    ('\u{180f}', '\u{180f}'),
     ('\u{1885}', '\u{1886}'),
     ('\u{18a9}', '\u{18a9}'),
     ('\u{1920}', 'ᤫ'),
@@ -1859,7 +1933,7 @@
     ('ᩕ', '\u{1a5e}'),
     ('\u{1a60}', '\u{1a7c}'),
     ('\u{1a7f}', '\u{1a7f}'),
-    ('\u{1ab0}', '\u{1ac0}'),
+    ('\u{1ab0}', '\u{1ace}'),
     ('\u{1b00}', 'ᬄ'),
     ('\u{1b34}', '᭄'),
     ('\u{1b6b}', '\u{1b73}'),
@@ -1872,8 +1946,7 @@
     ('\u{1ced}', '\u{1ced}'),
     ('\u{1cf4}', '\u{1cf4}'),
     ('᳷', '\u{1cf9}'),
-    ('\u{1dc0}', '\u{1df9}'),
-    ('\u{1dfb}', '\u{1dff}'),
+    ('\u{1dc0}', '\u{1dff}'),
     ('\u{20d0}', '\u{20f0}'),
     ('\u{2cef}', '\u{2cf1}'),
     ('\u{2d7f}', '\u{2d7f}'),
@@ -1925,11 +1998,16 @@
     ('\u{10ae5}', '\u{10ae6}'),
     ('\u{10d24}', '\u{10d27}'),
     ('\u{10eab}', '\u{10eac}'),
+    ('\u{10efd}', '\u{10eff}'),
     ('\u{10f46}', '\u{10f50}'),
+    ('\u{10f82}', '\u{10f85}'),
     ('𑀀', '𑀂'),
     ('\u{11038}', '\u{11046}'),
+    ('\u{11070}', '\u{11070}'),
+    ('\u{11073}', '\u{11074}'),
     ('\u{1107f}', '𑂂'),
     ('𑂰', '\u{110ba}'),
+    ('\u{110c2}', '\u{110c2}'),
     ('\u{11100}', '\u{11102}'),
     ('\u{11127}', '\u{11134}'),
     ('𑅅', '𑅆'),
@@ -1937,9 +2015,10 @@
     ('\u{11180}', '𑆂'),
     ('𑆳', '𑇀'),
     ('\u{111c9}', '\u{111cc}'),
-    ('\u{111ce}', '\u{111cf}'),
+    ('𑇎', '\u{111cf}'),
     ('𑈬', '\u{11237}'),
     ('\u{1123e}', '\u{1123e}'),
+    ('\u{11241}', '\u{11241}'),
     ('\u{112df}', '\u{112ea}'),
     ('\u{11300}', '𑌃'),
     ('\u{1133b}', '\u{1133c}'),
@@ -1960,11 +2039,11 @@
     ('\u{116ab}', '\u{116b7}'),
     ('\u{1171d}', '\u{1172b}'),
     ('𑠬', '\u{1183a}'),
-    ('\u{11930}', '\u{11935}'),
-    ('\u{11937}', '\u{11938}'),
+    ('\u{11930}', '𑤵'),
+    ('𑤷', '𑤸'),
     ('\u{1193b}', '\u{1193e}'),
-    ('\u{11940}', '\u{11940}'),
-    ('\u{11942}', '\u{11943}'),
+    ('𑥀', '𑥀'),
+    ('𑥂', '\u{11943}'),
     ('𑧑', '\u{119d7}'),
     ('\u{119da}', '\u{119e0}'),
     ('𑧤', '𑧤'),
@@ -1987,14 +2066,22 @@
     ('\u{11d90}', '\u{11d91}'),
     ('𑶓', '\u{11d97}'),
     ('\u{11ef3}', '𑻶'),
+    ('\u{11f00}', '\u{11f01}'),
+    ('𑼃', '𑼃'),
+    ('𑼴', '\u{11f3a}'),
+    ('𑼾', '\u{11f42}'),
+    ('\u{13440}', '\u{13440}'),
+    ('\u{13447}', '\u{13455}'),
     ('\u{16af0}', '\u{16af4}'),
     ('\u{16b30}', '\u{16b36}'),
     ('\u{16f4f}', '\u{16f4f}'),
     ('𖽑', '𖾇'),
     ('\u{16f8f}', '\u{16f92}'),
     ('\u{16fe4}', '\u{16fe4}'),
-    ('\u{16ff0}', '\u{16ff1}'),
+    ('𖿰', '𖿱'),
     ('\u{1bc9d}', '\u{1bc9e}'),
+    ('\u{1cf00}', '\u{1cf2d}'),
+    ('\u{1cf30}', '\u{1cf46}'),
     ('\u{1d165}', '\u{1d169}'),
     ('𝅭', '\u{1d172}'),
     ('\u{1d17b}', '\u{1d182}'),
@@ -2012,8 +2099,11 @@
     ('\u{1e01b}', '\u{1e021}'),
     ('\u{1e023}', '\u{1e024}'),
     ('\u{1e026}', '\u{1e02a}'),
+    ('\u{1e08f}', '\u{1e08f}'),
     ('\u{1e130}', '\u{1e136}'),
+    ('\u{1e2ae}', '\u{1e2ae}'),
     ('\u{1e2ec}', '\u{1e2ef}'),
+    ('\u{1e4ec}', '\u{1e4ef}'),
     ('\u{1e8d0}', '\u{1e8d6}'),
     ('\u{1e944}', '\u{1e94a}'),
     ('\u{e0100}', '\u{e01ef}'),
@@ -2102,6 +2192,7 @@
     ('ࠚ', 'ࠚ'),
     ('ࠤ', 'ࠤ'),
     ('ࠨ', 'ࠨ'),
+    ('ࣉ', 'ࣉ'),
     ('ॱ', 'ॱ'),
     ('ๆ', 'ๆ'),
     ('ໆ', 'ໆ'),
@@ -2132,6 +2223,7 @@
     ('ꜗ', 'ꜟ'),
     ('ꝰ', 'ꝰ'),
     ('ꞈ', 'ꞈ'),
+    ('ꟲ', 'ꟴ'),
     ('ꟸ', 'ꟹ'),
     ('ꧏ', 'ꧏ'),
     ('ꧦ', 'ꧦ'),
@@ -2139,14 +2231,22 @@
     ('ꫝ', 'ꫝ'),
     ('ꫳ', 'ꫴ'),
     ('ꭜ', 'ꭟ'),
-    ('\u{ab69}', '\u{ab69}'),
+    ('ꭩ', 'ꭩ'),
     ('ー', 'ー'),
     ('\u{ff9e}', '\u{ff9f}'),
+    ('𐞀', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
     ('𖭀', '𖭃'),
     ('𖾓', '𖾟'),
     ('𖿠', '𖿡'),
     ('𖿣', '𖿣'),
+    ('𚿰', '𚿳'),
+    ('𚿵', '𚿻'),
+    ('𚿽', '𚿾'),
+    ('𞀰', '𞁭'),
     ('𞄷', '𞄽'),
+    ('𞓫', '𞓫'),
     ('𞥋', '𞥋'),
 ];
 
@@ -2164,6 +2264,7 @@
     ('˯', '˿'),
     ('͵', '͵'),
     ('΄', '΅'),
+    ('࢈', '࢈'),
     ('᾽', '᾽'),
     ('᾿', '῁'),
     ('῍', '῏'),
@@ -2175,8 +2276,8 @@
     ('꜠', '꜡'),
     ('꞉', '꞊'),
     ('꭛', '꭛'),
-    ('\u{ab6a}', '\u{ab6b}'),
-    ('﮲', '﯁'),
+    ('꭪', '꭫'),
+    ('﮲', '﯂'),
     ('^', '^'),
     ('`', '`'),
     (' ̄', ' ̄'),
@@ -2208,7 +2309,8 @@
     ('\u{825}', '\u{827}'),
     ('\u{829}', '\u{82d}'),
     ('\u{859}', '\u{85b}'),
-    ('\u{8d3}', '\u{8e1}'),
+    ('\u{898}', '\u{89f}'),
+    ('\u{8ca}', '\u{8e1}'),
     ('\u{8e3}', '\u{902}'),
     ('\u{93a}', '\u{93a}'),
     ('\u{93c}', '\u{93c}'),
@@ -2249,6 +2351,7 @@
     ('\u{bcd}', '\u{bcd}'),
     ('\u{c00}', '\u{c00}'),
     ('\u{c04}', '\u{c04}'),
+    ('\u{c3c}', '\u{c3c}'),
     ('\u{c3e}', '\u{c40}'),
     ('\u{c46}', '\u{c48}'),
     ('\u{c4a}', '\u{c4d}'),
@@ -2274,7 +2377,7 @@
     ('\u{e47}', '\u{e4e}'),
     ('\u{eb1}', '\u{eb1}'),
     ('\u{eb4}', '\u{ebc}'),
-    ('\u{ec8}', '\u{ecd}'),
+    ('\u{ec8}', '\u{ece}'),
     ('\u{f18}', '\u{f19}'),
     ('\u{f35}', '\u{f35}'),
     ('\u{f37}', '\u{f37}'),
@@ -2298,7 +2401,7 @@
     ('\u{109d}', '\u{109d}'),
     ('\u{135d}', '\u{135f}'),
     ('\u{1712}', '\u{1714}'),
-    ('\u{1732}', '\u{1734}'),
+    ('\u{1732}', '\u{1733}'),
     ('\u{1752}', '\u{1753}'),
     ('\u{1772}', '\u{1773}'),
     ('\u{17b4}', '\u{17b5}'),
@@ -2307,6 +2410,7 @@
     ('\u{17c9}', '\u{17d3}'),
     ('\u{17dd}', '\u{17dd}'),
     ('\u{180b}', '\u{180d}'),
+    ('\u{180f}', '\u{180f}'),
     ('\u{1885}', '\u{1886}'),
     ('\u{18a9}', '\u{18a9}'),
     ('\u{1920}', '\u{1922}'),
@@ -2323,7 +2427,7 @@
     ('\u{1a73}', '\u{1a7c}'),
     ('\u{1a7f}', '\u{1a7f}'),
     ('\u{1ab0}', '\u{1abd}'),
-    ('\u{1abf}', '\u{1ac0}'),
+    ('\u{1abf}', '\u{1ace}'),
     ('\u{1b00}', '\u{1b03}'),
     ('\u{1b34}', '\u{1b34}'),
     ('\u{1b36}', '\u{1b3a}'),
@@ -2346,8 +2450,7 @@
     ('\u{1ced}', '\u{1ced}'),
     ('\u{1cf4}', '\u{1cf4}'),
     ('\u{1cf8}', '\u{1cf9}'),
-    ('\u{1dc0}', '\u{1df9}'),
-    ('\u{1dfb}', '\u{1dff}'),
+    ('\u{1dc0}', '\u{1dff}'),
     ('\u{20d0}', '\u{20dc}'),
     ('\u{20e1}', '\u{20e1}'),
     ('\u{20e5}', '\u{20f0}'),
@@ -2405,12 +2508,17 @@
     ('\u{10ae5}', '\u{10ae6}'),
     ('\u{10d24}', '\u{10d27}'),
     ('\u{10eab}', '\u{10eac}'),
+    ('\u{10efd}', '\u{10eff}'),
     ('\u{10f46}', '\u{10f50}'),
+    ('\u{10f82}', '\u{10f85}'),
     ('\u{11001}', '\u{11001}'),
     ('\u{11038}', '\u{11046}'),
+    ('\u{11070}', '\u{11070}'),
+    ('\u{11073}', '\u{11074}'),
     ('\u{1107f}', '\u{11081}'),
     ('\u{110b3}', '\u{110b6}'),
     ('\u{110b9}', '\u{110ba}'),
+    ('\u{110c2}', '\u{110c2}'),
     ('\u{11100}', '\u{11102}'),
     ('\u{11127}', '\u{1112b}'),
     ('\u{1112d}', '\u{11134}'),
@@ -2423,6 +2531,7 @@
     ('\u{11234}', '\u{11234}'),
     ('\u{11236}', '\u{11237}'),
     ('\u{1123e}', '\u{1123e}'),
+    ('\u{11241}', '\u{11241}'),
     ('\u{112df}', '\u{112df}'),
     ('\u{112e3}', '\u{112ea}'),
     ('\u{11300}', '\u{11301}'),
@@ -2484,12 +2593,20 @@
     ('\u{11d95}', '\u{11d95}'),
     ('\u{11d97}', '\u{11d97}'),
     ('\u{11ef3}', '\u{11ef4}'),
+    ('\u{11f00}', '\u{11f01}'),
+    ('\u{11f36}', '\u{11f3a}'),
+    ('\u{11f40}', '\u{11f40}'),
+    ('\u{11f42}', '\u{11f42}'),
+    ('\u{13440}', '\u{13440}'),
+    ('\u{13447}', '\u{13455}'),
     ('\u{16af0}', '\u{16af4}'),
     ('\u{16b30}', '\u{16b36}'),
     ('\u{16f4f}', '\u{16f4f}'),
     ('\u{16f8f}', '\u{16f92}'),
     ('\u{16fe4}', '\u{16fe4}'),
     ('\u{1bc9d}', '\u{1bc9e}'),
+    ('\u{1cf00}', '\u{1cf2d}'),
+    ('\u{1cf30}', '\u{1cf46}'),
     ('\u{1d167}', '\u{1d169}'),
     ('\u{1d17b}', '\u{1d182}'),
     ('\u{1d185}', '\u{1d18b}'),
@@ -2506,8 +2623,11 @@
     ('\u{1e01b}', '\u{1e021}'),
     ('\u{1e023}', '\u{1e024}'),
     ('\u{1e026}', '\u{1e02a}'),
+    ('\u{1e08f}', '\u{1e08f}'),
     ('\u{1e130}', '\u{1e136}'),
+    ('\u{1e2ae}', '\u{1e2ae}'),
     ('\u{1e2ec}', '\u{1e2ef}'),
+    ('\u{1e4ec}', '\u{1e4ef}'),
     ('\u{1e8d0}', '\u{1e8d6}'),
     ('\u{1e944}', '\u{1e94a}'),
     ('\u{e0100}', '\u{e01ef}'),
@@ -2610,7 +2730,7 @@
     ('𐹠', '𐹾'),
     ('𐼝', '𐼦'),
     ('𐽑', '𐽔'),
-    ('\u{10fc5}', '\u{10fcb}'),
+    ('𐿅', '𐿋'),
     ('𑁒', '𑁯'),
     ('𑃰', '𑃹'),
     ('𑄶', '𑄿'),
@@ -2623,21 +2743,25 @@
     ('𑛀', '𑛉'),
     ('𑜰', '𑜻'),
     ('𑣠', '𑣲'),
-    ('\u{11950}', '\u{11959}'),
+    ('𑥐', '𑥙'),
     ('𑱐', '𑱬'),
     ('𑵐', '𑵙'),
     ('𑶠', '𑶩'),
+    ('𑽐', '𑽙'),
     ('𑿀', '𑿔'),
     ('𒐀', '𒑮'),
     ('𖩠', '𖩩'),
+    ('𖫀', '𖫉'),
     ('𖭐', '𖭙'),
     ('𖭛', '𖭡'),
     ('𖺀', '𖺖'),
+    ('𝋀', '𝋓'),
     ('𝋠', '𝋳'),
     ('𝍠', '𝍸'),
     ('𝟎', '𝟿'),
     ('𞅀', '𞅉'),
     ('𞋰', '𞋹'),
+    ('𞓰', '𞓹'),
     ('𞣇', '𞣏'),
     ('𞥐', '𞥙'),
     ('𞱱', '𞲫'),
@@ -2646,7 +2770,7 @@
     ('𞴁', '𞴭'),
     ('𞴯', '𞴽'),
     ('🄀', '🄌'),
-    ('\u{1fbf0}', '\u{1fbf9}'),
+    ('🯰', '🯹'),
 ];
 
 pub const OPEN_PUNCTUATION: &'static [(char, char)] = &[
@@ -2696,6 +2820,10 @@
     ('⸦', '⸦'),
     ('⸨', '⸨'),
     ('⹂', '⹂'),
+    ('⹕', '⹕'),
+    ('⹗', '⹗'),
+    ('⹙', '⹙'),
+    ('⹛', '⹛'),
     ('〈', '〈'),
     ('《', '《'),
     ('「', '「'),
@@ -2728,7 +2856,7 @@
 ];
 
 pub const OTHER: &'static [(char, char)] = &[
-    ('\u{0}', '\u{1f}'),
+    ('\0', '\u{1f}'),
     ('\u{7f}', '\u{9f}'),
     ('\u{ad}', '\u{ad}'),
     ('\u{378}', '\u{379}'),
@@ -2743,7 +2871,7 @@
     ('\u{5c8}', '\u{5cf}'),
     ('\u{5eb}', '\u{5ee}'),
     ('\u{5f5}', '\u{605}'),
-    ('\u{61c}', '\u{61d}'),
+    ('\u{61c}', '\u{61c}'),
     ('\u{6dd}', '\u{6dd}'),
     ('\u{70e}', '\u{70f}'),
     ('\u{74b}', '\u{74c}'),
@@ -2753,9 +2881,8 @@
     ('\u{83f}', '\u{83f}'),
     ('\u{85c}', '\u{85d}'),
     ('\u{85f}', '\u{85f}'),
-    ('\u{86b}', '\u{89f}'),
-    ('\u{8b5}', '\u{8b5}'),
-    ('\u{8c8}', '\u{8d2}'),
+    ('\u{86b}', '\u{86f}'),
+    ('\u{88f}', '\u{897}'),
     ('\u{8e2}', '\u{8e2}'),
     ('\u{984}', '\u{984}'),
     ('\u{98d}', '\u{98e}'),
@@ -2834,12 +2961,13 @@
     ('\u{c0d}', '\u{c0d}'),
     ('\u{c11}', '\u{c11}'),
     ('\u{c29}', '\u{c29}'),
-    ('\u{c3a}', '\u{c3c}'),
+    ('\u{c3a}', '\u{c3b}'),
     ('\u{c45}', '\u{c45}'),
     ('\u{c49}', '\u{c49}'),
     ('\u{c4e}', '\u{c54}'),
     ('\u{c57}', '\u{c57}'),
-    ('\u{c5b}', '\u{c5f}'),
+    ('\u{c5b}', '\u{c5c}'),
+    ('\u{c5e}', '\u{c5f}'),
     ('\u{c64}', '\u{c65}'),
     ('\u{c70}', '\u{c76}'),
     ('\u{c8d}', '\u{c8d}'),
@@ -2850,11 +2978,11 @@
     ('\u{cc5}', '\u{cc5}'),
     ('\u{cc9}', '\u{cc9}'),
     ('\u{cce}', '\u{cd4}'),
-    ('\u{cd7}', '\u{cdd}'),
+    ('\u{cd7}', '\u{cdc}'),
     ('\u{cdf}', '\u{cdf}'),
     ('\u{ce4}', '\u{ce5}'),
     ('\u{cf0}', '\u{cf0}'),
-    ('\u{cf3}', '\u{cff}'),
+    ('\u{cf4}', '\u{cff}'),
     ('\u{d0d}', '\u{d0d}'),
     ('\u{d11}', '\u{d11}'),
     ('\u{d45}', '\u{d45}'),
@@ -2884,7 +3012,7 @@
     ('\u{ebe}', '\u{ebf}'),
     ('\u{ec5}', '\u{ec5}'),
     ('\u{ec7}', '\u{ec7}'),
-    ('\u{ece}', '\u{ecf}'),
+    ('\u{ecf}', '\u{ecf}'),
     ('\u{eda}', '\u{edb}'),
     ('\u{ee0}', '\u{eff}'),
     ('\u{f48}', '\u{f48}'),
@@ -2918,8 +3046,7 @@
     ('\u{13fe}', '\u{13ff}'),
     ('\u{169d}', '\u{169f}'),
     ('\u{16f9}', '\u{16ff}'),
-    ('\u{170d}', '\u{170d}'),
-    ('\u{1715}', '\u{171f}'),
+    ('\u{1716}', '\u{171e}'),
     ('\u{1737}', '\u{173f}'),
     ('\u{1754}', '\u{175f}'),
     ('\u{176d}', '\u{176d}'),
@@ -2928,7 +3055,7 @@
     ('\u{17de}', '\u{17df}'),
     ('\u{17ea}', '\u{17ef}'),
     ('\u{17fa}', '\u{17ff}'),
-    ('\u{180e}', '\u{180f}'),
+    ('\u{180e}', '\u{180e}'),
     ('\u{181a}', '\u{181f}'),
     ('\u{1879}', '\u{187f}'),
     ('\u{18ab}', '\u{18af}'),
@@ -2948,9 +3075,9 @@
     ('\u{1a8a}', '\u{1a8f}'),
     ('\u{1a9a}', '\u{1a9f}'),
     ('\u{1aae}', '\u{1aaf}'),
-    ('\u{1ac1}', '\u{1aff}'),
-    ('\u{1b4c}', '\u{1b4f}'),
-    ('\u{1b7d}', '\u{1b7f}'),
+    ('\u{1acf}', '\u{1aff}'),
+    ('\u{1b4d}', '\u{1b4f}'),
+    ('\u{1b7f}', '\u{1b7f}'),
     ('\u{1bf4}', '\u{1bfb}'),
     ('\u{1c38}', '\u{1c3a}'),
     ('\u{1c4a}', '\u{1c4c}'),
@@ -2958,7 +3085,6 @@
     ('\u{1cbb}', '\u{1cbc}'),
     ('\u{1cc8}', '\u{1ccf}'),
     ('\u{1cfb}', '\u{1cff}'),
-    ('\u{1dfa}', '\u{1dfa}'),
     ('\u{1f16}', '\u{1f17}'),
     ('\u{1f1e}', '\u{1f1f}'),
     ('\u{1f46}', '\u{1f47}'),
@@ -2981,15 +3107,13 @@
     ('\u{2072}', '\u{2073}'),
     ('\u{208f}', '\u{208f}'),
     ('\u{209d}', '\u{209f}'),
-    ('\u{20c0}', '\u{20cf}'),
+    ('\u{20c1}', '\u{20cf}'),
     ('\u{20f1}', '\u{20ff}'),
     ('\u{218c}', '\u{218f}'),
     ('\u{2427}', '\u{243f}'),
     ('\u{244b}', '\u{245f}'),
     ('\u{2b74}', '\u{2b75}'),
     ('\u{2b96}', '\u{2b96}'),
-    ('\u{2c2f}', '\u{2c2f}'),
-    ('\u{2c5f}', '\u{2c5f}'),
     ('\u{2cf4}', '\u{2cf8}'),
     ('\u{2d26}', '\u{2d26}'),
     ('\u{2d28}', '\u{2d2c}'),
@@ -3005,7 +3129,7 @@
     ('\u{2dcf}', '\u{2dcf}'),
     ('\u{2dd7}', '\u{2dd7}'),
     ('\u{2ddf}', '\u{2ddf}'),
-    ('\u{2e53}', '\u{2e7f}'),
+    ('\u{2e5e}', '\u{2e7f}'),
     ('\u{2e9a}', '\u{2e9a}'),
     ('\u{2ef4}', '\u{2eff}'),
     ('\u{2fd6}', '\u{2fef}'),
@@ -3017,13 +3141,14 @@
     ('\u{318f}', '\u{318f}'),
     ('\u{31e4}', '\u{31ef}'),
     ('\u{321f}', '\u{321f}'),
-    ('\u{9ffd}', '\u{9fff}'),
     ('\u{a48d}', '\u{a48f}'),
     ('\u{a4c7}', '\u{a4cf}'),
     ('\u{a62c}', '\u{a63f}'),
     ('\u{a6f8}', '\u{a6ff}'),
-    ('\u{a7c0}', '\u{a7c1}'),
-    ('\u{a7cb}', '\u{a7f4}'),
+    ('\u{a7cb}', '\u{a7cf}'),
+    ('\u{a7d2}', '\u{a7d2}'),
+    ('\u{a7d4}', '\u{a7d4}'),
+    ('\u{a7da}', '\u{a7f1}'),
     ('\u{a82d}', '\u{a82f}'),
     ('\u{a83a}', '\u{a83f}'),
     ('\u{a878}', '\u{a87f}'),
@@ -3059,11 +3184,10 @@
     ('\u{fb3f}', '\u{fb3f}'),
     ('\u{fb42}', '\u{fb42}'),
     ('\u{fb45}', '\u{fb45}'),
-    ('\u{fbc2}', '\u{fbd2}'),
-    ('\u{fd40}', '\u{fd4f}'),
+    ('\u{fbc3}', '\u{fbd2}'),
     ('\u{fd90}', '\u{fd91}'),
-    ('\u{fdc8}', '\u{fdef}'),
-    ('\u{fdfe}', '\u{fdff}'),
+    ('\u{fdc8}', '\u{fdce}'),
+    ('\u{fdd0}', '\u{fdef}'),
     ('\u{fe1a}', '\u{fe1f}'),
     ('\u{fe53}', '\u{fe53}'),
     ('\u{fe67}', '\u{fe67}'),
@@ -3106,10 +3230,20 @@
     ('\u{104fc}', '\u{104ff}'),
     ('\u{10528}', '\u{1052f}'),
     ('\u{10564}', '\u{1056e}'),
-    ('\u{10570}', '\u{105ff}'),
+    ('\u{1057b}', '\u{1057b}'),
+    ('\u{1058b}', '\u{1058b}'),
+    ('\u{10593}', '\u{10593}'),
+    ('\u{10596}', '\u{10596}'),
+    ('\u{105a2}', '\u{105a2}'),
+    ('\u{105b2}', '\u{105b2}'),
+    ('\u{105ba}', '\u{105ba}'),
+    ('\u{105bd}', '\u{105ff}'),
     ('\u{10737}', '\u{1073f}'),
     ('\u{10756}', '\u{1075f}'),
-    ('\u{10768}', '\u{107ff}'),
+    ('\u{10768}', '\u{1077f}'),
+    ('\u{10786}', '\u{10786}'),
+    ('\u{107b1}', '\u{107b1}'),
+    ('\u{107bb}', '\u{107ff}'),
     ('\u{10806}', '\u{10807}'),
     ('\u{10809}', '\u{10809}'),
     ('\u{10836}', '\u{10836}'),
@@ -3150,15 +3284,16 @@
     ('\u{10e7f}', '\u{10e7f}'),
     ('\u{10eaa}', '\u{10eaa}'),
     ('\u{10eae}', '\u{10eaf}'),
-    ('\u{10eb2}', '\u{10eff}'),
+    ('\u{10eb2}', '\u{10efc}'),
     ('\u{10f28}', '\u{10f2f}'),
-    ('\u{10f5a}', '\u{10faf}'),
+    ('\u{10f5a}', '\u{10f6f}'),
+    ('\u{10f8a}', '\u{10faf}'),
     ('\u{10fcc}', '\u{10fdf}'),
     ('\u{10ff7}', '\u{10fff}'),
     ('\u{1104e}', '\u{11051}'),
-    ('\u{11070}', '\u{1107e}'),
+    ('\u{11076}', '\u{1107e}'),
     ('\u{110bd}', '\u{110bd}'),
-    ('\u{110c2}', '\u{110cf}'),
+    ('\u{110c3}', '\u{110cf}'),
     ('\u{110e9}', '\u{110ef}'),
     ('\u{110fa}', '\u{110ff}'),
     ('\u{11135}', '\u{11135}'),
@@ -3167,7 +3302,7 @@
     ('\u{111e0}', '\u{111e0}'),
     ('\u{111f5}', '\u{111ff}'),
     ('\u{11212}', '\u{11212}'),
-    ('\u{1123f}', '\u{1127f}'),
+    ('\u{11242}', '\u{1127f}'),
     ('\u{11287}', '\u{11287}'),
     ('\u{11289}', '\u{11289}'),
     ('\u{1128e}', '\u{1128e}'),
@@ -3199,11 +3334,11 @@
     ('\u{11645}', '\u{1164f}'),
     ('\u{1165a}', '\u{1165f}'),
     ('\u{1166d}', '\u{1167f}'),
-    ('\u{116b9}', '\u{116bf}'),
+    ('\u{116ba}', '\u{116bf}'),
     ('\u{116ca}', '\u{116ff}'),
     ('\u{1171b}', '\u{1171c}'),
     ('\u{1172c}', '\u{1172f}'),
-    ('\u{11740}', '\u{117ff}'),
+    ('\u{11747}', '\u{117ff}'),
     ('\u{1183c}', '\u{1189f}'),
     ('\u{118f3}', '\u{118fe}'),
     ('\u{11907}', '\u{11908}'),
@@ -3218,8 +3353,9 @@
     ('\u{119d8}', '\u{119d9}'),
     ('\u{119e5}', '\u{119ff}'),
     ('\u{11a48}', '\u{11a4f}'),
-    ('\u{11aa3}', '\u{11abf}'),
-    ('\u{11af9}', '\u{11bff}'),
+    ('\u{11aa3}', '\u{11aaf}'),
+    ('\u{11af9}', '\u{11aff}'),
+    ('\u{11b0a}', '\u{11bff}'),
     ('\u{11c09}', '\u{11c09}'),
     ('\u{11c37}', '\u{11c37}'),
     ('\u{11c46}', '\u{11c4f}'),
@@ -3240,19 +3376,25 @@
     ('\u{11d92}', '\u{11d92}'),
     ('\u{11d99}', '\u{11d9f}'),
     ('\u{11daa}', '\u{11edf}'),
-    ('\u{11ef9}', '\u{11faf}'),
+    ('\u{11ef9}', '\u{11eff}'),
+    ('\u{11f11}', '\u{11f11}'),
+    ('\u{11f3b}', '\u{11f3d}'),
+    ('\u{11f5a}', '\u{11faf}'),
     ('\u{11fb1}', '\u{11fbf}'),
     ('\u{11ff2}', '\u{11ffe}'),
     ('\u{1239a}', '\u{123ff}'),
     ('\u{1246f}', '\u{1246f}'),
     ('\u{12475}', '\u{1247f}'),
-    ('\u{12544}', '\u{12fff}'),
-    ('\u{1342f}', '\u{143ff}'),
+    ('\u{12544}', '\u{12f8f}'),
+    ('\u{12ff3}', '\u{12fff}'),
+    ('\u{13430}', '\u{1343f}'),
+    ('\u{13456}', '\u{143ff}'),
     ('\u{14647}', '\u{167ff}'),
     ('\u{16a39}', '\u{16a3f}'),
     ('\u{16a5f}', '\u{16a5f}'),
     ('\u{16a6a}', '\u{16a6d}'),
-    ('\u{16a70}', '\u{16acf}'),
+    ('\u{16abf}', '\u{16abf}'),
+    ('\u{16aca}', '\u{16acf}'),
     ('\u{16aee}', '\u{16aef}'),
     ('\u{16af6}', '\u{16aff}'),
     ('\u{16b46}', '\u{16b4f}'),
@@ -3268,21 +3410,30 @@
     ('\u{16ff2}', '\u{16fff}'),
     ('\u{187f8}', '\u{187ff}'),
     ('\u{18cd6}', '\u{18cff}'),
-    ('\u{18d09}', '\u{1afff}'),
-    ('\u{1b11f}', '\u{1b14f}'),
-    ('\u{1b153}', '\u{1b163}'),
+    ('\u{18d09}', '\u{1afef}'),
+    ('\u{1aff4}', '\u{1aff4}'),
+    ('\u{1affc}', '\u{1affc}'),
+    ('\u{1afff}', '\u{1afff}'),
+    ('\u{1b123}', '\u{1b131}'),
+    ('\u{1b133}', '\u{1b14f}'),
+    ('\u{1b153}', '\u{1b154}'),
+    ('\u{1b156}', '\u{1b163}'),
     ('\u{1b168}', '\u{1b16f}'),
     ('\u{1b2fc}', '\u{1bbff}'),
     ('\u{1bc6b}', '\u{1bc6f}'),
     ('\u{1bc7d}', '\u{1bc7f}'),
     ('\u{1bc89}', '\u{1bc8f}'),
     ('\u{1bc9a}', '\u{1bc9b}'),
-    ('\u{1bca0}', '\u{1cfff}'),
+    ('\u{1bca0}', '\u{1ceff}'),
+    ('\u{1cf2e}', '\u{1cf2f}'),
+    ('\u{1cf47}', '\u{1cf4f}'),
+    ('\u{1cfc4}', '\u{1cfff}'),
     ('\u{1d0f6}', '\u{1d0ff}'),
     ('\u{1d127}', '\u{1d128}'),
     ('\u{1d173}', '\u{1d17a}'),
-    ('\u{1d1e9}', '\u{1d1ff}'),
-    ('\u{1d246}', '\u{1d2df}'),
+    ('\u{1d1eb}', '\u{1d1ff}'),
+    ('\u{1d246}', '\u{1d2bf}'),
+    ('\u{1d2d4}', '\u{1d2df}'),
     ('\u{1d2f4}', '\u{1d2ff}'),
     ('\u{1d357}', '\u{1d35f}'),
     ('\u{1d379}', '\u{1d3ff}'),
@@ -3308,18 +3459,28 @@
     ('\u{1d7cc}', '\u{1d7cd}'),
     ('\u{1da8c}', '\u{1da9a}'),
     ('\u{1daa0}', '\u{1daa0}'),
-    ('\u{1dab0}', '\u{1dfff}'),
+    ('\u{1dab0}', '\u{1deff}'),
+    ('\u{1df1f}', '\u{1df24}'),
+    ('\u{1df2b}', '\u{1dfff}'),
     ('\u{1e007}', '\u{1e007}'),
     ('\u{1e019}', '\u{1e01a}'),
     ('\u{1e022}', '\u{1e022}'),
     ('\u{1e025}', '\u{1e025}'),
-    ('\u{1e02b}', '\u{1e0ff}'),
+    ('\u{1e02b}', '\u{1e02f}'),
+    ('\u{1e06e}', '\u{1e08e}'),
+    ('\u{1e090}', '\u{1e0ff}'),
     ('\u{1e12d}', '\u{1e12f}'),
     ('\u{1e13e}', '\u{1e13f}'),
     ('\u{1e14a}', '\u{1e14d}'),
-    ('\u{1e150}', '\u{1e2bf}'),
+    ('\u{1e150}', '\u{1e28f}'),
+    ('\u{1e2af}', '\u{1e2bf}'),
     ('\u{1e2fa}', '\u{1e2fe}'),
-    ('\u{1e300}', '\u{1e7ff}'),
+    ('\u{1e300}', '\u{1e4cf}'),
+    ('\u{1e4fa}', '\u{1e7df}'),
+    ('\u{1e7e7}', '\u{1e7e7}'),
+    ('\u{1e7ec}', '\u{1e7ec}'),
+    ('\u{1e7ef}', '\u{1e7ef}'),
+    ('\u{1e7ff}', '\u{1e7ff}'),
     ('\u{1e8c5}', '\u{1e8c6}'),
     ('\u{1e8d7}', '\u{1e8ff}'),
     ('\u{1e94c}', '\u{1e94f}'),
@@ -3373,39 +3534,39 @@
     ('\u{1f249}', '\u{1f24f}'),
     ('\u{1f252}', '\u{1f25f}'),
     ('\u{1f266}', '\u{1f2ff}'),
-    ('\u{1f6d8}', '\u{1f6df}'),
+    ('\u{1f6d8}', '\u{1f6db}'),
     ('\u{1f6ed}', '\u{1f6ef}'),
     ('\u{1f6fd}', '\u{1f6ff}'),
-    ('\u{1f774}', '\u{1f77f}'),
-    ('\u{1f7d9}', '\u{1f7df}'),
-    ('\u{1f7ec}', '\u{1f7ff}'),
+    ('\u{1f777}', '\u{1f77a}'),
+    ('\u{1f7da}', '\u{1f7df}'),
+    ('\u{1f7ec}', '\u{1f7ef}'),
+    ('\u{1f7f1}', '\u{1f7ff}'),
     ('\u{1f80c}', '\u{1f80f}'),
     ('\u{1f848}', '\u{1f84f}'),
     ('\u{1f85a}', '\u{1f85f}'),
     ('\u{1f888}', '\u{1f88f}'),
     ('\u{1f8ae}', '\u{1f8af}'),
     ('\u{1f8b2}', '\u{1f8ff}'),
-    ('\u{1f979}', '\u{1f979}'),
-    ('\u{1f9cc}', '\u{1f9cc}'),
     ('\u{1fa54}', '\u{1fa5f}'),
     ('\u{1fa6e}', '\u{1fa6f}'),
-    ('\u{1fa75}', '\u{1fa77}'),
-    ('\u{1fa7b}', '\u{1fa7f}'),
-    ('\u{1fa87}', '\u{1fa8f}'),
-    ('\u{1faa9}', '\u{1faaf}'),
-    ('\u{1fab7}', '\u{1fabf}'),
-    ('\u{1fac3}', '\u{1facf}'),
-    ('\u{1fad7}', '\u{1faff}'),
+    ('\u{1fa7d}', '\u{1fa7f}'),
+    ('\u{1fa89}', '\u{1fa8f}'),
+    ('\u{1fabe}', '\u{1fabe}'),
+    ('\u{1fac6}', '\u{1facd}'),
+    ('\u{1fadc}', '\u{1fadf}'),
+    ('\u{1fae9}', '\u{1faef}'),
+    ('\u{1faf9}', '\u{1faff}'),
     ('\u{1fb93}', '\u{1fb93}'),
     ('\u{1fbcb}', '\u{1fbef}'),
     ('\u{1fbfa}', '\u{1ffff}'),
-    ('\u{2a6de}', '\u{2a6ff}'),
-    ('\u{2b735}', '\u{2b73f}'),
+    ('\u{2a6e0}', '\u{2a6ff}'),
+    ('\u{2b73a}', '\u{2b73f}'),
     ('\u{2b81e}', '\u{2b81f}'),
     ('\u{2cea2}', '\u{2ceaf}'),
     ('\u{2ebe1}', '\u{2f7ff}'),
     ('\u{2fa1e}', '\u{2ffff}'),
-    ('\u{3134b}', '\u{e00ff}'),
+    ('\u{3134b}', '\u{3134f}'),
+    ('\u{323b0}', '\u{e00ff}'),
     ('\u{e01f0}', '\u{10ffff}'),
 ];
 
@@ -3433,8 +3594,9 @@
     ('ࠀ', 'ࠕ'),
     ('ࡀ', 'ࡘ'),
     ('ࡠ', 'ࡪ'),
-    ('ࢠ', 'ࢴ'),
-    ('ࢶ', '\u{8c7}'),
+    ('ࡰ', 'ࢇ'),
+    ('ࢉ', 'ࢎ'),
+    ('ࢠ', 'ࣈ'),
     ('ऄ', 'ह'),
     ('ऽ', 'ऽ'),
     ('ॐ', 'ॐ'),
@@ -3499,6 +3661,7 @@
     ('ప', 'హ'),
     ('ఽ', 'ఽ'),
     ('ౘ', 'ౚ'),
+    ('ౝ', 'ౝ'),
     ('ౠ', 'ౡ'),
     ('ಀ', 'ಀ'),
     ('ಅ', 'ಌ'),
@@ -3507,10 +3670,10 @@
     ('ಪ', 'ಳ'),
     ('ವ', 'ಹ'),
     ('ಽ', 'ಽ'),
-    ('ೞ', 'ೞ'),
+    ('ೝ', 'ೞ'),
     ('ೠ', 'ೡ'),
     ('ೱ', 'ೲ'),
-    ('\u{d04}', 'ഌ'),
+    ('ഄ', 'ഌ'),
     ('എ', 'ഐ'),
     ('ഒ', 'ഺ'),
     ('ഽ', 'ഽ'),
@@ -3571,9 +3734,8 @@
     ('ᚁ', 'ᚚ'),
     ('ᚠ', 'ᛪ'),
     ('ᛱ', 'ᛸ'),
-    ('ᜀ', 'ᜌ'),
-    ('ᜎ', 'ᜑ'),
-    ('ᜠ', 'ᜱ'),
+    ('ᜀ', 'ᜑ'),
+    ('ᜟ', 'ᜱ'),
     ('ᝀ', 'ᝑ'),
     ('ᝠ', 'ᝬ'),
     ('ᝮ', 'ᝰ'),
@@ -3593,7 +3755,7 @@
     ('ᨀ', 'ᨖ'),
     ('ᨠ', 'ᩔ'),
     ('ᬅ', 'ᬳ'),
-    ('ᭅ', 'ᭋ'),
+    ('ᭅ', 'ᭌ'),
     ('ᮃ', 'ᮠ'),
     ('ᮮ', 'ᮯ'),
     ('ᮺ', 'ᯥ'),
@@ -3623,11 +3785,10 @@
     ('ヿ', 'ヿ'),
     ('ㄅ', 'ㄯ'),
     ('ㄱ', 'ㆎ'),
-    ('ㆠ', '\u{31bf}'),
+    ('ㆠ', 'ㆿ'),
     ('ㇰ', 'ㇿ'),
-    ('㐀', '\u{4dbf}'),
-    ('一', '\u{9ffc}'),
-    ('ꀀ', 'ꀔ'),
+    ('㐀', '䶿'),
+    ('一', 'ꀔ'),
     ('ꀖ', 'ꒌ'),
     ('ꓐ', 'ꓷ'),
     ('ꔀ', 'ꘋ'),
@@ -3750,19 +3911,22 @@
     ('𐮀', '𐮑'),
     ('𐰀', '𐱈'),
     ('𐴀', '𐴣'),
-    ('\u{10e80}', '\u{10ea9}'),
-    ('\u{10eb0}', '\u{10eb1}'),
+    ('𐺀', '𐺩'),
+    ('𐺰', '𐺱'),
     ('𐼀', '𐼜'),
     ('𐼧', '𐼧'),
     ('𐼰', '𐽅'),
-    ('\u{10fb0}', '\u{10fc4}'),
+    ('𐽰', '𐾁'),
+    ('𐾰', '𐿄'),
     ('𐿠', '𐿶'),
     ('𑀃', '𑀷'),
+    ('𑁱', '𑁲'),
+    ('𑁵', '𑁵'),
     ('𑂃', '𑂯'),
     ('𑃐', '𑃨'),
     ('𑄃', '𑄦'),
     ('𑅄', '𑅄'),
-    ('\u{11147}', '\u{11147}'),
+    ('𑅇', '𑅇'),
     ('𑅐', '𑅲'),
     ('𑅶', '𑅶'),
     ('𑆃', '𑆲'),
@@ -3771,6 +3935,7 @@
     ('𑇜', '𑇜'),
     ('𑈀', '𑈑'),
     ('𑈓', '𑈫'),
+    ('𑈿', '𑉀'),
     ('𑊀', '𑊆'),
     ('𑊈', '𑊈'),
     ('𑊊', '𑊍'),
@@ -3788,7 +3953,7 @@
     ('𑍝', '𑍡'),
     ('𑐀', '𑐴'),
     ('𑑇', '𑑊'),
-    ('𑑟', '\u{11461}'),
+    ('𑑟', '𑑡'),
     ('𑒀', '𑒯'),
     ('𑓄', '𑓅'),
     ('𑓇', '𑓇'),
@@ -3799,14 +3964,15 @@
     ('𑚀', '𑚪'),
     ('𑚸', '𑚸'),
     ('𑜀', '𑜚'),
+    ('𑝀', '𑝆'),
     ('𑠀', '𑠫'),
-    ('𑣿', '\u{11906}'),
-    ('\u{11909}', '\u{11909}'),
-    ('\u{1190c}', '\u{11913}'),
-    ('\u{11915}', '\u{11916}'),
-    ('\u{11918}', '\u{1192f}'),
-    ('\u{1193f}', '\u{1193f}'),
-    ('\u{11941}', '\u{11941}'),
+    ('𑣿', '𑤆'),
+    ('𑤉', '𑤉'),
+    ('𑤌', '𑤓'),
+    ('𑤕', '𑤖'),
+    ('𑤘', '𑤯'),
+    ('𑤿', '𑤿'),
+    ('𑥁', '𑥁'),
     ('𑦠', '𑦧'),
     ('𑦪', '𑧐'),
     ('𑧡', '𑧡'),
@@ -3817,7 +3983,7 @@
     ('𑩐', '𑩐'),
     ('𑩜', '𑪉'),
     ('𑪝', '𑪝'),
-    ('𑫀', '𑫸'),
+    ('𑪰', '𑫸'),
     ('𑰀', '𑰈'),
     ('𑰊', '𑰮'),
     ('𑱀', '𑱀'),
@@ -3831,13 +3997,19 @@
     ('𑵪', '𑶉'),
     ('𑶘', '𑶘'),
     ('𑻠', '𑻲'),
-    ('\u{11fb0}', '\u{11fb0}'),
+    ('𑼂', '𑼂'),
+    ('𑼄', '𑼐'),
+    ('𑼒', '𑼳'),
+    ('𑾰', '𑾰'),
     ('𒀀', '𒎙'),
     ('𒒀', '𒕃'),
-    ('𓀀', '𓐮'),
+    ('𒾐', '𒿰'),
+    ('𓀀', '𓐯'),
+    ('𓑁', '𓑆'),
     ('𔐀', '𔙆'),
     ('𖠀', '𖨸'),
     ('𖩀', '𖩞'),
+    ('𖩰', '𖪾'),
     ('𖫐', '𖫭'),
     ('𖬀', '𖬯'),
     ('𖭣', '𖭷'),
@@ -3845,19 +4017,28 @@
     ('𖼀', '𖽊'),
     ('𖽐', '𖽐'),
     ('𗀀', '𘟷'),
-    ('𘠀', '\u{18cd5}'),
-    ('\u{18d00}', '\u{18d08}'),
-    ('𛀀', '𛄞'),
+    ('𘠀', '𘳕'),
+    ('𘴀', '𘴈'),
+    ('𛀀', '𛄢'),
+    ('𛄲', '𛄲'),
     ('𛅐', '𛅒'),
+    ('𛅕', '𛅕'),
     ('𛅤', '𛅧'),
     ('𛅰', '𛋻'),
     ('𛰀', '𛱪'),
     ('𛱰', '𛱼'),
     ('𛲀', '𛲈'),
     ('𛲐', '𛲙'),
+    ('𝼊', '𝼊'),
     ('𞄀', '𞄬'),
     ('𞅎', '𞅎'),
+    ('𞊐', '𞊭'),
     ('𞋀', '𞋫'),
+    ('𞓐', '𞓪'),
+    ('𞟠', '𞟦'),
+    ('𞟨', '𞟫'),
+    ('𞟭', '𞟮'),
+    ('𞟰', '𞟾'),
     ('𞠀', '𞣄'),
     ('𞸀', '𞸃'),
     ('𞸅', '𞸟'),
@@ -3892,13 +4073,14 @@
     ('𞺡', '𞺣'),
     ('𞺥', '𞺩'),
     ('𞺫', '𞺻'),
-    ('𠀀', '\u{2a6dd}'),
-    ('𪜀', '𫜴'),
+    ('𠀀', '𪛟'),
+    ('𪜀', '𫜹'),
     ('𫝀', '𫠝'),
     ('𫠠', '𬺡'),
     ('𬺰', '𮯠'),
     ('丽', '𪘀'),
-    ('\u{30000}', '\u{3134a}'),
+    ('𰀀', '𱍊'),
+    ('𱍐', '𲎯'),
 ];
 
 pub const OTHER_NUMBER: &'static [(char, char)] = &[
@@ -3955,7 +4137,7 @@
     ('𐹠', '𐹾'),
     ('𐼝', '𐼦'),
     ('𐽑', '𐽔'),
-    ('\u{10fc5}', '\u{10fcb}'),
+    ('𐿅', '𐿋'),
     ('𑁒', '𑁥'),
     ('𑇡', '𑇴'),
     ('𑜺', '𑜻'),
@@ -3964,6 +4146,7 @@
     ('𑿀', '𑿔'),
     ('𖭛', '𖭡'),
     ('𖺀', '𖺖'),
+    ('𝋀', '𝋓'),
     ('𝋠', '𝋳'),
     ('𝍠', '𝍸'),
     ('𞣇', '𞣏'),
@@ -3999,7 +4182,7 @@
     ('؉', '؊'),
     ('،', '؍'),
     ('؛', '؛'),
-    ('؞', '؟'),
+    ('؝', '؟'),
     ('٪', '٭'),
     ('۔', '۔'),
     ('܀', '܍'),
@@ -4036,6 +4219,7 @@
     ('᪠', '᪦'),
     ('᪨', '᪭'),
     ('᭚', '᭠'),
+    ('᭽', '᭾'),
     ('᯼', '᯿'),
     ('᰻', '᰿'),
     ('᱾', '᱿'),
@@ -4064,7 +4248,7 @@
     ('⸼', '⸿'),
     ('⹁', '⹁'),
     ('⹃', '⹏'),
-    ('\u{2e52}', '\u{2e52}'),
+    ('⹒', '⹔'),
     ('、', '〃'),
     ('〽', '〽'),
     ('・', '・'),
@@ -4118,6 +4302,7 @@
     ('𐬹', '𐬿'),
     ('𐮙', '𐮜'),
     ('𐽕', '𐽙'),
+    ('𐾆', '𐾉'),
     ('𑁇', '𑁍'),
     ('𑂻', '𑂼'),
     ('𑂾', '𑃁'),
@@ -4130,24 +4315,28 @@
     ('𑈸', '𑈽'),
     ('𑊩', '𑊩'),
     ('𑑋', '𑑏'),
-    ('\u{1145a}', '𑑛'),
+    ('𑑚', '𑑛'),
     ('𑑝', '𑑝'),
     ('𑓆', '𑓆'),
     ('𑗁', '𑗗'),
     ('𑙁', '𑙃'),
     ('𑙠', '𑙬'),
+    ('𑚹', '𑚹'),
     ('𑜼', '𑜾'),
     ('𑠻', '𑠻'),
-    ('\u{11944}', '\u{11946}'),
+    ('𑥄', '𑥆'),
     ('𑧢', '𑧢'),
     ('𑨿', '𑩆'),
     ('𑪚', '𑪜'),
     ('𑪞', '𑪢'),
+    ('𑬀', '𑬉'),
     ('𑱁', '𑱅'),
     ('𑱰', '𑱱'),
     ('𑻷', '𑻸'),
+    ('𑽃', '𑽏'),
     ('𑿿', '𑿿'),
     ('𒑰', '𒑴'),
+    ('𒿱', '𒿲'),
     ('𖩮', '𖩯'),
     ('𖫵', '𖫵'),
     ('𖬷', '𖬻'),
@@ -4240,9 +4429,9 @@
     ('⭅', '⭆'),
     ('⭍', '⭳'),
     ('⭶', '⮕'),
-    ('\u{2b97}', '⯿'),
+    ('⮗', '⯿'),
     ('⳥', '⳪'),
-    ('\u{2e50}', '\u{2e51}'),
+    ('⹐', '⹑'),
     ('⺀', '⺙'),
     ('⺛', '⻳'),
     ('⼀', '⿕'),
@@ -4267,7 +4456,9 @@
     ('꠶', '꠷'),
     ('꠹', '꠹'),
     ('꩷', '꩹'),
-    ('﷽', '﷽'),
+    ('﵀', '﵏'),
+    ('﷏', '﷏'),
+    ('﷽', '﷿'),
     ('¦', '¦'),
     ('│', '│'),
     ('■', '○'),
@@ -4275,7 +4466,7 @@
     ('𐄷', '𐄿'),
     ('𐅹', '𐆉'),
     ('𐆌', '𐆎'),
-    ('𐆐', '\u{1019c}'),
+    ('𐆐', '𐆜'),
     ('𐆠', '𐆠'),
     ('𐇐', '𐇼'),
     ('𐡷', '𐡸'),
@@ -4286,13 +4477,14 @@
     ('𖬼', '𖬿'),
     ('𖭅', '𖭅'),
     ('𛲜', '𛲜'),
+    ('𜽐', '𜿃'),
     ('𝀀', '𝃵'),
     ('𝄀', '𝄦'),
     ('𝄩', '𝅘𝅥𝅲'),
     ('𝅪', '𝅬'),
     ('𝆃', '𝆄'),
     ('𝆌', '𝆩'),
-    ('𝆮', '𝇨'),
+    ('𝆮', '𝇪'),
     ('𝈀', '𝉁'),
     ('𝉅', '𝉅'),
     ('𝌀', '𝍖'),
@@ -4310,38 +4502,37 @@
     ('🂱', '🂿'),
     ('🃁', '🃏'),
     ('🃑', '🃵'),
-    ('\u{1f10d}', '\u{1f1ad}'),
+    ('🄍', '🆭'),
     ('🇦', '🈂'),
     ('🈐', '🈻'),
     ('🉀', '🉈'),
     ('🉐', '🉑'),
     ('🉠', '🉥'),
     ('🌀', '🏺'),
-    ('🐀', '\u{1f6d7}'),
-    ('🛠', '🛬'),
-    ('🛰', '\u{1f6fc}'),
-    ('🜀', '🝳'),
-    ('🞀', '🟘'),
+    ('🐀', '🛗'),
+    ('🛜', '🛬'),
+    ('🛰', '🛼'),
+    ('🜀', '🝶'),
+    ('🝻', '🟙'),
     ('🟠', '🟫'),
+    ('🟰', '🟰'),
     ('🠀', '🠋'),
     ('🠐', '🡇'),
     ('🡐', '🡙'),
     ('🡠', '🢇'),
     ('🢐', '🢭'),
-    ('\u{1f8b0}', '\u{1f8b1}'),
-    ('🤀', '\u{1f978}'),
-    ('🥺', '\u{1f9cb}'),
-    ('🧍', '🩓'),
+    ('🢰', '🢱'),
+    ('🤀', '🩓'),
     ('🩠', '🩭'),
-    ('🩰', '\u{1fa74}'),
-    ('🩸', '🩺'),
-    ('🪀', '\u{1fa86}'),
-    ('🪐', '\u{1faa8}'),
-    ('\u{1fab0}', '\u{1fab6}'),
-    ('\u{1fac0}', '\u{1fac2}'),
-    ('\u{1fad0}', '\u{1fad6}'),
-    ('\u{1fb00}', '\u{1fb92}'),
-    ('\u{1fb94}', '\u{1fbca}'),
+    ('🩰', '🩼'),
+    ('🪀', '🪈'),
+    ('🪐', '🪽'),
+    ('🪿', '🫅'),
+    ('🫎', '🫛'),
+    ('🫠', '🫨'),
+    ('🫰', '🫸'),
+    ('🬀', '🮒'),
+    ('🮔', '🯊'),
 ];
 
 pub const PARAGRAPH_SEPARATOR: &'static [(char, char)] =
@@ -4381,7 +4572,7 @@
     ('؉', '؊'),
     ('،', '؍'),
     ('؛', '؛'),
-    ('؞', '؟'),
+    ('؝', '؟'),
     ('٪', '٭'),
     ('۔', '۔'),
     ('܀', '܍'),
@@ -4420,6 +4611,7 @@
     ('᪠', '᪦'),
     ('᪨', '᪭'),
     ('᭚', '᭠'),
+    ('᭽', '᭾'),
     ('᯼', '᯿'),
     ('᰻', '᰿'),
     ('᱾', '᱿'),
@@ -4444,7 +4636,7 @@
     ('⵰', '⵰'),
     ('⸀', '⸮'),
     ('⸰', '⹏'),
-    ('\u{2e52}', '\u{2e52}'),
+    ('⹒', '⹝'),
     ('、', '〃'),
     ('〈', '】'),
     ('〔', '〟'),
@@ -4498,8 +4690,9 @@
     ('𐫰', '𐫶'),
     ('𐬹', '𐬿'),
     ('𐮙', '𐮜'),
-    ('\u{10ead}', '\u{10ead}'),
+    ('𐺭', '𐺭'),
     ('𐽕', '𐽙'),
+    ('𐾆', '𐾉'),
     ('𑁇', '𑁍'),
     ('𑂻', '𑂼'),
     ('𑂾', '𑃁'),
@@ -4512,24 +4705,28 @@
     ('𑈸', '𑈽'),
     ('𑊩', '𑊩'),
     ('𑑋', '𑑏'),
-    ('\u{1145a}', '𑑛'),
+    ('𑑚', '𑑛'),
     ('𑑝', '𑑝'),
     ('𑓆', '𑓆'),
     ('𑗁', '𑗗'),
     ('𑙁', '𑙃'),
     ('𑙠', '𑙬'),
+    ('𑚹', '𑚹'),
     ('𑜼', '𑜾'),
     ('𑠻', '𑠻'),
-    ('\u{11944}', '\u{11946}'),
+    ('𑥄', '𑥆'),
     ('𑧢', '𑧢'),
     ('𑨿', '𑩆'),
     ('𑪚', '𑪜'),
     ('𑪞', '𑪢'),
+    ('𑬀', '𑬉'),
     ('𑱁', '𑱅'),
     ('𑱰', '𑱱'),
     ('𑻷', '𑻸'),
+    ('𑽃', '𑽏'),
     ('𑿿', '𑿿'),
     ('𒑰', '𒑴'),
+    ('𒿱', '𒿲'),
     ('𖩮', '𖩯'),
     ('𖫵', '𖫵'),
     ('𖬷', '𖬻'),
@@ -4598,6 +4795,7 @@
     ('ೇ', 'ೈ'),
     ('ೊ', 'ೋ'),
     ('\u{cd5}', '\u{cd6}'),
+    ('ೳ', 'ೳ'),
     ('ം', 'ഃ'),
     ('\u{d3e}', 'ീ'),
     ('െ', 'ൈ'),
@@ -4620,6 +4818,8 @@
     ('ႇ', 'ႌ'),
     ('ႏ', 'ႏ'),
     ('ႚ', 'ႜ'),
+    ('᜕', '᜕'),
+    ('᜴', '᜴'),
     ('ា', 'ា'),
     ('ើ', 'ៅ'),
     ('ះ', 'ៈ'),
@@ -4682,7 +4882,7 @@
     ('𑆂', '𑆂'),
     ('𑆳', '𑆵'),
     ('𑆿', '𑇀'),
-    ('\u{111ce}', '\u{111ce}'),
+    ('𑇎', '𑇎'),
     ('𑈬', '𑈮'),
     ('𑈲', '𑈳'),
     ('𑈵', '𑈵'),
@@ -4714,11 +4914,11 @@
     ('𑜦', '𑜦'),
     ('𑠬', '𑠮'),
     ('𑠸', '𑠸'),
-    ('\u{11930}', '\u{11935}'),
-    ('\u{11937}', '\u{11938}'),
-    ('\u{1193d}', '\u{1193d}'),
-    ('\u{11940}', '\u{11940}'),
-    ('\u{11942}', '\u{11942}'),
+    ('\u{11930}', '𑤵'),
+    ('𑤷', '𑤸'),
+    ('𑤽', '𑤽'),
+    ('𑥀', '𑥀'),
+    ('𑥂', '𑥂'),
     ('𑧑', '𑧓'),
     ('𑧜', '𑧟'),
     ('𑧤', '𑧤'),
@@ -4734,8 +4934,12 @@
     ('𑶓', '𑶔'),
     ('𑶖', '𑶖'),
     ('𑻵', '𑻶'),
+    ('𑼃', '𑼃'),
+    ('𑼴', '𑼵'),
+    ('𑼾', '𑼿'),
+    ('𑽁', '𑽁'),
     ('𖽑', '𖾇'),
-    ('\u{16ff0}', '\u{16ff1}'),
+    ('𖿰', '𖿱'),
     ('\u{1d165}', '𝅦'),
     ('𝅭', '\u{1d172}'),
 ];
@@ -4774,6 +4978,7 @@
     ('۽', '۾'),
     ('߶', '߶'),
     ('߾', '߿'),
+    ('࢈', '࢈'),
     ('৲', '৳'),
     ('৺', '৻'),
     ('૱', '૱'),
@@ -4812,7 +5017,7 @@
     ('⁒', '⁒'),
     ('⁺', '⁼'),
     ('₊', '₌'),
-    ('₠', '₿'),
+    ('₠', '⃀'),
     ('℀', '℁'),
     ('℃', '℆'),
     ('℈', '℉'),
@@ -4841,9 +5046,9 @@
     ('⧜', '⧻'),
     ('⧾', '⭳'),
     ('⭶', '⮕'),
-    ('\u{2b97}', '⯿'),
+    ('⮗', '⯿'),
     ('⳥', '⳪'),
-    ('\u{2e50}', '\u{2e51}'),
+    ('⹐', '⹑'),
     ('⺀', '⺙'),
     ('⺛', '⻳'),
     ('⼀', '⿕'),
@@ -4872,10 +5077,12 @@
     ('꠶', '꠹'),
     ('꩷', '꩹'),
     ('꭛', '꭛'),
-    ('\u{ab6a}', '\u{ab6b}'),
+    ('꭪', '꭫'),
     ('﬩', '﬩'),
-    ('﮲', '﯁'),
-    ('﷼', '﷽'),
+    ('﮲', '﯂'),
+    ('﵀', '﵏'),
+    ('﷏', '﷏'),
+    ('﷼', '﷿'),
     ('﹢', '﹢'),
     ('﹤', '﹦'),
     ('﹩', '﹩'),
@@ -4892,7 +5099,7 @@
     ('𐄷', '𐄿'),
     ('𐅹', '𐆉'),
     ('𐆌', '𐆎'),
-    ('𐆐', '\u{1019c}'),
+    ('𐆐', '𐆜'),
     ('𐆠', '𐆠'),
     ('𐇐', '𐇼'),
     ('𐡷', '𐡸'),
@@ -4902,13 +5109,14 @@
     ('𖬼', '𖬿'),
     ('𖭅', '𖭅'),
     ('𛲜', '𛲜'),
+    ('𜽐', '𜿃'),
     ('𝀀', '𝃵'),
     ('𝄀', '𝄦'),
     ('𝄩', '𝅘𝅥𝅲'),
     ('𝅪', '𝅬'),
     ('𝆃', '𝆄'),
     ('𝆌', '𝆩'),
-    ('𝆮', '𝇨'),
+    ('𝆮', '𝇪'),
     ('𝈀', '𝉁'),
     ('𝉅', '𝉅'),
     ('𝌀', '𝍖'),
@@ -4939,37 +5147,36 @@
     ('🂱', '🂿'),
     ('🃁', '🃏'),
     ('🃑', '🃵'),
-    ('\u{1f10d}', '\u{1f1ad}'),
+    ('🄍', '🆭'),
     ('🇦', '🈂'),
     ('🈐', '🈻'),
     ('🉀', '🉈'),
     ('🉐', '🉑'),
     ('🉠', '🉥'),
-    ('🌀', '\u{1f6d7}'),
-    ('🛠', '🛬'),
-    ('🛰', '\u{1f6fc}'),
-    ('🜀', '🝳'),
-    ('🞀', '🟘'),
+    ('🌀', '🛗'),
+    ('🛜', '🛬'),
+    ('🛰', '🛼'),
+    ('🜀', '🝶'),
+    ('🝻', '🟙'),
     ('🟠', '🟫'),
+    ('🟰', '🟰'),
     ('🠀', '🠋'),
     ('🠐', '🡇'),
     ('🡐', '🡙'),
     ('🡠', '🢇'),
     ('🢐', '🢭'),
-    ('\u{1f8b0}', '\u{1f8b1}'),
-    ('🤀', '\u{1f978}'),
-    ('🥺', '\u{1f9cb}'),
-    ('🧍', '🩓'),
+    ('🢰', '🢱'),
+    ('🤀', '🩓'),
     ('🩠', '🩭'),
-    ('🩰', '\u{1fa74}'),
-    ('🩸', '🩺'),
-    ('🪀', '\u{1fa86}'),
-    ('🪐', '\u{1faa8}'),
-    ('\u{1fab0}', '\u{1fab6}'),
-    ('\u{1fac0}', '\u{1fac2}'),
-    ('\u{1fad0}', '\u{1fad6}'),
-    ('\u{1fb00}', '\u{1fb92}'),
-    ('\u{1fb94}', '\u{1fbca}'),
+    ('🩰', '🩼'),
+    ('🪀', '🪈'),
+    ('🪐', '🪽'),
+    ('🪿', '🫅'),
+    ('🫎', '🫛'),
+    ('🫠', '🫨'),
+    ('🫰', '🫸'),
+    ('🬀', '🮒'),
+    ('🮔', '🯊'),
 ];
 
 pub const TITLECASE_LETTER: &'static [(char, char)] = &[
@@ -4998,7 +5205,6 @@
     ('\u{5c8}', '\u{5cf}'),
     ('\u{5eb}', '\u{5ee}'),
     ('\u{5f5}', '\u{5ff}'),
-    ('\u{61d}', '\u{61d}'),
     ('\u{70e}', '\u{70e}'),
     ('\u{74b}', '\u{74c}'),
     ('\u{7b2}', '\u{7bf}'),
@@ -5007,9 +5213,9 @@
     ('\u{83f}', '\u{83f}'),
     ('\u{85c}', '\u{85d}'),
     ('\u{85f}', '\u{85f}'),
-    ('\u{86b}', '\u{89f}'),
-    ('\u{8b5}', '\u{8b5}'),
-    ('\u{8c8}', '\u{8d2}'),
+    ('\u{86b}', '\u{86f}'),
+    ('\u{88f}', '\u{88f}'),
+    ('\u{892}', '\u{897}'),
     ('\u{984}', '\u{984}'),
     ('\u{98d}', '\u{98e}'),
     ('\u{991}', '\u{992}'),
@@ -5087,12 +5293,13 @@
     ('\u{c0d}', '\u{c0d}'),
     ('\u{c11}', '\u{c11}'),
     ('\u{c29}', '\u{c29}'),
-    ('\u{c3a}', '\u{c3c}'),
+    ('\u{c3a}', '\u{c3b}'),
     ('\u{c45}', '\u{c45}'),
     ('\u{c49}', '\u{c49}'),
     ('\u{c4e}', '\u{c54}'),
     ('\u{c57}', '\u{c57}'),
-    ('\u{c5b}', '\u{c5f}'),
+    ('\u{c5b}', '\u{c5c}'),
+    ('\u{c5e}', '\u{c5f}'),
     ('\u{c64}', '\u{c65}'),
     ('\u{c70}', '\u{c76}'),
     ('\u{c8d}', '\u{c8d}'),
@@ -5103,11 +5310,11 @@
     ('\u{cc5}', '\u{cc5}'),
     ('\u{cc9}', '\u{cc9}'),
     ('\u{cce}', '\u{cd4}'),
-    ('\u{cd7}', '\u{cdd}'),
+    ('\u{cd7}', '\u{cdc}'),
     ('\u{cdf}', '\u{cdf}'),
     ('\u{ce4}', '\u{ce5}'),
     ('\u{cf0}', '\u{cf0}'),
-    ('\u{cf3}', '\u{cff}'),
+    ('\u{cf4}', '\u{cff}'),
     ('\u{d0d}', '\u{d0d}'),
     ('\u{d11}', '\u{d11}'),
     ('\u{d45}', '\u{d45}'),
@@ -5137,7 +5344,7 @@
     ('\u{ebe}', '\u{ebf}'),
     ('\u{ec5}', '\u{ec5}'),
     ('\u{ec7}', '\u{ec7}'),
-    ('\u{ece}', '\u{ecf}'),
+    ('\u{ecf}', '\u{ecf}'),
     ('\u{eda}', '\u{edb}'),
     ('\u{ee0}', '\u{eff}'),
     ('\u{f48}', '\u{f48}'),
@@ -5171,8 +5378,7 @@
     ('\u{13fe}', '\u{13ff}'),
     ('\u{169d}', '\u{169f}'),
     ('\u{16f9}', '\u{16ff}'),
-    ('\u{170d}', '\u{170d}'),
-    ('\u{1715}', '\u{171f}'),
+    ('\u{1716}', '\u{171e}'),
     ('\u{1737}', '\u{173f}'),
     ('\u{1754}', '\u{175f}'),
     ('\u{176d}', '\u{176d}'),
@@ -5181,7 +5387,6 @@
     ('\u{17de}', '\u{17df}'),
     ('\u{17ea}', '\u{17ef}'),
     ('\u{17fa}', '\u{17ff}'),
-    ('\u{180f}', '\u{180f}'),
     ('\u{181a}', '\u{181f}'),
     ('\u{1879}', '\u{187f}'),
     ('\u{18ab}', '\u{18af}'),
@@ -5201,9 +5406,9 @@
     ('\u{1a8a}', '\u{1a8f}'),
     ('\u{1a9a}', '\u{1a9f}'),
     ('\u{1aae}', '\u{1aaf}'),
-    ('\u{1ac1}', '\u{1aff}'),
-    ('\u{1b4c}', '\u{1b4f}'),
-    ('\u{1b7d}', '\u{1b7f}'),
+    ('\u{1acf}', '\u{1aff}'),
+    ('\u{1b4d}', '\u{1b4f}'),
+    ('\u{1b7f}', '\u{1b7f}'),
     ('\u{1bf4}', '\u{1bfb}'),
     ('\u{1c38}', '\u{1c3a}'),
     ('\u{1c4a}', '\u{1c4c}'),
@@ -5211,7 +5416,6 @@
     ('\u{1cbb}', '\u{1cbc}'),
     ('\u{1cc8}', '\u{1ccf}'),
     ('\u{1cfb}', '\u{1cff}'),
-    ('\u{1dfa}', '\u{1dfa}'),
     ('\u{1f16}', '\u{1f17}'),
     ('\u{1f1e}', '\u{1f1f}'),
     ('\u{1f46}', '\u{1f47}'),
@@ -5232,15 +5436,13 @@
     ('\u{2072}', '\u{2073}'),
     ('\u{208f}', '\u{208f}'),
     ('\u{209d}', '\u{209f}'),
-    ('\u{20c0}', '\u{20cf}'),
+    ('\u{20c1}', '\u{20cf}'),
     ('\u{20f1}', '\u{20ff}'),
     ('\u{218c}', '\u{218f}'),
     ('\u{2427}', '\u{243f}'),
     ('\u{244b}', '\u{245f}'),
     ('\u{2b74}', '\u{2b75}'),
     ('\u{2b96}', '\u{2b96}'),
-    ('\u{2c2f}', '\u{2c2f}'),
-    ('\u{2c5f}', '\u{2c5f}'),
     ('\u{2cf4}', '\u{2cf8}'),
     ('\u{2d26}', '\u{2d26}'),
     ('\u{2d28}', '\u{2d2c}'),
@@ -5256,7 +5458,7 @@
     ('\u{2dcf}', '\u{2dcf}'),
     ('\u{2dd7}', '\u{2dd7}'),
     ('\u{2ddf}', '\u{2ddf}'),
-    ('\u{2e53}', '\u{2e7f}'),
+    ('\u{2e5e}', '\u{2e7f}'),
     ('\u{2e9a}', '\u{2e9a}'),
     ('\u{2ef4}', '\u{2eff}'),
     ('\u{2fd6}', '\u{2fef}'),
@@ -5268,13 +5470,14 @@
     ('\u{318f}', '\u{318f}'),
     ('\u{31e4}', '\u{31ef}'),
     ('\u{321f}', '\u{321f}'),
-    ('\u{9ffd}', '\u{9fff}'),
     ('\u{a48d}', '\u{a48f}'),
     ('\u{a4c7}', '\u{a4cf}'),
     ('\u{a62c}', '\u{a63f}'),
     ('\u{a6f8}', '\u{a6ff}'),
-    ('\u{a7c0}', '\u{a7c1}'),
-    ('\u{a7cb}', '\u{a7f4}'),
+    ('\u{a7cb}', '\u{a7cf}'),
+    ('\u{a7d2}', '\u{a7d2}'),
+    ('\u{a7d4}', '\u{a7d4}'),
+    ('\u{a7da}', '\u{a7f1}'),
     ('\u{a82d}', '\u{a82f}'),
     ('\u{a83a}', '\u{a83f}'),
     ('\u{a878}', '\u{a87f}'),
@@ -5310,11 +5513,10 @@
     ('\u{fb3f}', '\u{fb3f}'),
     ('\u{fb42}', '\u{fb42}'),
     ('\u{fb45}', '\u{fb45}'),
-    ('\u{fbc2}', '\u{fbd2}'),
-    ('\u{fd40}', '\u{fd4f}'),
+    ('\u{fbc3}', '\u{fbd2}'),
     ('\u{fd90}', '\u{fd91}'),
-    ('\u{fdc8}', '\u{fdef}'),
-    ('\u{fdfe}', '\u{fdff}'),
+    ('\u{fdc8}', '\u{fdce}'),
+    ('\u{fdd0}', '\u{fdef}'),
     ('\u{fe1a}', '\u{fe1f}'),
     ('\u{fe53}', '\u{fe53}'),
     ('\u{fe67}', '\u{fe67}'),
@@ -5358,10 +5560,20 @@
     ('\u{104fc}', '\u{104ff}'),
     ('\u{10528}', '\u{1052f}'),
     ('\u{10564}', '\u{1056e}'),
-    ('\u{10570}', '\u{105ff}'),
+    ('\u{1057b}', '\u{1057b}'),
+    ('\u{1058b}', '\u{1058b}'),
+    ('\u{10593}', '\u{10593}'),
+    ('\u{10596}', '\u{10596}'),
+    ('\u{105a2}', '\u{105a2}'),
+    ('\u{105b2}', '\u{105b2}'),
+    ('\u{105ba}', '\u{105ba}'),
+    ('\u{105bd}', '\u{105ff}'),
     ('\u{10737}', '\u{1073f}'),
     ('\u{10756}', '\u{1075f}'),
-    ('\u{10768}', '\u{107ff}'),
+    ('\u{10768}', '\u{1077f}'),
+    ('\u{10786}', '\u{10786}'),
+    ('\u{107b1}', '\u{107b1}'),
+    ('\u{107bb}', '\u{107ff}'),
     ('\u{10806}', '\u{10807}'),
     ('\u{10809}', '\u{10809}'),
     ('\u{10836}', '\u{10836}'),
@@ -5402,14 +5614,15 @@
     ('\u{10e7f}', '\u{10e7f}'),
     ('\u{10eaa}', '\u{10eaa}'),
     ('\u{10eae}', '\u{10eaf}'),
-    ('\u{10eb2}', '\u{10eff}'),
+    ('\u{10eb2}', '\u{10efc}'),
     ('\u{10f28}', '\u{10f2f}'),
-    ('\u{10f5a}', '\u{10faf}'),
+    ('\u{10f5a}', '\u{10f6f}'),
+    ('\u{10f8a}', '\u{10faf}'),
     ('\u{10fcc}', '\u{10fdf}'),
     ('\u{10ff7}', '\u{10fff}'),
     ('\u{1104e}', '\u{11051}'),
-    ('\u{11070}', '\u{1107e}'),
-    ('\u{110c2}', '\u{110cc}'),
+    ('\u{11076}', '\u{1107e}'),
+    ('\u{110c3}', '\u{110cc}'),
     ('\u{110ce}', '\u{110cf}'),
     ('\u{110e9}', '\u{110ef}'),
     ('\u{110fa}', '\u{110ff}'),
@@ -5419,7 +5632,7 @@
     ('\u{111e0}', '\u{111e0}'),
     ('\u{111f5}', '\u{111ff}'),
     ('\u{11212}', '\u{11212}'),
-    ('\u{1123f}', '\u{1127f}'),
+    ('\u{11242}', '\u{1127f}'),
     ('\u{11287}', '\u{11287}'),
     ('\u{11289}', '\u{11289}'),
     ('\u{1128e}', '\u{1128e}'),
@@ -5451,11 +5664,11 @@
     ('\u{11645}', '\u{1164f}'),
     ('\u{1165a}', '\u{1165f}'),
     ('\u{1166d}', '\u{1167f}'),
-    ('\u{116b9}', '\u{116bf}'),
+    ('\u{116ba}', '\u{116bf}'),
     ('\u{116ca}', '\u{116ff}'),
     ('\u{1171b}', '\u{1171c}'),
     ('\u{1172c}', '\u{1172f}'),
-    ('\u{11740}', '\u{117ff}'),
+    ('\u{11747}', '\u{117ff}'),
     ('\u{1183c}', '\u{1189f}'),
     ('\u{118f3}', '\u{118fe}'),
     ('\u{11907}', '\u{11908}'),
@@ -5470,8 +5683,9 @@
     ('\u{119d8}', '\u{119d9}'),
     ('\u{119e5}', '\u{119ff}'),
     ('\u{11a48}', '\u{11a4f}'),
-    ('\u{11aa3}', '\u{11abf}'),
-    ('\u{11af9}', '\u{11bff}'),
+    ('\u{11aa3}', '\u{11aaf}'),
+    ('\u{11af9}', '\u{11aff}'),
+    ('\u{11b0a}', '\u{11bff}'),
     ('\u{11c09}', '\u{11c09}'),
     ('\u{11c37}', '\u{11c37}'),
     ('\u{11c46}', '\u{11c4f}'),
@@ -5492,20 +5706,24 @@
     ('\u{11d92}', '\u{11d92}'),
     ('\u{11d99}', '\u{11d9f}'),
     ('\u{11daa}', '\u{11edf}'),
-    ('\u{11ef9}', '\u{11faf}'),
+    ('\u{11ef9}', '\u{11eff}'),
+    ('\u{11f11}', '\u{11f11}'),
+    ('\u{11f3b}', '\u{11f3d}'),
+    ('\u{11f5a}', '\u{11faf}'),
     ('\u{11fb1}', '\u{11fbf}'),
     ('\u{11ff2}', '\u{11ffe}'),
     ('\u{1239a}', '\u{123ff}'),
     ('\u{1246f}', '\u{1246f}'),
     ('\u{12475}', '\u{1247f}'),
-    ('\u{12544}', '\u{12fff}'),
-    ('\u{1342f}', '\u{1342f}'),
-    ('\u{13439}', '\u{143ff}'),
+    ('\u{12544}', '\u{12f8f}'),
+    ('\u{12ff3}', '\u{12fff}'),
+    ('\u{13456}', '\u{143ff}'),
     ('\u{14647}', '\u{167ff}'),
     ('\u{16a39}', '\u{16a3f}'),
     ('\u{16a5f}', '\u{16a5f}'),
     ('\u{16a6a}', '\u{16a6d}'),
-    ('\u{16a70}', '\u{16acf}'),
+    ('\u{16abf}', '\u{16abf}'),
+    ('\u{16aca}', '\u{16acf}'),
     ('\u{16aee}', '\u{16aef}'),
     ('\u{16af6}', '\u{16aff}'),
     ('\u{16b46}', '\u{16b4f}'),
@@ -5521,20 +5739,29 @@
     ('\u{16ff2}', '\u{16fff}'),
     ('\u{187f8}', '\u{187ff}'),
     ('\u{18cd6}', '\u{18cff}'),
-    ('\u{18d09}', '\u{1afff}'),
-    ('\u{1b11f}', '\u{1b14f}'),
-    ('\u{1b153}', '\u{1b163}'),
+    ('\u{18d09}', '\u{1afef}'),
+    ('\u{1aff4}', '\u{1aff4}'),
+    ('\u{1affc}', '\u{1affc}'),
+    ('\u{1afff}', '\u{1afff}'),
+    ('\u{1b123}', '\u{1b131}'),
+    ('\u{1b133}', '\u{1b14f}'),
+    ('\u{1b153}', '\u{1b154}'),
+    ('\u{1b156}', '\u{1b163}'),
     ('\u{1b168}', '\u{1b16f}'),
     ('\u{1b2fc}', '\u{1bbff}'),
     ('\u{1bc6b}', '\u{1bc6f}'),
     ('\u{1bc7d}', '\u{1bc7f}'),
     ('\u{1bc89}', '\u{1bc8f}'),
     ('\u{1bc9a}', '\u{1bc9b}'),
-    ('\u{1bca4}', '\u{1cfff}'),
+    ('\u{1bca4}', '\u{1ceff}'),
+    ('\u{1cf2e}', '\u{1cf2f}'),
+    ('\u{1cf47}', '\u{1cf4f}'),
+    ('\u{1cfc4}', '\u{1cfff}'),
     ('\u{1d0f6}', '\u{1d0ff}'),
     ('\u{1d127}', '\u{1d128}'),
-    ('\u{1d1e9}', '\u{1d1ff}'),
-    ('\u{1d246}', '\u{1d2df}'),
+    ('\u{1d1eb}', '\u{1d1ff}'),
+    ('\u{1d246}', '\u{1d2bf}'),
+    ('\u{1d2d4}', '\u{1d2df}'),
     ('\u{1d2f4}', '\u{1d2ff}'),
     ('\u{1d357}', '\u{1d35f}'),
     ('\u{1d379}', '\u{1d3ff}'),
@@ -5560,18 +5787,28 @@
     ('\u{1d7cc}', '\u{1d7cd}'),
     ('\u{1da8c}', '\u{1da9a}'),
     ('\u{1daa0}', '\u{1daa0}'),
-    ('\u{1dab0}', '\u{1dfff}'),
+    ('\u{1dab0}', '\u{1deff}'),
+    ('\u{1df1f}', '\u{1df24}'),
+    ('\u{1df2b}', '\u{1dfff}'),
     ('\u{1e007}', '\u{1e007}'),
     ('\u{1e019}', '\u{1e01a}'),
     ('\u{1e022}', '\u{1e022}'),
     ('\u{1e025}', '\u{1e025}'),
-    ('\u{1e02b}', '\u{1e0ff}'),
+    ('\u{1e02b}', '\u{1e02f}'),
+    ('\u{1e06e}', '\u{1e08e}'),
+    ('\u{1e090}', '\u{1e0ff}'),
     ('\u{1e12d}', '\u{1e12f}'),
     ('\u{1e13e}', '\u{1e13f}'),
     ('\u{1e14a}', '\u{1e14d}'),
-    ('\u{1e150}', '\u{1e2bf}'),
+    ('\u{1e150}', '\u{1e28f}'),
+    ('\u{1e2af}', '\u{1e2bf}'),
     ('\u{1e2fa}', '\u{1e2fe}'),
-    ('\u{1e300}', '\u{1e7ff}'),
+    ('\u{1e300}', '\u{1e4cf}'),
+    ('\u{1e4fa}', '\u{1e7df}'),
+    ('\u{1e7e7}', '\u{1e7e7}'),
+    ('\u{1e7ec}', '\u{1e7ec}'),
+    ('\u{1e7ef}', '\u{1e7ef}'),
+    ('\u{1e7ff}', '\u{1e7ff}'),
     ('\u{1e8c5}', '\u{1e8c6}'),
     ('\u{1e8d7}', '\u{1e8ff}'),
     ('\u{1e94c}', '\u{1e94f}'),
@@ -5625,39 +5862,39 @@
     ('\u{1f249}', '\u{1f24f}'),
     ('\u{1f252}', '\u{1f25f}'),
     ('\u{1f266}', '\u{1f2ff}'),
-    ('\u{1f6d8}', '\u{1f6df}'),
+    ('\u{1f6d8}', '\u{1f6db}'),
     ('\u{1f6ed}', '\u{1f6ef}'),
     ('\u{1f6fd}', '\u{1f6ff}'),
-    ('\u{1f774}', '\u{1f77f}'),
-    ('\u{1f7d9}', '\u{1f7df}'),
-    ('\u{1f7ec}', '\u{1f7ff}'),
+    ('\u{1f777}', '\u{1f77a}'),
+    ('\u{1f7da}', '\u{1f7df}'),
+    ('\u{1f7ec}', '\u{1f7ef}'),
+    ('\u{1f7f1}', '\u{1f7ff}'),
     ('\u{1f80c}', '\u{1f80f}'),
     ('\u{1f848}', '\u{1f84f}'),
     ('\u{1f85a}', '\u{1f85f}'),
     ('\u{1f888}', '\u{1f88f}'),
     ('\u{1f8ae}', '\u{1f8af}'),
     ('\u{1f8b2}', '\u{1f8ff}'),
-    ('\u{1f979}', '\u{1f979}'),
-    ('\u{1f9cc}', '\u{1f9cc}'),
     ('\u{1fa54}', '\u{1fa5f}'),
     ('\u{1fa6e}', '\u{1fa6f}'),
-    ('\u{1fa75}', '\u{1fa77}'),
-    ('\u{1fa7b}', '\u{1fa7f}'),
-    ('\u{1fa87}', '\u{1fa8f}'),
-    ('\u{1faa9}', '\u{1faaf}'),
-    ('\u{1fab7}', '\u{1fabf}'),
-    ('\u{1fac3}', '\u{1facf}'),
-    ('\u{1fad7}', '\u{1faff}'),
+    ('\u{1fa7d}', '\u{1fa7f}'),
+    ('\u{1fa89}', '\u{1fa8f}'),
+    ('\u{1fabe}', '\u{1fabe}'),
+    ('\u{1fac6}', '\u{1facd}'),
+    ('\u{1fadc}', '\u{1fadf}'),
+    ('\u{1fae9}', '\u{1faef}'),
+    ('\u{1faf9}', '\u{1faff}'),
     ('\u{1fb93}', '\u{1fb93}'),
     ('\u{1fbcb}', '\u{1fbef}'),
     ('\u{1fbfa}', '\u{1ffff}'),
-    ('\u{2a6de}', '\u{2a6ff}'),
-    ('\u{2b735}', '\u{2b73f}'),
+    ('\u{2a6e0}', '\u{2a6ff}'),
+    ('\u{2b73a}', '\u{2b73f}'),
     ('\u{2b81e}', '\u{2b81f}'),
     ('\u{2cea2}', '\u{2ceaf}'),
     ('\u{2ebe1}', '\u{2f7ff}'),
     ('\u{2fa1e}', '\u{2ffff}'),
-    ('\u{3134b}', '\u{e0000}'),
+    ('\u{3134b}', '\u{3134f}'),
+    ('\u{323b0}', '\u{e0000}'),
     ('\u{e0002}', '\u{e001f}'),
     ('\u{e0080}', '\u{e00ff}'),
     ('\u{e01f0}', '\u{effff}'),
@@ -6097,7 +6334,7 @@
     ('ℾ', 'ℿ'),
     ('ⅅ', 'ⅅ'),
     ('Ↄ', 'Ↄ'),
-    ('Ⰰ', 'Ⱞ'),
+    ('Ⰰ', 'Ⱟ'),
     ('Ⱡ', 'Ⱡ'),
     ('Ɫ', 'Ɽ'),
     ('Ⱨ', 'Ⱨ'),
@@ -6262,13 +6499,21 @@
     ('Ꞻ', 'Ꞻ'),
     ('Ꞽ', 'Ꞽ'),
     ('Ꞿ', 'Ꞿ'),
+    ('Ꟁ', 'Ꟁ'),
     ('Ꟃ', 'Ꟃ'),
-    ('Ꞔ', '\u{a7c7}'),
-    ('\u{a7c9}', '\u{a7c9}'),
-    ('\u{a7f5}', '\u{a7f5}'),
+    ('Ꞔ', 'Ꟈ'),
+    ('Ꟊ', 'Ꟊ'),
+    ('Ꟑ', 'Ꟑ'),
+    ('Ꟗ', 'Ꟗ'),
+    ('Ꟙ', 'Ꟙ'),
+    ('Ꟶ', 'Ꟶ'),
     ('A', 'Z'),
     ('𐐀', '𐐧'),
     ('𐒰', '𐓓'),
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
     ('𐲀', '𐲲'),
     ('𑢠', '𑢿'),
     ('𖹀', '𖹟'),
diff --git a/src/unicode_tables/grapheme_cluster_break.rs b/src/unicode_tables/grapheme_cluster_break.rs
index 7df9d2b..294dfbd 100644
--- a/src/unicode_tables/grapheme_cluster_break.rs
+++ b/src/unicode_tables/grapheme_cluster_break.rs
@@ -1,10 +1,10 @@
 // DO NOT EDIT THIS FILE. IT WAS AUTOMATICALLY GENERATED BY:
 //
-//   ucd-generate grapheme-cluster-break ucd-13.0.0 --chars
+//   ucd-generate grapheme-cluster-break ucd-15.0.0 --chars
 //
-// Unicode version: 13.0.0.
+// Unicode version: 15.0.0.
 //
-// ucd-generate 0.2.8 is available on crates.io.
+// ucd-generate 0.2.14 is available on crates.io.
 
 pub const BY_NAME: &'static [(&'static str, &'static [(char, char)])] = &[
     ("CR", CR),
@@ -25,7 +25,7 @@
 pub const CR: &'static [(char, char)] = &[('\r', '\r')];
 
 pub const CONTROL: &'static [(char, char)] = &[
-    ('\u{0}', '\t'),
+    ('\0', '\t'),
     ('\u{b}', '\u{c}'),
     ('\u{e}', '\u{1f}'),
     ('\u{7f}', '\u{9f}'),
@@ -38,7 +38,7 @@
     ('\u{2060}', '\u{206f}'),
     ('\u{feff}', '\u{feff}'),
     ('\u{fff0}', '\u{fffb}'),
-    ('\u{13430}', '\u{13438}'),
+    ('\u{13430}', '\u{1343f}'),
     ('\u{1bca0}', '\u{1bca3}'),
     ('\u{1d173}', '\u{1d17a}'),
     ('\u{e0000}', '\u{e001f}'),
@@ -71,7 +71,8 @@
     ('\u{825}', '\u{827}'),
     ('\u{829}', '\u{82d}'),
     ('\u{859}', '\u{85b}'),
-    ('\u{8d3}', '\u{8e1}'),
+    ('\u{898}', '\u{89f}'),
+    ('\u{8ca}', '\u{8e1}'),
     ('\u{8e3}', '\u{902}'),
     ('\u{93a}', '\u{93a}'),
     ('\u{93c}', '\u{93c}'),
@@ -116,6 +117,7 @@
     ('\u{bd7}', '\u{bd7}'),
     ('\u{c00}', '\u{c00}'),
     ('\u{c04}', '\u{c04}'),
+    ('\u{c3c}', '\u{c3c}'),
     ('\u{c3e}', '\u{c40}'),
     ('\u{c46}', '\u{c48}'),
     ('\u{c4a}', '\u{c4d}'),
@@ -147,7 +149,7 @@
     ('\u{e47}', '\u{e4e}'),
     ('\u{eb1}', '\u{eb1}'),
     ('\u{eb4}', '\u{ebc}'),
-    ('\u{ec8}', '\u{ecd}'),
+    ('\u{ec8}', '\u{ece}'),
     ('\u{f18}', '\u{f19}'),
     ('\u{f35}', '\u{f35}'),
     ('\u{f37}', '\u{f37}'),
@@ -171,7 +173,7 @@
     ('\u{109d}', '\u{109d}'),
     ('\u{135d}', '\u{135f}'),
     ('\u{1712}', '\u{1714}'),
-    ('\u{1732}', '\u{1734}'),
+    ('\u{1732}', '\u{1733}'),
     ('\u{1752}', '\u{1753}'),
     ('\u{1772}', '\u{1773}'),
     ('\u{17b4}', '\u{17b5}'),
@@ -180,6 +182,7 @@
     ('\u{17c9}', '\u{17d3}'),
     ('\u{17dd}', '\u{17dd}'),
     ('\u{180b}', '\u{180d}'),
+    ('\u{180f}', '\u{180f}'),
     ('\u{1885}', '\u{1886}'),
     ('\u{18a9}', '\u{18a9}'),
     ('\u{1920}', '\u{1922}'),
@@ -195,7 +198,7 @@
     ('\u{1a65}', '\u{1a6c}'),
     ('\u{1a73}', '\u{1a7c}'),
     ('\u{1a7f}', '\u{1a7f}'),
-    ('\u{1ab0}', '\u{1ac0}'),
+    ('\u{1ab0}', '\u{1ace}'),
     ('\u{1b00}', '\u{1b03}'),
     ('\u{1b34}', '\u{1b3a}'),
     ('\u{1b3c}', '\u{1b3c}'),
@@ -217,8 +220,7 @@
     ('\u{1ced}', '\u{1ced}'),
     ('\u{1cf4}', '\u{1cf4}'),
     ('\u{1cf8}', '\u{1cf9}'),
-    ('\u{1dc0}', '\u{1df9}'),
-    ('\u{1dfb}', '\u{1dff}'),
+    ('\u{1dc0}', '\u{1dff}'),
     ('\u{200c}', '\u{200c}'),
     ('\u{20d0}', '\u{20f0}'),
     ('\u{2cef}', '\u{2cf1}'),
@@ -276,12 +278,17 @@
     ('\u{10ae5}', '\u{10ae6}'),
     ('\u{10d24}', '\u{10d27}'),
     ('\u{10eab}', '\u{10eac}'),
+    ('\u{10efd}', '\u{10eff}'),
     ('\u{10f46}', '\u{10f50}'),
+    ('\u{10f82}', '\u{10f85}'),
     ('\u{11001}', '\u{11001}'),
     ('\u{11038}', '\u{11046}'),
+    ('\u{11070}', '\u{11070}'),
+    ('\u{11073}', '\u{11074}'),
     ('\u{1107f}', '\u{11081}'),
     ('\u{110b3}', '\u{110b6}'),
     ('\u{110b9}', '\u{110ba}'),
+    ('\u{110c2}', '\u{110c2}'),
     ('\u{11100}', '\u{11102}'),
     ('\u{11127}', '\u{1112b}'),
     ('\u{1112d}', '\u{11134}'),
@@ -294,6 +301,7 @@
     ('\u{11234}', '\u{11234}'),
     ('\u{11236}', '\u{11237}'),
     ('\u{1123e}', '\u{1123e}'),
+    ('\u{11241}', '\u{11241}'),
     ('\u{112df}', '\u{112df}'),
     ('\u{112e3}', '\u{112ea}'),
     ('\u{11300}', '\u{11301}'),
@@ -361,12 +369,20 @@
     ('\u{11d95}', '\u{11d95}'),
     ('\u{11d97}', '\u{11d97}'),
     ('\u{11ef3}', '\u{11ef4}'),
+    ('\u{11f00}', '\u{11f01}'),
+    ('\u{11f36}', '\u{11f3a}'),
+    ('\u{11f40}', '\u{11f40}'),
+    ('\u{11f42}', '\u{11f42}'),
+    ('\u{13440}', '\u{13440}'),
+    ('\u{13447}', '\u{13455}'),
     ('\u{16af0}', '\u{16af4}'),
     ('\u{16b30}', '\u{16b36}'),
     ('\u{16f4f}', '\u{16f4f}'),
     ('\u{16f8f}', '\u{16f92}'),
     ('\u{16fe4}', '\u{16fe4}'),
     ('\u{1bc9d}', '\u{1bc9e}'),
+    ('\u{1cf00}', '\u{1cf2d}'),
+    ('\u{1cf30}', '\u{1cf46}'),
     ('\u{1d165}', '\u{1d165}'),
     ('\u{1d167}', '\u{1d169}'),
     ('\u{1d16e}', '\u{1d172}'),
@@ -385,8 +401,11 @@
     ('\u{1e01b}', '\u{1e021}'),
     ('\u{1e023}', '\u{1e024}'),
     ('\u{1e026}', '\u{1e02a}'),
+    ('\u{1e08f}', '\u{1e08f}'),
     ('\u{1e130}', '\u{1e136}'),
+    ('\u{1e2ae}', '\u{1e2ae}'),
     ('\u{1e2ec}', '\u{1e2ef}'),
+    ('\u{1e4ec}', '\u{1e4ef}'),
     ('\u{1e8d0}', '\u{1e8d6}'),
     ('\u{1e944}', '\u{1e94a}'),
     ('🏻', '🏿'),
@@ -1206,16 +1225,18 @@
     ('\u{600}', '\u{605}'),
     ('\u{6dd}', '\u{6dd}'),
     ('\u{70f}', '\u{70f}'),
+    ('\u{890}', '\u{891}'),
     ('\u{8e2}', '\u{8e2}'),
     ('ൎ', 'ൎ'),
     ('\u{110bd}', '\u{110bd}'),
     ('\u{110cd}', '\u{110cd}'),
     ('𑇂', '𑇃'),
-    ('\u{1193f}', '\u{1193f}'),
-    ('\u{11941}', '\u{11941}'),
+    ('𑤿', '𑤿'),
+    ('𑥁', '𑥁'),
     ('𑨺', '𑨺'),
     ('𑪄', '𑪉'),
     ('𑵆', '𑵆'),
+    ('𑼂', '𑼂'),
 ];
 
 pub const REGIONAL_INDICATOR: &'static [(char, char)] = &[('🇦', '🇿')];
@@ -1252,6 +1273,7 @@
     ('ೃ', 'ೄ'),
     ('ೇ', 'ೈ'),
     ('ೊ', 'ೋ'),
+    ('ೳ', 'ೳ'),
     ('ം', 'ഃ'),
     ('ി', 'ീ'),
     ('െ', 'ൈ'),
@@ -1268,6 +1290,8 @@
     ('ျ', 'ြ'),
     ('ၖ', 'ၗ'),
     ('ႄ', 'ႄ'),
+    ('᜕', '᜕'),
+    ('᜴', '᜴'),
     ('ា', 'ា'),
     ('ើ', 'ៅ'),
     ('ះ', 'ៈ'),
@@ -1324,7 +1348,7 @@
     ('𑆂', '𑆂'),
     ('𑆳', '𑆵'),
     ('𑆿', '𑇀'),
-    ('\u{111ce}', '\u{111ce}'),
+    ('𑇎', '𑇎'),
     ('𑈬', '𑈮'),
     ('𑈲', '𑈳'),
     ('𑈵', '𑈵'),
@@ -1352,15 +1376,14 @@
     ('𑚬', '𑚬'),
     ('𑚮', '𑚯'),
     ('𑚶', '𑚶'),
-    ('𑜠', '𑜡'),
     ('𑜦', '𑜦'),
     ('𑠬', '𑠮'),
     ('𑠸', '𑠸'),
-    ('\u{11931}', '\u{11935}'),
-    ('\u{11937}', '\u{11938}'),
-    ('\u{1193d}', '\u{1193d}'),
-    ('\u{11940}', '\u{11940}'),
-    ('\u{11942}', '\u{11942}'),
+    ('𑤱', '𑤵'),
+    ('𑤷', '𑤸'),
+    ('𑤽', '𑤽'),
+    ('𑥀', '𑥀'),
+    ('𑥂', '𑥂'),
     ('𑧑', '𑧓'),
     ('𑧜', '𑧟'),
     ('𑧤', '𑧤'),
@@ -1376,8 +1399,12 @@
     ('𑶓', '𑶔'),
     ('𑶖', '𑶖'),
     ('𑻵', '𑻶'),
+    ('𑼃', '𑼃'),
+    ('𑼴', '𑼵'),
+    ('𑼾', '𑼿'),
+    ('𑽁', '𑽁'),
     ('𖽑', '𖾇'),
-    ('\u{16ff0}', '\u{16ff1}'),
+    ('𖿰', '𖿱'),
     ('𝅦', '𝅦'),
     ('𝅭', '𝅭'),
 ];
diff --git a/src/unicode_tables/perl_decimal.rs b/src/unicode_tables/perl_decimal.rs
index 2a09259..4f4c08a 100644
--- a/src/unicode_tables/perl_decimal.rs
+++ b/src/unicode_tables/perl_decimal.rs
@@ -1,10 +1,10 @@
 // DO NOT EDIT THIS FILE. IT WAS AUTOMATICALLY GENERATED BY:
 //
-//   ucd-generate general-category ucd-13.0.0 --chars --include decimalnumber
+//   ucd-generate general-category ucd-15.0.0 --chars --include decimalnumber
 //
-// Unicode version: 13.0.0.
+// Unicode version: 15.0.0.
 //
-// ucd-generate 0.2.8 is available on crates.io.
+// ucd-generate 0.2.14 is available on crates.io.
 
 pub const BY_NAME: &'static [(&'static str, &'static [(char, char)])] =
     &[("Decimal_Number", DECIMAL_NUMBER)];
@@ -60,15 +60,18 @@
     ('𑛀', '𑛉'),
     ('𑜰', '𑜹'),
     ('𑣠', '𑣩'),
-    ('\u{11950}', '\u{11959}'),
+    ('𑥐', '𑥙'),
     ('𑱐', '𑱙'),
     ('𑵐', '𑵙'),
     ('𑶠', '𑶩'),
+    ('𑽐', '𑽙'),
     ('𖩠', '𖩩'),
+    ('𖫀', '𖫉'),
     ('𖭐', '𖭙'),
     ('𝟎', '𝟿'),
     ('𞅀', '𞅉'),
     ('𞋰', '𞋹'),
+    ('𞓰', '𞓹'),
     ('𞥐', '𞥙'),
-    ('\u{1fbf0}', '\u{1fbf9}'),
+    ('🯰', '🯹'),
 ];
diff --git a/src/unicode_tables/perl_space.rs b/src/unicode_tables/perl_space.rs
index c112dd1..1741695 100644
--- a/src/unicode_tables/perl_space.rs
+++ b/src/unicode_tables/perl_space.rs
@@ -1,10 +1,10 @@
 // DO NOT EDIT THIS FILE. IT WAS AUTOMATICALLY GENERATED BY:
 //
-//   ucd-generate property-bool ucd-13.0.0 --chars --include whitespace
+//   ucd-generate property-bool ucd-15.0.0 --chars --include whitespace
 //
-// Unicode version: 13.0.0.
+// Unicode version: 15.0.0.
 //
-// ucd-generate 0.2.8 is available on crates.io.
+// ucd-generate 0.2.14 is available on crates.io.
 
 pub const BY_NAME: &'static [(&'static str, &'static [(char, char)])] =
     &[("White_Space", WHITE_SPACE)];
diff --git a/src/unicode_tables/perl_word.rs b/src/unicode_tables/perl_word.rs
index df9eac7..c1b66bd 100644
--- a/src/unicode_tables/perl_word.rs
+++ b/src/unicode_tables/perl_word.rs
@@ -1,10 +1,10 @@
 // DO NOT EDIT THIS FILE. IT WAS AUTOMATICALLY GENERATED BY:
 //
-//   ucd-generate perl-word ucd-13.0.0 --chars
+//   ucd-generate perl-word ucd-15.0.0 --chars
 //
-// Unicode version: 13.0.0.
+// Unicode version: 15.0.0.
 //
-// ucd-generate 0.2.8 is available on crates.io.
+// ucd-generate 0.2.14 is available on crates.io.
 
 pub const PERL_WORD: &'static [(char, char)] = &[
     ('0', '9'),
@@ -57,9 +57,9 @@
     ('ࠀ', '\u{82d}'),
     ('ࡀ', '\u{85b}'),
     ('ࡠ', 'ࡪ'),
-    ('ࢠ', 'ࢴ'),
-    ('ࢶ', '\u{8c7}'),
-    ('\u{8d3}', '\u{8e1}'),
+    ('ࡰ', 'ࢇ'),
+    ('ࢉ', 'ࢎ'),
+    ('\u{898}', '\u{8e1}'),
     ('\u{8e3}', '\u{963}'),
     ('०', '९'),
     ('ॱ', 'ঃ'),
@@ -143,11 +143,12 @@
     ('ఎ', 'ఐ'),
     ('ఒ', 'న'),
     ('ప', 'హ'),
-    ('ఽ', 'ౄ'),
+    ('\u{c3c}', 'ౄ'),
     ('\u{c46}', '\u{c48}'),
     ('\u{c4a}', '\u{c4d}'),
     ('\u{c55}', '\u{c56}'),
     ('ౘ', 'ౚ'),
+    ('ౝ', 'ౝ'),
     ('ౠ', '\u{c63}'),
     ('౦', '౯'),
     ('ಀ', 'ಃ'),
@@ -160,10 +161,10 @@
     ('\u{cc6}', 'ೈ'),
     ('ೊ', '\u{ccd}'),
     ('\u{cd5}', '\u{cd6}'),
-    ('ೞ', 'ೞ'),
+    ('ೝ', 'ೞ'),
     ('ೠ', '\u{ce3}'),
     ('೦', '೯'),
-    ('ೱ', 'ೲ'),
+    ('ೱ', 'ೳ'),
     ('\u{d00}', 'ഌ'),
     ('എ', 'ഐ'),
     ('ഒ', '\u{d44}'),
@@ -196,7 +197,7 @@
     ('ວ', 'ຽ'),
     ('ເ', 'ໄ'),
     ('ໆ', 'ໆ'),
-    ('\u{ec8}', '\u{ecd}'),
+    ('\u{ec8}', '\u{ece}'),
     ('໐', '໙'),
     ('ໜ', 'ໟ'),
     ('ༀ', 'ༀ'),
@@ -242,9 +243,8 @@
     ('ᚁ', 'ᚚ'),
     ('ᚠ', 'ᛪ'),
     ('ᛮ', 'ᛸ'),
-    ('ᜀ', 'ᜌ'),
-    ('ᜎ', '\u{1714}'),
-    ('ᜠ', '\u{1734}'),
+    ('ᜀ', '᜕'),
+    ('ᜟ', '᜴'),
     ('ᝀ', '\u{1753}'),
     ('ᝠ', 'ᝬ'),
     ('ᝮ', 'ᝰ'),
@@ -254,7 +254,7 @@
     ('ៜ', '\u{17dd}'),
     ('០', '៩'),
     ('\u{180b}', '\u{180d}'),
-    ('᠐', '᠙'),
+    ('\u{180f}', '᠙'),
     ('ᠠ', 'ᡸ'),
     ('ᢀ', 'ᢪ'),
     ('ᢰ', 'ᣵ'),
@@ -272,8 +272,8 @@
     ('\u{1a7f}', '᪉'),
     ('᪐', '᪙'),
     ('ᪧ', 'ᪧ'),
-    ('\u{1ab0}', '\u{1ac0}'),
-    ('\u{1b00}', 'ᭋ'),
+    ('\u{1ab0}', '\u{1ace}'),
+    ('\u{1b00}', 'ᭌ'),
     ('᭐', '᭙'),
     ('\u{1b6b}', '\u{1b73}'),
     ('\u{1b80}', '᯳'),
@@ -285,8 +285,7 @@
     ('Ჽ', 'Ჿ'),
     ('\u{1cd0}', '\u{1cd2}'),
     ('\u{1cd4}', 'ᳺ'),
-    ('ᴀ', '\u{1df9}'),
-    ('\u{1dfb}', 'ἕ'),
+    ('ᴀ', 'ἕ'),
     ('Ἐ', 'Ἕ'),
     ('ἠ', 'ὅ'),
     ('Ὀ', 'Ὅ'),
@@ -327,9 +326,7 @@
     ('ⅎ', 'ⅎ'),
     ('Ⅰ', 'ↈ'),
     ('Ⓐ', 'ⓩ'),
-    ('Ⰰ', 'Ⱞ'),
-    ('ⰰ', 'ⱞ'),
-    ('Ⱡ', 'ⳤ'),
+    ('Ⰰ', 'ⳤ'),
     ('Ⳬ', 'ⳳ'),
     ('ⴀ', 'ⴥ'),
     ('ⴧ', 'ⴧ'),
@@ -358,11 +355,10 @@
     ('ー', 'ヿ'),
     ('ㄅ', 'ㄯ'),
     ('ㄱ', 'ㆎ'),
-    ('ㆠ', '\u{31bf}'),
+    ('ㆠ', 'ㆿ'),
     ('ㇰ', 'ㇿ'),
-    ('㐀', '\u{4dbf}'),
-    ('一', '\u{9ffc}'),
-    ('ꀀ', 'ꒌ'),
+    ('㐀', '䶿'),
+    ('一', 'ꒌ'),
     ('ꓐ', 'ꓽ'),
     ('ꔀ', 'ꘌ'),
     ('ꘐ', 'ꘫ'),
@@ -371,9 +367,11 @@
     ('ꙿ', '\u{a6f1}'),
     ('ꜗ', 'ꜟ'),
     ('Ꜣ', 'ꞈ'),
-    ('Ꞌ', 'ꞿ'),
-    ('Ꟃ', '\u{a7ca}'),
-    ('\u{a7f5}', 'ꠧ'),
+    ('Ꞌ', 'ꟊ'),
+    ('Ꟑ', 'ꟑ'),
+    ('ꟓ', 'ꟓ'),
+    ('ꟕ', 'ꟙ'),
+    ('ꟲ', 'ꠧ'),
     ('\u{a82c}', '\u{a82c}'),
     ('ꡀ', 'ꡳ'),
     ('ꢀ', '\u{a8c5}'),
@@ -400,7 +398,7 @@
     ('ꬠ', 'ꬦ'),
     ('ꬨ', 'ꬮ'),
     ('ꬰ', 'ꭚ'),
-    ('ꭜ', '\u{ab69}'),
+    ('ꭜ', 'ꭩ'),
     ('ꭰ', 'ꯪ'),
     ('꯬', '\u{abed}'),
     ('꯰', '꯹'),
@@ -462,9 +460,20 @@
     ('𐓘', '𐓻'),
     ('𐔀', '𐔧'),
     ('𐔰', '𐕣'),
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
     ('𐘀', '𐜶'),
     ('𐝀', '𐝕'),
     ('𐝠', '𐝧'),
+    ('𐞀', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
     ('𐠀', '𐠅'),
     ('𐠈', '𐠈'),
     ('𐠊', '𐠵'),
@@ -499,31 +508,33 @@
     ('𐳀', '𐳲'),
     ('𐴀', '\u{10d27}'),
     ('𐴰', '𐴹'),
-    ('\u{10e80}', '\u{10ea9}'),
+    ('𐺀', '𐺩'),
     ('\u{10eab}', '\u{10eac}'),
-    ('\u{10eb0}', '\u{10eb1}'),
-    ('𐼀', '𐼜'),
+    ('𐺰', '𐺱'),
+    ('\u{10efd}', '𐼜'),
     ('𐼧', '𐼧'),
     ('𐼰', '\u{10f50}'),
-    ('\u{10fb0}', '\u{10fc4}'),
+    ('𐽰', '\u{10f85}'),
+    ('𐾰', '𐿄'),
     ('𐿠', '𐿶'),
     ('𑀀', '\u{11046}'),
-    ('𑁦', '𑁯'),
+    ('𑁦', '𑁵'),
     ('\u{1107f}', '\u{110ba}'),
+    ('\u{110c2}', '\u{110c2}'),
     ('𑃐', '𑃨'),
     ('𑃰', '𑃹'),
     ('\u{11100}', '\u{11134}'),
     ('𑄶', '𑄿'),
-    ('𑅄', '\u{11147}'),
+    ('𑅄', '𑅇'),
     ('𑅐', '\u{11173}'),
     ('𑅶', '𑅶'),
     ('\u{11180}', '𑇄'),
     ('\u{111c9}', '\u{111cc}'),
-    ('\u{111ce}', '𑇚'),
+    ('𑇎', '𑇚'),
     ('𑇜', '𑇜'),
     ('𑈀', '𑈑'),
     ('𑈓', '\u{11237}'),
-    ('\u{1123e}', '\u{1123e}'),
+    ('\u{1123e}', '\u{11241}'),
     ('𑊀', '𑊆'),
     ('𑊈', '𑊈'),
     ('𑊊', '𑊍'),
@@ -548,7 +559,7 @@
     ('\u{11370}', '\u{11374}'),
     ('𑐀', '𑑊'),
     ('𑑐', '𑑙'),
-    ('\u{1145e}', '\u{11461}'),
+    ('\u{1145e}', '𑑡'),
     ('𑒀', '𑓅'),
     ('𑓇', '𑓇'),
     ('𑓐', '𑓙'),
@@ -563,16 +574,17 @@
     ('𑜀', '𑜚'),
     ('\u{1171d}', '\u{1172b}'),
     ('𑜰', '𑜹'),
+    ('𑝀', '𑝆'),
     ('𑠀', '\u{1183a}'),
     ('𑢠', '𑣩'),
-    ('𑣿', '\u{11906}'),
-    ('\u{11909}', '\u{11909}'),
-    ('\u{1190c}', '\u{11913}'),
-    ('\u{11915}', '\u{11916}'),
-    ('\u{11918}', '\u{11935}'),
-    ('\u{11937}', '\u{11938}'),
+    ('𑣿', '𑤆'),
+    ('𑤉', '𑤉'),
+    ('𑤌', '𑤓'),
+    ('𑤕', '𑤖'),
+    ('𑤘', '𑤵'),
+    ('𑤷', '𑤸'),
     ('\u{1193b}', '\u{11943}'),
-    ('\u{11950}', '\u{11959}'),
+    ('𑥐', '𑥙'),
     ('𑦠', '𑦧'),
     ('𑦪', '\u{119d7}'),
     ('\u{119da}', '𑧡'),
@@ -581,7 +593,7 @@
     ('\u{11a47}', '\u{11a47}'),
     ('𑩐', '\u{11a99}'),
     ('𑪝', '𑪝'),
-    ('𑫀', '𑫸'),
+    ('𑪰', '𑫸'),
     ('𑰀', '𑰈'),
     ('𑰊', '\u{11c36}'),
     ('\u{11c38}', '𑱀'),
@@ -603,15 +615,23 @@
     ('𑶓', '𑶘'),
     ('𑶠', '𑶩'),
     ('𑻠', '𑻶'),
-    ('\u{11fb0}', '\u{11fb0}'),
+    ('\u{11f00}', '𑼐'),
+    ('𑼒', '\u{11f3a}'),
+    ('𑼾', '\u{11f42}'),
+    ('𑽐', '𑽙'),
+    ('𑾰', '𑾰'),
     ('𒀀', '𒎙'),
     ('𒐀', '𒑮'),
     ('𒒀', '𒕃'),
-    ('𓀀', '𓐮'),
+    ('𒾐', '𒿰'),
+    ('𓀀', '𓐯'),
+    ('\u{13440}', '\u{13455}'),
     ('𔐀', '𔙆'),
     ('𖠀', '𖨸'),
     ('𖩀', '𖩞'),
     ('𖩠', '𖩩'),
+    ('𖩰', '𖪾'),
+    ('𖫀', '𖫉'),
     ('𖫐', '𖫭'),
     ('\u{16af0}', '\u{16af4}'),
     ('𖬀', '\u{16b36}'),
@@ -625,12 +645,17 @@
     ('\u{16f8f}', '𖾟'),
     ('𖿠', '𖿡'),
     ('𖿣', '\u{16fe4}'),
-    ('\u{16ff0}', '\u{16ff1}'),
+    ('𖿰', '𖿱'),
     ('𗀀', '𘟷'),
-    ('𘠀', '\u{18cd5}'),
-    ('\u{18d00}', '\u{18d08}'),
-    ('𛀀', '𛄞'),
+    ('𘠀', '𘳕'),
+    ('𘴀', '𘴈'),
+    ('𚿰', '𚿳'),
+    ('𚿵', '𚿻'),
+    ('𚿽', '𚿾'),
+    ('𛀀', '𛄢'),
+    ('𛄲', '𛄲'),
     ('𛅐', '𛅒'),
+    ('𛅕', '𛅕'),
     ('𛅤', '𛅧'),
     ('𛅰', '𛋻'),
     ('𛰀', '𛱪'),
@@ -638,6 +663,8 @@
     ('𛲀', '𛲈'),
     ('𛲐', '𛲙'),
     ('\u{1bc9d}', '\u{1bc9e}'),
+    ('\u{1cf00}', '\u{1cf2d}'),
+    ('\u{1cf30}', '\u{1cf46}'),
     ('\u{1d165}', '\u{1d169}'),
     ('𝅭', '\u{1d172}'),
     ('\u{1d17b}', '\u{1d182}'),
@@ -681,16 +708,26 @@
     ('\u{1da84}', '\u{1da84}'),
     ('\u{1da9b}', '\u{1da9f}'),
     ('\u{1daa1}', '\u{1daaf}'),
+    ('𝼀', '𝼞'),
+    ('𝼥', '𝼪'),
     ('\u{1e000}', '\u{1e006}'),
     ('\u{1e008}', '\u{1e018}'),
     ('\u{1e01b}', '\u{1e021}'),
     ('\u{1e023}', '\u{1e024}'),
     ('\u{1e026}', '\u{1e02a}'),
+    ('𞀰', '𞁭'),
+    ('\u{1e08f}', '\u{1e08f}'),
     ('𞄀', '𞄬'),
     ('\u{1e130}', '𞄽'),
     ('𞅀', '𞅉'),
     ('𞅎', '𞅎'),
+    ('𞊐', '\u{1e2ae}'),
     ('𞋀', '𞋹'),
+    ('𞓐', '𞓹'),
+    ('𞟠', '𞟦'),
+    ('𞟨', '𞟫'),
+    ('𞟭', '𞟮'),
+    ('𞟰', '𞟾'),
     ('𞠀', '𞣄'),
     ('\u{1e8d0}', '\u{1e8d6}'),
     ('𞤀', '𞥋'),
@@ -731,13 +768,14 @@
     ('🄰', '🅉'),
     ('🅐', '🅩'),
     ('🅰', '🆉'),
-    ('\u{1fbf0}', '\u{1fbf9}'),
-    ('𠀀', '\u{2a6dd}'),
-    ('𪜀', '𫜴'),
+    ('🯰', '🯹'),
+    ('𠀀', '𪛟'),
+    ('𪜀', '𫜹'),
     ('𫝀', '𫠝'),
     ('𫠠', '𬺡'),
     ('𬺰', '𮯠'),
     ('丽', '𪘀'),
-    ('\u{30000}', '\u{3134a}'),
+    ('𰀀', '𱍊'),
+    ('𱍐', '𲎯'),
     ('\u{e0100}', '\u{e01ef}'),
 ];
diff --git a/src/unicode_tables/property_bool.rs b/src/unicode_tables/property_bool.rs
index 21cbaf9..a3e84b5 100644
--- a/src/unicode_tables/property_bool.rs
+++ b/src/unicode_tables/property_bool.rs
@@ -1,10 +1,10 @@
 // DO NOT EDIT THIS FILE. IT WAS AUTOMATICALLY GENERATED BY:
 //
-//   ucd-generate property-bool ucd-13.0.0 --chars
+//   ucd-generate property-bool ucd-15.0.0 --chars
 //
-// Unicode version: 13.0.0.
+// Unicode version: 15.0.0.
 //
-// ucd-generate 0.2.8 is available on crates.io.
+// ucd-generate 0.2.14 is available on crates.io.
 
 pub const BY_NAME: &'static [(&'static str, &'static [(char, char)])] = &[
     ("ASCII_Hex_Digit", ASCII_HEX_DIGIT),
@@ -125,8 +125,9 @@
     ('ࠚ', '\u{82c}'),
     ('ࡀ', 'ࡘ'),
     ('ࡠ', 'ࡪ'),
-    ('ࢠ', 'ࢴ'),
-    ('ࢶ', '\u{8c7}'),
+    ('ࡰ', 'ࢇ'),
+    ('ࢉ', 'ࢎ'),
+    ('ࢠ', 'ࣉ'),
     ('\u{8d4}', '\u{8df}'),
     ('\u{8e3}', '\u{8e9}'),
     ('\u{8f0}', 'ऻ'),
@@ -206,8 +207,7 @@
     ('ொ', 'ௌ'),
     ('ௐ', 'ௐ'),
     ('\u{bd7}', '\u{bd7}'),
-    ('\u{c00}', 'ః'),
-    ('అ', 'ఌ'),
+    ('\u{c00}', 'ఌ'),
     ('ఎ', 'ఐ'),
     ('ఒ', 'న'),
     ('ప', 'హ'),
@@ -216,6 +216,7 @@
     ('\u{c4a}', '\u{c4c}'),
     ('\u{c55}', '\u{c56}'),
     ('ౘ', 'ౚ'),
+    ('ౝ', 'ౝ'),
     ('ౠ', '\u{c63}'),
     ('ಀ', 'ಃ'),
     ('ಅ', 'ಌ'),
@@ -227,9 +228,9 @@
     ('\u{cc6}', 'ೈ'),
     ('ೊ', '\u{ccc}'),
     ('\u{cd5}', '\u{cd6}'),
-    ('ೞ', 'ೞ'),
+    ('ೝ', 'ೞ'),
     ('ೠ', '\u{ce3}'),
-    ('ೱ', 'ೲ'),
+    ('ೱ', 'ೳ'),
     ('\u{d00}', 'ഌ'),
     ('എ', 'ഐ'),
     ('ഒ', 'ഺ'),
@@ -267,7 +268,7 @@
     ('ༀ', 'ༀ'),
     ('ཀ', 'ཇ'),
     ('ཉ', 'ཬ'),
-    ('\u{f71}', '\u{f81}'),
+    ('\u{f71}', '\u{f83}'),
     ('ྈ', '\u{f97}'),
     ('\u{f99}', '\u{fbc}'),
     ('က', '\u{1036}'),
@@ -303,9 +304,8 @@
     ('ᚁ', 'ᚚ'),
     ('ᚠ', 'ᛪ'),
     ('ᛮ', 'ᛸ'),
-    ('ᜀ', 'ᜌ'),
-    ('ᜎ', '\u{1713}'),
-    ('ᜠ', '\u{1733}'),
+    ('ᜀ', '\u{1713}'),
+    ('ᜟ', '\u{1733}'),
     ('ᝀ', '\u{1753}'),
     ('ᝠ', 'ᝬ'),
     ('ᝮ', 'ᝰ'),
@@ -329,9 +329,10 @@
     ('ᩡ', '\u{1a74}'),
     ('ᪧ', 'ᪧ'),
     ('\u{1abf}', '\u{1ac0}'),
+    ('\u{1acc}', '\u{1ace}'),
     ('\u{1b00}', 'ᬳ'),
     ('\u{1b35}', 'ᭃ'),
-    ('ᭅ', 'ᭋ'),
+    ('ᭅ', 'ᭌ'),
     ('\u{1b80}', '\u{1ba9}'),
     ('\u{1bac}', 'ᮯ'),
     ('ᮺ', 'ᯥ'),
@@ -385,9 +386,7 @@
     ('ⅎ', 'ⅎ'),
     ('Ⅰ', 'ↈ'),
     ('Ⓐ', 'ⓩ'),
-    ('Ⰰ', 'Ⱞ'),
-    ('ⰰ', 'ⱞ'),
-    ('Ⱡ', 'ⳤ'),
+    ('Ⰰ', 'ⳤ'),
     ('Ⳬ', 'ⳮ'),
     ('Ⳳ', 'ⳳ'),
     ('ⴀ', 'ⴥ'),
@@ -416,11 +415,10 @@
     ('ー', 'ヿ'),
     ('ㄅ', 'ㄯ'),
     ('ㄱ', 'ㆎ'),
-    ('ㆠ', '\u{31bf}'),
+    ('ㆠ', 'ㆿ'),
     ('ㇰ', 'ㇿ'),
-    ('㐀', '\u{4dbf}'),
-    ('一', '\u{9ffc}'),
-    ('ꀀ', 'ꒌ'),
+    ('㐀', '䶿'),
+    ('一', 'ꒌ'),
     ('ꓐ', 'ꓽ'),
     ('ꔀ', 'ꘌ'),
     ('ꘐ', 'ꘟ'),
@@ -430,9 +428,11 @@
     ('ꙿ', 'ꛯ'),
     ('ꜗ', 'ꜟ'),
     ('Ꜣ', 'ꞈ'),
-    ('Ꞌ', 'ꞿ'),
-    ('Ꟃ', '\u{a7ca}'),
-    ('\u{a7f5}', 'ꠅ'),
+    ('Ꞌ', 'ꟊ'),
+    ('Ꟑ', 'ꟑ'),
+    ('ꟓ', 'ꟓ'),
+    ('ꟕ', 'ꟙ'),
+    ('ꟲ', 'ꠅ'),
     ('ꠇ', 'ꠧ'),
     ('ꡀ', 'ꡳ'),
     ('ꢀ', 'ꣃ'),
@@ -463,7 +463,7 @@
     ('ꬠ', 'ꬦ'),
     ('ꬨ', 'ꬮ'),
     ('ꬰ', 'ꭚ'),
-    ('ꭜ', '\u{ab69}'),
+    ('ꭜ', 'ꭩ'),
     ('ꭰ', 'ꯪ'),
     ('가', '힣'),
     ('ힰ', 'ퟆ'),
@@ -514,9 +514,20 @@
     ('𐓘', '𐓻'),
     ('𐔀', '𐔧'),
     ('𐔰', '𐕣'),
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
     ('𐘀', '𐜶'),
     ('𐝀', '𐝕'),
     ('𐝠', '𐝧'),
+    ('𐞀', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
     ('𐠀', '𐠅'),
     ('𐠈', '𐠈'),
     ('𐠊', '𐠵'),
@@ -548,30 +559,33 @@
     ('𐲀', '𐲲'),
     ('𐳀', '𐳲'),
     ('𐴀', '\u{10d27}'),
-    ('\u{10e80}', '\u{10ea9}'),
+    ('𐺀', '𐺩'),
     ('\u{10eab}', '\u{10eac}'),
-    ('\u{10eb0}', '\u{10eb1}'),
+    ('𐺰', '𐺱'),
     ('𐼀', '𐼜'),
     ('𐼧', '𐼧'),
     ('𐼰', '𐽅'),
-    ('\u{10fb0}', '\u{10fc4}'),
+    ('𐽰', '𐾁'),
+    ('𐾰', '𐿄'),
     ('𐿠', '𐿶'),
     ('𑀀', '\u{11045}'),
-    ('𑂂', '𑂸'),
+    ('𑁱', '𑁵'),
+    ('\u{11080}', '𑂸'),
+    ('\u{110c2}', '\u{110c2}'),
     ('𑃐', '𑃨'),
     ('\u{11100}', '\u{11132}'),
-    ('𑅄', '\u{11147}'),
+    ('𑅄', '𑅇'),
     ('𑅐', '𑅲'),
     ('𑅶', '𑅶'),
     ('\u{11180}', '𑆿'),
     ('𑇁', '𑇄'),
-    ('\u{111ce}', '\u{111cf}'),
+    ('𑇎', '\u{111cf}'),
     ('𑇚', '𑇚'),
     ('𑇜', '𑇜'),
     ('𑈀', '𑈑'),
     ('𑈓', '\u{11234}'),
     ('\u{11237}', '\u{11237}'),
-    ('\u{1123e}', '\u{1123e}'),
+    ('\u{1123e}', '\u{11241}'),
     ('𑊀', '𑊆'),
     ('𑊈', '𑊈'),
     ('𑊊', '𑊍'),
@@ -594,7 +608,7 @@
     ('𑐀', '𑑁'),
     ('\u{11443}', '𑑅'),
     ('𑑇', '𑑊'),
-    ('𑑟', '\u{11461}'),
+    ('𑑟', '𑑡'),
     ('𑒀', '𑓁'),
     ('𑓄', '𑓅'),
     ('𑓇', '𑓇'),
@@ -608,16 +622,17 @@
     ('𑚸', '𑚸'),
     ('𑜀', '𑜚'),
     ('\u{1171d}', '\u{1172a}'),
+    ('𑝀', '𑝆'),
     ('𑠀', '𑠸'),
     ('𑢠', '𑣟'),
-    ('𑣿', '\u{11906}'),
-    ('\u{11909}', '\u{11909}'),
-    ('\u{1190c}', '\u{11913}'),
-    ('\u{11915}', '\u{11916}'),
-    ('\u{11918}', '\u{11935}'),
-    ('\u{11937}', '\u{11938}'),
+    ('𑣿', '𑤆'),
+    ('𑤉', '𑤉'),
+    ('𑤌', '𑤓'),
+    ('𑤕', '𑤖'),
+    ('𑤘', '𑤵'),
+    ('𑤷', '𑤸'),
     ('\u{1193b}', '\u{1193c}'),
-    ('\u{1193f}', '\u{11942}'),
+    ('𑤿', '𑥂'),
     ('𑦠', '𑦧'),
     ('𑦪', '\u{119d7}'),
     ('\u{119da}', '𑧟'),
@@ -627,7 +642,7 @@
     ('\u{11a35}', '\u{11a3e}'),
     ('𑩐', '𑪗'),
     ('𑪝', '𑪝'),
-    ('𑫀', '𑫸'),
+    ('𑪰', '𑫸'),
     ('𑰀', '𑰈'),
     ('𑰊', '\u{11c36}'),
     ('\u{11c38}', '𑰾'),
@@ -650,14 +665,20 @@
     ('𑶓', '𑶖'),
     ('𑶘', '𑶘'),
     ('𑻠', '𑻶'),
-    ('\u{11fb0}', '\u{11fb0}'),
+    ('\u{11f00}', '𑼐'),
+    ('𑼒', '\u{11f3a}'),
+    ('𑼾', '\u{11f40}'),
+    ('𑾰', '𑾰'),
     ('𒀀', '𒎙'),
     ('𒐀', '𒑮'),
     ('𒒀', '𒕃'),
-    ('𓀀', '𓐮'),
+    ('𒾐', '𒿰'),
+    ('𓀀', '𓐯'),
+    ('𓑁', '𓑆'),
     ('𔐀', '𔙆'),
     ('𖠀', '𖨸'),
     ('𖩀', '𖩞'),
+    ('𖩰', '𖪾'),
     ('𖫐', '𖫭'),
     ('𖬀', '𖬯'),
     ('𖭀', '𖭃'),
@@ -669,12 +690,17 @@
     ('\u{16f8f}', '𖾟'),
     ('𖿠', '𖿡'),
     ('𖿣', '𖿣'),
-    ('\u{16ff0}', '\u{16ff1}'),
+    ('𖿰', '𖿱'),
     ('𗀀', '𘟷'),
-    ('𘠀', '\u{18cd5}'),
-    ('\u{18d00}', '\u{18d08}'),
-    ('𛀀', '𛄞'),
+    ('𘠀', '𘳕'),
+    ('𘴀', '𘴈'),
+    ('𚿰', '𚿳'),
+    ('𚿵', '𚿻'),
+    ('𚿽', '𚿾'),
+    ('𛀀', '𛄢'),
+    ('𛄲', '𛄲'),
     ('𛅐', '𛅒'),
+    ('𛅕', '𛅕'),
     ('𛅤', '𛅧'),
     ('𛅰', '𛋻'),
     ('𛰀', '𛱪'),
@@ -712,15 +738,25 @@
     ('𝞊', '𝞨'),
     ('𝞪', '𝟂'),
     ('𝟄', '𝟋'),
+    ('𝼀', '𝼞'),
+    ('𝼥', '𝼪'),
     ('\u{1e000}', '\u{1e006}'),
     ('\u{1e008}', '\u{1e018}'),
     ('\u{1e01b}', '\u{1e021}'),
     ('\u{1e023}', '\u{1e024}'),
     ('\u{1e026}', '\u{1e02a}'),
+    ('𞀰', '𞁭'),
+    ('\u{1e08f}', '\u{1e08f}'),
     ('𞄀', '𞄬'),
     ('𞄷', '𞄽'),
     ('𞅎', '𞅎'),
+    ('𞊐', '𞊭'),
     ('𞋀', '𞋫'),
+    ('𞓐', '𞓫'),
+    ('𞟠', '𞟦'),
+    ('𞟨', '𞟫'),
+    ('𞟭', '𞟮'),
+    ('𞟰', '𞟾'),
     ('𞠀', '𞣄'),
     ('𞤀', '𞥃'),
     ('\u{1e947}', '\u{1e947}'),
@@ -761,13 +797,14 @@
     ('🄰', '🅉'),
     ('🅐', '🅩'),
     ('🅰', '🆉'),
-    ('𠀀', '\u{2a6dd}'),
-    ('𪜀', '𫜴'),
+    ('𠀀', '𪛟'),
+    ('𪜀', '𫜹'),
     ('𫝀', '𫠝'),
     ('𫠠', '𬺡'),
     ('𬺰', '𮯠'),
     ('丽', '𪘀'),
-    ('\u{30000}', '\u{3134a}'),
+    ('𰀀', '𱍊'),
+    ('𱍐', '𲎯'),
 ];
 
 pub const BIDI_CONTROL: &'static [(char, char)] = &[
@@ -873,6 +910,7 @@
     ('⸌', '⸍'),
     ('⸜', '⸝'),
     ('⸠', '⸩'),
+    ('⹕', '⹜'),
     ('〈', '】'),
     ('〔', '〛'),
     ('﹙', '﹞'),
@@ -936,7 +974,10 @@
     ('\u{7fd}', '\u{7fd}'),
     ('\u{816}', '\u{82d}'),
     ('\u{859}', '\u{85b}'),
-    ('\u{8d3}', '\u{902}'),
+    ('࢈', '࢈'),
+    ('\u{890}', '\u{891}'),
+    ('\u{898}', '\u{89f}'),
+    ('ࣉ', '\u{902}'),
     ('\u{93a}', '\u{93a}'),
     ('\u{93c}', '\u{93c}'),
     ('\u{941}', '\u{948}'),
@@ -977,6 +1018,7 @@
     ('\u{bcd}', '\u{bcd}'),
     ('\u{c00}', '\u{c00}'),
     ('\u{c04}', '\u{c04}'),
+    ('\u{c3c}', '\u{c3c}'),
     ('\u{c3e}', '\u{c40}'),
     ('\u{c46}', '\u{c48}'),
     ('\u{c4a}', '\u{c4d}'),
@@ -1003,7 +1045,7 @@
     ('\u{eb1}', '\u{eb1}'),
     ('\u{eb4}', '\u{ebc}'),
     ('ໆ', 'ໆ'),
-    ('\u{ec8}', '\u{ecd}'),
+    ('\u{ec8}', '\u{ece}'),
     ('\u{f18}', '\u{f19}'),
     ('\u{f35}', '\u{f35}'),
     ('\u{f37}', '\u{f37}'),
@@ -1028,7 +1070,7 @@
     ('ჼ', 'ჼ'),
     ('\u{135d}', '\u{135f}'),
     ('\u{1712}', '\u{1714}'),
-    ('\u{1732}', '\u{1734}'),
+    ('\u{1732}', '\u{1733}'),
     ('\u{1752}', '\u{1753}'),
     ('\u{1772}', '\u{1773}'),
     ('\u{17b4}', '\u{17b5}'),
@@ -1037,7 +1079,7 @@
     ('\u{17c9}', '\u{17d3}'),
     ('ៗ', 'ៗ'),
     ('\u{17dd}', '\u{17dd}'),
-    ('\u{180b}', '\u{180e}'),
+    ('\u{180b}', '\u{180f}'),
     ('ᡃ', 'ᡃ'),
     ('\u{1885}', '\u{1886}'),
     ('\u{18a9}', '\u{18a9}'),
@@ -1055,7 +1097,7 @@
     ('\u{1a73}', '\u{1a7c}'),
     ('\u{1a7f}', '\u{1a7f}'),
     ('ᪧ', 'ᪧ'),
-    ('\u{1ab0}', '\u{1ac0}'),
+    ('\u{1ab0}', '\u{1ace}'),
     ('\u{1b00}', '\u{1b03}'),
     ('\u{1b34}', '\u{1b34}'),
     ('\u{1b36}', '\u{1b3a}'),
@@ -1081,8 +1123,7 @@
     ('\u{1cf8}', '\u{1cf9}'),
     ('ᴬ', 'ᵪ'),
     ('ᵸ', 'ᵸ'),
-    ('ᶛ', '\u{1df9}'),
-    ('\u{1dfb}', '\u{1dff}'),
+    ('ᶛ', '\u{1dff}'),
     ('᾽', '᾽'),
     ('᾿', '῁'),
     ('῍', '῏'),
@@ -1123,6 +1164,7 @@
     ('꜀', '꜡'),
     ('ꝰ', 'ꝰ'),
     ('ꞈ', '꞊'),
+    ('ꟲ', 'ꟴ'),
     ('ꟸ', 'ꟹ'),
     ('\u{a802}', '\u{a802}'),
     ('\u{a806}', '\u{a806}'),
@@ -1157,12 +1199,12 @@
     ('ꫳ', 'ꫴ'),
     ('\u{aaf6}', '\u{aaf6}'),
     ('꭛', 'ꭟ'),
-    ('\u{ab69}', '\u{ab6b}'),
+    ('ꭩ', '꭫'),
     ('\u{abe5}', '\u{abe5}'),
     ('\u{abe8}', '\u{abe8}'),
     ('\u{abed}', '\u{abed}'),
     ('\u{fb1e}', '\u{fb1e}'),
-    ('﮲', '﯁'),
+    ('﮲', '﯂'),
     ('\u{fe00}', '\u{fe0f}'),
     ('︓', '︓'),
     ('\u{fe20}', '\u{fe2f}'),
@@ -1181,6 +1223,9 @@
     ('\u{101fd}', '\u{101fd}'),
     ('\u{102e0}', '\u{102e0}'),
     ('\u{10376}', '\u{1037a}'),
+    ('𐞀', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
     ('\u{10a01}', '\u{10a03}'),
     ('\u{10a05}', '\u{10a06}'),
     ('\u{10a0c}', '\u{10a0f}'),
@@ -1189,13 +1234,18 @@
     ('\u{10ae5}', '\u{10ae6}'),
     ('\u{10d24}', '\u{10d27}'),
     ('\u{10eab}', '\u{10eac}'),
+    ('\u{10efd}', '\u{10eff}'),
     ('\u{10f46}', '\u{10f50}'),
+    ('\u{10f82}', '\u{10f85}'),
     ('\u{11001}', '\u{11001}'),
     ('\u{11038}', '\u{11046}'),
+    ('\u{11070}', '\u{11070}'),
+    ('\u{11073}', '\u{11074}'),
     ('\u{1107f}', '\u{11081}'),
     ('\u{110b3}', '\u{110b6}'),
     ('\u{110b9}', '\u{110ba}'),
     ('\u{110bd}', '\u{110bd}'),
+    ('\u{110c2}', '\u{110c2}'),
     ('\u{110cd}', '\u{110cd}'),
     ('\u{11100}', '\u{11102}'),
     ('\u{11127}', '\u{1112b}'),
@@ -1209,6 +1259,7 @@
     ('\u{11234}', '\u{11234}'),
     ('\u{11236}', '\u{11237}'),
     ('\u{1123e}', '\u{1123e}'),
+    ('\u{11241}', '\u{11241}'),
     ('\u{112df}', '\u{112df}'),
     ('\u{112e3}', '\u{112ea}'),
     ('\u{11300}', '\u{11301}'),
@@ -1270,7 +1321,12 @@
     ('\u{11d95}', '\u{11d95}'),
     ('\u{11d97}', '\u{11d97}'),
     ('\u{11ef3}', '\u{11ef4}'),
-    ('\u{13430}', '\u{13438}'),
+    ('\u{11f00}', '\u{11f01}'),
+    ('\u{11f36}', '\u{11f3a}'),
+    ('\u{11f40}', '\u{11f40}'),
+    ('\u{11f42}', '\u{11f42}'),
+    ('\u{13430}', '\u{13440}'),
+    ('\u{13447}', '\u{13455}'),
     ('\u{16af0}', '\u{16af4}'),
     ('\u{16b30}', '\u{16b36}'),
     ('𖭀', '𖭃'),
@@ -1278,8 +1334,13 @@
     ('\u{16f8f}', '𖾟'),
     ('𖿠', '𖿡'),
     ('𖿣', '\u{16fe4}'),
+    ('𚿰', '𚿳'),
+    ('𚿵', '𚿻'),
+    ('𚿽', '𚿾'),
     ('\u{1bc9d}', '\u{1bc9e}'),
     ('\u{1bca0}', '\u{1bca3}'),
+    ('\u{1cf00}', '\u{1cf2d}'),
+    ('\u{1cf30}', '\u{1cf46}'),
     ('\u{1d167}', '\u{1d169}'),
     ('\u{1d173}', '\u{1d182}'),
     ('\u{1d185}', '\u{1d18b}'),
@@ -1296,8 +1357,12 @@
     ('\u{1e01b}', '\u{1e021}'),
     ('\u{1e023}', '\u{1e024}'),
     ('\u{1e026}', '\u{1e02a}'),
+    ('𞀰', '𞁭'),
+    ('\u{1e08f}', '\u{1e08f}'),
     ('\u{1e130}', '𞄽'),
+    ('\u{1e2ae}', '\u{1e2ae}'),
     ('\u{1e2ec}', '\u{1e2ef}'),
+    ('𞓫', '\u{1e4ef}'),
     ('\u{1e8d0}', '\u{1e8d6}'),
     ('\u{1e944}', '𞥋'),
     ('🏻', '🏿'),
@@ -1338,7 +1403,7 @@
     ('Ⴧ', 'Ⴧ'),
     ('Ⴭ', 'Ⴭ'),
     ('ა', 'ჺ'),
-    ('ჽ', 'ჿ'),
+    ('ჼ', 'ჿ'),
     ('Ꭰ', 'Ᏽ'),
     ('ᏸ', 'ᏽ'),
     ('ᲀ', 'ᲈ'),
@@ -1384,9 +1449,7 @@
     ('Ⅰ', 'ⅿ'),
     ('Ↄ', 'ↄ'),
     ('Ⓐ', 'ⓩ'),
-    ('Ⰰ', 'Ⱞ'),
-    ('ⰰ', 'ⱞ'),
-    ('Ⱡ', 'ⳤ'),
+    ('Ⰰ', 'ⳤ'),
     ('Ⳬ', 'ⳮ'),
     ('Ⳳ', 'ⳳ'),
     ('ⴀ', 'ⴥ'),
@@ -1396,12 +1459,14 @@
     ('Ꚁ', 'ꚝ'),
     ('Ꜣ', 'ꞇ'),
     ('Ꞌ', 'ꞎ'),
-    ('Ꞑ', 'ꞿ'),
-    ('Ꟃ', '\u{a7ca}'),
-    ('\u{a7f5}', '\u{a7f6}'),
+    ('Ꞑ', 'ꟊ'),
+    ('Ꟑ', 'ꟑ'),
+    ('ꟓ', 'ꟓ'),
+    ('ꟕ', 'ꟙ'),
+    ('ꟲ', 'ꟶ'),
     ('ꟸ', 'ꟺ'),
     ('ꬰ', 'ꭚ'),
-    ('ꭜ', '\u{ab68}'),
+    ('ꭜ', 'ꭩ'),
     ('ꭰ', 'ꮿ'),
     ('ff', 'st'),
     ('ﬓ', 'ﬗ'),
@@ -1410,6 +1475,18 @@
     ('𐐀', '𐑏'),
     ('𐒰', '𐓓'),
     ('𐓘', '𐓻'),
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
+    ('𐞀', '𐞀'),
+    ('𐞃', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
     ('𐲀', '𐲲'),
     ('𐳀', '𐳲'),
     ('𑢠', '𑣟'),
@@ -1444,6 +1521,10 @@
     ('𝞊', '𝞨'),
     ('𝞪', '𝟂'),
     ('𝟄', '𝟋'),
+    ('𝼀', '𝼉'),
+    ('𝼋', '𝼞'),
+    ('𝼥', '𝼪'),
+    ('𞀰', '𞁭'),
     ('𞤀', '𞥃'),
     ('🄰', '🅉'),
     ('🅐', '🅩'),
@@ -1886,7 +1967,7 @@
     ('Ⅰ', 'Ⅿ'),
     ('Ↄ', 'Ↄ'),
     ('Ⓐ', 'Ⓩ'),
-    ('Ⰰ', 'Ⱞ'),
+    ('Ⰰ', 'Ⱟ'),
     ('Ⱡ', 'Ⱡ'),
     ('Ɫ', 'Ɽ'),
     ('Ⱨ', 'Ⱨ'),
@@ -2051,16 +2132,24 @@
     ('Ꞻ', 'Ꞻ'),
     ('Ꞽ', 'Ꞽ'),
     ('Ꞿ', 'Ꞿ'),
+    ('Ꟁ', 'Ꟁ'),
     ('Ꟃ', 'Ꟃ'),
-    ('Ꞔ', '\u{a7c7}'),
-    ('\u{a7c9}', '\u{a7c9}'),
-    ('\u{a7f5}', '\u{a7f5}'),
+    ('Ꞔ', 'Ꟈ'),
+    ('Ꟊ', 'Ꟊ'),
+    ('Ꟑ', 'Ꟑ'),
+    ('Ꟗ', 'Ꟗ'),
+    ('Ꟙ', 'Ꟙ'),
+    ('Ꟶ', 'Ꟶ'),
     ('ꭰ', 'ꮿ'),
     ('ff', 'st'),
     ('ﬓ', 'ﬗ'),
     ('A', 'Z'),
     ('𐐀', '𐐧'),
     ('𐒰', '𐓓'),
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
     ('𐲀', '𐲲'),
     ('𑢠', '𑢿'),
     ('𖹀', '𖹟'),
@@ -2156,9 +2245,7 @@
     ('Ⅰ', 'ⅿ'),
     ('Ↄ', 'ↄ'),
     ('Ⓐ', 'ⓩ'),
-    ('Ⰰ', 'Ⱞ'),
-    ('ⰰ', 'ⱞ'),
-    ('Ⱡ', 'Ɒ'),
+    ('Ⰰ', 'Ɒ'),
     ('Ⱳ', 'ⱳ'),
     ('Ⱶ', 'ⱶ'),
     ('Ȿ', 'ⳣ'),
@@ -2175,9 +2262,10 @@
     ('Ꞌ', 'Ɥ'),
     ('Ꞑ', 'ꞔ'),
     ('Ꞗ', 'Ɪ'),
-    ('Ʞ', 'ꞿ'),
-    ('Ꟃ', '\u{a7ca}'),
-    ('\u{a7f5}', '\u{a7f6}'),
+    ('Ʞ', 'ꟊ'),
+    ('Ꟑ', 'ꟑ'),
+    ('Ꟗ', 'ꟙ'),
+    ('Ꟶ', 'ꟶ'),
     ('ꭓ', 'ꭓ'),
     ('ꭰ', 'ꮿ'),
     ('ff', 'st'),
@@ -2187,6 +2275,14 @@
     ('𐐀', '𐑏'),
     ('𐒰', '𐓓'),
     ('𐓘', '𐓻'),
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
     ('𐲀', '𐲲'),
     ('𐳀', '𐳲'),
     ('𑢠', '𑣟'),
@@ -2620,7 +2716,7 @@
     ('Ⅰ', 'Ⅿ'),
     ('Ↄ', 'Ↄ'),
     ('Ⓐ', 'Ⓩ'),
-    ('Ⰰ', 'Ⱞ'),
+    ('Ⰰ', 'Ⱟ'),
     ('Ⱡ', 'Ⱡ'),
     ('Ɫ', 'Ɽ'),
     ('Ⱨ', 'Ⱨ'),
@@ -2785,13 +2881,21 @@
     ('Ꞻ', 'Ꞻ'),
     ('Ꞽ', 'Ꞽ'),
     ('Ꞿ', 'Ꞿ'),
+    ('Ꟁ', 'Ꟁ'),
     ('Ꟃ', 'Ꟃ'),
-    ('Ꞔ', '\u{a7c7}'),
-    ('\u{a7c9}', '\u{a7c9}'),
-    ('\u{a7f5}', '\u{a7f5}'),
+    ('Ꞔ', 'Ꟈ'),
+    ('Ꟊ', 'Ꟊ'),
+    ('Ꟑ', 'Ꟑ'),
+    ('Ꟗ', 'Ꟗ'),
+    ('Ꟙ', 'Ꟙ'),
+    ('Ꟶ', 'Ꟶ'),
     ('A', 'Z'),
     ('𐐀', '𐐧'),
     ('𐒰', '𐓓'),
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
     ('𐲀', '𐲲'),
     ('𑢠', '𑢿'),
     ('𖹀', '𖹟'),
@@ -3237,7 +3341,7 @@
     ('ⅰ', 'ⅿ'),
     ('ↄ', 'ↄ'),
     ('ⓐ', 'ⓩ'),
-    ('ⰰ', 'ⱞ'),
+    ('ⰰ', 'ⱟ'),
     ('ⱡ', 'ⱡ'),
     ('ⱥ', 'ⱦ'),
     ('ⱨ', 'ⱨ'),
@@ -3402,10 +3506,14 @@
     ('ꞻ', 'ꞻ'),
     ('ꞽ', 'ꞽ'),
     ('ꞿ', 'ꞿ'),
+    ('ꟁ', 'ꟁ'),
     ('ꟃ', 'ꟃ'),
-    ('\u{a7c8}', '\u{a7c8}'),
-    ('\u{a7ca}', '\u{a7ca}'),
-    ('\u{a7f6}', '\u{a7f6}'),
+    ('ꟈ', 'ꟈ'),
+    ('ꟊ', 'ꟊ'),
+    ('ꟑ', 'ꟑ'),
+    ('ꟗ', 'ꟗ'),
+    ('ꟙ', 'ꟙ'),
+    ('ꟶ', 'ꟶ'),
     ('ꭓ', 'ꭓ'),
     ('ꭰ', 'ꮿ'),
     ('ff', 'st'),
@@ -3413,6 +3521,10 @@
     ('a', 'z'),
     ('𐐨', '𐑏'),
     ('𐓘', '𐓻'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
     ('𐳀', '𐳲'),
     ('𑣀', '𑣟'),
     ('𖹠', '𖹿'),
@@ -3859,7 +3971,7 @@
     ('ⅰ', 'ⅿ'),
     ('ↄ', 'ↄ'),
     ('ⓐ', 'ⓩ'),
-    ('ⰰ', 'ⱞ'),
+    ('ⰰ', 'ⱟ'),
     ('ⱡ', 'ⱡ'),
     ('ⱥ', 'ⱦ'),
     ('ⱨ', 'ⱨ'),
@@ -4024,10 +4136,14 @@
     ('ꞻ', 'ꞻ'),
     ('ꞽ', 'ꞽ'),
     ('ꞿ', 'ꞿ'),
+    ('ꟁ', 'ꟁ'),
     ('ꟃ', 'ꟃ'),
-    ('\u{a7c8}', '\u{a7c8}'),
-    ('\u{a7ca}', '\u{a7ca}'),
-    ('\u{a7f6}', '\u{a7f6}'),
+    ('ꟈ', 'ꟈ'),
+    ('ꟊ', 'ꟊ'),
+    ('ꟑ', 'ꟑ'),
+    ('ꟗ', 'ꟗ'),
+    ('ꟙ', 'ꟙ'),
+    ('ꟶ', 'ꟶ'),
     ('ꭓ', 'ꭓ'),
     ('ꭰ', 'ꮿ'),
     ('ff', 'st'),
@@ -4035,6 +4151,10 @@
     ('a', 'z'),
     ('𐐨', '𐑏'),
     ('𐓘', '𐓻'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
     ('𐳀', '𐳲'),
     ('𑣀', '𑣟'),
     ('𖹠', '𖹿'),
@@ -4056,6 +4176,7 @@
     ('⸚', '⸚'),
     ('⸺', '⸻'),
     ('⹀', '⹀'),
+    ('⹝', '⹝'),
     ('〜', '〜'),
     ('〰', '〰'),
     ('゠', '゠'),
@@ -4063,7 +4184,7 @@
     ('﹘', '﹘'),
     ('﹣', '﹣'),
     ('-', '-'),
-    ('\u{10ead}', '\u{10ead}'),
+    ('𐺭', '𐺭'),
 ];
 
 pub const DEFAULT_IGNORABLE_CODE_POINT: &'static [(char, char)] = &[
@@ -4072,7 +4193,7 @@
     ('\u{61c}', '\u{61c}'),
     ('ᅟ', 'ᅠ'),
     ('\u{17b4}', '\u{17b5}'),
-    ('\u{180b}', '\u{180e}'),
+    ('\u{180b}', '\u{180f}'),
     ('\u{200b}', '\u{200f}'),
     ('\u{202a}', '\u{202e}'),
     ('\u{2060}', '\u{206f}'),
@@ -4126,6 +4247,8 @@
     ('\u{7a6}', '\u{7b0}'),
     ('\u{7eb}', 'ߵ'),
     ('\u{818}', '\u{819}'),
+    ('\u{898}', '\u{89f}'),
+    ('ࣉ', '\u{8d2}'),
     ('\u{8e3}', '\u{8fe}'),
     ('\u{93c}', '\u{93c}'),
     ('\u{94d}', '\u{94d}'),
@@ -4142,6 +4265,7 @@
     ('\u{b4d}', '\u{b4d}'),
     ('\u{b55}', '\u{b55}'),
     ('\u{bcd}', '\u{bcd}'),
+    ('\u{c3c}', '\u{c3c}'),
     ('\u{c4d}', '\u{c4d}'),
     ('\u{cbc}', '\u{cbc}'),
     ('\u{ccd}', '\u{ccd}'),
@@ -4168,12 +4292,14 @@
     ('ႏ', 'ႏ'),
     ('ႚ', 'ႛ'),
     ('\u{135d}', '\u{135f}'),
+    ('\u{1714}', '᜕'),
     ('\u{17c9}', '\u{17d3}'),
     ('\u{17dd}', '\u{17dd}'),
     ('\u{1939}', '\u{193b}'),
     ('\u{1a75}', '\u{1a7c}'),
     ('\u{1a7f}', '\u{1a7f}'),
-    ('\u{1ab0}', '\u{1abd}'),
+    ('\u{1ab0}', '\u{1abe}'),
+    ('\u{1ac1}', '\u{1acb}'),
     ('\u{1b34}', '\u{1b34}'),
     ('᭄', '᭄'),
     ('\u{1b6b}', '\u{1b73}'),
@@ -4186,8 +4312,7 @@
     ('᳷', '\u{1cf9}'),
     ('ᴬ', 'ᵪ'),
     ('\u{1dc4}', '\u{1dcf}'),
-    ('\u{1df5}', '\u{1df9}'),
-    ('\u{1dfd}', '\u{1dff}'),
+    ('\u{1df5}', '\u{1dff}'),
     ('᾽', '᾽'),
     ('᾿', '῁'),
     ('῍', '῏'),
@@ -4218,7 +4343,7 @@
     ('\u{aabf}', 'ꫂ'),
     ('\u{aaf6}', '\u{aaf6}'),
     ('꭛', 'ꭟ'),
-    ('\u{ab69}', '\u{ab6b}'),
+    ('ꭩ', '꭫'),
     ('꯬', '\u{abed}'),
     ('\u{fb1e}', '\u{fb1e}'),
     ('\u{fe20}', '\u{fe2f}'),
@@ -4228,9 +4353,16 @@
     ('\u{ff9e}', '\u{ff9f}'),
     (' ̄', ' ̄'),
     ('\u{102e0}', '\u{102e0}'),
+    ('𐞀', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
     ('\u{10ae5}', '\u{10ae6}'),
     ('𐴢', '\u{10d27}'),
+    ('\u{10efd}', '\u{10eff}'),
     ('\u{10f46}', '\u{10f50}'),
+    ('\u{10f82}', '\u{10f85}'),
+    ('\u{11046}', '\u{11046}'),
+    ('\u{11070}', '\u{11070}'),
     ('\u{110b9}', '\u{110ba}'),
     ('\u{11133}', '\u{11134}'),
     ('\u{11173}', '\u{11173}'),
@@ -4250,7 +4382,7 @@
     ('𑚶', '\u{116b7}'),
     ('\u{1172b}', '\u{1172b}'),
     ('\u{11839}', '\u{1183a}'),
-    ('\u{1193d}', '\u{1193e}'),
+    ('𑤽', '\u{1193e}'),
     ('\u{11943}', '\u{11943}'),
     ('\u{119e0}', '\u{119e0}'),
     ('\u{11a34}', '\u{11a34}'),
@@ -4260,16 +4392,24 @@
     ('\u{11d42}', '\u{11d42}'),
     ('\u{11d44}', '\u{11d45}'),
     ('\u{11d97}', '\u{11d97}'),
+    ('\u{13447}', '\u{13455}'),
     ('\u{16af0}', '\u{16af4}'),
     ('\u{16b30}', '\u{16b36}'),
     ('\u{16f8f}', '𖾟'),
-    ('\u{16ff0}', '\u{16ff1}'),
+    ('𖿰', '𖿱'),
+    ('𚿰', '𚿳'),
+    ('𚿵', '𚿻'),
+    ('𚿽', '𚿾'),
+    ('\u{1cf00}', '\u{1cf2d}'),
+    ('\u{1cf30}', '\u{1cf46}'),
     ('\u{1d167}', '\u{1d169}'),
     ('𝅭', '\u{1d172}'),
     ('\u{1d17b}', '\u{1d182}'),
     ('\u{1d185}', '\u{1d18b}'),
     ('\u{1d1aa}', '\u{1d1ad}'),
+    ('𞀰', '𞁭'),
     ('\u{1e130}', '\u{1e136}'),
+    ('\u{1e2ae}', '\u{1e2ae}'),
     ('\u{1e2ec}', '\u{1e2ef}'),
     ('\u{1e8d0}', '\u{1e8d6}'),
     ('\u{1e944}', '\u{1e946}'),
@@ -4410,25 +4550,24 @@
     ('🗺', '🙏'),
     ('🚀', '🛅'),
     ('🛋', '🛒'),
-    ('🛕', '\u{1f6d7}'),
-    ('🛠', '🛥'),
+    ('🛕', '🛗'),
+    ('🛜', '🛥'),
     ('🛩', '🛩'),
     ('🛫', '🛬'),
     ('🛰', '🛰'),
-    ('🛳', '\u{1f6fc}'),
+    ('🛳', '🛼'),
     ('🟠', '🟫'),
-    ('\u{1f90c}', '🤺'),
+    ('🟰', '🟰'),
+    ('🤌', '🤺'),
     ('🤼', '🥅'),
-    ('🥇', '\u{1f978}'),
-    ('🥺', '\u{1f9cb}'),
-    ('🧍', '🧿'),
-    ('🩰', '\u{1fa74}'),
-    ('🩸', '🩺'),
-    ('🪀', '\u{1fa86}'),
-    ('🪐', '\u{1faa8}'),
-    ('\u{1fab0}', '\u{1fab6}'),
-    ('\u{1fac0}', '\u{1fac2}'),
-    ('\u{1fad0}', '\u{1fad6}'),
+    ('🥇', '🧿'),
+    ('🩰', '🩼'),
+    ('🪀', '🪈'),
+    ('🪐', '🪽'),
+    ('🪿', '🫅'),
+    ('🫎', '🫛'),
+    ('🫠', '🫨'),
+    ('🫰', '🫸'),
 ];
 
 pub const EMOJI_COMPONENT: &'static [(char, char)] = &[
@@ -4473,18 +4612,20 @@
     ('🚴', '🚶'),
     ('🛀', '🛀'),
     ('🛌', '🛌'),
-    ('\u{1f90c}', '\u{1f90c}'),
+    ('🤌', '🤌'),
     ('🤏', '🤏'),
     ('🤘', '🤟'),
     ('🤦', '🤦'),
     ('🤰', '🤹'),
     ('🤼', '🤾'),
-    ('\u{1f977}', '\u{1f977}'),
+    ('🥷', '🥷'),
     ('🦵', '🦶'),
     ('🦸', '🦹'),
     ('🦻', '🦻'),
     ('🧍', '🧏'),
     ('🧑', '🧝'),
+    ('🫃', '🫅'),
+    ('🫰', '🫸'),
 ];
 
 pub const EMOJI_PRESENTATION: &'static [(char, char)] = &[
@@ -4553,22 +4694,22 @@
     ('🚀', '🛅'),
     ('🛌', '🛌'),
     ('🛐', '🛒'),
-    ('🛕', '\u{1f6d7}'),
+    ('🛕', '🛗'),
+    ('🛜', '🛟'),
     ('🛫', '🛬'),
-    ('🛴', '\u{1f6fc}'),
+    ('🛴', '🛼'),
     ('🟠', '🟫'),
-    ('\u{1f90c}', '🤺'),
+    ('🟰', '🟰'),
+    ('🤌', '🤺'),
     ('🤼', '🥅'),
-    ('🥇', '\u{1f978}'),
-    ('🥺', '\u{1f9cb}'),
-    ('🧍', '🧿'),
-    ('🩰', '\u{1fa74}'),
-    ('🩸', '🩺'),
-    ('🪀', '\u{1fa86}'),
-    ('🪐', '\u{1faa8}'),
-    ('\u{1fab0}', '\u{1fab6}'),
-    ('\u{1fac0}', '\u{1fac2}'),
-    ('\u{1fad0}', '\u{1fad6}'),
+    ('🥇', '🧿'),
+    ('🩰', '🩼'),
+    ('🪀', '🪈'),
+    ('🪐', '🪽'),
+    ('🪿', '🫅'),
+    ('🫎', '🫛'),
+    ('🫠', '🫨'),
+    ('🫰', '🫸'),
 ];
 
 pub const EXTENDED_PICTOGRAPHIC: &'static [(char, char)] = &[
@@ -4623,13 +4764,13 @@
     ('㊗', '㊗'),
     ('㊙', '㊙'),
     ('🀀', '\u{1f0ff}'),
-    ('\u{1f10d}', '\u{1f10f}'),
+    ('🄍', '🄏'),
     ('🄯', '🄯'),
     ('🅬', '🅱'),
     ('🅾', '🅿'),
     ('🆎', '🆎'),
     ('🆑', '🆚'),
-    ('\u{1f1ad}', '\u{1f1e5}'),
+    ('🆭', '\u{1f1e5}'),
     ('🈁', '\u{1f20f}'),
     ('🈚', '🈚'),
     ('🈯', '🈯'),
@@ -4639,14 +4780,14 @@
     ('🐀', '🔽'),
     ('🕆', '🙏'),
     ('🚀', '\u{1f6ff}'),
-    ('\u{1f774}', '\u{1f77f}'),
+    ('🝴', '🝿'),
     ('🟕', '\u{1f7ff}'),
     ('\u{1f80c}', '\u{1f80f}'),
     ('\u{1f848}', '\u{1f84f}'),
     ('\u{1f85a}', '\u{1f85f}'),
     ('\u{1f888}', '\u{1f88f}'),
     ('\u{1f8ae}', '\u{1f8ff}'),
-    ('\u{1f90c}', '🤺'),
+    ('🤌', '🤺'),
     ('🤼', '🥅'),
     ('🥇', '\u{1faff}'),
     ('\u{1fc00}', '\u{1fffd}'),
@@ -4677,6 +4818,7 @@
     ('ꫝ', 'ꫝ'),
     ('ꫳ', 'ꫴ'),
     ('ー', 'ー'),
+    ('𐞁', '𐞂'),
     ('𑍝', '𑍝'),
     ('𑗆', '𑗈'),
     ('\u{11a98}', '\u{11a98}'),
@@ -4709,7 +4851,7 @@
     ('ׯ', '״'),
     ('؆', '؏'),
     ('؛', '؛'),
-    ('؞', 'ي'),
+    ('؝', 'ي'),
     ('٠', 'ٯ'),
     ('ٱ', 'ە'),
     ('۞', '۞'),
@@ -4730,8 +4872,8 @@
     ('ࡀ', 'ࡘ'),
     ('࡞', '࡞'),
     ('ࡠ', 'ࡪ'),
-    ('ࢠ', 'ࢴ'),
-    ('ࢶ', '\u{8c7}'),
+    ('ࡰ', 'ࢎ'),
+    ('ࢠ', 'ࣉ'),
     ('ः', 'ह'),
     ('ऻ', 'ऻ'),
     ('ऽ', 'ी'),
@@ -4820,6 +4962,7 @@
     ('ఽ', 'ఽ'),
     ('ు', 'ౄ'),
     ('ౘ', 'ౚ'),
+    ('ౝ', 'ౝ'),
     ('ౠ', 'ౡ'),
     ('౦', '౯'),
     ('౷', 'ಀ'),
@@ -4833,10 +4976,10 @@
     ('ೃ', 'ೄ'),
     ('ೇ', 'ೈ'),
     ('ೊ', 'ೋ'),
-    ('ೞ', 'ೞ'),
+    ('ೝ', 'ೞ'),
     ('ೠ', 'ೡ'),
     ('೦', '೯'),
-    ('ೱ', 'ೲ'),
+    ('ೱ', 'ೳ'),
     ('ം', 'ഌ'),
     ('എ', 'ഐ'),
     ('ഒ', 'ഺ'),
@@ -4922,10 +5065,10 @@
     ('ᏸ', 'ᏽ'),
     ('᐀', '᚜'),
     ('ᚠ', 'ᛸ'),
-    ('ᜀ', 'ᜌ'),
-    ('ᜎ', 'ᜑ'),
-    ('ᜠ', 'ᜱ'),
-    ('᜵', '᜶'),
+    ('ᜀ', 'ᜑ'),
+    ('᜕', '᜕'),
+    ('ᜟ', 'ᜱ'),
+    ('᜴', '᜶'),
     ('ᝀ', 'ᝑ'),
     ('ᝠ', 'ᝬ'),
     ('ᝮ', 'ᝰ'),
@@ -4967,9 +5110,9 @@
     ('ᬄ', 'ᬳ'),
     ('ᬻ', 'ᬻ'),
     ('ᬽ', 'ᭁ'),
-    ('ᭃ', 'ᭋ'),
+    ('ᭃ', 'ᭌ'),
     ('᭐', '᭪'),
-    ('᭴', '᭼'),
+    ('᭴', '᭾'),
     ('ᮂ', 'ᮡ'),
     ('ᮦ', 'ᮧ'),
     ('᮪', '᮪'),
@@ -5013,15 +5156,13 @@
     ('⁰', 'ⁱ'),
     ('⁴', '₎'),
     ('ₐ', 'ₜ'),
-    ('₠', '₿'),
+    ('₠', '⃀'),
     ('℀', '↋'),
     ('←', '␦'),
     ('⑀', '⑊'),
     ('①', '⭳'),
     ('⭶', '⮕'),
-    ('\u{2b97}', 'Ⱞ'),
-    ('ⰰ', 'ⱞ'),
-    ('Ⱡ', 'ⳮ'),
+    ('⮗', 'ⳮ'),
     ('Ⳳ', 'ⳳ'),
     ('⳹', 'ⴥ'),
     ('ⴧ', 'ⴧ'),
@@ -5037,7 +5178,7 @@
     ('ⷈ', 'ⷎ'),
     ('ⷐ', 'ⷖ'),
     ('ⷘ', 'ⷞ'),
-    ('⸀', '\u{2e52}'),
+    ('⸀', '⹝'),
     ('⺀', '⺙'),
     ('⺛', '⻳'),
     ('⼀', '⿕'),
@@ -5050,8 +5191,7 @@
     ('ㄱ', 'ㆎ'),
     ('㆐', '㇣'),
     ('ㇰ', '㈞'),
-    ('㈠', '\u{9ffc}'),
-    ('ꀀ', 'ꒌ'),
+    ('㈠', 'ꒌ'),
     ('꒐', '꓆'),
     ('ꓐ', 'ꘫ'),
     ('Ꙁ', 'ꙮ'),
@@ -5059,9 +5199,11 @@
     ('꙾', 'ꚝ'),
     ('ꚠ', 'ꛯ'),
     ('꛲', '꛷'),
-    ('꜀', 'ꞿ'),
-    ('Ꟃ', '\u{a7ca}'),
-    ('\u{a7f5}', 'ꠁ'),
+    ('꜀', 'ꟊ'),
+    ('Ꟑ', 'ꟑ'),
+    ('ꟓ', 'ꟓ'),
+    ('ꟕ', 'ꟙ'),
+    ('ꟲ', 'ꠁ'),
     ('ꠃ', 'ꠅ'),
     ('ꠇ', 'ꠊ'),
     ('ꠌ', 'ꠤ'),
@@ -5103,7 +5245,7 @@
     ('ꬑ', 'ꬖ'),
     ('ꬠ', 'ꬦ'),
     ('ꬨ', 'ꬮ'),
-    ('ꬰ', '\u{ab6b}'),
+    ('ꬰ', '꭫'),
     ('ꭰ', 'ꯤ'),
     ('ꯦ', 'ꯧ'),
     ('ꯩ', '꯬'),
@@ -5121,11 +5263,11 @@
     ('מּ', 'מּ'),
     ('נּ', 'סּ'),
     ('ףּ', 'פּ'),
-    ('צּ', '﯁'),
-    ('ﯓ', '﴿'),
-    ('ﵐ', 'ﶏ'),
+    ('צּ', '﯂'),
+    ('ﯓ', 'ﶏ'),
     ('ﶒ', 'ﷇ'),
-    ('ﷰ', '﷽'),
+    ('﷏', '﷏'),
+    ('ﷰ', '﷿'),
     ('︐', '︙'),
     ('︰', '﹒'),
     ('﹔', '﹦'),
@@ -5151,7 +5293,7 @@
     ('𐄀', '𐄂'),
     ('𐄇', '𐄳'),
     ('𐄷', '𐆎'),
-    ('𐆐', '\u{1019c}'),
+    ('𐆐', '𐆜'),
     ('𐆠', '𐆠'),
     ('𐇐', '𐇼'),
     ('𐊀', '𐊜'),
@@ -5169,10 +5311,20 @@
     ('𐓘', '𐓻'),
     ('𐔀', '𐔧'),
     ('𐔰', '𐕣'),
-    ('𐕯', '𐕯'),
+    ('𐕯', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
     ('𐘀', '𐜶'),
     ('𐝀', '𐝕'),
     ('𐝠', '𐝧'),
+    ('𐞀', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
     ('𐠀', '𐠅'),
     ('𐠈', '𐠈'),
     ('𐠊', '𐠵'),
@@ -5209,18 +5361,22 @@
     ('𐳺', '𐴣'),
     ('𐴰', '𐴹'),
     ('𐹠', '𐹾'),
-    ('\u{10e80}', '\u{10ea9}'),
-    ('\u{10ead}', '\u{10ead}'),
-    ('\u{10eb0}', '\u{10eb1}'),
+    ('𐺀', '𐺩'),
+    ('𐺭', '𐺭'),
+    ('𐺰', '𐺱'),
     ('𐼀', '𐼧'),
     ('𐼰', '𐽅'),
     ('𐽑', '𐽙'),
-    ('\u{10fb0}', '\u{10fcb}'),
+    ('𐽰', '𐾁'),
+    ('𐾆', '𐾉'),
+    ('𐾰', '𐿋'),
     ('𐿠', '𐿶'),
     ('𑀀', '𑀀'),
     ('𑀂', '𑀷'),
     ('𑁇', '𑁍'),
     ('𑁒', '𑁯'),
+    ('𑁱', '𑁲'),
+    ('𑁵', '𑁵'),
     ('𑂂', '𑂲'),
     ('𑂷', '𑂸'),
     ('𑂻', '𑂼'),
@@ -5229,12 +5385,12 @@
     ('𑃰', '𑃹'),
     ('𑄃', '𑄦'),
     ('𑄬', '𑄬'),
-    ('𑄶', '\u{11147}'),
+    ('𑄶', '𑅇'),
     ('𑅐', '𑅲'),
     ('𑅴', '𑅶'),
     ('𑆂', '𑆵'),
     ('𑆿', '𑇈'),
-    ('𑇍', '\u{111ce}'),
+    ('𑇍', '𑇎'),
     ('𑇐', '𑇟'),
     ('𑇡', '𑇴'),
     ('𑈀', '𑈑'),
@@ -5242,6 +5398,7 @@
     ('𑈲', '𑈳'),
     ('𑈵', '𑈵'),
     ('𑈸', '𑈽'),
+    ('𑈿', '𑉀'),
     ('𑊀', '𑊆'),
     ('𑊈', '𑊈'),
     ('𑊊', '𑊍'),
@@ -5269,7 +5426,7 @@
     ('𑑅', '𑑅'),
     ('𑑇', '𑑛'),
     ('𑑝', '𑑝'),
-    ('𑑟', '\u{11461}'),
+    ('𑑟', '𑑡'),
     ('𑒀', '𑒯'),
     ('𑒱', '𑒲'),
     ('𑒹', '𑒹'),
@@ -5293,27 +5450,27 @@
     ('𑚬', '𑚬'),
     ('𑚮', '𑚯'),
     ('𑚶', '𑚶'),
-    ('𑚸', '𑚸'),
+    ('𑚸', '𑚹'),
     ('𑛀', '𑛉'),
     ('𑜀', '𑜚'),
     ('𑜠', '𑜡'),
     ('𑜦', '𑜦'),
-    ('𑜰', '𑜿'),
+    ('𑜰', '𑝆'),
     ('𑠀', '𑠮'),
     ('𑠸', '𑠸'),
     ('𑠻', '𑠻'),
     ('𑢠', '𑣲'),
-    ('𑣿', '\u{11906}'),
-    ('\u{11909}', '\u{11909}'),
-    ('\u{1190c}', '\u{11913}'),
-    ('\u{11915}', '\u{11916}'),
-    ('\u{11918}', '\u{1192f}'),
-    ('\u{11931}', '\u{11935}'),
-    ('\u{11937}', '\u{11938}'),
-    ('\u{1193d}', '\u{1193d}'),
-    ('\u{1193f}', '\u{11942}'),
-    ('\u{11944}', '\u{11946}'),
-    ('\u{11950}', '\u{11959}'),
+    ('𑣿', '𑤆'),
+    ('𑤉', '𑤉'),
+    ('𑤌', '𑤓'),
+    ('𑤕', '𑤖'),
+    ('𑤘', '𑤯'),
+    ('𑤱', '𑤵'),
+    ('𑤷', '𑤸'),
+    ('𑤽', '𑤽'),
+    ('𑤿', '𑥂'),
+    ('𑥄', '𑥆'),
+    ('𑥐', '𑥙'),
     ('𑦠', '𑦧'),
     ('𑦪', '𑧓'),
     ('𑧜', '𑧟'),
@@ -5327,7 +5484,8 @@
     ('𑩜', '𑪉'),
     ('𑪗', '𑪗'),
     ('𑪚', '𑪢'),
-    ('𑫀', '𑫸'),
+    ('𑪰', '𑫸'),
+    ('𑬀', '𑬉'),
     ('𑰀', '𑰈'),
     ('𑰊', '𑰯'),
     ('𑰾', '𑰾'),
@@ -5351,18 +5509,26 @@
     ('𑶠', '𑶩'),
     ('𑻠', '𑻲'),
     ('𑻵', '𑻸'),
-    ('\u{11fb0}', '\u{11fb0}'),
+    ('𑼂', '𑼐'),
+    ('𑼒', '𑼵'),
+    ('𑼾', '𑼿'),
+    ('𑽁', '𑽁'),
+    ('𑽃', '𑽙'),
+    ('𑾰', '𑾰'),
     ('𑿀', '𑿱'),
     ('𑿿', '𒎙'),
     ('𒐀', '𒑮'),
     ('𒑰', '𒑴'),
     ('𒒀', '𒕃'),
-    ('𓀀', '𓐮'),
+    ('𒾐', '𒿲'),
+    ('𓀀', '𓐯'),
+    ('𓑁', '𓑆'),
     ('𔐀', '𔙆'),
     ('𖠀', '𖨸'),
     ('𖩀', '𖩞'),
     ('𖩠', '𖩩'),
-    ('𖩮', '𖩯'),
+    ('𖩮', '𖪾'),
+    ('𖫀', '𖫉'),
     ('𖫐', '𖫭'),
     ('𖫵', '𖫵'),
     ('𖬀', '𖬯'),
@@ -5376,12 +5542,17 @@
     ('𖽐', '𖾇'),
     ('𖾓', '𖾟'),
     ('𖿠', '𖿣'),
-    ('\u{16ff0}', '\u{16ff1}'),
+    ('𖿰', '𖿱'),
     ('𗀀', '𘟷'),
-    ('𘠀', '\u{18cd5}'),
-    ('\u{18d00}', '\u{18d08}'),
-    ('𛀀', '𛄞'),
+    ('𘠀', '𘳕'),
+    ('𘴀', '𘴈'),
+    ('𚿰', '𚿳'),
+    ('𚿵', '𚿻'),
+    ('𚿽', '𚿾'),
+    ('𛀀', '𛄢'),
+    ('𛄲', '𛄲'),
     ('𛅐', '𛅒'),
+    ('𛅕', '𛅕'),
     ('𛅤', '𛅧'),
     ('𛅰', '𛋻'),
     ('𛰀', '𛱪'),
@@ -5390,6 +5561,7 @@
     ('𛲐', '𛲙'),
     ('𛲜', '𛲜'),
     ('𛲟', '𛲟'),
+    ('𜽐', '𜿃'),
     ('𝀀', '𝃵'),
     ('𝄀', '𝄦'),
     ('𝄩', '𝅘𝅥𝅲'),
@@ -5397,9 +5569,10 @@
     ('𝅪', '𝅭'),
     ('𝆃', '𝆄'),
     ('𝆌', '𝆩'),
-    ('𝆮', '𝇨'),
+    ('𝆮', '𝇪'),
     ('𝈀', '𝉁'),
     ('𝉅', '𝉅'),
+    ('𝋀', '𝋓'),
     ('𝋠', '𝋳'),
     ('𝌀', '𝍖'),
     ('𝍠', '𝍸'),
@@ -5428,13 +5601,23 @@
     ('𝩭', '𝩴'),
     ('𝩶', '𝪃'),
     ('𝪅', '𝪋'),
+    ('𝼀', '𝼞'),
+    ('𝼥', '𝼪'),
+    ('𞀰', '𞁭'),
     ('𞄀', '𞄬'),
     ('𞄷', '𞄽'),
     ('𞅀', '𞅉'),
     ('𞅎', '𞅏'),
+    ('𞊐', '𞊭'),
     ('𞋀', '𞋫'),
     ('𞋰', '𞋹'),
     ('𞋿', '𞋿'),
+    ('𞓐', '𞓫'),
+    ('𞓰', '𞓹'),
+    ('𞟠', '𞟦'),
+    ('𞟨', '𞟫'),
+    ('𞟭', '𞟮'),
+    ('𞟰', '𞟾'),
     ('𞠀', '𞣄'),
     ('𞣇', '𞣏'),
     ('𞤀', '𞥃'),
@@ -5483,45 +5666,45 @@
     ('🂱', '🂿'),
     ('🃁', '🃏'),
     ('🃑', '🃵'),
-    ('🄀', '\u{1f1ad}'),
+    ('🄀', '🆭'),
     ('🇦', '🈂'),
     ('🈐', '🈻'),
     ('🉀', '🉈'),
     ('🉐', '🉑'),
     ('🉠', '🉥'),
-    ('🌀', '\u{1f6d7}'),
-    ('🛠', '🛬'),
-    ('🛰', '\u{1f6fc}'),
-    ('🜀', '🝳'),
-    ('🞀', '🟘'),
+    ('🌀', '🛗'),
+    ('🛜', '🛬'),
+    ('🛰', '🛼'),
+    ('🜀', '🝶'),
+    ('🝻', '🟙'),
     ('🟠', '🟫'),
+    ('🟰', '🟰'),
     ('🠀', '🠋'),
     ('🠐', '🡇'),
     ('🡐', '🡙'),
     ('🡠', '🢇'),
     ('🢐', '🢭'),
-    ('\u{1f8b0}', '\u{1f8b1}'),
-    ('🤀', '\u{1f978}'),
-    ('🥺', '\u{1f9cb}'),
-    ('🧍', '🩓'),
+    ('🢰', '🢱'),
+    ('🤀', '🩓'),
     ('🩠', '🩭'),
-    ('🩰', '\u{1fa74}'),
-    ('🩸', '🩺'),
-    ('🪀', '\u{1fa86}'),
-    ('🪐', '\u{1faa8}'),
-    ('\u{1fab0}', '\u{1fab6}'),
-    ('\u{1fac0}', '\u{1fac2}'),
-    ('\u{1fad0}', '\u{1fad6}'),
-    ('\u{1fb00}', '\u{1fb92}'),
-    ('\u{1fb94}', '\u{1fbca}'),
-    ('\u{1fbf0}', '\u{1fbf9}'),
-    ('𠀀', '\u{2a6dd}'),
-    ('𪜀', '𫜴'),
+    ('🩰', '🩼'),
+    ('🪀', '🪈'),
+    ('🪐', '🪽'),
+    ('🪿', '🫅'),
+    ('🫎', '🫛'),
+    ('🫠', '🫨'),
+    ('🫰', '🫸'),
+    ('🬀', '🮒'),
+    ('🮔', '🯊'),
+    ('🯰', '🯹'),
+    ('𠀀', '𪛟'),
+    ('𪜀', '𫜹'),
     ('𫝀', '𫠝'),
     ('𫠠', '𬺡'),
     ('𬺰', '𮯠'),
     ('丽', '𪘀'),
-    ('\u{30000}', '\u{3134a}'),
+    ('𰀀', '𱍊'),
+    ('𱍐', '𲎯'),
 ];
 
 pub const GRAPHEME_EXTEND: &'static [(char, char)] = &[
@@ -5549,7 +5732,8 @@
     ('\u{825}', '\u{827}'),
     ('\u{829}', '\u{82d}'),
     ('\u{859}', '\u{85b}'),
-    ('\u{8d3}', '\u{8e1}'),
+    ('\u{898}', '\u{89f}'),
+    ('\u{8ca}', '\u{8e1}'),
     ('\u{8e3}', '\u{902}'),
     ('\u{93a}', '\u{93a}'),
     ('\u{93c}', '\u{93c}'),
@@ -5594,6 +5778,7 @@
     ('\u{bd7}', '\u{bd7}'),
     ('\u{c00}', '\u{c00}'),
     ('\u{c04}', '\u{c04}'),
+    ('\u{c3c}', '\u{c3c}'),
     ('\u{c3e}', '\u{c40}'),
     ('\u{c46}', '\u{c48}'),
     ('\u{c4a}', '\u{c4d}'),
@@ -5625,7 +5810,7 @@
     ('\u{e47}', '\u{e4e}'),
     ('\u{eb1}', '\u{eb1}'),
     ('\u{eb4}', '\u{ebc}'),
-    ('\u{ec8}', '\u{ecd}'),
+    ('\u{ec8}', '\u{ece}'),
     ('\u{f18}', '\u{f19}'),
     ('\u{f35}', '\u{f35}'),
     ('\u{f37}', '\u{f37}'),
@@ -5649,7 +5834,7 @@
     ('\u{109d}', '\u{109d}'),
     ('\u{135d}', '\u{135f}'),
     ('\u{1712}', '\u{1714}'),
-    ('\u{1732}', '\u{1734}'),
+    ('\u{1732}', '\u{1733}'),
     ('\u{1752}', '\u{1753}'),
     ('\u{1772}', '\u{1773}'),
     ('\u{17b4}', '\u{17b5}'),
@@ -5658,6 +5843,7 @@
     ('\u{17c9}', '\u{17d3}'),
     ('\u{17dd}', '\u{17dd}'),
     ('\u{180b}', '\u{180d}'),
+    ('\u{180f}', '\u{180f}'),
     ('\u{1885}', '\u{1886}'),
     ('\u{18a9}', '\u{18a9}'),
     ('\u{1920}', '\u{1922}'),
@@ -5673,7 +5859,7 @@
     ('\u{1a65}', '\u{1a6c}'),
     ('\u{1a73}', '\u{1a7c}'),
     ('\u{1a7f}', '\u{1a7f}'),
-    ('\u{1ab0}', '\u{1ac0}'),
+    ('\u{1ab0}', '\u{1ace}'),
     ('\u{1b00}', '\u{1b03}'),
     ('\u{1b34}', '\u{1b3a}'),
     ('\u{1b3c}', '\u{1b3c}'),
@@ -5695,8 +5881,7 @@
     ('\u{1ced}', '\u{1ced}'),
     ('\u{1cf4}', '\u{1cf4}'),
     ('\u{1cf8}', '\u{1cf9}'),
-    ('\u{1dc0}', '\u{1df9}'),
-    ('\u{1dfb}', '\u{1dff}'),
+    ('\u{1dc0}', '\u{1dff}'),
     ('\u{200c}', '\u{200c}'),
     ('\u{20d0}', '\u{20f0}'),
     ('\u{2cef}', '\u{2cf1}'),
@@ -5754,12 +5939,17 @@
     ('\u{10ae5}', '\u{10ae6}'),
     ('\u{10d24}', '\u{10d27}'),
     ('\u{10eab}', '\u{10eac}'),
+    ('\u{10efd}', '\u{10eff}'),
     ('\u{10f46}', '\u{10f50}'),
+    ('\u{10f82}', '\u{10f85}'),
     ('\u{11001}', '\u{11001}'),
     ('\u{11038}', '\u{11046}'),
+    ('\u{11070}', '\u{11070}'),
+    ('\u{11073}', '\u{11074}'),
     ('\u{1107f}', '\u{11081}'),
     ('\u{110b3}', '\u{110b6}'),
     ('\u{110b9}', '\u{110ba}'),
+    ('\u{110c2}', '\u{110c2}'),
     ('\u{11100}', '\u{11102}'),
     ('\u{11127}', '\u{1112b}'),
     ('\u{1112d}', '\u{11134}'),
@@ -5772,6 +5962,7 @@
     ('\u{11234}', '\u{11234}'),
     ('\u{11236}', '\u{11237}'),
     ('\u{1123e}', '\u{1123e}'),
+    ('\u{11241}', '\u{11241}'),
     ('\u{112df}', '\u{112df}'),
     ('\u{112e3}', '\u{112ea}'),
     ('\u{11300}', '\u{11301}'),
@@ -5839,12 +6030,20 @@
     ('\u{11d95}', '\u{11d95}'),
     ('\u{11d97}', '\u{11d97}'),
     ('\u{11ef3}', '\u{11ef4}'),
+    ('\u{11f00}', '\u{11f01}'),
+    ('\u{11f36}', '\u{11f3a}'),
+    ('\u{11f40}', '\u{11f40}'),
+    ('\u{11f42}', '\u{11f42}'),
+    ('\u{13440}', '\u{13440}'),
+    ('\u{13447}', '\u{13455}'),
     ('\u{16af0}', '\u{16af4}'),
     ('\u{16b30}', '\u{16b36}'),
     ('\u{16f4f}', '\u{16f4f}'),
     ('\u{16f8f}', '\u{16f92}'),
     ('\u{16fe4}', '\u{16fe4}'),
     ('\u{1bc9d}', '\u{1bc9e}'),
+    ('\u{1cf00}', '\u{1cf2d}'),
+    ('\u{1cf30}', '\u{1cf46}'),
     ('\u{1d165}', '\u{1d165}'),
     ('\u{1d167}', '\u{1d169}'),
     ('\u{1d16e}', '\u{1d172}'),
@@ -5863,8 +6062,11 @@
     ('\u{1e01b}', '\u{1e021}'),
     ('\u{1e023}', '\u{1e024}'),
     ('\u{1e026}', '\u{1e02a}'),
+    ('\u{1e08f}', '\u{1e08f}'),
     ('\u{1e130}', '\u{1e136}'),
+    ('\u{1e2ae}', '\u{1e2ae}'),
     ('\u{1e2ec}', '\u{1e2ef}'),
+    ('\u{1e4ec}', '\u{1e4ef}'),
     ('\u{1e8d0}', '\u{1e8d6}'),
     ('\u{1e944}', '\u{1e94a}'),
     ('\u{e0020}', '\u{e007f}'),
@@ -5887,8 +6089,8 @@
     ('\u{eba}', '\u{eba}'),
     ('\u{f84}', '\u{f84}'),
     ('\u{1039}', '\u{103a}'),
-    ('\u{1714}', '\u{1714}'),
-    ('\u{1734}', '\u{1734}'),
+    ('\u{1714}', '᜕'),
+    ('᜴', '᜴'),
     ('\u{17d2}', '\u{17d2}'),
     ('\u{1a60}', '\u{1a60}'),
     ('᭄', '᭄'),
@@ -5904,6 +6106,7 @@
     ('\u{abed}', '\u{abed}'),
     ('\u{10a3f}', '\u{10a3f}'),
     ('\u{11046}', '\u{11046}'),
+    ('\u{11070}', '\u{11070}'),
     ('\u{1107f}', '\u{1107f}'),
     ('\u{110b9}', '\u{110b9}'),
     ('\u{11133}', '\u{11134}'),
@@ -5918,7 +6121,7 @@
     ('𑚶', '𑚶'),
     ('\u{1172b}', '\u{1172b}'),
     ('\u{11839}', '\u{11839}'),
-    ('\u{1193d}', '\u{1193e}'),
+    ('𑤽', '\u{1193e}'),
     ('\u{119e0}', '\u{119e0}'),
     ('\u{11a34}', '\u{11a34}'),
     ('\u{11a47}', '\u{11a47}'),
@@ -5926,6 +6129,7 @@
     ('\u{11c3f}', '\u{11c3f}'),
     ('\u{11d44}', '\u{11d45}'),
     ('\u{11d97}', '\u{11d97}'),
+    ('𑽁', '\u{11f42}'),
 ];
 
 pub const HEX_DIGIT: &'static [(char, char)] = &[
@@ -6007,9 +6211,9 @@
     ('ࠀ', '\u{82d}'),
     ('ࡀ', '\u{85b}'),
     ('ࡠ', 'ࡪ'),
-    ('ࢠ', 'ࢴ'),
-    ('ࢶ', '\u{8c7}'),
-    ('\u{8d3}', '\u{8e1}'),
+    ('ࡰ', 'ࢇ'),
+    ('ࢉ', 'ࢎ'),
+    ('\u{898}', '\u{8e1}'),
     ('\u{8e3}', '\u{963}'),
     ('०', '९'),
     ('ॱ', 'ঃ'),
@@ -6093,11 +6297,12 @@
     ('ఎ', 'ఐ'),
     ('ఒ', 'న'),
     ('ప', 'హ'),
-    ('ఽ', 'ౄ'),
+    ('\u{c3c}', 'ౄ'),
     ('\u{c46}', '\u{c48}'),
     ('\u{c4a}', '\u{c4d}'),
     ('\u{c55}', '\u{c56}'),
     ('ౘ', 'ౚ'),
+    ('ౝ', 'ౝ'),
     ('ౠ', '\u{c63}'),
     ('౦', '౯'),
     ('ಀ', 'ಃ'),
@@ -6110,10 +6315,10 @@
     ('\u{cc6}', 'ೈ'),
     ('ೊ', '\u{ccd}'),
     ('\u{cd5}', '\u{cd6}'),
-    ('ೞ', 'ೞ'),
+    ('ೝ', 'ೞ'),
     ('ೠ', '\u{ce3}'),
     ('೦', '೯'),
-    ('ೱ', 'ೲ'),
+    ('ೱ', 'ೳ'),
     ('\u{d00}', 'ഌ'),
     ('എ', 'ഐ'),
     ('ഒ', '\u{d44}'),
@@ -6146,7 +6351,7 @@
     ('ວ', 'ຽ'),
     ('ເ', 'ໄ'),
     ('ໆ', 'ໆ'),
-    ('\u{ec8}', '\u{ecd}'),
+    ('\u{ec8}', '\u{ece}'),
     ('໐', '໙'),
     ('ໜ', 'ໟ'),
     ('ༀ', 'ༀ'),
@@ -6193,9 +6398,8 @@
     ('ᚁ', 'ᚚ'),
     ('ᚠ', 'ᛪ'),
     ('ᛮ', 'ᛸ'),
-    ('ᜀ', 'ᜌ'),
-    ('ᜎ', '\u{1714}'),
-    ('ᜠ', '\u{1734}'),
+    ('ᜀ', '᜕'),
+    ('ᜟ', '᜴'),
     ('ᝀ', '\u{1753}'),
     ('ᝠ', 'ᝬ'),
     ('ᝮ', 'ᝰ'),
@@ -6205,7 +6409,7 @@
     ('ៜ', '\u{17dd}'),
     ('០', '៩'),
     ('\u{180b}', '\u{180d}'),
-    ('᠐', '᠙'),
+    ('\u{180f}', '᠙'),
     ('ᠠ', 'ᡸ'),
     ('ᢀ', 'ᢪ'),
     ('ᢰ', 'ᣵ'),
@@ -6224,8 +6428,8 @@
     ('᪐', '᪙'),
     ('ᪧ', 'ᪧ'),
     ('\u{1ab0}', '\u{1abd}'),
-    ('\u{1abf}', '\u{1ac0}'),
-    ('\u{1b00}', 'ᭋ'),
+    ('\u{1abf}', '\u{1ace}'),
+    ('\u{1b00}', 'ᭌ'),
     ('᭐', '᭙'),
     ('\u{1b6b}', '\u{1b73}'),
     ('\u{1b80}', '᯳'),
@@ -6237,8 +6441,7 @@
     ('Ჽ', 'Ჿ'),
     ('\u{1cd0}', '\u{1cd2}'),
     ('\u{1cd4}', 'ᳺ'),
-    ('ᴀ', '\u{1df9}'),
-    ('\u{1dfb}', 'ἕ'),
+    ('ᴀ', 'ἕ'),
     ('Ἐ', 'Ἕ'),
     ('ἠ', 'ὅ'),
     ('Ὀ', 'Ὅ'),
@@ -6278,9 +6481,7 @@
     ('ⅅ', 'ⅉ'),
     ('ⅎ', 'ⅎ'),
     ('Ⅰ', 'ↈ'),
-    ('Ⰰ', 'Ⱞ'),
-    ('ⰰ', 'ⱞ'),
-    ('Ⱡ', 'ⳤ'),
+    ('Ⰰ', 'ⳤ'),
     ('Ⳬ', 'ⳳ'),
     ('ⴀ', 'ⴥ'),
     ('ⴧ', 'ⴧ'),
@@ -6307,11 +6508,10 @@
     ('ー', 'ヿ'),
     ('ㄅ', 'ㄯ'),
     ('ㄱ', 'ㆎ'),
-    ('ㆠ', '\u{31bf}'),
+    ('ㆠ', 'ㆿ'),
     ('ㇰ', 'ㇿ'),
-    ('㐀', '\u{4dbf}'),
-    ('一', '\u{9ffc}'),
-    ('ꀀ', 'ꒌ'),
+    ('㐀', '䶿'),
+    ('一', 'ꒌ'),
     ('ꓐ', 'ꓽ'),
     ('ꔀ', 'ꘌ'),
     ('ꘐ', 'ꘫ'),
@@ -6320,9 +6520,11 @@
     ('ꙿ', '\u{a6f1}'),
     ('ꜗ', 'ꜟ'),
     ('Ꜣ', 'ꞈ'),
-    ('Ꞌ', 'ꞿ'),
-    ('Ꟃ', '\u{a7ca}'),
-    ('\u{a7f5}', 'ꠧ'),
+    ('Ꞌ', 'ꟊ'),
+    ('Ꟑ', 'ꟑ'),
+    ('ꟓ', 'ꟓ'),
+    ('ꟕ', 'ꟙ'),
+    ('ꟲ', 'ꠧ'),
     ('\u{a82c}', '\u{a82c}'),
     ('ꡀ', 'ꡳ'),
     ('ꢀ', '\u{a8c5}'),
@@ -6349,7 +6551,7 @@
     ('ꬠ', 'ꬦ'),
     ('ꬨ', 'ꬮ'),
     ('ꬰ', 'ꭚ'),
-    ('ꭜ', '\u{ab69}'),
+    ('ꭜ', 'ꭩ'),
     ('ꭰ', 'ꯪ'),
     ('꯬', '\u{abed}'),
     ('꯰', '꯹'),
@@ -6411,9 +6613,20 @@
     ('𐓘', '𐓻'),
     ('𐔀', '𐔧'),
     ('𐔰', '𐕣'),
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
     ('𐘀', '𐜶'),
     ('𐝀', '𐝕'),
     ('𐝠', '𐝧'),
+    ('𐞀', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
     ('𐠀', '𐠅'),
     ('𐠈', '𐠈'),
     ('𐠊', '𐠵'),
@@ -6448,31 +6661,33 @@
     ('𐳀', '𐳲'),
     ('𐴀', '\u{10d27}'),
     ('𐴰', '𐴹'),
-    ('\u{10e80}', '\u{10ea9}'),
+    ('𐺀', '𐺩'),
     ('\u{10eab}', '\u{10eac}'),
-    ('\u{10eb0}', '\u{10eb1}'),
-    ('𐼀', '𐼜'),
+    ('𐺰', '𐺱'),
+    ('\u{10efd}', '𐼜'),
     ('𐼧', '𐼧'),
     ('𐼰', '\u{10f50}'),
-    ('\u{10fb0}', '\u{10fc4}'),
+    ('𐽰', '\u{10f85}'),
+    ('𐾰', '𐿄'),
     ('𐿠', '𐿶'),
     ('𑀀', '\u{11046}'),
-    ('𑁦', '𑁯'),
+    ('𑁦', '𑁵'),
     ('\u{1107f}', '\u{110ba}'),
+    ('\u{110c2}', '\u{110c2}'),
     ('𑃐', '𑃨'),
     ('𑃰', '𑃹'),
     ('\u{11100}', '\u{11134}'),
     ('𑄶', '𑄿'),
-    ('𑅄', '\u{11147}'),
+    ('𑅄', '𑅇'),
     ('𑅐', '\u{11173}'),
     ('𑅶', '𑅶'),
     ('\u{11180}', '𑇄'),
     ('\u{111c9}', '\u{111cc}'),
-    ('\u{111ce}', '𑇚'),
+    ('𑇎', '𑇚'),
     ('𑇜', '𑇜'),
     ('𑈀', '𑈑'),
     ('𑈓', '\u{11237}'),
-    ('\u{1123e}', '\u{1123e}'),
+    ('\u{1123e}', '\u{11241}'),
     ('𑊀', '𑊆'),
     ('𑊈', '𑊈'),
     ('𑊊', '𑊍'),
@@ -6497,7 +6712,7 @@
     ('\u{11370}', '\u{11374}'),
     ('𑐀', '𑑊'),
     ('𑑐', '𑑙'),
-    ('\u{1145e}', '\u{11461}'),
+    ('\u{1145e}', '𑑡'),
     ('𑒀', '𑓅'),
     ('𑓇', '𑓇'),
     ('𑓐', '𑓙'),
@@ -6512,16 +6727,17 @@
     ('𑜀', '𑜚'),
     ('\u{1171d}', '\u{1172b}'),
     ('𑜰', '𑜹'),
+    ('𑝀', '𑝆'),
     ('𑠀', '\u{1183a}'),
     ('𑢠', '𑣩'),
-    ('𑣿', '\u{11906}'),
-    ('\u{11909}', '\u{11909}'),
-    ('\u{1190c}', '\u{11913}'),
-    ('\u{11915}', '\u{11916}'),
-    ('\u{11918}', '\u{11935}'),
-    ('\u{11937}', '\u{11938}'),
+    ('𑣿', '𑤆'),
+    ('𑤉', '𑤉'),
+    ('𑤌', '𑤓'),
+    ('𑤕', '𑤖'),
+    ('𑤘', '𑤵'),
+    ('𑤷', '𑤸'),
     ('\u{1193b}', '\u{11943}'),
-    ('\u{11950}', '\u{11959}'),
+    ('𑥐', '𑥙'),
     ('𑦠', '𑦧'),
     ('𑦪', '\u{119d7}'),
     ('\u{119da}', '𑧡'),
@@ -6530,7 +6746,7 @@
     ('\u{11a47}', '\u{11a47}'),
     ('𑩐', '\u{11a99}'),
     ('𑪝', '𑪝'),
-    ('𑫀', '𑫸'),
+    ('𑪰', '𑫸'),
     ('𑰀', '𑰈'),
     ('𑰊', '\u{11c36}'),
     ('\u{11c38}', '𑱀'),
@@ -6552,15 +6768,23 @@
     ('𑶓', '𑶘'),
     ('𑶠', '𑶩'),
     ('𑻠', '𑻶'),
-    ('\u{11fb0}', '\u{11fb0}'),
+    ('\u{11f00}', '𑼐'),
+    ('𑼒', '\u{11f3a}'),
+    ('𑼾', '\u{11f42}'),
+    ('𑽐', '𑽙'),
+    ('𑾰', '𑾰'),
     ('𒀀', '𒎙'),
     ('𒐀', '𒑮'),
     ('𒒀', '𒕃'),
-    ('𓀀', '𓐮'),
+    ('𒾐', '𒿰'),
+    ('𓀀', '𓐯'),
+    ('\u{13440}', '\u{13455}'),
     ('𔐀', '𔙆'),
     ('𖠀', '𖨸'),
     ('𖩀', '𖩞'),
     ('𖩠', '𖩩'),
+    ('𖩰', '𖪾'),
+    ('𖫀', '𖫉'),
     ('𖫐', '𖫭'),
     ('\u{16af0}', '\u{16af4}'),
     ('𖬀', '\u{16b36}'),
@@ -6574,12 +6798,17 @@
     ('\u{16f8f}', '𖾟'),
     ('𖿠', '𖿡'),
     ('𖿣', '\u{16fe4}'),
-    ('\u{16ff0}', '\u{16ff1}'),
+    ('𖿰', '𖿱'),
     ('𗀀', '𘟷'),
-    ('𘠀', '\u{18cd5}'),
-    ('\u{18d00}', '\u{18d08}'),
-    ('𛀀', '𛄞'),
+    ('𘠀', '𘳕'),
+    ('𘴀', '𘴈'),
+    ('𚿰', '𚿳'),
+    ('𚿵', '𚿻'),
+    ('𚿽', '𚿾'),
+    ('𛀀', '𛄢'),
+    ('𛄲', '𛄲'),
     ('𛅐', '𛅒'),
+    ('𛅕', '𛅕'),
     ('𛅤', '𛅧'),
     ('𛅰', '𛋻'),
     ('𛰀', '𛱪'),
@@ -6587,6 +6816,8 @@
     ('𛲀', '𛲈'),
     ('𛲐', '𛲙'),
     ('\u{1bc9d}', '\u{1bc9e}'),
+    ('\u{1cf00}', '\u{1cf2d}'),
+    ('\u{1cf30}', '\u{1cf46}'),
     ('\u{1d165}', '\u{1d169}'),
     ('𝅭', '\u{1d172}'),
     ('\u{1d17b}', '\u{1d182}'),
@@ -6630,16 +6861,26 @@
     ('\u{1da84}', '\u{1da84}'),
     ('\u{1da9b}', '\u{1da9f}'),
     ('\u{1daa1}', '\u{1daaf}'),
+    ('𝼀', '𝼞'),
+    ('𝼥', '𝼪'),
     ('\u{1e000}', '\u{1e006}'),
     ('\u{1e008}', '\u{1e018}'),
     ('\u{1e01b}', '\u{1e021}'),
     ('\u{1e023}', '\u{1e024}'),
     ('\u{1e026}', '\u{1e02a}'),
+    ('𞀰', '𞁭'),
+    ('\u{1e08f}', '\u{1e08f}'),
     ('𞄀', '𞄬'),
     ('\u{1e130}', '𞄽'),
     ('𞅀', '𞅉'),
     ('𞅎', '𞅎'),
+    ('𞊐', '\u{1e2ae}'),
     ('𞋀', '𞋹'),
+    ('𞓐', '𞓹'),
+    ('𞟠', '𞟦'),
+    ('𞟨', '𞟫'),
+    ('𞟭', '𞟮'),
+    ('𞟰', '𞟾'),
     ('𞠀', '𞣄'),
     ('\u{1e8d0}', '\u{1e8d6}'),
     ('𞤀', '𞥋'),
@@ -6677,14 +6918,15 @@
     ('𞺡', '𞺣'),
     ('𞺥', '𞺩'),
     ('𞺫', '𞺻'),
-    ('\u{1fbf0}', '\u{1fbf9}'),
-    ('𠀀', '\u{2a6dd}'),
-    ('𪜀', '𫜴'),
+    ('🯰', '🯹'),
+    ('𠀀', '𪛟'),
+    ('𪜀', '𫜹'),
     ('𫝀', '𫠝'),
     ('𫠠', '𬺡'),
     ('𬺰', '𮯠'),
     ('丽', '𪘀'),
-    ('\u{30000}', '\u{3134a}'),
+    ('𰀀', '𱍊'),
+    ('𱍐', '𲎯'),
     ('\u{e0100}', '\u{e01ef}'),
 ];
 
@@ -6738,8 +6980,9 @@
     ('ࠨ', 'ࠨ'),
     ('ࡀ', 'ࡘ'),
     ('ࡠ', 'ࡪ'),
-    ('ࢠ', 'ࢴ'),
-    ('ࢶ', '\u{8c7}'),
+    ('ࡰ', 'ࢇ'),
+    ('ࢉ', 'ࢎ'),
+    ('ࢠ', 'ࣉ'),
     ('ऄ', 'ह'),
     ('ऽ', 'ऽ'),
     ('ॐ', 'ॐ'),
@@ -6804,6 +7047,7 @@
     ('ప', 'హ'),
     ('ఽ', 'ఽ'),
     ('ౘ', 'ౚ'),
+    ('ౝ', 'ౝ'),
     ('ౠ', 'ౡ'),
     ('ಀ', 'ಀ'),
     ('ಅ', 'ಌ'),
@@ -6812,10 +7056,10 @@
     ('ಪ', 'ಳ'),
     ('ವ', 'ಹ'),
     ('ಽ', 'ಽ'),
-    ('ೞ', 'ೞ'),
+    ('ೝ', 'ೞ'),
     ('ೠ', 'ೡ'),
     ('ೱ', 'ೲ'),
-    ('\u{d04}', 'ഌ'),
+    ('ഄ', 'ഌ'),
     ('എ', 'ഐ'),
     ('ഒ', 'ഺ'),
     ('ഽ', 'ഽ'),
@@ -6883,9 +7127,8 @@
     ('ᚁ', 'ᚚ'),
     ('ᚠ', 'ᛪ'),
     ('ᛮ', 'ᛸ'),
-    ('ᜀ', 'ᜌ'),
-    ('ᜎ', 'ᜑ'),
-    ('ᜠ', 'ᜱ'),
+    ('ᜀ', 'ᜑ'),
+    ('ᜟ', 'ᜱ'),
     ('ᝀ', 'ᝑ'),
     ('ᝠ', 'ᝬ'),
     ('ᝮ', 'ᝰ'),
@@ -6905,7 +7148,7 @@
     ('ᨠ', 'ᩔ'),
     ('ᪧ', 'ᪧ'),
     ('ᬅ', 'ᬳ'),
-    ('ᭅ', 'ᭋ'),
+    ('ᭅ', 'ᭌ'),
     ('ᮃ', 'ᮠ'),
     ('ᮮ', 'ᮯ'),
     ('ᮺ', 'ᯥ'),
@@ -6955,9 +7198,7 @@
     ('ⅅ', 'ⅉ'),
     ('ⅎ', 'ⅎ'),
     ('Ⅰ', 'ↈ'),
-    ('Ⰰ', 'Ⱞ'),
-    ('ⰰ', 'ⱞ'),
-    ('Ⱡ', 'ⳤ'),
+    ('Ⰰ', 'ⳤ'),
     ('Ⳬ', 'ⳮ'),
     ('Ⳳ', 'ⳳ'),
     ('ⴀ', 'ⴥ'),
@@ -6984,11 +7225,10 @@
     ('ー', 'ヿ'),
     ('ㄅ', 'ㄯ'),
     ('ㄱ', 'ㆎ'),
-    ('ㆠ', '\u{31bf}'),
+    ('ㆠ', 'ㆿ'),
     ('ㇰ', 'ㇿ'),
-    ('㐀', '\u{4dbf}'),
-    ('一', '\u{9ffc}'),
-    ('ꀀ', 'ꒌ'),
+    ('㐀', '䶿'),
+    ('一', 'ꒌ'),
     ('ꓐ', 'ꓽ'),
     ('ꔀ', 'ꘌ'),
     ('ꘐ', 'ꘟ'),
@@ -6998,9 +7238,11 @@
     ('ꚠ', 'ꛯ'),
     ('ꜗ', 'ꜟ'),
     ('Ꜣ', 'ꞈ'),
-    ('Ꞌ', 'ꞿ'),
-    ('Ꟃ', '\u{a7ca}'),
-    ('\u{a7f5}', 'ꠁ'),
+    ('Ꞌ', 'ꟊ'),
+    ('Ꟑ', 'ꟑ'),
+    ('ꟓ', 'ꟓ'),
+    ('ꟕ', 'ꟙ'),
+    ('ꟲ', 'ꠁ'),
     ('ꠃ', 'ꠅ'),
     ('ꠇ', 'ꠊ'),
     ('ꠌ', 'ꠢ'),
@@ -7037,7 +7279,7 @@
     ('ꬠ', 'ꬦ'),
     ('ꬨ', 'ꬮ'),
     ('ꬰ', 'ꭚ'),
-    ('ꭜ', '\u{ab69}'),
+    ('ꭜ', 'ꭩ'),
     ('ꭰ', 'ꯢ'),
     ('가', '힣'),
     ('ힰ', 'ퟆ'),
@@ -7089,9 +7331,20 @@
     ('𐓘', '𐓻'),
     ('𐔀', '𐔧'),
     ('𐔰', '𐕣'),
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
     ('𐘀', '𐜶'),
     ('𐝀', '𐝕'),
     ('𐝠', '𐝧'),
+    ('𐞀', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
     ('𐠀', '𐠅'),
     ('𐠈', '𐠈'),
     ('𐠊', '𐠵'),
@@ -7122,19 +7375,22 @@
     ('𐲀', '𐲲'),
     ('𐳀', '𐳲'),
     ('𐴀', '𐴣'),
-    ('\u{10e80}', '\u{10ea9}'),
-    ('\u{10eb0}', '\u{10eb1}'),
+    ('𐺀', '𐺩'),
+    ('𐺰', '𐺱'),
     ('𐼀', '𐼜'),
     ('𐼧', '𐼧'),
     ('𐼰', '𐽅'),
-    ('\u{10fb0}', '\u{10fc4}'),
+    ('𐽰', '𐾁'),
+    ('𐾰', '𐿄'),
     ('𐿠', '𐿶'),
     ('𑀃', '𑀷'),
+    ('𑁱', '𑁲'),
+    ('𑁵', '𑁵'),
     ('𑂃', '𑂯'),
     ('𑃐', '𑃨'),
     ('𑄃', '𑄦'),
     ('𑅄', '𑅄'),
-    ('\u{11147}', '\u{11147}'),
+    ('𑅇', '𑅇'),
     ('𑅐', '𑅲'),
     ('𑅶', '𑅶'),
     ('𑆃', '𑆲'),
@@ -7143,6 +7399,7 @@
     ('𑇜', '𑇜'),
     ('𑈀', '𑈑'),
     ('𑈓', '𑈫'),
+    ('𑈿', '𑉀'),
     ('𑊀', '𑊆'),
     ('𑊈', '𑊈'),
     ('𑊊', '𑊍'),
@@ -7160,7 +7417,7 @@
     ('𑍝', '𑍡'),
     ('𑐀', '𑐴'),
     ('𑑇', '𑑊'),
-    ('𑑟', '\u{11461}'),
+    ('𑑟', '𑑡'),
     ('𑒀', '𑒯'),
     ('𑓄', '𑓅'),
     ('𑓇', '𑓇'),
@@ -7171,15 +7428,16 @@
     ('𑚀', '𑚪'),
     ('𑚸', '𑚸'),
     ('𑜀', '𑜚'),
+    ('𑝀', '𑝆'),
     ('𑠀', '𑠫'),
     ('𑢠', '𑣟'),
-    ('𑣿', '\u{11906}'),
-    ('\u{11909}', '\u{11909}'),
-    ('\u{1190c}', '\u{11913}'),
-    ('\u{11915}', '\u{11916}'),
-    ('\u{11918}', '\u{1192f}'),
-    ('\u{1193f}', '\u{1193f}'),
-    ('\u{11941}', '\u{11941}'),
+    ('𑣿', '𑤆'),
+    ('𑤉', '𑤉'),
+    ('𑤌', '𑤓'),
+    ('𑤕', '𑤖'),
+    ('𑤘', '𑤯'),
+    ('𑤿', '𑤿'),
+    ('𑥁', '𑥁'),
     ('𑦠', '𑦧'),
     ('𑦪', '𑧐'),
     ('𑧡', '𑧡'),
@@ -7190,7 +7448,7 @@
     ('𑩐', '𑩐'),
     ('𑩜', '𑪉'),
     ('𑪝', '𑪝'),
-    ('𑫀', '𑫸'),
+    ('𑪰', '𑫸'),
     ('𑰀', '𑰈'),
     ('𑰊', '𑰮'),
     ('𑱀', '𑱀'),
@@ -7204,14 +7462,20 @@
     ('𑵪', '𑶉'),
     ('𑶘', '𑶘'),
     ('𑻠', '𑻲'),
-    ('\u{11fb0}', '\u{11fb0}'),
+    ('𑼂', '𑼂'),
+    ('𑼄', '𑼐'),
+    ('𑼒', '𑼳'),
+    ('𑾰', '𑾰'),
     ('𒀀', '𒎙'),
     ('𒐀', '𒑮'),
     ('𒒀', '𒕃'),
-    ('𓀀', '𓐮'),
+    ('𒾐', '𒿰'),
+    ('𓀀', '𓐯'),
+    ('𓑁', '𓑆'),
     ('𔐀', '𔙆'),
     ('𖠀', '𖨸'),
     ('𖩀', '𖩞'),
+    ('𖩰', '𖪾'),
     ('𖫐', '𖫭'),
     ('𖬀', '𖬯'),
     ('𖭀', '𖭃'),
@@ -7224,10 +7488,15 @@
     ('𖿠', '𖿡'),
     ('𖿣', '𖿣'),
     ('𗀀', '𘟷'),
-    ('𘠀', '\u{18cd5}'),
-    ('\u{18d00}', '\u{18d08}'),
-    ('𛀀', '𛄞'),
+    ('𘠀', '𘳕'),
+    ('𘴀', '𘴈'),
+    ('𚿰', '𚿳'),
+    ('𚿵', '𚿻'),
+    ('𚿽', '𚿾'),
+    ('𛀀', '𛄢'),
+    ('𛄲', '𛄲'),
     ('𛅐', '𛅒'),
+    ('𛅕', '𛅕'),
     ('𛅤', '𛅧'),
     ('𛅰', '𛋻'),
     ('𛰀', '𛱪'),
@@ -7264,10 +7533,19 @@
     ('𝞊', '𝞨'),
     ('𝞪', '𝟂'),
     ('𝟄', '𝟋'),
+    ('𝼀', '𝼞'),
+    ('𝼥', '𝼪'),
+    ('𞀰', '𞁭'),
     ('𞄀', '𞄬'),
     ('𞄷', '𞄽'),
     ('𞅎', '𞅎'),
+    ('𞊐', '𞊭'),
     ('𞋀', '𞋫'),
+    ('𞓐', '𞓫'),
+    ('𞟠', '𞟦'),
+    ('𞟨', '𞟫'),
+    ('𞟭', '𞟮'),
+    ('𞟰', '𞟾'),
     ('𞠀', '𞣄'),
     ('𞤀', '𞥃'),
     ('𞥋', '𞥋'),
@@ -7304,35 +7582,37 @@
     ('𞺡', '𞺣'),
     ('𞺥', '𞺩'),
     ('𞺫', '𞺻'),
-    ('𠀀', '\u{2a6dd}'),
-    ('𪜀', '𫜴'),
+    ('𠀀', '𪛟'),
+    ('𪜀', '𫜹'),
     ('𫝀', '𫠝'),
     ('𫠠', '𬺡'),
     ('𬺰', '𮯠'),
     ('丽', '𪘀'),
-    ('\u{30000}', '\u{3134a}'),
+    ('𰀀', '𱍊'),
+    ('𱍐', '𲎯'),
 ];
 
 pub const IDEOGRAPHIC: &'static [(char, char)] = &[
     ('〆', '〇'),
     ('〡', '〩'),
     ('〸', '〺'),
-    ('㐀', '\u{4dbf}'),
-    ('一', '\u{9ffc}'),
+    ('㐀', '䶿'),
+    ('一', '鿿'),
     ('豈', '舘'),
     ('並', '龎'),
     ('\u{16fe4}', '\u{16fe4}'),
     ('𗀀', '𘟷'),
-    ('𘠀', '\u{18cd5}'),
-    ('\u{18d00}', '\u{18d08}'),
+    ('𘠀', '𘳕'),
+    ('𘴀', '𘴈'),
     ('𛅰', '𛋻'),
-    ('𠀀', '\u{2a6dd}'),
-    ('𪜀', '𫜴'),
+    ('𠀀', '𪛟'),
+    ('𪜀', '𫜹'),
     ('𫝀', '𫠝'),
     ('𫠠', '𬺡'),
     ('𬺰', '𮯠'),
     ('丽', '𪘀'),
-    ('\u{30000}', '\u{3134a}'),
+    ('𰀀', '𱍊'),
+    ('𱍐', '𲎯'),
 ];
 
 pub const JOIN_CONTROL: &'static [(char, char)] = &[('\u{200c}', '\u{200d}')];
@@ -7624,7 +7904,7 @@
     ('ԯ', 'ԯ'),
     ('ՠ', 'ֈ'),
     ('ა', 'ჺ'),
-    ('ჽ', 'ჿ'),
+    ('ჼ', 'ჿ'),
     ('ᏸ', 'ᏽ'),
     ('ᲀ', 'ᲈ'),
     ('ᴀ', 'ᶿ'),
@@ -7787,7 +8067,7 @@
     ('ⅰ', 'ⅿ'),
     ('ↄ', 'ↄ'),
     ('ⓐ', 'ⓩ'),
-    ('ⰰ', 'ⱞ'),
+    ('ⰰ', 'ⱟ'),
     ('ⱡ', 'ⱡ'),
     ('ⱥ', 'ⱦ'),
     ('ⱨ', 'ⱨ'),
@@ -7955,19 +8235,34 @@
     ('ꞻ', 'ꞻ'),
     ('ꞽ', 'ꞽ'),
     ('ꞿ', 'ꞿ'),
+    ('ꟁ', 'ꟁ'),
     ('ꟃ', 'ꟃ'),
-    ('\u{a7c8}', '\u{a7c8}'),
-    ('\u{a7ca}', '\u{a7ca}'),
-    ('\u{a7f6}', '\u{a7f6}'),
+    ('ꟈ', 'ꟈ'),
+    ('ꟊ', 'ꟊ'),
+    ('ꟑ', 'ꟑ'),
+    ('ꟓ', 'ꟓ'),
+    ('ꟕ', 'ꟕ'),
+    ('ꟗ', 'ꟗ'),
+    ('ꟙ', 'ꟙ'),
+    ('ꟲ', 'ꟴ'),
+    ('ꟶ', 'ꟶ'),
     ('ꟸ', 'ꟺ'),
     ('ꬰ', 'ꭚ'),
-    ('ꭜ', '\u{ab68}'),
+    ('ꭜ', 'ꭩ'),
     ('ꭰ', 'ꮿ'),
     ('ff', 'st'),
     ('ﬓ', 'ﬗ'),
     ('a', 'z'),
     ('𐐨', '𐑏'),
     ('𐓘', '𐓻'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
+    ('𐞀', '𐞀'),
+    ('𐞃', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
     ('𐳀', '𐳲'),
     ('𑣀', '𑣟'),
     ('𖹠', '𖹿'),
@@ -7999,6 +8294,10 @@
     ('𝞪', '𝟂'),
     ('𝟄', '𝟉'),
     ('𝟋', '𝟋'),
+    ('𝼀', '𝼉'),
+    ('𝼋', '𝼞'),
+    ('𝼥', '𝼪'),
+    ('𞀰', '𞁭'),
     ('𞤢', '𞥃'),
 ];
 
@@ -8224,7 +8523,7 @@
     ('ெ', 'ை'),
     ('ொ', 'ௌ'),
     ('\u{bd7}', '\u{bd7}'),
-    ('\u{c00}', 'ః'),
+    ('\u{c00}', '\u{c04}'),
     ('\u{c3e}', 'ౄ'),
     ('\u{c46}', '\u{c48}'),
     ('\u{c4a}', '\u{c4c}'),
@@ -8236,6 +8535,7 @@
     ('ೊ', '\u{ccc}'),
     ('\u{cd5}', '\u{cd6}'),
     ('\u{ce2}', '\u{ce3}'),
+    ('ೳ', 'ೳ'),
     ('\u{d00}', 'ഃ'),
     ('\u{d3e}', '\u{d44}'),
     ('െ', 'ൈ'),
@@ -8254,7 +8554,7 @@
     ('\u{eb4}', '\u{eb9}'),
     ('\u{ebb}', '\u{ebc}'),
     ('\u{ecd}', '\u{ecd}'),
-    ('\u{f71}', '\u{f81}'),
+    ('\u{f71}', '\u{f83}'),
     ('\u{f8d}', '\u{f97}'),
     ('\u{f99}', '\u{fbc}'),
     ('ါ', '\u{1036}'),
@@ -8281,6 +8581,7 @@
     ('ᩕ', '\u{1a5e}'),
     ('ᩡ', '\u{1a74}'),
     ('\u{1abf}', '\u{1ac0}'),
+    ('\u{1acc}', '\u{1ace}'),
     ('\u{1b00}', 'ᬄ'),
     ('\u{1b35}', 'ᭃ'),
     ('\u{1b80}', 'ᮂ'),
@@ -8325,17 +8626,20 @@
     ('\u{10eab}', '\u{10eac}'),
     ('𑀀', '𑀂'),
     ('\u{11038}', '\u{11045}'),
-    ('𑂂', '𑂂'),
+    ('\u{11073}', '\u{11074}'),
+    ('\u{11080}', '𑂂'),
     ('𑂰', '𑂸'),
+    ('\u{110c2}', '\u{110c2}'),
     ('\u{11100}', '\u{11102}'),
     ('\u{11127}', '\u{11132}'),
     ('𑅅', '𑅆'),
     ('\u{11180}', '𑆂'),
     ('𑆳', '𑆿'),
-    ('\u{111ce}', '\u{111cf}'),
+    ('𑇎', '\u{111cf}'),
     ('𑈬', '\u{11234}'),
     ('\u{11237}', '\u{11237}'),
     ('\u{1123e}', '\u{1123e}'),
+    ('\u{11241}', '\u{11241}'),
     ('\u{112df}', '\u{112e8}'),
     ('\u{11300}', '𑌃'),
     ('\u{1133e}', '𑍄'),
@@ -8354,11 +8658,11 @@
     ('\u{116ab}', '\u{116b5}'),
     ('\u{1171d}', '\u{1172a}'),
     ('𑠬', '𑠸'),
-    ('\u{11930}', '\u{11935}'),
-    ('\u{11937}', '\u{11938}'),
+    ('\u{11930}', '𑤵'),
+    ('𑤷', '𑤸'),
     ('\u{1193b}', '\u{1193c}'),
-    ('\u{11940}', '\u{11940}'),
-    ('\u{11942}', '\u{11942}'),
+    ('𑥀', '𑥀'),
+    ('𑥂', '𑥂'),
     ('𑧑', '\u{119d7}'),
     ('\u{119da}', '𑧟'),
     ('𑧤', '𑧤'),
@@ -8381,16 +8685,21 @@
     ('\u{11d90}', '\u{11d91}'),
     ('𑶓', '𑶖'),
     ('\u{11ef3}', '𑻶'),
+    ('\u{11f00}', '\u{11f01}'),
+    ('𑼃', '𑼃'),
+    ('𑼴', '\u{11f3a}'),
+    ('𑼾', '\u{11f40}'),
     ('\u{16f4f}', '\u{16f4f}'),
     ('𖽑', '𖾇'),
     ('\u{16f8f}', '\u{16f92}'),
-    ('\u{16ff0}', '\u{16ff1}'),
+    ('𖿰', '𖿱'),
     ('\u{1bc9e}', '\u{1bc9e}'),
     ('\u{1e000}', '\u{1e006}'),
     ('\u{1e008}', '\u{1e018}'),
     ('\u{1e01b}', '\u{1e021}'),
     ('\u{1e023}', '\u{1e024}'),
     ('\u{1e026}', '\u{1e02a}'),
+    ('\u{1e08f}', '\u{1e08f}'),
     ('\u{1e947}', '\u{1e947}'),
     ('🄰', '🅉'),
     ('🅐', '🅩'),
@@ -8453,6 +8762,7 @@
     ('ˠ', 'ˤ'),
     ('\u{345}', '\u{345}'),
     ('ͺ', 'ͺ'),
+    ('ჼ', 'ჼ'),
     ('ᴬ', 'ᵪ'),
     ('ᵸ', 'ᵸ'),
     ('ᶛ', 'ᶿ'),
@@ -8464,8 +8774,15 @@
     ('ⱼ', 'ⱽ'),
     ('ꚜ', 'ꚝ'),
     ('ꝰ', 'ꝰ'),
+    ('ꟲ', 'ꟴ'),
     ('ꟸ', 'ꟹ'),
     ('ꭜ', 'ꭟ'),
+    ('ꭩ', 'ꭩ'),
+    ('𐞀', '𐞀'),
+    ('𐞃', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
+    ('𞀰', '𞁭'),
 ];
 
 pub const OTHER_MATH: &'static [(char, char)] = &[
@@ -8651,13 +8968,14 @@
     ('\u{600}', '\u{605}'),
     ('\u{6dd}', '\u{6dd}'),
     ('\u{70f}', '\u{70f}'),
+    ('\u{890}', '\u{891}'),
     ('\u{8e2}', '\u{8e2}'),
     ('\u{110bd}', '\u{110bd}'),
     ('\u{110cd}', '\u{110cd}'),
 ];
 
 pub const QUOTATION_MARK: &'static [(char, char)] = &[
-    ('\"', '\"'),
+    ('"', '"'),
     ('\'', '\''),
     ('«', '«'),
     ('»', '»'),
@@ -8682,7 +9000,7 @@
     ('.', '.'),
     ('?', '?'),
     ('։', '։'),
-    ('؞', '؟'),
+    ('؝', '؟'),
     ('۔', '۔'),
     ('܀', '܂'),
     ('߹', '߹'),
@@ -8701,12 +9019,14 @@
     ('᪨', '᪫'),
     ('᭚', '᭛'),
     ('᭞', '᭟'),
+    ('᭽', '᭾'),
     ('᰻', '᰼'),
     ('᱾', '᱿'),
     ('‼', '‽'),
     ('⁇', '⁉'),
     ('⸮', '⸮'),
     ('⸼', '⸼'),
+    ('⹓', '⹔'),
     ('。', '。'),
     ('꓿', '꓿'),
     ('꘎', '꘏'),
@@ -8727,6 +9047,7 @@
     ('。', '。'),
     ('𐩖', '𐩗'),
     ('𐽕', '𐽙'),
+    ('𐾆', '𐾉'),
     ('𑁇', '𑁈'),
     ('𑂾', '𑃁'),
     ('𑅁', '𑅃'),
@@ -8741,12 +9062,13 @@
     ('𑗉', '𑗗'),
     ('𑙁', '𑙂'),
     ('𑜼', '𑜾'),
-    ('\u{11944}', '\u{11944}'),
-    ('\u{11946}', '\u{11946}'),
+    ('𑥄', '𑥄'),
+    ('𑥆', '𑥆'),
     ('𑩂', '𑩃'),
     ('𑪛', '𑪜'),
     ('𑱁', '𑱂'),
     ('𑻷', '𑻸'),
+    ('𑽃', '𑽄'),
     ('𖩮', '𖩯'),
     ('𖫵', '𖫵'),
     ('𖬷', '𖬸'),
@@ -8788,6 +9110,9 @@
     ('𝘪', '𝘫'),
     ('𝙞', '𝙟'),
     ('𝚒', '𝚓'),
+    ('𝼚', '𝼚'),
+    ('𞁌', '𞁍'),
+    ('𞁨', '𞁨'),
 ];
 
 pub const TERMINAL_PUNCTUATION: &'static [(char, char)] = &[
@@ -8802,7 +9127,7 @@
     ('׃', '׃'),
     ('،', '،'),
     ('؛', '؛'),
-    ('؞', '؟'),
+    ('؝', '؟'),
     ('۔', '۔'),
     ('܀', '܊'),
     ('܌', '܌'),
@@ -8826,6 +9151,7 @@
     ('᪨', '᪫'),
     ('᭚', '᭛'),
     ('᭝', '᭟'),
+    ('᭽', '᭾'),
     ('᰻', '᰿'),
     ('᱾', '᱿'),
     ('‼', '‽'),
@@ -8835,6 +9161,7 @@
     ('⹁', '⹁'),
     ('⹌', '⹌'),
     ('⹎', '⹏'),
+    ('⹓', '⹔'),
     ('、', '。'),
     ('꓾', '꓿'),
     ('꘍', '꘏'),
@@ -8865,6 +9192,7 @@
     ('𐬺', '𐬿'),
     ('𐮙', '𐮜'),
     ('𐽕', '𐽙'),
+    ('𐾆', '𐾉'),
     ('𑁇', '𑁍'),
     ('𑂾', '𑃁'),
     ('𑅁', '𑅃'),
@@ -8874,19 +9202,20 @@
     ('𑈸', '𑈼'),
     ('𑊩', '𑊩'),
     ('𑑋', '𑑍'),
-    ('\u{1145a}', '𑑛'),
+    ('𑑚', '𑑛'),
     ('𑗂', '𑗅'),
     ('𑗉', '𑗗'),
     ('𑙁', '𑙂'),
     ('𑜼', '𑜾'),
-    ('\u{11944}', '\u{11944}'),
-    ('\u{11946}', '\u{11946}'),
+    ('𑥄', '𑥄'),
+    ('𑥆', '𑥆'),
     ('𑩂', '𑩃'),
     ('𑪛', '𑪜'),
     ('𑪡', '𑪢'),
     ('𑱁', '𑱃'),
     ('𑱱', '𑱱'),
     ('𑻷', '𑻸'),
+    ('𑽃', '𑽄'),
     ('𒑰', '𒑴'),
     ('𖩮', '𖩯'),
     ('𖫵', '𖫵'),
@@ -8898,8 +9227,8 @@
 ];
 
 pub const UNIFIED_IDEOGRAPH: &'static [(char, char)] = &[
-    ('㐀', '\u{4dbf}'),
-    ('一', '\u{9ffc}'),
+    ('㐀', '䶿'),
+    ('一', '鿿'),
     ('﨎', '﨏'),
     ('﨑', '﨑'),
     ('﨓', '﨔'),
@@ -8907,12 +9236,13 @@
     ('﨡', '﨡'),
     ('﨣', '﨤'),
     ('﨧', '﨩'),
-    ('𠀀', '\u{2a6dd}'),
-    ('𪜀', '𫜴'),
+    ('𠀀', '𪛟'),
+    ('𪜀', '𫜹'),
     ('𫝀', '𫠝'),
     ('𫠠', '𬺡'),
     ('𬺰', '𮯠'),
-    ('\u{30000}', '\u{3134a}'),
+    ('𰀀', '𱍊'),
+    ('𱍐', '𲎯'),
 ];
 
 pub const UPPERCASE: &'static [(char, char)] = &[
@@ -9349,7 +9679,7 @@
     ('Ⅰ', 'Ⅿ'),
     ('Ↄ', 'Ↄ'),
     ('Ⓐ', 'Ⓩ'),
-    ('Ⰰ', 'Ⱞ'),
+    ('Ⰰ', 'Ⱟ'),
     ('Ⱡ', 'Ⱡ'),
     ('Ɫ', 'Ɽ'),
     ('Ⱨ', 'Ⱨ'),
@@ -9514,13 +9844,21 @@
     ('Ꞻ', 'Ꞻ'),
     ('Ꞽ', 'Ꞽ'),
     ('Ꞿ', 'Ꞿ'),
+    ('Ꟁ', 'Ꟁ'),
     ('Ꟃ', 'Ꟃ'),
-    ('Ꞔ', '\u{a7c7}'),
-    ('\u{a7c9}', '\u{a7c9}'),
-    ('\u{a7f5}', '\u{a7f5}'),
+    ('Ꞔ', 'Ꟈ'),
+    ('Ꟊ', 'Ꟊ'),
+    ('Ꟑ', 'Ꟑ'),
+    ('Ꟗ', 'Ꟗ'),
+    ('Ꟙ', 'Ꟙ'),
+    ('Ꟶ', 'Ꟶ'),
     ('A', 'Z'),
     ('𐐀', '𐐧'),
     ('𐒰', '𐓓'),
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
     ('𐲀', '𐲲'),
     ('𑢠', '𑢿'),
     ('𖹀', '𖹟'),
@@ -9563,6 +9901,7 @@
 
 pub const VARIATION_SELECTOR: &'static [(char, char)] = &[
     ('\u{180b}', '\u{180d}'),
+    ('\u{180f}', '\u{180f}'),
     ('\u{fe00}', '\u{fe0f}'),
     ('\u{e0100}', '\u{e01ef}'),
 ];
@@ -9632,9 +9971,9 @@
     ('ࠀ', '\u{82d}'),
     ('ࡀ', '\u{85b}'),
     ('ࡠ', 'ࡪ'),
-    ('ࢠ', 'ࢴ'),
-    ('ࢶ', '\u{8c7}'),
-    ('\u{8d3}', '\u{8e1}'),
+    ('ࡰ', 'ࢇ'),
+    ('ࢉ', 'ࢎ'),
+    ('\u{898}', '\u{8e1}'),
     ('\u{8e3}', '\u{963}'),
     ('०', '९'),
     ('ॱ', 'ঃ'),
@@ -9718,11 +10057,12 @@
     ('ఎ', 'ఐ'),
     ('ఒ', 'న'),
     ('ప', 'హ'),
-    ('ఽ', 'ౄ'),
+    ('\u{c3c}', 'ౄ'),
     ('\u{c46}', '\u{c48}'),
     ('\u{c4a}', '\u{c4d}'),
     ('\u{c55}', '\u{c56}'),
     ('ౘ', 'ౚ'),
+    ('ౝ', 'ౝ'),
     ('ౠ', '\u{c63}'),
     ('౦', '౯'),
     ('ಀ', 'ಃ'),
@@ -9735,10 +10075,10 @@
     ('\u{cc6}', 'ೈ'),
     ('ೊ', '\u{ccd}'),
     ('\u{cd5}', '\u{cd6}'),
-    ('ೞ', 'ೞ'),
+    ('ೝ', 'ೞ'),
     ('ೠ', '\u{ce3}'),
     ('೦', '೯'),
-    ('ೱ', 'ೲ'),
+    ('ೱ', 'ೳ'),
     ('\u{d00}', 'ഌ'),
     ('എ', 'ഐ'),
     ('ഒ', '\u{d44}'),
@@ -9771,7 +10111,7 @@
     ('ວ', 'ຽ'),
     ('ເ', 'ໄ'),
     ('ໆ', 'ໆ'),
-    ('\u{ec8}', '\u{ecd}'),
+    ('\u{ec8}', '\u{ece}'),
     ('໐', '໙'),
     ('ໜ', 'ໟ'),
     ('ༀ', 'ༀ'),
@@ -9818,9 +10158,8 @@
     ('ᚁ', 'ᚚ'),
     ('ᚠ', 'ᛪ'),
     ('ᛮ', 'ᛸ'),
-    ('ᜀ', 'ᜌ'),
-    ('ᜎ', '\u{1714}'),
-    ('ᜠ', '\u{1734}'),
+    ('ᜀ', '᜕'),
+    ('ᜟ', '᜴'),
     ('ᝀ', '\u{1753}'),
     ('ᝠ', 'ᝬ'),
     ('ᝮ', 'ᝰ'),
@@ -9830,7 +10169,7 @@
     ('ៜ', '\u{17dd}'),
     ('០', '៩'),
     ('\u{180b}', '\u{180d}'),
-    ('᠐', '᠙'),
+    ('\u{180f}', '᠙'),
     ('ᠠ', 'ᡸ'),
     ('ᢀ', 'ᢪ'),
     ('ᢰ', 'ᣵ'),
@@ -9849,8 +10188,8 @@
     ('᪐', '᪙'),
     ('ᪧ', 'ᪧ'),
     ('\u{1ab0}', '\u{1abd}'),
-    ('\u{1abf}', '\u{1ac0}'),
-    ('\u{1b00}', 'ᭋ'),
+    ('\u{1abf}', '\u{1ace}'),
+    ('\u{1b00}', 'ᭌ'),
     ('᭐', '᭙'),
     ('\u{1b6b}', '\u{1b73}'),
     ('\u{1b80}', '᯳'),
@@ -9862,8 +10201,7 @@
     ('Ჽ', 'Ჿ'),
     ('\u{1cd0}', '\u{1cd2}'),
     ('\u{1cd4}', 'ᳺ'),
-    ('ᴀ', '\u{1df9}'),
-    ('\u{1dfb}', 'ἕ'),
+    ('ᴀ', 'ἕ'),
     ('Ἐ', 'Ἕ'),
     ('ἠ', 'ὅ'),
     ('Ὀ', 'Ὅ'),
@@ -9903,9 +10241,7 @@
     ('ⅅ', 'ⅉ'),
     ('ⅎ', 'ⅎ'),
     ('Ⅰ', 'ↈ'),
-    ('Ⰰ', 'Ⱞ'),
-    ('ⰰ', 'ⱞ'),
-    ('Ⱡ', 'ⳤ'),
+    ('Ⰰ', 'ⳤ'),
     ('Ⳬ', 'ⳳ'),
     ('ⴀ', 'ⴥ'),
     ('ⴧ', 'ⴧ'),
@@ -9933,11 +10269,10 @@
     ('ー', 'ヿ'),
     ('ㄅ', 'ㄯ'),
     ('ㄱ', 'ㆎ'),
-    ('ㆠ', '\u{31bf}'),
+    ('ㆠ', 'ㆿ'),
     ('ㇰ', 'ㇿ'),
-    ('㐀', '\u{4dbf}'),
-    ('一', '\u{9ffc}'),
-    ('ꀀ', 'ꒌ'),
+    ('㐀', '䶿'),
+    ('一', 'ꒌ'),
     ('ꓐ', 'ꓽ'),
     ('ꔀ', 'ꘌ'),
     ('ꘐ', 'ꘫ'),
@@ -9946,9 +10281,11 @@
     ('ꙿ', '\u{a6f1}'),
     ('ꜗ', 'ꜟ'),
     ('Ꜣ', 'ꞈ'),
-    ('Ꞌ', 'ꞿ'),
-    ('Ꟃ', '\u{a7ca}'),
-    ('\u{a7f5}', 'ꠧ'),
+    ('Ꞌ', 'ꟊ'),
+    ('Ꟑ', 'ꟑ'),
+    ('ꟓ', 'ꟓ'),
+    ('ꟕ', 'ꟙ'),
+    ('ꟲ', 'ꠧ'),
     ('\u{a82c}', '\u{a82c}'),
     ('ꡀ', 'ꡳ'),
     ('ꢀ', '\u{a8c5}'),
@@ -9975,7 +10312,7 @@
     ('ꬠ', 'ꬦ'),
     ('ꬨ', 'ꬮ'),
     ('ꬰ', 'ꭚ'),
-    ('ꭜ', '\u{ab69}'),
+    ('ꭜ', 'ꭩ'),
     ('ꭰ', 'ꯪ'),
     ('꯬', '\u{abed}'),
     ('꯰', '꯹'),
@@ -10043,9 +10380,20 @@
     ('𐓘', '𐓻'),
     ('𐔀', '𐔧'),
     ('𐔰', '𐕣'),
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
     ('𐘀', '𐜶'),
     ('𐝀', '𐝕'),
     ('𐝠', '𐝧'),
+    ('𐞀', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
     ('𐠀', '𐠅'),
     ('𐠈', '𐠈'),
     ('𐠊', '𐠵'),
@@ -10080,31 +10428,33 @@
     ('𐳀', '𐳲'),
     ('𐴀', '\u{10d27}'),
     ('𐴰', '𐴹'),
-    ('\u{10e80}', '\u{10ea9}'),
+    ('𐺀', '𐺩'),
     ('\u{10eab}', '\u{10eac}'),
-    ('\u{10eb0}', '\u{10eb1}'),
-    ('𐼀', '𐼜'),
+    ('𐺰', '𐺱'),
+    ('\u{10efd}', '𐼜'),
     ('𐼧', '𐼧'),
     ('𐼰', '\u{10f50}'),
-    ('\u{10fb0}', '\u{10fc4}'),
+    ('𐽰', '\u{10f85}'),
+    ('𐾰', '𐿄'),
     ('𐿠', '𐿶'),
     ('𑀀', '\u{11046}'),
-    ('𑁦', '𑁯'),
+    ('𑁦', '𑁵'),
     ('\u{1107f}', '\u{110ba}'),
+    ('\u{110c2}', '\u{110c2}'),
     ('𑃐', '𑃨'),
     ('𑃰', '𑃹'),
     ('\u{11100}', '\u{11134}'),
     ('𑄶', '𑄿'),
-    ('𑅄', '\u{11147}'),
+    ('𑅄', '𑅇'),
     ('𑅐', '\u{11173}'),
     ('𑅶', '𑅶'),
     ('\u{11180}', '𑇄'),
     ('\u{111c9}', '\u{111cc}'),
-    ('\u{111ce}', '𑇚'),
+    ('𑇎', '𑇚'),
     ('𑇜', '𑇜'),
     ('𑈀', '𑈑'),
     ('𑈓', '\u{11237}'),
-    ('\u{1123e}', '\u{1123e}'),
+    ('\u{1123e}', '\u{11241}'),
     ('𑊀', '𑊆'),
     ('𑊈', '𑊈'),
     ('𑊊', '𑊍'),
@@ -10129,7 +10479,7 @@
     ('\u{11370}', '\u{11374}'),
     ('𑐀', '𑑊'),
     ('𑑐', '𑑙'),
-    ('\u{1145e}', '\u{11461}'),
+    ('\u{1145e}', '𑑡'),
     ('𑒀', '𑓅'),
     ('𑓇', '𑓇'),
     ('𑓐', '𑓙'),
@@ -10144,16 +10494,17 @@
     ('𑜀', '𑜚'),
     ('\u{1171d}', '\u{1172b}'),
     ('𑜰', '𑜹'),
+    ('𑝀', '𑝆'),
     ('𑠀', '\u{1183a}'),
     ('𑢠', '𑣩'),
-    ('𑣿', '\u{11906}'),
-    ('\u{11909}', '\u{11909}'),
-    ('\u{1190c}', '\u{11913}'),
-    ('\u{11915}', '\u{11916}'),
-    ('\u{11918}', '\u{11935}'),
-    ('\u{11937}', '\u{11938}'),
+    ('𑣿', '𑤆'),
+    ('𑤉', '𑤉'),
+    ('𑤌', '𑤓'),
+    ('𑤕', '𑤖'),
+    ('𑤘', '𑤵'),
+    ('𑤷', '𑤸'),
     ('\u{1193b}', '\u{11943}'),
-    ('\u{11950}', '\u{11959}'),
+    ('𑥐', '𑥙'),
     ('𑦠', '𑦧'),
     ('𑦪', '\u{119d7}'),
     ('\u{119da}', '𑧡'),
@@ -10162,7 +10513,7 @@
     ('\u{11a47}', '\u{11a47}'),
     ('𑩐', '\u{11a99}'),
     ('𑪝', '𑪝'),
-    ('𑫀', '𑫸'),
+    ('𑪰', '𑫸'),
     ('𑰀', '𑰈'),
     ('𑰊', '\u{11c36}'),
     ('\u{11c38}', '𑱀'),
@@ -10184,15 +10535,23 @@
     ('𑶓', '𑶘'),
     ('𑶠', '𑶩'),
     ('𑻠', '𑻶'),
-    ('\u{11fb0}', '\u{11fb0}'),
+    ('\u{11f00}', '𑼐'),
+    ('𑼒', '\u{11f3a}'),
+    ('𑼾', '\u{11f42}'),
+    ('𑽐', '𑽙'),
+    ('𑾰', '𑾰'),
     ('𒀀', '𒎙'),
     ('𒐀', '𒑮'),
     ('𒒀', '𒕃'),
-    ('𓀀', '𓐮'),
+    ('𒾐', '𒿰'),
+    ('𓀀', '𓐯'),
+    ('\u{13440}', '\u{13455}'),
     ('𔐀', '𔙆'),
     ('𖠀', '𖨸'),
     ('𖩀', '𖩞'),
     ('𖩠', '𖩩'),
+    ('𖩰', '𖪾'),
+    ('𖫀', '𖫉'),
     ('𖫐', '𖫭'),
     ('\u{16af0}', '\u{16af4}'),
     ('𖬀', '\u{16b36}'),
@@ -10206,12 +10565,17 @@
     ('\u{16f8f}', '𖾟'),
     ('𖿠', '𖿡'),
     ('𖿣', '\u{16fe4}'),
-    ('\u{16ff0}', '\u{16ff1}'),
+    ('𖿰', '𖿱'),
     ('𗀀', '𘟷'),
-    ('𘠀', '\u{18cd5}'),
-    ('\u{18d00}', '\u{18d08}'),
-    ('𛀀', '𛄞'),
+    ('𘠀', '𘳕'),
+    ('𘴀', '𘴈'),
+    ('𚿰', '𚿳'),
+    ('𚿵', '𚿻'),
+    ('𚿽', '𚿾'),
+    ('𛀀', '𛄢'),
+    ('𛄲', '𛄲'),
     ('𛅐', '𛅒'),
+    ('𛅕', '𛅕'),
     ('𛅤', '𛅧'),
     ('𛅰', '𛋻'),
     ('𛰀', '𛱪'),
@@ -10219,6 +10583,8 @@
     ('𛲀', '𛲈'),
     ('𛲐', '𛲙'),
     ('\u{1bc9d}', '\u{1bc9e}'),
+    ('\u{1cf00}', '\u{1cf2d}'),
+    ('\u{1cf30}', '\u{1cf46}'),
     ('\u{1d165}', '\u{1d169}'),
     ('𝅭', '\u{1d172}'),
     ('\u{1d17b}', '\u{1d182}'),
@@ -10262,16 +10628,26 @@
     ('\u{1da84}', '\u{1da84}'),
     ('\u{1da9b}', '\u{1da9f}'),
     ('\u{1daa1}', '\u{1daaf}'),
+    ('𝼀', '𝼞'),
+    ('𝼥', '𝼪'),
     ('\u{1e000}', '\u{1e006}'),
     ('\u{1e008}', '\u{1e018}'),
     ('\u{1e01b}', '\u{1e021}'),
     ('\u{1e023}', '\u{1e024}'),
     ('\u{1e026}', '\u{1e02a}'),
+    ('𞀰', '𞁭'),
+    ('\u{1e08f}', '\u{1e08f}'),
     ('𞄀', '𞄬'),
     ('\u{1e130}', '𞄽'),
     ('𞅀', '𞅉'),
     ('𞅎', '𞅎'),
+    ('𞊐', '\u{1e2ae}'),
     ('𞋀', '𞋹'),
+    ('𞓐', '𞓹'),
+    ('𞟠', '𞟦'),
+    ('𞟨', '𞟫'),
+    ('𞟭', '𞟮'),
+    ('𞟰', '𞟾'),
     ('𞠀', '𞣄'),
     ('\u{1e8d0}', '\u{1e8d6}'),
     ('𞤀', '𞥋'),
@@ -10309,14 +10685,15 @@
     ('𞺡', '𞺣'),
     ('𞺥', '𞺩'),
     ('𞺫', '𞺻'),
-    ('\u{1fbf0}', '\u{1fbf9}'),
-    ('𠀀', '\u{2a6dd}'),
-    ('𪜀', '𫜴'),
+    ('🯰', '🯹'),
+    ('𠀀', '𪛟'),
+    ('𪜀', '𫜹'),
     ('𫝀', '𫠝'),
     ('𫠠', '𬺡'),
     ('𬺰', '𮯠'),
     ('丽', '𪘀'),
-    ('\u{30000}', '\u{3134a}'),
+    ('𰀀', '𱍊'),
+    ('𱍐', '𲎯'),
     ('\u{e0100}', '\u{e01ef}'),
 ];
 
@@ -10370,8 +10747,9 @@
     ('ࠨ', 'ࠨ'),
     ('ࡀ', 'ࡘ'),
     ('ࡠ', 'ࡪ'),
-    ('ࢠ', 'ࢴ'),
-    ('ࢶ', '\u{8c7}'),
+    ('ࡰ', 'ࢇ'),
+    ('ࢉ', 'ࢎ'),
+    ('ࢠ', 'ࣉ'),
     ('ऄ', 'ह'),
     ('ऽ', 'ऽ'),
     ('ॐ', 'ॐ'),
@@ -10436,6 +10814,7 @@
     ('ప', 'హ'),
     ('ఽ', 'ఽ'),
     ('ౘ', 'ౚ'),
+    ('ౝ', 'ౝ'),
     ('ౠ', 'ౡ'),
     ('ಀ', 'ಀ'),
     ('ಅ', 'ಌ'),
@@ -10444,10 +10823,10 @@
     ('ಪ', 'ಳ'),
     ('ವ', 'ಹ'),
     ('ಽ', 'ಽ'),
-    ('ೞ', 'ೞ'),
+    ('ೝ', 'ೞ'),
     ('ೠ', 'ೡ'),
     ('ೱ', 'ೲ'),
-    ('\u{d04}', 'ഌ'),
+    ('ഄ', 'ഌ'),
     ('എ', 'ഐ'),
     ('ഒ', 'ഺ'),
     ('ഽ', 'ഽ'),
@@ -10515,9 +10894,8 @@
     ('ᚁ', 'ᚚ'),
     ('ᚠ', 'ᛪ'),
     ('ᛮ', 'ᛸ'),
-    ('ᜀ', 'ᜌ'),
-    ('ᜎ', 'ᜑ'),
-    ('ᜠ', 'ᜱ'),
+    ('ᜀ', 'ᜑ'),
+    ('ᜟ', 'ᜱ'),
     ('ᝀ', 'ᝑ'),
     ('ᝠ', 'ᝬ'),
     ('ᝮ', 'ᝰ'),
@@ -10537,7 +10915,7 @@
     ('ᨠ', 'ᩔ'),
     ('ᪧ', 'ᪧ'),
     ('ᬅ', 'ᬳ'),
-    ('ᭅ', 'ᭋ'),
+    ('ᭅ', 'ᭌ'),
     ('ᮃ', 'ᮠ'),
     ('ᮮ', 'ᮯ'),
     ('ᮺ', 'ᯥ'),
@@ -10587,9 +10965,7 @@
     ('ⅅ', 'ⅉ'),
     ('ⅎ', 'ⅎ'),
     ('Ⅰ', 'ↈ'),
-    ('Ⰰ', 'Ⱞ'),
-    ('ⰰ', 'ⱞ'),
-    ('Ⱡ', 'ⳤ'),
+    ('Ⰰ', 'ⳤ'),
     ('Ⳬ', 'ⳮ'),
     ('Ⳳ', 'ⳳ'),
     ('ⴀ', 'ⴥ'),
@@ -10616,11 +10992,10 @@
     ('ー', 'ヿ'),
     ('ㄅ', 'ㄯ'),
     ('ㄱ', 'ㆎ'),
-    ('ㆠ', '\u{31bf}'),
+    ('ㆠ', 'ㆿ'),
     ('ㇰ', 'ㇿ'),
-    ('㐀', '\u{4dbf}'),
-    ('一', '\u{9ffc}'),
-    ('ꀀ', 'ꒌ'),
+    ('㐀', '䶿'),
+    ('一', 'ꒌ'),
     ('ꓐ', 'ꓽ'),
     ('ꔀ', 'ꘌ'),
     ('ꘐ', 'ꘟ'),
@@ -10630,9 +11005,11 @@
     ('ꚠ', 'ꛯ'),
     ('ꜗ', 'ꜟ'),
     ('Ꜣ', 'ꞈ'),
-    ('Ꞌ', 'ꞿ'),
-    ('Ꟃ', '\u{a7ca}'),
-    ('\u{a7f5}', 'ꠁ'),
+    ('Ꞌ', 'ꟊ'),
+    ('Ꟑ', 'ꟑ'),
+    ('ꟓ', 'ꟓ'),
+    ('ꟕ', 'ꟙ'),
+    ('ꟲ', 'ꠁ'),
     ('ꠃ', 'ꠅ'),
     ('ꠇ', 'ꠊ'),
     ('ꠌ', 'ꠢ'),
@@ -10669,7 +11046,7 @@
     ('ꬠ', 'ꬦ'),
     ('ꬨ', 'ꬮ'),
     ('ꬰ', 'ꭚ'),
-    ('ꭜ', '\u{ab69}'),
+    ('ꭜ', 'ꭩ'),
     ('ꭰ', 'ꯢ'),
     ('가', '힣'),
     ('ힰ', 'ퟆ'),
@@ -10728,9 +11105,20 @@
     ('𐓘', '𐓻'),
     ('𐔀', '𐔧'),
     ('𐔰', '𐕣'),
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
     ('𐘀', '𐜶'),
     ('𐝀', '𐝕'),
     ('𐝠', '𐝧'),
+    ('𐞀', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
     ('𐠀', '𐠅'),
     ('𐠈', '𐠈'),
     ('𐠊', '𐠵'),
@@ -10761,19 +11149,22 @@
     ('𐲀', '𐲲'),
     ('𐳀', '𐳲'),
     ('𐴀', '𐴣'),
-    ('\u{10e80}', '\u{10ea9}'),
-    ('\u{10eb0}', '\u{10eb1}'),
+    ('𐺀', '𐺩'),
+    ('𐺰', '𐺱'),
     ('𐼀', '𐼜'),
     ('𐼧', '𐼧'),
     ('𐼰', '𐽅'),
-    ('\u{10fb0}', '\u{10fc4}'),
+    ('𐽰', '𐾁'),
+    ('𐾰', '𐿄'),
     ('𐿠', '𐿶'),
     ('𑀃', '𑀷'),
+    ('𑁱', '𑁲'),
+    ('𑁵', '𑁵'),
     ('𑂃', '𑂯'),
     ('𑃐', '𑃨'),
     ('𑄃', '𑄦'),
     ('𑅄', '𑅄'),
-    ('\u{11147}', '\u{11147}'),
+    ('𑅇', '𑅇'),
     ('𑅐', '𑅲'),
     ('𑅶', '𑅶'),
     ('𑆃', '𑆲'),
@@ -10782,6 +11173,7 @@
     ('𑇜', '𑇜'),
     ('𑈀', '𑈑'),
     ('𑈓', '𑈫'),
+    ('𑈿', '𑉀'),
     ('𑊀', '𑊆'),
     ('𑊈', '𑊈'),
     ('𑊊', '𑊍'),
@@ -10799,7 +11191,7 @@
     ('𑍝', '𑍡'),
     ('𑐀', '𑐴'),
     ('𑑇', '𑑊'),
-    ('𑑟', '\u{11461}'),
+    ('𑑟', '𑑡'),
     ('𑒀', '𑒯'),
     ('𑓄', '𑓅'),
     ('𑓇', '𑓇'),
@@ -10810,15 +11202,16 @@
     ('𑚀', '𑚪'),
     ('𑚸', '𑚸'),
     ('𑜀', '𑜚'),
+    ('𑝀', '𑝆'),
     ('𑠀', '𑠫'),
     ('𑢠', '𑣟'),
-    ('𑣿', '\u{11906}'),
-    ('\u{11909}', '\u{11909}'),
-    ('\u{1190c}', '\u{11913}'),
-    ('\u{11915}', '\u{11916}'),
-    ('\u{11918}', '\u{1192f}'),
-    ('\u{1193f}', '\u{1193f}'),
-    ('\u{11941}', '\u{11941}'),
+    ('𑣿', '𑤆'),
+    ('𑤉', '𑤉'),
+    ('𑤌', '𑤓'),
+    ('𑤕', '𑤖'),
+    ('𑤘', '𑤯'),
+    ('𑤿', '𑤿'),
+    ('𑥁', '𑥁'),
     ('𑦠', '𑦧'),
     ('𑦪', '𑧐'),
     ('𑧡', '𑧡'),
@@ -10829,7 +11222,7 @@
     ('𑩐', '𑩐'),
     ('𑩜', '𑪉'),
     ('𑪝', '𑪝'),
-    ('𑫀', '𑫸'),
+    ('𑪰', '𑫸'),
     ('𑰀', '𑰈'),
     ('𑰊', '𑰮'),
     ('𑱀', '𑱀'),
@@ -10843,14 +11236,20 @@
     ('𑵪', '𑶉'),
     ('𑶘', '𑶘'),
     ('𑻠', '𑻲'),
-    ('\u{11fb0}', '\u{11fb0}'),
+    ('𑼂', '𑼂'),
+    ('𑼄', '𑼐'),
+    ('𑼒', '𑼳'),
+    ('𑾰', '𑾰'),
     ('𒀀', '𒎙'),
     ('𒐀', '𒑮'),
     ('𒒀', '𒕃'),
-    ('𓀀', '𓐮'),
+    ('𒾐', '𒿰'),
+    ('𓀀', '𓐯'),
+    ('𓑁', '𓑆'),
     ('𔐀', '𔙆'),
     ('𖠀', '𖨸'),
     ('𖩀', '𖩞'),
+    ('𖩰', '𖪾'),
     ('𖫐', '𖫭'),
     ('𖬀', '𖬯'),
     ('𖭀', '𖭃'),
@@ -10863,10 +11262,15 @@
     ('𖿠', '𖿡'),
     ('𖿣', '𖿣'),
     ('𗀀', '𘟷'),
-    ('𘠀', '\u{18cd5}'),
-    ('\u{18d00}', '\u{18d08}'),
-    ('𛀀', '𛄞'),
+    ('𘠀', '𘳕'),
+    ('𘴀', '𘴈'),
+    ('𚿰', '𚿳'),
+    ('𚿵', '𚿻'),
+    ('𚿽', '𚿾'),
+    ('𛀀', '𛄢'),
+    ('𛄲', '𛄲'),
     ('𛅐', '𛅒'),
+    ('𛅕', '𛅕'),
     ('𛅤', '𛅧'),
     ('𛅰', '𛋻'),
     ('𛰀', '𛱪'),
@@ -10903,10 +11307,19 @@
     ('𝞊', '𝞨'),
     ('𝞪', '𝟂'),
     ('𝟄', '𝟋'),
+    ('𝼀', '𝼞'),
+    ('𝼥', '𝼪'),
+    ('𞀰', '𞁭'),
     ('𞄀', '𞄬'),
     ('𞄷', '𞄽'),
     ('𞅎', '𞅎'),
+    ('𞊐', '𞊭'),
     ('𞋀', '𞋫'),
+    ('𞓐', '𞓫'),
+    ('𞟠', '𞟦'),
+    ('𞟨', '𞟫'),
+    ('𞟭', '𞟮'),
+    ('𞟰', '𞟾'),
     ('𞠀', '𞣄'),
     ('𞤀', '𞥃'),
     ('𞥋', '𞥋'),
@@ -10943,11 +11356,12 @@
     ('𞺡', '𞺣'),
     ('𞺥', '𞺩'),
     ('𞺫', '𞺻'),
-    ('𠀀', '\u{2a6dd}'),
-    ('𪜀', '𫜴'),
+    ('𠀀', '𪛟'),
+    ('𪜀', '𫜹'),
     ('𫝀', '𫠝'),
     ('𫠠', '𬺡'),
     ('𬺰', '𮯠'),
     ('丽', '𪘀'),
-    ('\u{30000}', '\u{3134a}'),
+    ('𰀀', '𱍊'),
+    ('𱍐', '𲎯'),
 ];
diff --git a/src/unicode_tables/property_names.rs b/src/unicode_tables/property_names.rs
index 6393df2..599a123 100644
--- a/src/unicode_tables/property_names.rs
+++ b/src/unicode_tables/property_names.rs
@@ -1,10 +1,10 @@
 // DO NOT EDIT THIS FILE. IT WAS AUTOMATICALLY GENERATED BY:
 //
-//   ucd-generate property-names ucd-13.0.0
+//   ucd-generate property-names ucd-15.0.0
 //
-// Unicode version: 13.0.0.
+// Unicode version: 15.0.0.
 //
-// ucd-generate 0.2.8 is available on crates.io.
+// ucd-generate 0.2.14 is available on crates.io.
 
 pub const PROPERTY_NAMES: &'static [(&'static str, &'static str)] = &[
     ("age", "Age"),
diff --git a/src/unicode_tables/property_values.rs b/src/unicode_tables/property_values.rs
index c46653a..cb2d32f 100644
--- a/src/unicode_tables/property_values.rs
+++ b/src/unicode_tables/property_values.rs
@@ -1,10 +1,10 @@
 // DO NOT EDIT THIS FILE. IT WAS AUTOMATICALLY GENERATED BY:
 //
-//   ucd-generate property-values ucd-13.0.0 --include gc,script,scx,age,gcb,wb,sb
+//   ucd-generate property-values ucd-15.0.0 --include gc,script,scx,age,gcb,wb,sb
 //
-// Unicode version: 13.0.0.
+// Unicode version: 15.0.0.
 //
-// ucd-generate 0.2.8 is available on crates.io.
+// ucd-generate 0.2.14 is available on crates.io.
 
 pub const PROPERTY_VALUES: &'static [(
     &'static str,
@@ -19,6 +19,8 @@
             ("12.0", "V12_0"),
             ("12.1", "V12_1"),
             ("13.0", "V13_0"),
+            ("14.0", "V14_0"),
+            ("15.0", "V15_0"),
             ("2.0", "V2_0"),
             ("2.1", "V2_1"),
             ("3.0", "V3_0"),
@@ -44,6 +46,8 @@
             ("v120", "V12_0"),
             ("v121", "V12_1"),
             ("v130", "V13_0"),
+            ("v140", "V14_0"),
+            ("v150", "V15_0"),
             ("v20", "V2_0"),
             ("v21", "V2_1"),
             ("v30", "V3_0"),
@@ -233,9 +237,11 @@
             ("common", "Common"),
             ("copt", "Coptic"),
             ("coptic", "Coptic"),
+            ("cpmn", "Cypro_Minoan"),
             ("cprt", "Cypriot"),
             ("cuneiform", "Cuneiform"),
             ("cypriot", "Cypriot"),
+            ("cyprominoan", "Cypro_Minoan"),
             ("cyrillic", "Cyrillic"),
             ("cyrl", "Cyrillic"),
             ("deseret", "Deseret"),
@@ -304,6 +310,7 @@
             ("kannada", "Kannada"),
             ("katakana", "Katakana"),
             ("katakanaorhiragana", "Katakana_Or_Hiragana"),
+            ("kawi", "Kawi"),
             ("kayahli", "Kayah_Li"),
             ("khar", "Kharoshthi"),
             ("kharoshthi", "Kharoshthi"),
@@ -368,6 +375,8 @@
             ("myanmar", "Myanmar"),
             ("mymr", "Myanmar"),
             ("nabataean", "Nabataean"),
+            ("nagm", "Nag_Mundari"),
+            ("nagmundari", "Nag_Mundari"),
             ("nand", "Nandinagari"),
             ("nandinagari", "Nandinagari"),
             ("narb", "Old_North_Arabian"),
@@ -391,6 +400,7 @@
             ("oldsogdian", "Old_Sogdian"),
             ("oldsoutharabian", "Old_South_Arabian"),
             ("oldturkic", "Old_Turkic"),
+            ("olduyghur", "Old_Uyghur"),
             ("oriya", "Oriya"),
             ("orkh", "Old_Turkic"),
             ("orya", "Oriya"),
@@ -398,6 +408,7 @@
             ("osge", "Osage"),
             ("osma", "Osmanya"),
             ("osmanya", "Osmanya"),
+            ("ougr", "Old_Uyghur"),
             ("pahawhhmong", "Pahawh_Hmong"),
             ("palm", "Palmyrene"),
             ("palmyrene", "Palmyrene"),
@@ -462,6 +473,7 @@
             ("tamil", "Tamil"),
             ("taml", "Tamil"),
             ("tang", "Tangut"),
+            ("tangsa", "Tangsa"),
             ("tangut", "Tangut"),
             ("tavt", "Tai_Viet"),
             ("telu", "Telugu"),
@@ -476,11 +488,15 @@
             ("tifinagh", "Tifinagh"),
             ("tirh", "Tirhuta"),
             ("tirhuta", "Tirhuta"),
+            ("tnsa", "Tangsa"),
+            ("toto", "Toto"),
             ("ugar", "Ugaritic"),
             ("ugaritic", "Ugaritic"),
             ("unknown", "Unknown"),
             ("vai", "Vai"),
             ("vaii", "Vai"),
+            ("vith", "Vithkuqi"),
+            ("vithkuqi", "Vithkuqi"),
             ("wancho", "Wancho"),
             ("wara", "Warang_Citi"),
             ("warangciti", "Warang_Citi"),
@@ -550,9 +566,11 @@
             ("common", "Common"),
             ("copt", "Coptic"),
             ("coptic", "Coptic"),
+            ("cpmn", "Cypro_Minoan"),
             ("cprt", "Cypriot"),
             ("cuneiform", "Cuneiform"),
             ("cypriot", "Cypriot"),
+            ("cyprominoan", "Cypro_Minoan"),
             ("cyrillic", "Cyrillic"),
             ("cyrl", "Cyrillic"),
             ("deseret", "Deseret"),
@@ -621,6 +639,7 @@
             ("kannada", "Kannada"),
             ("katakana", "Katakana"),
             ("katakanaorhiragana", "Katakana_Or_Hiragana"),
+            ("kawi", "Kawi"),
             ("kayahli", "Kayah_Li"),
             ("khar", "Kharoshthi"),
             ("kharoshthi", "Kharoshthi"),
@@ -685,6 +704,8 @@
             ("myanmar", "Myanmar"),
             ("mymr", "Myanmar"),
             ("nabataean", "Nabataean"),
+            ("nagm", "Nag_Mundari"),
+            ("nagmundari", "Nag_Mundari"),
             ("nand", "Nandinagari"),
             ("nandinagari", "Nandinagari"),
             ("narb", "Old_North_Arabian"),
@@ -708,6 +729,7 @@
             ("oldsogdian", "Old_Sogdian"),
             ("oldsoutharabian", "Old_South_Arabian"),
             ("oldturkic", "Old_Turkic"),
+            ("olduyghur", "Old_Uyghur"),
             ("oriya", "Oriya"),
             ("orkh", "Old_Turkic"),
             ("orya", "Oriya"),
@@ -715,6 +737,7 @@
             ("osge", "Osage"),
             ("osma", "Osmanya"),
             ("osmanya", "Osmanya"),
+            ("ougr", "Old_Uyghur"),
             ("pahawhhmong", "Pahawh_Hmong"),
             ("palm", "Palmyrene"),
             ("palmyrene", "Palmyrene"),
@@ -779,6 +802,7 @@
             ("tamil", "Tamil"),
             ("taml", "Tamil"),
             ("tang", "Tangut"),
+            ("tangsa", "Tangsa"),
             ("tangut", "Tangut"),
             ("tavt", "Tai_Viet"),
             ("telu", "Telugu"),
@@ -793,11 +817,15 @@
             ("tifinagh", "Tifinagh"),
             ("tirh", "Tirhuta"),
             ("tirhuta", "Tirhuta"),
+            ("tnsa", "Tangsa"),
+            ("toto", "Toto"),
             ("ugar", "Ugaritic"),
             ("ugaritic", "Ugaritic"),
             ("unknown", "Unknown"),
             ("vai", "Vai"),
             ("vaii", "Vai"),
+            ("vith", "Vithkuqi"),
+            ("vithkuqi", "Vithkuqi"),
             ("wancho", "Wancho"),
             ("wara", "Warang_Citi"),
             ("warangciti", "Warang_Citi"),
diff --git a/src/unicode_tables/script.rs b/src/unicode_tables/script.rs
index cd86cba..cc5c400 100644
--- a/src/unicode_tables/script.rs
+++ b/src/unicode_tables/script.rs
@@ -1,10 +1,10 @@
 // DO NOT EDIT THIS FILE. IT WAS AUTOMATICALLY GENERATED BY:
 //
-//   ucd-generate script ucd-13.0.0 --chars
+//   ucd-generate script ucd-15.0.0 --chars
 //
-// Unicode version: 13.0.0.
+// Unicode version: 15.0.0.
 //
-// ucd-generate 0.2.8 is available on crates.io.
+// ucd-generate 0.2.14 is available on crates.io.
 
 pub const BY_NAME: &'static [(&'static str, &'static [(char, char)])] = &[
     ("Adlam", ADLAM),
@@ -35,6 +35,7 @@
     ("Coptic", COPTIC),
     ("Cuneiform", CUNEIFORM),
     ("Cypriot", CYPRIOT),
+    ("Cypro_Minoan", CYPRO_MINOAN),
     ("Cyrillic", CYRILLIC),
     ("Deseret", DESERET),
     ("Devanagari", DEVANAGARI),
@@ -68,6 +69,7 @@
     ("Kaithi", KAITHI),
     ("Kannada", KANNADA),
     ("Katakana", KATAKANA),
+    ("Kawi", KAWI),
     ("Kayah_Li", KAYAH_LI),
     ("Kharoshthi", KHAROSHTHI),
     ("Khitan_Small_Script", KHITAN_SMALL_SCRIPT),
@@ -102,6 +104,7 @@
     ("Multani", MULTANI),
     ("Myanmar", MYANMAR),
     ("Nabataean", NABATAEAN),
+    ("Nag_Mundari", NAG_MUNDARI),
     ("Nandinagari", NANDINAGARI),
     ("New_Tai_Lue", NEW_TAI_LUE),
     ("Newa", NEWA),
@@ -118,6 +121,7 @@
     ("Old_Sogdian", OLD_SOGDIAN),
     ("Old_South_Arabian", OLD_SOUTH_ARABIAN),
     ("Old_Turkic", OLD_TURKIC),
+    ("Old_Uyghur", OLD_UYGHUR),
     ("Oriya", ORIYA),
     ("Osage", OSAGE),
     ("Osmanya", OSMANYA),
@@ -149,6 +153,7 @@
     ("Tai_Viet", TAI_VIET),
     ("Takri", TAKRI),
     ("Tamil", TAMIL),
+    ("Tangsa", TANGSA),
     ("Tangut", TANGUT),
     ("Telugu", TELUGU),
     ("Thaana", THAANA),
@@ -156,8 +161,10 @@
     ("Tibetan", TIBETAN),
     ("Tifinagh", TIFINAGH),
     ("Tirhuta", TIRHUTA),
+    ("Toto", TOTO),
     ("Ugaritic", UGARITIC),
     ("Vai", VAI),
+    ("Vithkuqi", VITHKUQI),
     ("Wancho", WANCHO),
     ("Warang_Citi", WARANG_CITI),
     ("Yezidi", YEZIDI),
@@ -169,7 +176,7 @@
     &[('𞤀', '𞥋'), ('𞥐', '𞥙'), ('𞥞', '𞥟')];
 
 pub const AHOM: &'static [(char, char)] =
-    &[('𑜀', '𑜚'), ('\u{1171d}', '\u{1172b}'), ('𑜰', '𑜿')];
+    &[('𑜀', '𑜚'), ('\u{1171d}', '\u{1172b}'), ('𑜰', '𑝆')];
 
 pub const ANATOLIAN_HIEROGLYPHS: &'static [(char, char)] = &[('𔐀', '𔙆')];
 
@@ -177,26 +184,27 @@
     ('\u{600}', '\u{604}'),
     ('؆', '؋'),
     ('؍', '\u{61a}'),
-    ('\u{61c}', '\u{61c}'),
-    ('؞', '؞'),
+    ('\u{61c}', '؞'),
     ('ؠ', 'ؿ'),
     ('ف', 'ي'),
     ('\u{656}', 'ٯ'),
     ('ٱ', '\u{6dc}'),
     ('۞', 'ۿ'),
     ('ݐ', 'ݿ'),
-    ('ࢠ', 'ࢴ'),
-    ('ࢶ', '\u{8c7}'),
-    ('\u{8d3}', '\u{8e1}'),
+    ('ࡰ', 'ࢎ'),
+    ('\u{890}', '\u{891}'),
+    ('\u{898}', '\u{8e1}'),
     ('\u{8e3}', '\u{8ff}'),
-    ('ﭐ', '﯁'),
+    ('ﭐ', '﯂'),
     ('ﯓ', 'ﴽ'),
-    ('ﵐ', 'ﶏ'),
+    ('﵀', 'ﶏ'),
     ('ﶒ', 'ﷇ'),
-    ('ﷰ', '﷽'),
+    ('﷏', '﷏'),
+    ('ﷰ', '﷿'),
     ('ﹰ', 'ﹴ'),
     ('ﹶ', 'ﻼ'),
     ('𐹠', '𐹾'),
+    ('\u{10efd}', '\u{10eff}'),
     ('𞸀', '𞸃'),
     ('𞸅', '𞸟'),
     ('𞸡', '𞸢'),
@@ -238,7 +246,7 @@
 
 pub const AVESTAN: &'static [(char, char)] = &[('𐬀', '𐬵'), ('𐬹', '𐬿')];
 
-pub const BALINESE: &'static [(char, char)] = &[('\u{1b00}', 'ᭋ'), ('᭐', '᭼')];
+pub const BALINESE: &'static [(char, char)] = &[('\u{1b00}', 'ᭌ'), ('᭐', '᭾')];
 
 pub const BAMUM: &'static [(char, char)] = &[('ꚠ', '꛷'), ('𖠀', '𖨸')];
 
@@ -268,10 +276,10 @@
     &[('𑰀', '𑰈'), ('𑰊', '\u{11c36}'), ('\u{11c38}', '𑱅'), ('𑱐', '𑱬')];
 
 pub const BOPOMOFO: &'static [(char, char)] =
-    &[('˪', '˫'), ('ㄅ', 'ㄯ'), ('ㆠ', '\u{31bf}')];
+    &[('˪', '˫'), ('ㄅ', 'ㄯ'), ('ㆠ', 'ㆿ')];
 
 pub const BRAHMI: &'static [(char, char)] =
-    &[('𑀀', '𑁍'), ('𑁒', '𑁯'), ('\u{1107f}', '\u{1107f}')];
+    &[('𑀀', '𑁍'), ('𑁒', '𑁵'), ('\u{1107f}', '\u{1107f}')];
 
 pub const BRAILLE: &'static [(char, char)] = &[('⠀', '⣿')];
 
@@ -280,7 +288,7 @@
 pub const BUHID: &'static [(char, char)] = &[('ᝀ', '\u{1753}')];
 
 pub const CANADIAN_ABORIGINAL: &'static [(char, char)] =
-    &[('᐀', 'ᙿ'), ('ᢰ', 'ᣵ')];
+    &[('᐀', 'ᙿ'), ('ᢰ', 'ᣵ'), ('𑪰', '𑪿')];
 
 pub const CARIAN: &'static [(char, char)] = &[('𐊠', '𐋐')];
 
@@ -288,7 +296,7 @@
     &[('𐔰', '𐕣'), ('𐕯', '𐕯')];
 
 pub const CHAKMA: &'static [(char, char)] =
-    &[('\u{11100}', '\u{11134}'), ('𑄶', '\u{11147}')];
+    &[('\u{11100}', '\u{11134}'), ('𑄶', '𑅇')];
 
 pub const CHAM: &'static [(char, char)] =
     &[('ꨀ', '\u{aa36}'), ('ꩀ', 'ꩍ'), ('꩐', '꩙'), ('꩜', '꩟')];
@@ -296,10 +304,10 @@
 pub const CHEROKEE: &'static [(char, char)] =
     &[('Ꭰ', 'Ᏽ'), ('ᏸ', 'ᏽ'), ('ꭰ', 'ꮿ')];
 
-pub const CHORASMIAN: &'static [(char, char)] = &[('\u{10fb0}', '\u{10fcb}')];
+pub const CHORASMIAN: &'static [(char, char)] = &[('𐾰', '𐿋')];
 
 pub const COMMON: &'static [(char, char)] = &[
-    ('\u{0}', '@'),
+    ('\0', '@'),
     ('[', '`'),
     ('{', '©'),
     ('«', '¹'),
@@ -339,7 +347,7 @@
     ('\u{2066}', '⁰'),
     ('⁴', '⁾'),
     ('₀', '₎'),
-    ('₠', '₿'),
+    ('₠', '⃀'),
     ('℀', '℥'),
     ('℧', '℩'),
     ('ℬ', 'ℱ'),
@@ -351,8 +359,8 @@
     ('①', '⟿'),
     ('⤀', '⭳'),
     ('⭶', '⮕'),
-    ('\u{2b97}', '⯿'),
-    ('⸀', '\u{2e52}'),
+    ('⮗', '⯿'),
+    ('⸀', '⹝'),
     ('⿰', '⿻'),
     ('\u{3000}', '〄'),
     ('〆', '〆'),
@@ -375,7 +383,7 @@
     ('꤮', '꤮'),
     ('ꧏ', 'ꧏ'),
     ('꭛', '꭛'),
-    ('\u{ab6a}', '\u{ab6b}'),
+    ('꭪', '꭫'),
     ('﴾', '﴿'),
     ('︐', '︙'),
     ('︰', '﹒'),
@@ -393,18 +401,19 @@
     ('𐄀', '𐄂'),
     ('𐄇', '𐄳'),
     ('𐄷', '𐄿'),
-    ('𐆐', '\u{1019c}'),
+    ('𐆐', '𐆜'),
     ('𐇐', '𐇼'),
     ('𐋡', '𐋻'),
-    ('𖿢', '𖿣'),
     ('\u{1bca0}', '\u{1bca3}'),
+    ('𜽐', '𜿃'),
     ('𝀀', '𝃵'),
     ('𝄀', '𝄦'),
     ('𝄩', '𝅦'),
     ('𝅪', '\u{1d17a}'),
     ('𝆃', '𝆄'),
     ('𝆌', '𝆩'),
-    ('𝆮', '𝇨'),
+    ('𝆮', '𝇪'),
+    ('𝋀', '𝋓'),
     ('𝋠', '𝋳'),
     ('𝌀', '𝍖'),
     ('𝍠', '𝍸'),
@@ -437,39 +446,38 @@
     ('🂱', '🂿'),
     ('🃁', '🃏'),
     ('🃑', '🃵'),
-    ('🄀', '\u{1f1ad}'),
+    ('🄀', '🆭'),
     ('🇦', '🇿'),
     ('🈁', '🈂'),
     ('🈐', '🈻'),
     ('🉀', '🉈'),
     ('🉐', '🉑'),
     ('🉠', '🉥'),
-    ('🌀', '\u{1f6d7}'),
-    ('🛠', '🛬'),
-    ('🛰', '\u{1f6fc}'),
-    ('🜀', '🝳'),
-    ('🞀', '🟘'),
+    ('🌀', '🛗'),
+    ('🛜', '🛬'),
+    ('🛰', '🛼'),
+    ('🜀', '🝶'),
+    ('🝻', '🟙'),
     ('🟠', '🟫'),
+    ('🟰', '🟰'),
     ('🠀', '🠋'),
     ('🠐', '🡇'),
     ('🡐', '🡙'),
     ('🡠', '🢇'),
     ('🢐', '🢭'),
-    ('\u{1f8b0}', '\u{1f8b1}'),
-    ('🤀', '\u{1f978}'),
-    ('🥺', '\u{1f9cb}'),
-    ('🧍', '🩓'),
+    ('🢰', '🢱'),
+    ('🤀', '🩓'),
     ('🩠', '🩭'),
-    ('🩰', '\u{1fa74}'),
-    ('🩸', '🩺'),
-    ('🪀', '\u{1fa86}'),
-    ('🪐', '\u{1faa8}'),
-    ('\u{1fab0}', '\u{1fab6}'),
-    ('\u{1fac0}', '\u{1fac2}'),
-    ('\u{1fad0}', '\u{1fad6}'),
-    ('\u{1fb00}', '\u{1fb92}'),
-    ('\u{1fb94}', '\u{1fbca}'),
-    ('\u{1fbf0}', '\u{1fbf9}'),
+    ('🩰', '🩼'),
+    ('🪀', '🪈'),
+    ('🪐', '🪽'),
+    ('🪿', '🫅'),
+    ('🫎', '🫛'),
+    ('🫠', '🫨'),
+    ('🫰', '🫸'),
+    ('🬀', '🮒'),
+    ('🮔', '🯊'),
+    ('🯰', '🯹'),
     ('\u{e0001}', '\u{e0001}'),
     ('\u{e0020}', '\u{e007f}'),
 ];
@@ -483,6 +491,8 @@
 pub const CYPRIOT: &'static [(char, char)] =
     &[('𐠀', '𐠅'), ('𐠈', '𐠈'), ('𐠊', '𐠵'), ('𐠷', '𐠸'), ('𐠼', '𐠼'), ('𐠿', '𐠿')];
 
+pub const CYPRO_MINOAN: &'static [(char, char)] = &[('𒾐', '𒿲')];
+
 pub const CYRILLIC: &'static [(char, char)] = &[
     ('Ѐ', '\u{484}'),
     ('\u{487}', 'ԯ'),
@@ -492,6 +502,8 @@
     ('\u{2de0}', '\u{2dff}'),
     ('Ꙁ', '\u{a69f}'),
     ('\u{fe2e}', '\u{fe2f}'),
+    ('𞀰', '𞁭'),
+    ('\u{1e08f}', '\u{1e08f}'),
 ];
 
 pub const DESERET: &'static [(char, char)] = &[('𐐀', '𐑏')];
@@ -501,17 +513,18 @@
     ('\u{955}', '\u{963}'),
     ('०', 'ॿ'),
     ('\u{a8e0}', '\u{a8ff}'),
+    ('𑬀', '𑬉'),
 ];
 
 pub const DIVES_AKURU: &'static [(char, char)] = &[
-    ('\u{11900}', '\u{11906}'),
-    ('\u{11909}', '\u{11909}'),
-    ('\u{1190c}', '\u{11913}'),
-    ('\u{11915}', '\u{11916}'),
-    ('\u{11918}', '\u{11935}'),
-    ('\u{11937}', '\u{11938}'),
-    ('\u{1193b}', '\u{11946}'),
-    ('\u{11950}', '\u{11959}'),
+    ('𑤀', '𑤆'),
+    ('𑤉', '𑤉'),
+    ('𑤌', '𑤓'),
+    ('𑤕', '𑤖'),
+    ('𑤘', '𑤵'),
+    ('𑤷', '𑤸'),
+    ('\u{1193b}', '𑥆'),
+    ('𑥐', '𑥙'),
 ];
 
 pub const DOGRA: &'static [(char, char)] = &[('𑠀', '𑠻')];
@@ -520,7 +533,7 @@
     &[('𛰀', '𛱪'), ('𛱰', '𛱼'), ('𛲀', '𛲈'), ('𛲐', '𛲙'), ('𛲜', '𛲟')];
 
 pub const EGYPTIAN_HIEROGLYPHS: &'static [(char, char)] =
-    &[('𓀀', '𓐮'), ('\u{13430}', '\u{13438}')];
+    &[('𓀀', '\u{13455}')];
 
 pub const ELBASAN: &'static [(char, char)] = &[('𐔀', '𐔧')];
 
@@ -559,6 +572,10 @@
     ('ꬑ', 'ꬖ'),
     ('ꬠ', 'ꬦ'),
     ('ꬨ', 'ꬮ'),
+    ('𞟠', '𞟦'),
+    ('𞟨', '𞟫'),
+    ('𞟭', '𞟮'),
+    ('𞟰', '𞟾'),
 ];
 
 pub const GEORGIAN: &'static [(char, char)] = &[
@@ -575,8 +592,7 @@
 ];
 
 pub const GLAGOLITIC: &'static [(char, char)] = &[
-    ('Ⰰ', 'Ⱞ'),
-    ('ⰰ', 'ⱞ'),
+    ('Ⰰ', 'ⱟ'),
     ('\u{1e000}', '\u{1e006}'),
     ('\u{1e008}', '\u{1e018}'),
     ('\u{1e01b}', '\u{1e021}'),
@@ -696,18 +712,20 @@
     ('〇', '〇'),
     ('〡', '〩'),
     ('〸', '〻'),
-    ('㐀', '\u{4dbf}'),
-    ('一', '\u{9ffc}'),
+    ('㐀', '䶿'),
+    ('一', '鿿'),
     ('豈', '舘'),
     ('並', '龎'),
-    ('\u{16ff0}', '\u{16ff1}'),
-    ('𠀀', '\u{2a6dd}'),
-    ('𪜀', '𫜴'),
+    ('𖿢', '𖿣'),
+    ('𖿰', '𖿱'),
+    ('𠀀', '𪛟'),
+    ('𪜀', '𫜹'),
     ('𫝀', '𫠝'),
     ('𫠠', '𬺡'),
     ('𬺰', '𮯠'),
     ('丽', '𪘀'),
-    ('\u{30000}', '\u{3134a}'),
+    ('𰀀', '𱍊'),
+    ('𱍐', '𲎯'),
 ];
 
 pub const HANGUL: &'static [(char, char)] = &[
@@ -730,7 +748,7 @@
 pub const HANIFI_ROHINGYA: &'static [(char, char)] =
     &[('𐴀', '\u{10d27}'), ('𐴰', '𐴹')];
 
-pub const HANUNOO: &'static [(char, char)] = &[('ᜠ', '\u{1734}')];
+pub const HANUNOO: &'static [(char, char)] = &[('ᜠ', '᜴')];
 
 pub const HATRAN: &'static [(char, char)] =
     &[('𐣠', '𐣲'), ('𐣴', '𐣵'), ('𐣻', '𐣿')];
@@ -747,8 +765,14 @@
     ('צּ', 'ﭏ'),
 ];
 
-pub const HIRAGANA: &'static [(char, char)] =
-    &[('ぁ', 'ゖ'), ('ゝ', 'ゟ'), ('𛀁', '𛄞'), ('𛅐', '𛅒'), ('🈀', '🈀')];
+pub const HIRAGANA: &'static [(char, char)] = &[
+    ('ぁ', 'ゖ'),
+    ('ゝ', 'ゟ'),
+    ('𛀁', '𛄟'),
+    ('𛄲', '𛄲'),
+    ('𛅐', '𛅒'),
+    ('🈀', '🈀'),
+];
 
 pub const IMPERIAL_ARAMAIC: &'static [(char, char)] =
     &[('𐡀', '𐡕'), ('𐡗', '𐡟')];
@@ -759,15 +783,14 @@
     ('\u{64b}', '\u{655}'),
     ('\u{670}', '\u{670}'),
     ('\u{951}', '\u{954}'),
-    ('\u{1ab0}', '\u{1ac0}'),
+    ('\u{1ab0}', '\u{1ace}'),
     ('\u{1cd0}', '\u{1cd2}'),
     ('\u{1cd4}', '\u{1ce0}'),
     ('\u{1ce2}', '\u{1ce8}'),
     ('\u{1ced}', '\u{1ced}'),
     ('\u{1cf4}', '\u{1cf4}'),
     ('\u{1cf8}', '\u{1cf9}'),
-    ('\u{1dc0}', '\u{1df9}'),
-    ('\u{1dfb}', '\u{1dff}'),
+    ('\u{1dc0}', '\u{1dff}'),
     ('\u{200c}', '\u{200d}'),
     ('\u{20d0}', '\u{20f0}'),
     ('\u{302a}', '\u{302d}'),
@@ -777,6 +800,8 @@
     ('\u{101fd}', '\u{101fd}'),
     ('\u{102e0}', '\u{102e0}'),
     ('\u{1133b}', '\u{1133b}'),
+    ('\u{1cf00}', '\u{1cf2d}'),
+    ('\u{1cf30}', '\u{1cf46}'),
     ('\u{1d167}', '\u{1d169}'),
     ('\u{1d17b}', '\u{1d182}'),
     ('\u{1d185}', '\u{1d18b}'),
@@ -794,7 +819,7 @@
     &[('\u{a980}', '꧍'), ('꧐', '꧙'), ('꧞', '꧟')];
 
 pub const KAITHI: &'static [(char, char)] =
-    &[('\u{11080}', '𑃁'), ('\u{110cd}', '\u{110cd}')];
+    &[('\u{11080}', '\u{110c2}'), ('\u{110cd}', '\u{110cd}')];
 
 pub const KANNADA: &'static [(char, char)] = &[
     ('ಀ', 'ಌ'),
@@ -806,10 +831,10 @@
     ('\u{cc6}', 'ೈ'),
     ('ೊ', '\u{ccd}'),
     ('\u{cd5}', '\u{cd6}'),
-    ('ೞ', 'ೞ'),
+    ('ೝ', 'ೞ'),
     ('ೠ', '\u{ce3}'),
     ('೦', '೯'),
-    ('ೱ', 'ೲ'),
+    ('ೱ', 'ೳ'),
 ];
 
 pub const KATAKANA: &'static [(char, char)] = &[
@@ -820,10 +845,18 @@
     ('㌀', '㍗'),
     ('ヲ', 'ッ'),
     ('ア', 'ン'),
+    ('𚿰', '𚿳'),
+    ('𚿵', '𚿻'),
+    ('𚿽', '𚿾'),
     ('𛀀', '𛀀'),
+    ('𛄠', '𛄢'),
+    ('𛅕', '𛅕'),
     ('𛅤', '𛅧'),
 ];
 
+pub const KAWI: &'static [(char, char)] =
+    &[('\u{11f00}', '𑼐'), ('𑼒', '\u{11f3a}'), ('𑼾', '𑽙')];
+
 pub const KAYAH_LI: &'static [(char, char)] = &[('꤀', '\u{a92d}'), ('꤯', '꤯')];
 
 pub const KHAROSHTHI: &'static [(char, char)] = &[
@@ -838,12 +871,12 @@
 ];
 
 pub const KHITAN_SMALL_SCRIPT: &'static [(char, char)] =
-    &[('\u{16fe4}', '\u{16fe4}'), ('\u{18b00}', '\u{18cd5}')];
+    &[('\u{16fe4}', '\u{16fe4}'), ('𘬀', '𘳕')];
 
 pub const KHMER: &'static [(char, char)] =
     &[('ក', '\u{17dd}'), ('០', '៩'), ('៰', '៹'), ('᧠', '᧿')];
 
-pub const KHOJKI: &'static [(char, char)] = &[('𑈀', '𑈑'), ('𑈓', '\u{1123e}')];
+pub const KHOJKI: &'static [(char, char)] = &[('𑈀', '𑈑'), ('𑈓', '\u{11241}')];
 
 pub const KHUDAWADI: &'static [(char, char)] =
     &[('𑊰', '\u{112ea}'), ('𑋰', '𑋹')];
@@ -857,7 +890,7 @@
     ('ວ', 'ຽ'),
     ('ເ', 'ໄ'),
     ('ໆ', 'ໆ'),
-    ('\u{ec8}', '\u{ecd}'),
+    ('\u{ec8}', '\u{ece}'),
     ('໐', '໙'),
     ('ໜ', 'ໟ'),
 ];
@@ -886,15 +919,22 @@
     ('Ⅰ', 'ↈ'),
     ('Ⱡ', 'Ɀ'),
     ('Ꜣ', 'ꞇ'),
-    ('Ꞌ', 'ꞿ'),
-    ('Ꟃ', '\u{a7ca}'),
-    ('\u{a7f5}', 'ꟿ'),
+    ('Ꞌ', 'ꟊ'),
+    ('Ꟑ', 'ꟑ'),
+    ('ꟓ', 'ꟓ'),
+    ('ꟕ', 'ꟙ'),
+    ('ꟲ', 'ꟿ'),
     ('ꬰ', 'ꭚ'),
     ('ꭜ', 'ꭤ'),
-    ('ꭦ', '\u{ab69}'),
+    ('ꭦ', 'ꭩ'),
     ('ff', 'st'),
     ('A', 'Z'),
     ('a', 'z'),
+    ('𐞀', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
+    ('𝼀', '𝼞'),
+    ('𝼥', '𝼪'),
 ];
 
 pub const LEPCHA: &'static [(char, char)] =
@@ -921,8 +961,7 @@
     ('𐂀', '𐃺'),
 ];
 
-pub const LISU: &'static [(char, char)] =
-    &[('ꓐ', '꓿'), ('\u{11fb0}', '\u{11fb0}')];
+pub const LISU: &'static [(char, char)] = &[('ꓐ', '꓿'), ('𑾰', '𑾰')];
 
 pub const LYCIAN: &'static [(char, char)] = &[('𐊀', '𐊜')];
 
@@ -978,15 +1017,8 @@
 
 pub const MODI: &'static [(char, char)] = &[('𑘀', '𑙄'), ('𑙐', '𑙙')];
 
-pub const MONGOLIAN: &'static [(char, char)] = &[
-    ('᠀', '᠁'),
-    ('᠄', '᠄'),
-    ('᠆', '\u{180e}'),
-    ('᠐', '᠙'),
-    ('ᠠ', 'ᡸ'),
-    ('ᢀ', 'ᢪ'),
-    ('𑙠', '𑙬'),
-];
+pub const MONGOLIAN: &'static [(char, char)] =
+    &[('᠀', '᠁'), ('᠄', '᠄'), ('᠆', '᠙'), ('ᠠ', 'ᡸ'), ('ᢀ', 'ᢪ'), ('𑙠', '𑙬')];
 
 pub const MRO: &'static [(char, char)] = &[('𖩀', '𖩞'), ('𖩠', '𖩩'), ('𖩮', '𖩯')];
 
@@ -998,13 +1030,15 @@
 
 pub const NABATAEAN: &'static [(char, char)] = &[('𐢀', '𐢞'), ('𐢧', '𐢯')];
 
+pub const NAG_MUNDARI: &'static [(char, char)] = &[('𞓐', '𞓹')];
+
 pub const NANDINAGARI: &'static [(char, char)] =
     &[('𑦠', '𑦧'), ('𑦪', '\u{119d7}'), ('\u{119da}', '𑧤')];
 
 pub const NEW_TAI_LUE: &'static [(char, char)] =
     &[('ᦀ', 'ᦫ'), ('ᦰ', 'ᧉ'), ('᧐', '᧚'), ('᧞', '᧟')];
 
-pub const NEWA: &'static [(char, char)] = &[('𑐀', '𑑛'), ('𑑝', '\u{11461}')];
+pub const NEWA: &'static [(char, char)] = &[('𑐀', '𑑛'), ('𑑝', '𑑡')];
 
 pub const NKO: &'static [(char, char)] = &[('߀', 'ߺ'), ('\u{7fd}', '߿')];
 
@@ -1034,6 +1068,8 @@
 
 pub const OLD_TURKIC: &'static [(char, char)] = &[('𐰀', '𐱈')];
 
+pub const OLD_UYGHUR: &'static [(char, char)] = &[('𐽰', '𐾉')];
+
 pub const ORIYA: &'static [(char, char)] = &[
     ('\u{b01}', 'ଃ'),
     ('ଅ', 'ଌ'),
@@ -1118,7 +1154,7 @@
 pub const SYRIAC: &'static [(char, char)] =
     &[('܀', '܍'), ('\u{70f}', '\u{74a}'), ('ݍ', 'ݏ'), ('ࡠ', 'ࡪ')];
 
-pub const TAGALOG: &'static [(char, char)] = &[('ᜀ', 'ᜌ'), ('ᜎ', '\u{1714}')];
+pub const TAGALOG: &'static [(char, char)] = &[('ᜀ', '᜕'), ('ᜟ', 'ᜟ')];
 
 pub const TAGBANWA: &'static [(char, char)] =
     &[('ᝠ', 'ᝬ'), ('ᝮ', 'ᝰ'), ('\u{1772}', '\u{1773}')];
@@ -1135,7 +1171,7 @@
 
 pub const TAI_VIET: &'static [(char, char)] = &[('ꪀ', 'ꫂ'), ('ꫛ', '꫟')];
 
-pub const TAKRI: &'static [(char, char)] = &[('𑚀', '𑚸'), ('𑛀', '𑛉')];
+pub const TAKRI: &'static [(char, char)] = &[('𑚀', '𑚹'), ('𑛀', '𑛉')];
 
 pub const TAMIL: &'static [(char, char)] = &[
     ('\u{b82}', 'ஃ'),
@@ -1158,23 +1194,22 @@
     ('𑿿', '𑿿'),
 ];
 
-pub const TANGUT: &'static [(char, char)] = &[
-    ('𖿠', '𖿠'),
-    ('𗀀', '𘟷'),
-    ('𘠀', '\u{18aff}'),
-    ('\u{18d00}', '\u{18d08}'),
-];
+pub const TANGSA: &'static [(char, char)] = &[('𖩰', '𖪾'), ('𖫀', '𖫉')];
+
+pub const TANGUT: &'static [(char, char)] =
+    &[('𖿠', '𖿠'), ('𗀀', '𘟷'), ('𘠀', '𘫿'), ('𘴀', '𘴈')];
 
 pub const TELUGU: &'static [(char, char)] = &[
     ('\u{c00}', 'ఌ'),
     ('ఎ', 'ఐ'),
     ('ఒ', 'న'),
     ('ప', 'హ'),
-    ('ఽ', 'ౄ'),
+    ('\u{c3c}', 'ౄ'),
     ('\u{c46}', '\u{c48}'),
     ('\u{c4a}', '\u{c4d}'),
     ('\u{c55}', '\u{c56}'),
     ('ౘ', 'ౚ'),
+    ('ౝ', 'ౝ'),
     ('ౠ', '\u{c63}'),
     ('౦', '౯'),
     ('౷', '౿'),
@@ -1199,19 +1234,29 @@
 
 pub const TIRHUTA: &'static [(char, char)] = &[('𑒀', '𑓇'), ('𑓐', '𑓙')];
 
+pub const TOTO: &'static [(char, char)] = &[('𞊐', '\u{1e2ae}')];
+
 pub const UGARITIC: &'static [(char, char)] = &[('𐎀', '𐎝'), ('𐎟', '𐎟')];
 
 pub const VAI: &'static [(char, char)] = &[('ꔀ', 'ꘫ')];
 
+pub const VITHKUQI: &'static [(char, char)] = &[
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
+];
+
 pub const WANCHO: &'static [(char, char)] = &[('𞋀', '𞋹'), ('𞋿', '𞋿')];
 
 pub const WARANG_CITI: &'static [(char, char)] = &[('𑢠', '𑣲'), ('𑣿', '𑣿')];
 
-pub const YEZIDI: &'static [(char, char)] = &[
-    ('\u{10e80}', '\u{10ea9}'),
-    ('\u{10eab}', '\u{10ead}'),
-    ('\u{10eb0}', '\u{10eb1}'),
-];
+pub const YEZIDI: &'static [(char, char)] =
+    &[('𐺀', '𐺩'), ('\u{10eab}', '𐺭'), ('𐺰', '𐺱')];
 
 pub const YI: &'static [(char, char)] = &[('ꀀ', 'ꒌ'), ('꒐', '꓆')];
 
diff --git a/src/unicode_tables/script_extension.rs b/src/unicode_tables/script_extension.rs
index 7fca2af..42625e2 100644
--- a/src/unicode_tables/script_extension.rs
+++ b/src/unicode_tables/script_extension.rs
@@ -1,10 +1,10 @@
 // DO NOT EDIT THIS FILE. IT WAS AUTOMATICALLY GENERATED BY:
 //
-//   ucd-generate script-extension ucd-13.0.0 --chars
+//   ucd-generate script-extension ucd-15.0.0 --chars
 //
-// Unicode version: 13.0.0.
+// Unicode version: 15.0.0.
 //
-// ucd-generate 0.2.8 is available on crates.io.
+// ucd-generate 0.2.14 is available on crates.io.
 
 pub const BY_NAME: &'static [(&'static str, &'static [(char, char)])] = &[
     ("Adlam", ADLAM),
@@ -35,6 +35,7 @@
     ("Coptic", COPTIC),
     ("Cuneiform", CUNEIFORM),
     ("Cypriot", CYPRIOT),
+    ("Cypro_Minoan", CYPRO_MINOAN),
     ("Cyrillic", CYRILLIC),
     ("Deseret", DESERET),
     ("Devanagari", DEVANAGARI),
@@ -68,6 +69,7 @@
     ("Kaithi", KAITHI),
     ("Kannada", KANNADA),
     ("Katakana", KATAKANA),
+    ("Kawi", KAWI),
     ("Kayah_Li", KAYAH_LI),
     ("Kharoshthi", KHAROSHTHI),
     ("Khitan_Small_Script", KHITAN_SMALL_SCRIPT),
@@ -102,6 +104,7 @@
     ("Multani", MULTANI),
     ("Myanmar", MYANMAR),
     ("Nabataean", NABATAEAN),
+    ("Nag_Mundari", NAG_MUNDARI),
     ("Nandinagari", NANDINAGARI),
     ("New_Tai_Lue", NEW_TAI_LUE),
     ("Newa", NEWA),
@@ -118,6 +121,7 @@
     ("Old_Sogdian", OLD_SOGDIAN),
     ("Old_South_Arabian", OLD_SOUTH_ARABIAN),
     ("Old_Turkic", OLD_TURKIC),
+    ("Old_Uyghur", OLD_UYGHUR),
     ("Oriya", ORIYA),
     ("Osage", OSAGE),
     ("Osmanya", OSMANYA),
@@ -149,6 +153,7 @@
     ("Tai_Viet", TAI_VIET),
     ("Takri", TAKRI),
     ("Tamil", TAMIL),
+    ("Tangsa", TANGSA),
     ("Tangut", TANGUT),
     ("Telugu", TELUGU),
     ("Thaana", THAANA),
@@ -156,8 +161,10 @@
     ("Tibetan", TIBETAN),
     ("Tifinagh", TIFINAGH),
     ("Tirhuta", TIRHUTA),
+    ("Toto", TOTO),
     ("Ugaritic", UGARITIC),
     ("Vai", VAI),
+    ("Vithkuqi", VITHKUQI),
     ("Wancho", WANCHO),
     ("Warang_Citi", WARANG_CITI),
     ("Yezidi", YEZIDI),
@@ -166,32 +173,32 @@
 ];
 
 pub const ADLAM: &'static [(char, char)] =
-    &[('ـ', 'ـ'), ('𞤀', '𞥋'), ('𞥐', '𞥙'), ('𞥞', '𞥟')];
+    &[('؟', '؟'), ('ـ', 'ـ'), ('𞤀', '𞥋'), ('𞥐', '𞥙'), ('𞥞', '𞥟')];
 
 pub const AHOM: &'static [(char, char)] =
-    &[('𑜀', '𑜚'), ('\u{1171d}', '\u{1172b}'), ('𑜰', '𑜿')];
+    &[('𑜀', '𑜚'), ('\u{1171d}', '\u{1172b}'), ('𑜰', '𑝆')];
 
 pub const ANATOLIAN_HIEROGLYPHS: &'static [(char, char)] = &[('𔐀', '𔙆')];
 
 pub const ARABIC: &'static [(char, char)] = &[
     ('\u{600}', '\u{604}'),
-    ('؆', '\u{61c}'),
-    ('؞', '\u{6dc}'),
+    ('؆', '\u{6dc}'),
     ('۞', 'ۿ'),
     ('ݐ', 'ݿ'),
-    ('ࢠ', 'ࢴ'),
-    ('ࢶ', '\u{8c7}'),
-    ('\u{8d3}', '\u{8e1}'),
+    ('ࡰ', 'ࢎ'),
+    ('\u{890}', '\u{891}'),
+    ('\u{898}', '\u{8e1}'),
     ('\u{8e3}', '\u{8ff}'),
-    ('ﭐ', '﯁'),
-    ('ﯓ', 'ﴽ'),
-    ('ﵐ', 'ﶏ'),
+    ('ﭐ', '﯂'),
+    ('ﯓ', 'ﶏ'),
     ('ﶒ', 'ﷇ'),
-    ('ﷰ', '﷽'),
+    ('﷏', '﷏'),
+    ('ﷰ', '﷿'),
     ('ﹰ', 'ﹴ'),
     ('ﹶ', 'ﻼ'),
     ('\u{102e0}', '𐋻'),
     ('𐹠', '𐹾'),
+    ('\u{10efd}', '\u{10eff}'),
     ('𞸀', '𞸃'),
     ('𞸅', '𞸟'),
     ('𞸡', '𞸢'),
@@ -233,7 +240,7 @@
 
 pub const AVESTAN: &'static [(char, char)] = &[('𐬀', '𐬵'), ('𐬹', '𐬿')];
 
-pub const BALINESE: &'static [(char, char)] = &[('\u{1b00}', 'ᭋ'), ('᭐', '᭼')];
+pub const BALINESE: &'static [(char, char)] = &[('\u{1b00}', 'ᭌ'), ('᭐', '᭾')];
 
 pub const BAMUM: &'static [(char, char)] = &[('ꚠ', '꛷'), ('𖠀', '𖨸')];
 
@@ -284,13 +291,13 @@
     ('〷', '〷'),
     ('・', '・'),
     ('ㄅ', 'ㄯ'),
-    ('ㆠ', '\u{31bf}'),
+    ('ㆠ', 'ㆿ'),
     ('﹅', '﹆'),
     ('。', '・'),
 ];
 
 pub const BRAHMI: &'static [(char, char)] =
-    &[('𑀀', '𑁍'), ('𑁒', '𑁯'), ('\u{1107f}', '\u{1107f}')];
+    &[('𑀀', '𑁍'), ('𑁒', '𑁵'), ('\u{1107f}', '\u{1107f}')];
 
 pub const BRAILLE: &'static [(char, char)] = &[('⠀', '⣿')];
 
@@ -300,7 +307,7 @@
 pub const BUHID: &'static [(char, char)] = &[('᜵', '᜶'), ('ᝀ', '\u{1753}')];
 
 pub const CANADIAN_ABORIGINAL: &'static [(char, char)] =
-    &[('᐀', 'ᙿ'), ('ᢰ', 'ᣵ')];
+    &[('᐀', 'ᙿ'), ('ᢰ', 'ᣵ'), ('𑪰', '𑪿')];
 
 pub const CARIAN: &'static [(char, char)] = &[('𐊠', '𐋐')];
 
@@ -308,7 +315,7 @@
     &[('𐔰', '𐕣'), ('𐕯', '𐕯')];
 
 pub const CHAKMA: &'static [(char, char)] =
-    &[('০', '৯'), ('၀', '၉'), ('\u{11100}', '\u{11134}'), ('𑄶', '\u{11147}')];
+    &[('০', '৯'), ('၀', '၉'), ('\u{11100}', '\u{11134}'), ('𑄶', '𑅇')];
 
 pub const CHAM: &'static [(char, char)] =
     &[('ꨀ', '\u{aa36}'), ('ꩀ', 'ꩍ'), ('꩐', '꩙'), ('꩜', '꩟')];
@@ -316,10 +323,10 @@
 pub const CHEROKEE: &'static [(char, char)] =
     &[('Ꭰ', 'Ᏽ'), ('ᏸ', 'ᏽ'), ('ꭰ', 'ꮿ')];
 
-pub const CHORASMIAN: &'static [(char, char)] = &[('\u{10fb0}', '\u{10fcb}')];
+pub const CHORASMIAN: &'static [(char, char)] = &[('𐾰', '𐿋')];
 
 pub const COMMON: &'static [(char, char)] = &[
-    ('\u{0}', '@'),
+    ('\0', '@'),
     ('[', '`'),
     ('{', '©'),
     ('«', '¹'),
@@ -345,7 +352,7 @@
     ('\u{2066}', '⁰'),
     ('⁴', '⁾'),
     ('₀', '₎'),
-    ('₠', '₿'),
+    ('₠', '⃀'),
     ('℀', '℥'),
     ('℧', '℩'),
     ('ℬ', 'ℱ'),
@@ -357,9 +364,9 @@
     ('①', '⟿'),
     ('⤀', '⭳'),
     ('⭶', '⮕'),
-    ('\u{2b97}', '⯿'),
+    ('⮗', '⯿'),
     ('⸀', '⹂'),
-    ('⹄', '\u{2e52}'),
+    ('⹄', '⹝'),
     ('⿰', '⿻'),
     ('\u{3000}', '\u{3000}'),
     ('〄', '〄'),
@@ -377,8 +384,7 @@
     ('꜈', '꜡'),
     ('ꞈ', '꞊'),
     ('꭛', '꭛'),
-    ('\u{ab6a}', '\u{ab6b}'),
-    ('﴾', '﴿'),
+    ('꭪', '꭫'),
     ('︐', '︙'),
     ('︰', '﹄'),
     ('﹇', '﹒'),
@@ -391,16 +397,17 @@
     ('¢', '₩'),
     ('│', '○'),
     ('\u{fff9}', '�'),
-    ('𐆐', '\u{1019c}'),
+    ('𐆐', '𐆜'),
     ('𐇐', '𐇼'),
-    ('𖿢', '𖿣'),
+    ('𜽐', '𜿃'),
     ('𝀀', '𝃵'),
     ('𝄀', '𝄦'),
     ('𝄩', '𝅦'),
     ('𝅪', '\u{1d17a}'),
     ('𝆃', '𝆄'),
     ('𝆌', '𝆩'),
-    ('𝆮', '𝇨'),
+    ('𝆮', '𝇪'),
+    ('𝋀', '𝋓'),
     ('𝋠', '𝋳'),
     ('𝌀', '𝍖'),
     ('𝍲', '𝍸'),
@@ -433,38 +440,37 @@
     ('🂱', '🂿'),
     ('🃁', '🃏'),
     ('🃑', '🃵'),
-    ('🄀', '\u{1f1ad}'),
+    ('🄀', '🆭'),
     ('🇦', '🇿'),
     ('🈁', '🈂'),
     ('🈐', '🈻'),
     ('🉀', '🉈'),
     ('🉠', '🉥'),
-    ('🌀', '\u{1f6d7}'),
-    ('🛠', '🛬'),
-    ('🛰', '\u{1f6fc}'),
-    ('🜀', '🝳'),
-    ('🞀', '🟘'),
+    ('🌀', '🛗'),
+    ('🛜', '🛬'),
+    ('🛰', '🛼'),
+    ('🜀', '🝶'),
+    ('🝻', '🟙'),
     ('🟠', '🟫'),
+    ('🟰', '🟰'),
     ('🠀', '🠋'),
     ('🠐', '🡇'),
     ('🡐', '🡙'),
     ('🡠', '🢇'),
     ('🢐', '🢭'),
-    ('\u{1f8b0}', '\u{1f8b1}'),
-    ('🤀', '\u{1f978}'),
-    ('🥺', '\u{1f9cb}'),
-    ('🧍', '🩓'),
+    ('🢰', '🢱'),
+    ('🤀', '🩓'),
     ('🩠', '🩭'),
-    ('🩰', '\u{1fa74}'),
-    ('🩸', '🩺'),
-    ('🪀', '\u{1fa86}'),
-    ('🪐', '\u{1faa8}'),
-    ('\u{1fab0}', '\u{1fab6}'),
-    ('\u{1fac0}', '\u{1fac2}'),
-    ('\u{1fad0}', '\u{1fad6}'),
-    ('\u{1fb00}', '\u{1fb92}'),
-    ('\u{1fb94}', '\u{1fbca}'),
-    ('\u{1fbf0}', '\u{1fbf9}'),
+    ('🩰', '🩼'),
+    ('🪀', '🪈'),
+    ('🪐', '🪽'),
+    ('🪿', '🫅'),
+    ('🫎', '🫛'),
+    ('🫠', '🫨'),
+    ('🫰', '🫸'),
+    ('🬀', '🮒'),
+    ('🮔', '🯊'),
+    ('🯰', '🯹'),
     ('\u{e0001}', '\u{e0001}'),
     ('\u{e0020}', '\u{e007f}'),
 ];
@@ -487,6 +493,8 @@
     ('𐠿', '𐠿'),
 ];
 
+pub const CYPRO_MINOAN: &'static [(char, char)] = &[('𐄀', '𐄁'), ('𒾐', '𒿲')];
+
 pub const CYRILLIC: &'static [(char, char)] = &[
     ('Ѐ', 'ԯ'),
     ('ᲀ', 'ᲈ'),
@@ -497,6 +505,8 @@
     ('⹃', '⹃'),
     ('Ꙁ', '\u{a69f}'),
     ('\u{fe2e}', '\u{fe2f}'),
+    ('𞀰', '𞁭'),
+    ('\u{1e08f}', '\u{1e08f}'),
 ];
 
 pub const DESERET: &'static [(char, char)] = &[('𐐀', '𐑏')];
@@ -509,17 +519,18 @@
     ('\u{20f0}', '\u{20f0}'),
     ('꠰', '꠹'),
     ('\u{a8e0}', '\u{a8ff}'),
+    ('𑬀', '𑬉'),
 ];
 
 pub const DIVES_AKURU: &'static [(char, char)] = &[
-    ('\u{11900}', '\u{11906}'),
-    ('\u{11909}', '\u{11909}'),
-    ('\u{1190c}', '\u{11913}'),
-    ('\u{11915}', '\u{11916}'),
-    ('\u{11918}', '\u{11935}'),
-    ('\u{11937}', '\u{11938}'),
-    ('\u{1193b}', '\u{11946}'),
-    ('\u{11950}', '\u{11959}'),
+    ('𑤀', '𑤆'),
+    ('𑤉', '𑤉'),
+    ('𑤌', '𑤓'),
+    ('𑤕', '𑤖'),
+    ('𑤘', '𑤵'),
+    ('𑤷', '𑤸'),
+    ('\u{1193b}', '𑥆'),
+    ('𑥐', '𑥙'),
 ];
 
 pub const DOGRA: &'static [(char, char)] =
@@ -529,7 +540,7 @@
     &[('𛰀', '𛱪'), ('𛱰', '𛱼'), ('𛲀', '𛲈'), ('𛲐', '𛲙'), ('𛲜', '\u{1bca3}')];
 
 pub const EGYPTIAN_HIEROGLYPHS: &'static [(char, char)] =
-    &[('𓀀', '𓐮'), ('\u{13430}', '\u{13438}')];
+    &[('𓀀', '\u{13455}')];
 
 pub const ELBASAN: &'static [(char, char)] = &[('𐔀', '𐔧')];
 
@@ -568,6 +579,10 @@
     ('ꬑ', 'ꬖ'),
     ('ꬠ', 'ꬦ'),
     ('ꬨ', 'ꬮ'),
+    ('𞟠', '𞟦'),
+    ('𞟨', '𞟫'),
+    ('𞟭', '𞟮'),
+    ('𞟰', '𞟾'),
 ];
 
 pub const GEORGIAN: &'static [(char, char)] = &[
@@ -585,8 +600,7 @@
 pub const GLAGOLITIC: &'static [(char, char)] = &[
     ('\u{484}', '\u{484}'),
     ('\u{487}', '\u{487}'),
-    ('Ⰰ', 'Ⱞ'),
-    ('ⰰ', 'ⱞ'),
+    ('Ⰰ', 'ⱟ'),
     ('⹃', '⹃'),
     ('\u{a66f}', '\u{a66f}'),
     ('\u{1e000}', '\u{1e006}'),
@@ -739,23 +753,25 @@
     ('㍘', '㍰'),
     ('㍻', '㍿'),
     ('㏠', '㏾'),
-    ('㐀', '\u{4dbf}'),
-    ('一', '\u{9ffc}'),
+    ('㐀', '䶿'),
+    ('一', '鿿'),
     ('꜀', '꜇'),
     ('豈', '舘'),
     ('並', '龎'),
     ('﹅', '﹆'),
     ('。', '・'),
-    ('\u{16ff0}', '\u{16ff1}'),
+    ('𖿢', '𖿣'),
+    ('𖿰', '𖿱'),
     ('𝍠', '𝍱'),
     ('🉐', '🉑'),
-    ('𠀀', '\u{2a6dd}'),
-    ('𪜀', '𫜴'),
+    ('𠀀', '𪛟'),
+    ('𪜀', '𫜹'),
     ('𫝀', '𫠝'),
     ('𫠠', '𬺡'),
     ('𬺰', '𮯠'),
     ('丽', '𪘀'),
-    ('\u{30000}', '\u{3134a}'),
+    ('𰀀', '𱍊'),
+    ('𱍐', '𲎯'),
 ];
 
 pub const HANGUL: &'static [(char, char)] = &[
@@ -823,7 +839,8 @@
     ('。', '・'),
     ('ー', 'ー'),
     ('\u{ff9e}', '\u{ff9f}'),
-    ('𛀁', '𛄞'),
+    ('𛀁', '𛄟'),
+    ('𛄲', '𛄲'),
     ('𛅐', '𛅒'),
     ('🈀', '🈀'),
 ];
@@ -836,7 +853,7 @@
     ('\u{343}', '\u{344}'),
     ('\u{346}', '\u{362}'),
     ('\u{953}', '\u{954}'),
-    ('\u{1ab0}', '\u{1ac0}'),
+    ('\u{1ab0}', '\u{1ace}'),
     ('\u{1dc2}', '\u{1df7}'),
     ('\u{1df9}', '\u{1df9}'),
     ('\u{1dfb}', '\u{1dff}'),
@@ -845,6 +862,8 @@
     ('\u{fe00}', '\u{fe0f}'),
     ('\u{fe20}', '\u{fe2d}'),
     ('\u{101fd}', '\u{101fd}'),
+    ('\u{1cf00}', '\u{1cf2d}'),
+    ('\u{1cf30}', '\u{1cf46}'),
     ('\u{1d167}', '\u{1d169}'),
     ('\u{1d17b}', '\u{1d182}'),
     ('\u{1d185}', '\u{1d18b}'),
@@ -861,8 +880,12 @@
 pub const JAVANESE: &'static [(char, char)] =
     &[('\u{a980}', '꧍'), ('ꧏ', '꧙'), ('꧞', '꧟')];
 
-pub const KAITHI: &'static [(char, char)] =
-    &[('०', '९'), ('꠰', '꠹'), ('\u{11080}', '𑃁'), ('\u{110cd}', '\u{110cd}')];
+pub const KAITHI: &'static [(char, char)] = &[
+    ('०', '९'),
+    ('꠰', '꠹'),
+    ('\u{11080}', '\u{110c2}'),
+    ('\u{110cd}', '\u{110cd}'),
+];
 
 pub const KANNADA: &'static [(char, char)] = &[
     ('\u{951}', '\u{952}'),
@@ -876,10 +899,10 @@
     ('\u{cc6}', 'ೈ'),
     ('ೊ', '\u{ccd}'),
     ('\u{cd5}', '\u{cd6}'),
-    ('ೞ', 'ೞ'),
+    ('ೝ', 'ೞ'),
     ('ೠ', '\u{ce3}'),
     ('೦', '೯'),
-    ('ೱ', 'ೲ'),
+    ('ೱ', 'ೳ'),
     ('\u{1cd0}', '\u{1cd0}'),
     ('\u{1cd2}', '\u{1cd2}'),
     ('\u{1cda}', '\u{1cda}'),
@@ -902,10 +925,18 @@
     ('㌀', '㍗'),
     ('﹅', '﹆'),
     ('。', '\u{ff9f}'),
+    ('𚿰', '𚿳'),
+    ('𚿵', '𚿻'),
+    ('𚿽', '𚿾'),
     ('𛀀', '𛀀'),
+    ('𛄠', '𛄢'),
+    ('𛅕', '𛅕'),
     ('𛅤', '𛅧'),
 ];
 
+pub const KAWI: &'static [(char, char)] =
+    &[('\u{11f00}', '𑼐'), ('𑼒', '\u{11f3a}'), ('𑼾', '𑽙')];
+
 pub const KAYAH_LI: &'static [(char, char)] = &[('꤀', '꤯')];
 
 pub const KHAROSHTHI: &'static [(char, char)] = &[
@@ -920,13 +951,13 @@
 ];
 
 pub const KHITAN_SMALL_SCRIPT: &'static [(char, char)] =
-    &[('\u{16fe4}', '\u{16fe4}'), ('\u{18b00}', '\u{18cd5}')];
+    &[('\u{16fe4}', '\u{16fe4}'), ('𘬀', '𘳕')];
 
 pub const KHMER: &'static [(char, char)] =
     &[('ក', '\u{17dd}'), ('០', '៩'), ('៰', '៹'), ('᧠', '᧿')];
 
 pub const KHOJKI: &'static [(char, char)] =
-    &[('૦', '૯'), ('꠰', '꠹'), ('𑈀', '𑈑'), ('𑈓', '\u{1123e}')];
+    &[('૦', '૯'), ('꠰', '꠹'), ('𑈀', '𑈑'), ('𑈓', '\u{11241}')];
 
 pub const KHUDAWADI: &'static [(char, char)] =
     &[('।', '॥'), ('꠰', '꠹'), ('𑊰', '\u{112ea}'), ('𑋰', '𑋹')];
@@ -940,7 +971,7 @@
     ('ວ', 'ຽ'),
     ('ເ', 'ໄ'),
     ('ໆ', 'ໆ'),
-    ('\u{ec8}', '\u{ecd}'),
+    ('\u{ec8}', '\u{ece}'),
     ('໐', '໙'),
     ('ໜ', 'ໟ'),
 ];
@@ -976,16 +1007,23 @@
     ('Ⱡ', 'Ɀ'),
     ('꜀', '꜇'),
     ('Ꜣ', 'ꞇ'),
-    ('Ꞌ', 'ꞿ'),
-    ('Ꟃ', '\u{a7ca}'),
-    ('\u{a7f5}', 'ꟿ'),
+    ('Ꞌ', 'ꟊ'),
+    ('Ꟑ', 'ꟑ'),
+    ('ꟓ', 'ꟓ'),
+    ('ꟕ', 'ꟙ'),
+    ('ꟲ', 'ꟿ'),
     ('꤮', '꤮'),
     ('ꬰ', 'ꭚ'),
     ('ꭜ', 'ꭤ'),
-    ('ꭦ', '\u{ab69}'),
+    ('ꭦ', 'ꭩ'),
     ('ff', 'st'),
     ('A', 'Z'),
     ('a', 'z'),
+    ('𐞀', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
+    ('𝼀', '𝼞'),
+    ('𝼥', '𝼪'),
 ];
 
 pub const LEPCHA: &'static [(char, char)] =
@@ -1016,8 +1054,7 @@
     ('𐄷', '𐄿'),
 ];
 
-pub const LISU: &'static [(char, char)] =
-    &[('ꓐ', '꓿'), ('\u{11fb0}', '\u{11fb0}')];
+pub const LISU: &'static [(char, char)] = &[('ꓐ', '꓿'), ('𑾰', '𑾰')];
 
 pub const LYCIAN: &'static [(char, char)] = &[('𐊀', '𐊜')];
 
@@ -1082,8 +1119,7 @@
     &[('꠰', '꠹'), ('𑘀', '𑙄'), ('𑙐', '𑙙')];
 
 pub const MONGOLIAN: &'static [(char, char)] = &[
-    ('᠀', '\u{180e}'),
-    ('᠐', '᠙'),
+    ('᠀', '᠙'),
     ('ᠠ', 'ᡸ'),
     ('ᢀ', 'ᢪ'),
     ('\u{202f}', '\u{202f}'),
@@ -1100,6 +1136,8 @@
 
 pub const NABATAEAN: &'static [(char, char)] = &[('𐢀', '𐢞'), ('𐢧', '𐢯')];
 
+pub const NAG_MUNDARI: &'static [(char, char)] = &[('𞓐', '𞓹')];
+
 pub const NANDINAGARI: &'static [(char, char)] = &[
     ('।', '॥'),
     ('೦', '೯'),
@@ -1115,9 +1153,16 @@
 pub const NEW_TAI_LUE: &'static [(char, char)] =
     &[('ᦀ', 'ᦫ'), ('ᦰ', 'ᧉ'), ('᧐', '᧚'), ('᧞', '᧟')];
 
-pub const NEWA: &'static [(char, char)] = &[('𑐀', '𑑛'), ('𑑝', '\u{11461}')];
+pub const NEWA: &'static [(char, char)] = &[('𑐀', '𑑛'), ('𑑝', '𑑡')];
 
-pub const NKO: &'static [(char, char)] = &[('߀', 'ߺ'), ('\u{7fd}', '߿')];
+pub const NKO: &'static [(char, char)] = &[
+    ('،', '،'),
+    ('؛', '؛'),
+    ('؟', '؟'),
+    ('߀', 'ߺ'),
+    ('\u{7fd}', '߿'),
+    ('﴾', '﴿'),
+];
 
 pub const NUSHU: &'static [(char, char)] = &[('𖿡', '𖿡'), ('𛅰', '𛋻')];
 
@@ -1146,6 +1191,9 @@
 
 pub const OLD_TURKIC: &'static [(char, char)] = &[('𐰀', '𐱈')];
 
+pub const OLD_UYGHUR: &'static [(char, char)] =
+    &[('ـ', 'ـ'), ('𐫲', '𐫲'), ('𐽰', '𐾉')];
+
 pub const ORIYA: &'static [(char, char)] = &[
     ('\u{951}', '\u{952}'),
     ('।', '॥'),
@@ -1253,10 +1301,11 @@
     ('ݍ', 'ݏ'),
     ('ࡠ', 'ࡪ'),
     ('\u{1df8}', '\u{1df8}'),
+    ('\u{1dfa}', '\u{1dfa}'),
 ];
 
 pub const TAGALOG: &'static [(char, char)] =
-    &[('ᜀ', 'ᜌ'), ('ᜎ', '\u{1714}'), ('᜵', '᜶')];
+    &[('ᜀ', '᜕'), ('ᜟ', 'ᜟ'), ('᜵', '᜶')];
 
 pub const TAGBANWA: &'static [(char, char)] =
     &[('᜵', '᜶'), ('ᝠ', 'ᝬ'), ('ᝮ', 'ᝰ'), ('\u{1772}', '\u{1773}')];
@@ -1275,7 +1324,7 @@
 pub const TAI_VIET: &'static [(char, char)] = &[('ꪀ', 'ꫂ'), ('ꫛ', '꫟')];
 
 pub const TAKRI: &'static [(char, char)] =
-    &[('।', '॥'), ('꠰', '꠹'), ('𑚀', '𑚸'), ('𑛀', '𑛉')];
+    &[('।', '॥'), ('꠰', '꠹'), ('𑚀', '𑚹'), ('𑛀', '𑛉')];
 
 pub const TAMIL: &'static [(char, char)] = &[
     ('\u{951}', '\u{952}'),
@@ -1305,12 +1354,10 @@
     ('𑿿', '𑿿'),
 ];
 
-pub const TANGUT: &'static [(char, char)] = &[
-    ('𖿠', '𖿠'),
-    ('𗀀', '𘟷'),
-    ('𘠀', '\u{18aff}'),
-    ('\u{18d00}', '\u{18d08}'),
-];
+pub const TANGSA: &'static [(char, char)] = &[('𖩰', '𖪾'), ('𖫀', '𖫉')];
+
+pub const TANGUT: &'static [(char, char)] =
+    &[('𖿠', '𖿠'), ('𗀀', '𘟷'), ('𘠀', '𘫿'), ('𘴀', '𘴈')];
 
 pub const TELUGU: &'static [(char, char)] = &[
     ('\u{951}', '\u{952}'),
@@ -1319,11 +1366,12 @@
     ('ఎ', 'ఐ'),
     ('ఒ', 'న'),
     ('ప', 'హ'),
-    ('ఽ', 'ౄ'),
+    ('\u{c3c}', 'ౄ'),
     ('\u{c46}', '\u{c48}'),
     ('\u{c4a}', '\u{c4d}'),
     ('\u{c55}', '\u{c56}'),
     ('ౘ', 'ౚ'),
+    ('ౝ', 'ౝ'),
     ('ౠ', '\u{c63}'),
     ('౦', '౯'),
     ('౷', '౿'),
@@ -1365,10 +1413,23 @@
     ('𑓐', '𑓙'),
 ];
 
+pub const TOTO: &'static [(char, char)] = &[('𞊐', '\u{1e2ae}')];
+
 pub const UGARITIC: &'static [(char, char)] = &[('𐎀', '𐎝'), ('𐎟', '𐎟')];
 
 pub const VAI: &'static [(char, char)] = &[('ꔀ', 'ꘫ')];
 
+pub const VITHKUQI: &'static [(char, char)] = &[
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
+];
+
 pub const WANCHO: &'static [(char, char)] = &[('𞋀', '𞋹'), ('𞋿', '𞋿')];
 
 pub const WARANG_CITI: &'static [(char, char)] = &[('𑢠', '𑣲'), ('𑣿', '𑣿')];
@@ -1378,9 +1439,9 @@
     ('؛', '؛'),
     ('؟', '؟'),
     ('٠', '٩'),
-    ('\u{10e80}', '\u{10ea9}'),
-    ('\u{10eab}', '\u{10ead}'),
-    ('\u{10eb0}', '\u{10eb1}'),
+    ('𐺀', '𐺩'),
+    ('\u{10eab}', '𐺭'),
+    ('𐺰', '𐺱'),
 ];
 
 pub const YI: &'static [(char, char)] = &[
diff --git a/src/unicode_tables/sentence_break.rs b/src/unicode_tables/sentence_break.rs
index 67d830f..2434873 100644
--- a/src/unicode_tables/sentence_break.rs
+++ b/src/unicode_tables/sentence_break.rs
@@ -1,10 +1,10 @@
 // DO NOT EDIT THIS FILE. IT WAS AUTOMATICALLY GENERATED BY:
 //
-//   ucd-generate sentence-break ucd-13.0.0 --chars
+//   ucd-generate sentence-break ucd-15.0.0 --chars
 //
-// Unicode version: 13.0.0.
+// Unicode version: 15.0.0.
 //
-// ucd-generate 0.2.8 is available on crates.io.
+// ucd-generate 0.2.14 is available on crates.io.
 
 pub const BY_NAME: &'static [(&'static str, &'static [(char, char)])] = &[
     ("ATerm", ATERM),
@@ -29,7 +29,7 @@
 pub const CR: &'static [(char, char)] = &[('\r', '\r')];
 
 pub const CLOSE: &'static [(char, char)] = &[
-    ('\"', '\"'),
+    ('"', '"'),
     ('\'', ')'),
     ('[', '['),
     (']', ']'),
@@ -57,6 +57,7 @@
     ('⸜', '⸝'),
     ('⸠', '⸩'),
     ('⹂', '⹂'),
+    ('⹕', '⹜'),
     ('〈', '】'),
     ('〔', '〛'),
     ('〝', '〟'),
@@ -100,7 +101,8 @@
     ('\u{825}', '\u{827}'),
     ('\u{829}', '\u{82d}'),
     ('\u{859}', '\u{85b}'),
-    ('\u{8d3}', '\u{8e1}'),
+    ('\u{898}', '\u{89f}'),
+    ('\u{8ca}', '\u{8e1}'),
     ('\u{8e3}', 'ः'),
     ('\u{93a}', '\u{93c}'),
     ('ा', 'ॏ'),
@@ -142,6 +144,7 @@
     ('ொ', '\u{bcd}'),
     ('\u{bd7}', '\u{bd7}'),
     ('\u{c00}', '\u{c04}'),
+    ('\u{c3c}', '\u{c3c}'),
     ('\u{c3e}', 'ౄ'),
     ('\u{c46}', '\u{c48}'),
     ('\u{c4a}', '\u{c4d}'),
@@ -154,6 +157,7 @@
     ('ೊ', '\u{ccd}'),
     ('\u{cd5}', '\u{cd6}'),
     ('\u{ce2}', '\u{ce3}'),
+    ('ೳ', 'ೳ'),
     ('\u{d00}', 'ഃ'),
     ('\u{d3b}', '\u{d3c}'),
     ('\u{d3e}', '\u{d44}'),
@@ -172,7 +176,7 @@
     ('\u{e47}', '\u{e4e}'),
     ('\u{eb1}', '\u{eb1}'),
     ('\u{eb4}', '\u{ebc}'),
-    ('\u{ec8}', '\u{ecd}'),
+    ('\u{ec8}', '\u{ece}'),
     ('\u{f18}', '\u{f19}'),
     ('\u{f35}', '\u{f35}'),
     ('\u{f37}', '\u{f37}'),
@@ -193,13 +197,14 @@
     ('ႏ', 'ႏ'),
     ('ႚ', '\u{109d}'),
     ('\u{135d}', '\u{135f}'),
-    ('\u{1712}', '\u{1714}'),
-    ('\u{1732}', '\u{1734}'),
+    ('\u{1712}', '᜕'),
+    ('\u{1732}', '᜴'),
     ('\u{1752}', '\u{1753}'),
     ('\u{1772}', '\u{1773}'),
     ('\u{17b4}', '\u{17d3}'),
     ('\u{17dd}', '\u{17dd}'),
     ('\u{180b}', '\u{180d}'),
+    ('\u{180f}', '\u{180f}'),
     ('\u{1885}', '\u{1886}'),
     ('\u{18a9}', '\u{18a9}'),
     ('\u{1920}', 'ᤫ'),
@@ -208,7 +213,7 @@
     ('ᩕ', '\u{1a5e}'),
     ('\u{1a60}', '\u{1a7c}'),
     ('\u{1a7f}', '\u{1a7f}'),
-    ('\u{1ab0}', '\u{1ac0}'),
+    ('\u{1ab0}', '\u{1ace}'),
     ('\u{1b00}', 'ᬄ'),
     ('\u{1b34}', '᭄'),
     ('\u{1b6b}', '\u{1b73}'),
@@ -221,8 +226,7 @@
     ('\u{1ced}', '\u{1ced}'),
     ('\u{1cf4}', '\u{1cf4}'),
     ('᳷', '\u{1cf9}'),
-    ('\u{1dc0}', '\u{1df9}'),
-    ('\u{1dfb}', '\u{1dff}'),
+    ('\u{1dc0}', '\u{1dff}'),
     ('\u{200c}', '\u{200d}'),
     ('\u{20d0}', '\u{20f0}'),
     ('\u{2cef}', '\u{2cf1}'),
@@ -276,11 +280,16 @@
     ('\u{10ae5}', '\u{10ae6}'),
     ('\u{10d24}', '\u{10d27}'),
     ('\u{10eab}', '\u{10eac}'),
+    ('\u{10efd}', '\u{10eff}'),
     ('\u{10f46}', '\u{10f50}'),
+    ('\u{10f82}', '\u{10f85}'),
     ('𑀀', '𑀂'),
     ('\u{11038}', '\u{11046}'),
+    ('\u{11070}', '\u{11070}'),
+    ('\u{11073}', '\u{11074}'),
     ('\u{1107f}', '𑂂'),
     ('𑂰', '\u{110ba}'),
+    ('\u{110c2}', '\u{110c2}'),
     ('\u{11100}', '\u{11102}'),
     ('\u{11127}', '\u{11134}'),
     ('𑅅', '𑅆'),
@@ -288,9 +297,10 @@
     ('\u{11180}', '𑆂'),
     ('𑆳', '𑇀'),
     ('\u{111c9}', '\u{111cc}'),
-    ('\u{111ce}', '\u{111cf}'),
+    ('𑇎', '\u{111cf}'),
     ('𑈬', '\u{11237}'),
     ('\u{1123e}', '\u{1123e}'),
+    ('\u{11241}', '\u{11241}'),
     ('\u{112df}', '\u{112ea}'),
     ('\u{11300}', '𑌃'),
     ('\u{1133b}', '\u{1133c}'),
@@ -311,11 +321,11 @@
     ('\u{116ab}', '\u{116b7}'),
     ('\u{1171d}', '\u{1172b}'),
     ('𑠬', '\u{1183a}'),
-    ('\u{11930}', '\u{11935}'),
-    ('\u{11937}', '\u{11938}'),
+    ('\u{11930}', '𑤵'),
+    ('𑤷', '𑤸'),
     ('\u{1193b}', '\u{1193e}'),
-    ('\u{11940}', '\u{11940}'),
-    ('\u{11942}', '\u{11943}'),
+    ('𑥀', '𑥀'),
+    ('𑥂', '\u{11943}'),
     ('𑧑', '\u{119d7}'),
     ('\u{119da}', '\u{119e0}'),
     ('𑧤', '𑧤'),
@@ -338,14 +348,22 @@
     ('\u{11d90}', '\u{11d91}'),
     ('𑶓', '\u{11d97}'),
     ('\u{11ef3}', '𑻶'),
+    ('\u{11f00}', '\u{11f01}'),
+    ('𑼃', '𑼃'),
+    ('𑼴', '\u{11f3a}'),
+    ('𑼾', '\u{11f42}'),
+    ('\u{13440}', '\u{13440}'),
+    ('\u{13447}', '\u{13455}'),
     ('\u{16af0}', '\u{16af4}'),
     ('\u{16b30}', '\u{16b36}'),
     ('\u{16f4f}', '\u{16f4f}'),
     ('𖽑', '𖾇'),
     ('\u{16f8f}', '\u{16f92}'),
     ('\u{16fe4}', '\u{16fe4}'),
-    ('\u{16ff0}', '\u{16ff1}'),
+    ('𖿰', '𖿱'),
     ('\u{1bc9d}', '\u{1bc9e}'),
+    ('\u{1cf00}', '\u{1cf2d}'),
+    ('\u{1cf30}', '\u{1cf46}'),
     ('\u{1d165}', '\u{1d169}'),
     ('𝅭', '\u{1d172}'),
     ('\u{1d17b}', '\u{1d182}'),
@@ -363,8 +381,11 @@
     ('\u{1e01b}', '\u{1e021}'),
     ('\u{1e023}', '\u{1e024}'),
     ('\u{1e026}', '\u{1e02a}'),
+    ('\u{1e08f}', '\u{1e08f}'),
     ('\u{1e130}', '\u{1e136}'),
+    ('\u{1e2ae}', '\u{1e2ae}'),
     ('\u{1e2ec}', '\u{1e2ef}'),
+    ('\u{1e4ec}', '\u{1e4ef}'),
     ('\u{1e8d0}', '\u{1e8d6}'),
     ('\u{1e944}', '\u{1e94a}'),
     ('\u{e0020}', '\u{e007f}'),
@@ -377,6 +398,7 @@
     ('\u{61c}', '\u{61c}'),
     ('\u{6dd}', '\u{6dd}'),
     ('\u{70f}', '\u{70f}'),
+    ('\u{890}', '\u{891}'),
     ('\u{8e2}', '\u{8e2}'),
     ('\u{180e}', '\u{180e}'),
     ('\u{200b}', '\u{200b}'),
@@ -388,7 +410,7 @@
     ('\u{fff9}', '\u{fffb}'),
     ('\u{110bd}', '\u{110bd}'),
     ('\u{110cd}', '\u{110cd}'),
-    ('\u{13430}', '\u{13438}'),
+    ('\u{13430}', '\u{1343f}'),
     ('\u{1bca0}', '\u{1bca3}'),
     ('\u{1d173}', '\u{1d17a}'),
     ('\u{e0001}', '\u{e0001}'),
@@ -671,6 +693,7 @@
     ('ԭ', 'ԭ'),
     ('ԯ', 'ԯ'),
     ('ՠ', 'ֈ'),
+    ('ჼ', 'ჼ'),
     ('ᏸ', 'ᏽ'),
     ('ᲀ', 'ᲈ'),
     ('ᴀ', 'ᶿ'),
@@ -833,7 +856,7 @@
     ('ⅰ', 'ⅿ'),
     ('ↄ', 'ↄ'),
     ('ⓐ', 'ⓩ'),
-    ('ⰰ', 'ⱞ'),
+    ('ⰰ', 'ⱟ'),
     ('ⱡ', 'ⱡ'),
     ('ⱥ', 'ⱦ'),
     ('ⱨ', 'ⱨ'),
@@ -1001,19 +1024,34 @@
     ('ꞻ', 'ꞻ'),
     ('ꞽ', 'ꞽ'),
     ('ꞿ', 'ꞿ'),
+    ('ꟁ', 'ꟁ'),
     ('ꟃ', 'ꟃ'),
-    ('\u{a7c8}', '\u{a7c8}'),
-    ('\u{a7ca}', '\u{a7ca}'),
-    ('\u{a7f6}', '\u{a7f6}'),
+    ('ꟈ', 'ꟈ'),
+    ('ꟊ', 'ꟊ'),
+    ('ꟑ', 'ꟑ'),
+    ('ꟓ', 'ꟓ'),
+    ('ꟕ', 'ꟕ'),
+    ('ꟗ', 'ꟗ'),
+    ('ꟙ', 'ꟙ'),
+    ('ꟲ', 'ꟴ'),
+    ('ꟶ', 'ꟶ'),
     ('ꟸ', 'ꟺ'),
     ('ꬰ', 'ꭚ'),
-    ('ꭜ', '\u{ab68}'),
+    ('ꭜ', 'ꭩ'),
     ('ꭰ', 'ꮿ'),
     ('ff', 'st'),
     ('ﬓ', 'ﬗ'),
     ('a', 'z'),
     ('𐐨', '𐑏'),
     ('𐓘', '𐓻'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
+    ('𐞀', '𐞀'),
+    ('𐞃', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
     ('𐳀', '𐳲'),
     ('𑣀', '𑣟'),
     ('𖹠', '𖹿'),
@@ -1045,6 +1083,10 @@
     ('𝞪', '𝟂'),
     ('𝟄', '𝟉'),
     ('𝟋', '𝟋'),
+    ('𝼀', '𝼉'),
+    ('𝼋', '𝼞'),
+    ('𝼥', '𝼪'),
+    ('𞀰', '𞁭'),
     ('𞤢', '𞥃'),
 ];
 
@@ -1100,17 +1142,20 @@
     ('𑛀', '𑛉'),
     ('𑜰', '𑜹'),
     ('𑣠', '𑣩'),
-    ('\u{11950}', '\u{11959}'),
+    ('𑥐', '𑥙'),
     ('𑱐', '𑱙'),
     ('𑵐', '𑵙'),
     ('𑶠', '𑶩'),
+    ('𑽐', '𑽙'),
     ('𖩠', '𖩩'),
+    ('𖫀', '𖫉'),
     ('𖭐', '𖭙'),
     ('𝟎', '𝟿'),
     ('𞅀', '𞅉'),
     ('𞋰', '𞋹'),
+    ('𞓰', '𞓹'),
     ('𞥐', '𞥙'),
-    ('\u{1fbf0}', '\u{1fbf9}'),
+    ('🯰', '🯹'),
 ];
 
 pub const OLETTER: &'static [(char, char)] = &[
@@ -1146,8 +1191,9 @@
     ('ࠨ', 'ࠨ'),
     ('ࡀ', 'ࡘ'),
     ('ࡠ', 'ࡪ'),
-    ('ࢠ', 'ࢴ'),
-    ('ࢶ', '\u{8c7}'),
+    ('ࡰ', 'ࢇ'),
+    ('ࢉ', 'ࢎ'),
+    ('ࢠ', 'ࣉ'),
     ('ऄ', 'ह'),
     ('ऽ', 'ऽ'),
     ('ॐ', 'ॐ'),
@@ -1212,6 +1258,7 @@
     ('ప', 'హ'),
     ('ఽ', 'ఽ'),
     ('ౘ', 'ౚ'),
+    ('ౝ', 'ౝ'),
     ('ౠ', 'ౡ'),
     ('ಀ', 'ಀ'),
     ('ಅ', 'ಌ'),
@@ -1220,10 +1267,10 @@
     ('ಪ', 'ಳ'),
     ('ವ', 'ಹ'),
     ('ಽ', 'ಽ'),
-    ('ೞ', 'ೞ'),
+    ('ೝ', 'ೞ'),
     ('ೠ', 'ೡ'),
     ('ೱ', 'ೲ'),
-    ('\u{d04}', 'ഌ'),
+    ('ഄ', 'ഌ'),
     ('എ', 'ഐ'),
     ('ഒ', 'ഺ'),
     ('ഽ', 'ഽ'),
@@ -1264,7 +1311,7 @@
     ('ၵ', 'ႁ'),
     ('ႎ', 'ႎ'),
     ('ა', 'ჺ'),
-    ('ჼ', 'ቈ'),
+    ('ჽ', 'ቈ'),
     ('ቊ', 'ቍ'),
     ('ቐ', 'ቖ'),
     ('ቘ', 'ቘ'),
@@ -1286,9 +1333,8 @@
     ('ᚁ', 'ᚚ'),
     ('ᚠ', 'ᛪ'),
     ('ᛮ', 'ᛸ'),
-    ('ᜀ', 'ᜌ'),
-    ('ᜎ', 'ᜑ'),
-    ('ᜠ', 'ᜱ'),
+    ('ᜀ', 'ᜑ'),
+    ('ᜟ', 'ᜱ'),
     ('ᝀ', 'ᝑ'),
     ('ᝠ', 'ᝬ'),
     ('ᝮ', 'ᝰ'),
@@ -1309,7 +1355,7 @@
     ('ᨠ', 'ᩔ'),
     ('ᪧ', 'ᪧ'),
     ('ᬅ', 'ᬳ'),
-    ('ᭅ', 'ᭋ'),
+    ('ᭅ', 'ᭌ'),
     ('ᮃ', 'ᮠ'),
     ('ᮮ', 'ᮯ'),
     ('ᮺ', 'ᯥ'),
@@ -1347,11 +1393,10 @@
     ('ー', 'ヿ'),
     ('ㄅ', 'ㄯ'),
     ('ㄱ', 'ㆎ'),
-    ('ㆠ', '\u{31bf}'),
+    ('ㆠ', 'ㆿ'),
     ('ㇰ', 'ㇿ'),
-    ('㐀', '\u{4dbf}'),
-    ('一', '\u{9ffc}'),
-    ('ꀀ', 'ꒌ'),
+    ('㐀', '䶿'),
+    ('一', 'ꒌ'),
     ('ꓐ', 'ꓽ'),
     ('ꔀ', 'ꘌ'),
     ('ꘐ', 'ꘟ'),
@@ -1399,7 +1444,6 @@
     ('ꬑ', 'ꬖ'),
     ('ꬠ', 'ꬦ'),
     ('ꬨ', 'ꬮ'),
-    ('\u{ab69}', '\u{ab69}'),
     ('ꯀ', 'ꯢ'),
     ('가', '힣'),
     ('ힰ', 'ퟆ'),
@@ -1449,6 +1493,7 @@
     ('𐘀', '𐜶'),
     ('𐝀', '𐝕'),
     ('𐝠', '𐝧'),
+    ('𐞁', '𐞂'),
     ('𐠀', '𐠅'),
     ('𐠈', '𐠈'),
     ('𐠊', '𐠵'),
@@ -1477,19 +1522,22 @@
     ('𐮀', '𐮑'),
     ('𐰀', '𐱈'),
     ('𐴀', '𐴣'),
-    ('\u{10e80}', '\u{10ea9}'),
-    ('\u{10eb0}', '\u{10eb1}'),
+    ('𐺀', '𐺩'),
+    ('𐺰', '𐺱'),
     ('𐼀', '𐼜'),
     ('𐼧', '𐼧'),
     ('𐼰', '𐽅'),
-    ('\u{10fb0}', '\u{10fc4}'),
+    ('𐽰', '𐾁'),
+    ('𐾰', '𐿄'),
     ('𐿠', '𐿶'),
     ('𑀃', '𑀷'),
+    ('𑁱', '𑁲'),
+    ('𑁵', '𑁵'),
     ('𑂃', '𑂯'),
     ('𑃐', '𑃨'),
     ('𑄃', '𑄦'),
     ('𑅄', '𑅄'),
-    ('\u{11147}', '\u{11147}'),
+    ('𑅇', '𑅇'),
     ('𑅐', '𑅲'),
     ('𑅶', '𑅶'),
     ('𑆃', '𑆲'),
@@ -1498,6 +1546,7 @@
     ('𑇜', '𑇜'),
     ('𑈀', '𑈑'),
     ('𑈓', '𑈫'),
+    ('𑈿', '𑉀'),
     ('𑊀', '𑊆'),
     ('𑊈', '𑊈'),
     ('𑊊', '𑊍'),
@@ -1515,7 +1564,7 @@
     ('𑍝', '𑍡'),
     ('𑐀', '𑐴'),
     ('𑑇', '𑑊'),
-    ('𑑟', '\u{11461}'),
+    ('𑑟', '𑑡'),
     ('𑒀', '𑒯'),
     ('𑓄', '𑓅'),
     ('𑓇', '𑓇'),
@@ -1526,14 +1575,15 @@
     ('𑚀', '𑚪'),
     ('𑚸', '𑚸'),
     ('𑜀', '𑜚'),
+    ('𑝀', '𑝆'),
     ('𑠀', '𑠫'),
-    ('𑣿', '\u{11906}'),
-    ('\u{11909}', '\u{11909}'),
-    ('\u{1190c}', '\u{11913}'),
-    ('\u{11915}', '\u{11916}'),
-    ('\u{11918}', '\u{1192f}'),
-    ('\u{1193f}', '\u{1193f}'),
-    ('\u{11941}', '\u{11941}'),
+    ('𑣿', '𑤆'),
+    ('𑤉', '𑤉'),
+    ('𑤌', '𑤓'),
+    ('𑤕', '𑤖'),
+    ('𑤘', '𑤯'),
+    ('𑤿', '𑤿'),
+    ('𑥁', '𑥁'),
     ('𑦠', '𑦧'),
     ('𑦪', '𑧐'),
     ('𑧡', '𑧡'),
@@ -1544,7 +1594,7 @@
     ('𑩐', '𑩐'),
     ('𑩜', '𑪉'),
     ('𑪝', '𑪝'),
-    ('𑫀', '𑫸'),
+    ('𑪰', '𑫸'),
     ('𑰀', '𑰈'),
     ('𑰊', '𑰮'),
     ('𑱀', '𑱀'),
@@ -1558,14 +1608,20 @@
     ('𑵪', '𑶉'),
     ('𑶘', '𑶘'),
     ('𑻠', '𑻲'),
-    ('\u{11fb0}', '\u{11fb0}'),
+    ('𑼂', '𑼂'),
+    ('𑼄', '𑼐'),
+    ('𑼒', '𑼳'),
+    ('𑾰', '𑾰'),
     ('𒀀', '𒎙'),
     ('𒐀', '𒑮'),
     ('𒒀', '𒕃'),
-    ('𓀀', '𓐮'),
+    ('𒾐', '𒿰'),
+    ('𓀀', '𓐯'),
+    ('𓑁', '𓑆'),
     ('𔐀', '𔙆'),
     ('𖠀', '𖨸'),
     ('𖩀', '𖩞'),
+    ('𖩰', '𖪾'),
     ('𖫐', '𖫭'),
     ('𖬀', '𖬯'),
     ('𖭀', '𖭃'),
@@ -1577,20 +1633,32 @@
     ('𖿠', '𖿡'),
     ('𖿣', '𖿣'),
     ('𗀀', '𘟷'),
-    ('𘠀', '\u{18cd5}'),
-    ('\u{18d00}', '\u{18d08}'),
-    ('𛀀', '𛄞'),
+    ('𘠀', '𘳕'),
+    ('𘴀', '𘴈'),
+    ('𚿰', '𚿳'),
+    ('𚿵', '𚿻'),
+    ('𚿽', '𚿾'),
+    ('𛀀', '𛄢'),
+    ('𛄲', '𛄲'),
     ('𛅐', '𛅒'),
+    ('𛅕', '𛅕'),
     ('𛅤', '𛅧'),
     ('𛅰', '𛋻'),
     ('𛰀', '𛱪'),
     ('𛱰', '𛱼'),
     ('𛲀', '𛲈'),
     ('𛲐', '𛲙'),
+    ('𝼊', '𝼊'),
     ('𞄀', '𞄬'),
     ('𞄷', '𞄽'),
     ('𞅎', '𞅎'),
+    ('𞊐', '𞊭'),
     ('𞋀', '𞋫'),
+    ('𞓐', '𞓫'),
+    ('𞟠', '𞟦'),
+    ('𞟨', '𞟫'),
+    ('𞟭', '𞟮'),
+    ('𞟰', '𞟾'),
     ('𞠀', '𞣄'),
     ('𞥋', '𞥋'),
     ('𞸀', '𞸃'),
@@ -1626,13 +1694,14 @@
     ('𞺡', '𞺣'),
     ('𞺥', '𞺩'),
     ('𞺫', '𞺻'),
-    ('𠀀', '\u{2a6dd}'),
-    ('𪜀', '𫜴'),
+    ('𠀀', '𪛟'),
+    ('𪜀', '𫜹'),
     ('𫝀', '𫠝'),
     ('𫠠', '𬺡'),
     ('𬺰', '𮯠'),
     ('丽', '𪘀'),
-    ('\u{30000}', '\u{3134a}'),
+    ('𰀀', '𱍊'),
+    ('𱍐', '𲎯'),
 ];
 
 pub const SCONTINUE: &'static [(char, char)] = &[
@@ -1661,7 +1730,7 @@
     ('!', '!'),
     ('?', '?'),
     ('։', '։'),
-    ('؞', '؟'),
+    ('؝', '؟'),
     ('۔', '۔'),
     ('܀', '܂'),
     ('߹', '߹'),
@@ -1680,12 +1749,14 @@
     ('᪨', '᪫'),
     ('᭚', '᭛'),
     ('᭞', '᭟'),
+    ('᭽', '᭾'),
     ('᰻', '᰼'),
     ('᱾', '᱿'),
     ('‼', '‽'),
     ('⁇', '⁉'),
     ('⸮', '⸮'),
     ('⸼', '⸼'),
+    ('⹓', '⹔'),
     ('。', '。'),
     ('꓿', '꓿'),
     ('꘎', '꘏'),
@@ -1704,6 +1775,7 @@
     ('。', '。'),
     ('𐩖', '𐩗'),
     ('𐽕', '𐽙'),
+    ('𐾆', '𐾉'),
     ('𑁇', '𑁈'),
     ('𑂾', '𑃁'),
     ('𑅁', '𑅃'),
@@ -1718,12 +1790,13 @@
     ('𑗉', '𑗗'),
     ('𑙁', '𑙂'),
     ('𑜼', '𑜾'),
-    ('\u{11944}', '\u{11944}'),
-    ('\u{11946}', '\u{11946}'),
+    ('𑥄', '𑥄'),
+    ('𑥆', '𑥆'),
     ('𑩂', '𑩃'),
     ('𑪛', '𑪜'),
     ('𑱁', '𑱂'),
     ('𑻷', '𑻸'),
+    ('𑽃', '𑽄'),
     ('𖩮', '𖩯'),
     ('𖫵', '𖫵'),
     ('𖬷', '𖬸'),
@@ -2183,7 +2256,7 @@
     ('Ⅰ', 'Ⅿ'),
     ('Ↄ', 'Ↄ'),
     ('Ⓐ', 'Ⓩ'),
-    ('Ⰰ', 'Ⱞ'),
+    ('Ⰰ', 'Ⱟ'),
     ('Ⱡ', 'Ⱡ'),
     ('Ɫ', 'Ɽ'),
     ('Ⱨ', 'Ⱨ'),
@@ -2348,13 +2421,21 @@
     ('Ꞻ', 'Ꞻ'),
     ('Ꞽ', 'Ꞽ'),
     ('Ꞿ', 'Ꞿ'),
+    ('Ꟁ', 'Ꟁ'),
     ('Ꟃ', 'Ꟃ'),
-    ('Ꞔ', '\u{a7c7}'),
-    ('\u{a7c9}', '\u{a7c9}'),
-    ('\u{a7f5}', '\u{a7f5}'),
+    ('Ꞔ', 'Ꟈ'),
+    ('Ꟊ', 'Ꟊ'),
+    ('Ꟑ', 'Ꟑ'),
+    ('Ꟗ', 'Ꟗ'),
+    ('Ꟙ', 'Ꟙ'),
+    ('Ꟶ', 'Ꟶ'),
     ('A', 'Z'),
     ('𐐀', '𐐧'),
     ('𐒰', '𐓓'),
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
     ('𐲀', '𐲲'),
     ('𑢠', '𑢿'),
     ('𖹀', '𖹟'),
diff --git a/src/unicode_tables/word_break.rs b/src/unicode_tables/word_break.rs
index bd23e00..c071495 100644
--- a/src/unicode_tables/word_break.rs
+++ b/src/unicode_tables/word_break.rs
@@ -1,10 +1,10 @@
 // DO NOT EDIT THIS FILE. IT WAS AUTOMATICALLY GENERATED BY:
 //
-//   ucd-generate word-break ucd-13.0.0 --chars
+//   ucd-generate word-break ucd-15.0.0 --chars
 //
-// Unicode version: 13.0.0.
+// Unicode version: 15.0.0.
 //
-// ucd-generate 0.2.8 is available on crates.io.
+// ucd-generate 0.2.14 is available on crates.io.
 
 pub const BY_NAME: &'static [(&'static str, &'static [(char, char)])] = &[
     ("ALetter", ALETTER),
@@ -75,8 +75,9 @@
     ('ࠨ', 'ࠨ'),
     ('ࡀ', 'ࡘ'),
     ('ࡠ', 'ࡪ'),
-    ('ࢠ', 'ࢴ'),
-    ('ࢶ', '\u{8c7}'),
+    ('ࡰ', 'ࢇ'),
+    ('ࢉ', 'ࢎ'),
+    ('ࢠ', 'ࣉ'),
     ('ऄ', 'ह'),
     ('ऽ', 'ऽ'),
     ('ॐ', 'ॐ'),
@@ -141,6 +142,7 @@
     ('ప', 'హ'),
     ('ఽ', 'ఽ'),
     ('ౘ', 'ౚ'),
+    ('ౝ', 'ౝ'),
     ('ౠ', 'ౡ'),
     ('ಀ', 'ಀ'),
     ('ಅ', 'ಌ'),
@@ -149,10 +151,10 @@
     ('ಪ', 'ಳ'),
     ('ವ', 'ಹ'),
     ('ಽ', 'ಽ'),
-    ('ೞ', 'ೞ'),
+    ('ೝ', 'ೞ'),
     ('ೠ', 'ೡ'),
     ('ೱ', 'ೲ'),
-    ('\u{d04}', 'ഌ'),
+    ('ഄ', 'ഌ'),
     ('എ', 'ഐ'),
     ('ഒ', 'ഺ'),
     ('ഽ', 'ഽ'),
@@ -197,9 +199,8 @@
     ('ᚁ', 'ᚚ'),
     ('ᚠ', 'ᛪ'),
     ('ᛮ', 'ᛸ'),
-    ('ᜀ', 'ᜌ'),
-    ('ᜎ', 'ᜑ'),
-    ('ᜠ', 'ᜱ'),
+    ('ᜀ', 'ᜑ'),
+    ('ᜟ', 'ᜱ'),
     ('ᝀ', 'ᝑ'),
     ('ᝠ', 'ᝬ'),
     ('ᝮ', 'ᝰ'),
@@ -211,7 +212,7 @@
     ('ᤀ', 'ᤞ'),
     ('ᨀ', 'ᨖ'),
     ('ᬅ', 'ᬳ'),
-    ('ᭅ', 'ᭋ'),
+    ('ᭅ', 'ᭌ'),
     ('ᮃ', 'ᮠ'),
     ('ᮮ', 'ᮯ'),
     ('ᮺ', 'ᯥ'),
@@ -263,9 +264,7 @@
     ('ⅎ', 'ⅎ'),
     ('Ⅰ', 'ↈ'),
     ('Ⓐ', 'ⓩ'),
-    ('Ⰰ', 'Ⱞ'),
-    ('ⰰ', 'ⱞ'),
-    ('Ⱡ', 'ⳤ'),
+    ('Ⰰ', 'ⳤ'),
     ('Ⳬ', 'ⳮ'),
     ('Ⳳ', 'ⳳ'),
     ('ⴀ', 'ⴥ'),
@@ -287,7 +286,7 @@
     ('〻', '〼'),
     ('ㄅ', 'ㄯ'),
     ('ㄱ', 'ㆎ'),
-    ('ㆠ', '\u{31bf}'),
+    ('ㆠ', 'ㆿ'),
     ('ꀀ', 'ꒌ'),
     ('ꓐ', 'ꓽ'),
     ('ꔀ', 'ꘌ'),
@@ -296,9 +295,11 @@
     ('Ꙁ', 'ꙮ'),
     ('ꙿ', 'ꚝ'),
     ('ꚠ', 'ꛯ'),
-    ('꜈', 'ꞿ'),
-    ('Ꟃ', '\u{a7ca}'),
-    ('\u{a7f5}', 'ꠁ'),
+    ('꜈', 'ꟊ'),
+    ('Ꟑ', 'ꟑ'),
+    ('ꟓ', 'ꟓ'),
+    ('ꟕ', 'ꟙ'),
+    ('ꟲ', 'ꠁ'),
     ('ꠃ', 'ꠅ'),
     ('ꠇ', 'ꠊ'),
     ('ꠌ', 'ꠢ'),
@@ -322,7 +323,7 @@
     ('ꬑ', 'ꬖ'),
     ('ꬠ', 'ꬦ'),
     ('ꬨ', 'ꬮ'),
-    ('ꬰ', '\u{ab69}'),
+    ('ꬰ', 'ꭩ'),
     ('ꭰ', 'ꯢ'),
     ('가', '힣'),
     ('ힰ', 'ퟆ'),
@@ -365,9 +366,20 @@
     ('𐓘', '𐓻'),
     ('𐔀', '𐔧'),
     ('𐔰', '𐕣'),
+    ('𐕰', '𐕺'),
+    ('𐕼', '𐖊'),
+    ('𐖌', '𐖒'),
+    ('𐖔', '𐖕'),
+    ('𐖗', '𐖡'),
+    ('𐖣', '𐖱'),
+    ('𐖳', '𐖹'),
+    ('𐖻', '𐖼'),
     ('𐘀', '𐜶'),
     ('𐝀', '𐝕'),
     ('𐝠', '𐝧'),
+    ('𐞀', '𐞅'),
+    ('𐞇', '𐞰'),
+    ('𐞲', '𐞺'),
     ('𐠀', '𐠅'),
     ('𐠈', '𐠈'),
     ('𐠊', '𐠵'),
@@ -398,19 +410,22 @@
     ('𐲀', '𐲲'),
     ('𐳀', '𐳲'),
     ('𐴀', '𐴣'),
-    ('\u{10e80}', '\u{10ea9}'),
-    ('\u{10eb0}', '\u{10eb1}'),
+    ('𐺀', '𐺩'),
+    ('𐺰', '𐺱'),
     ('𐼀', '𐼜'),
     ('𐼧', '𐼧'),
     ('𐼰', '𐽅'),
-    ('\u{10fb0}', '\u{10fc4}'),
+    ('𐽰', '𐾁'),
+    ('𐾰', '𐿄'),
     ('𐿠', '𐿶'),
     ('𑀃', '𑀷'),
+    ('𑁱', '𑁲'),
+    ('𑁵', '𑁵'),
     ('𑂃', '𑂯'),
     ('𑃐', '𑃨'),
     ('𑄃', '𑄦'),
     ('𑅄', '𑅄'),
-    ('\u{11147}', '\u{11147}'),
+    ('𑅇', '𑅇'),
     ('𑅐', '𑅲'),
     ('𑅶', '𑅶'),
     ('𑆃', '𑆲'),
@@ -419,6 +434,7 @@
     ('𑇜', '𑇜'),
     ('𑈀', '𑈑'),
     ('𑈓', '𑈫'),
+    ('𑈿', '𑉀'),
     ('𑊀', '𑊆'),
     ('𑊈', '𑊈'),
     ('𑊊', '𑊍'),
@@ -436,7 +452,7 @@
     ('𑍝', '𑍡'),
     ('𑐀', '𑐴'),
     ('𑑇', '𑑊'),
-    ('𑑟', '\u{11461}'),
+    ('𑑟', '𑑡'),
     ('𑒀', '𑒯'),
     ('𑓄', '𑓅'),
     ('𑓇', '𑓇'),
@@ -448,13 +464,13 @@
     ('𑚸', '𑚸'),
     ('𑠀', '𑠫'),
     ('𑢠', '𑣟'),
-    ('𑣿', '\u{11906}'),
-    ('\u{11909}', '\u{11909}'),
-    ('\u{1190c}', '\u{11913}'),
-    ('\u{11915}', '\u{11916}'),
-    ('\u{11918}', '\u{1192f}'),
-    ('\u{1193f}', '\u{1193f}'),
-    ('\u{11941}', '\u{11941}'),
+    ('𑣿', '𑤆'),
+    ('𑤉', '𑤉'),
+    ('𑤌', '𑤓'),
+    ('𑤕', '𑤖'),
+    ('𑤘', '𑤯'),
+    ('𑤿', '𑤿'),
+    ('𑥁', '𑥁'),
     ('𑦠', '𑦧'),
     ('𑦪', '𑧐'),
     ('𑧡', '𑧡'),
@@ -465,7 +481,7 @@
     ('𑩐', '𑩐'),
     ('𑩜', '𑪉'),
     ('𑪝', '𑪝'),
-    ('𑫀', '𑫸'),
+    ('𑪰', '𑫸'),
     ('𑰀', '𑰈'),
     ('𑰊', '𑰮'),
     ('𑱀', '𑱀'),
@@ -479,14 +495,20 @@
     ('𑵪', '𑶉'),
     ('𑶘', '𑶘'),
     ('𑻠', '𑻲'),
-    ('\u{11fb0}', '\u{11fb0}'),
+    ('𑼂', '𑼂'),
+    ('𑼄', '𑼐'),
+    ('𑼒', '𑼳'),
+    ('𑾰', '𑾰'),
     ('𒀀', '𒎙'),
     ('𒐀', '𒑮'),
     ('𒒀', '𒕃'),
-    ('𓀀', '𓐮'),
+    ('𒾐', '𒿰'),
+    ('𓀀', '𓐯'),
+    ('𓑁', '𓑆'),
     ('𔐀', '𔙆'),
     ('𖠀', '𖨸'),
     ('𖩀', '𖩞'),
+    ('𖩰', '𖪾'),
     ('𖫐', '𖫭'),
     ('𖬀', '𖬯'),
     ('𖭀', '𖭃'),
@@ -532,10 +554,19 @@
     ('𝞊', '𝞨'),
     ('𝞪', '𝟂'),
     ('𝟄', '𝟋'),
+    ('𝼀', '𝼞'),
+    ('𝼥', '𝼪'),
+    ('𞀰', '𞁭'),
     ('𞄀', '𞄬'),
     ('𞄷', '𞄽'),
     ('𞅎', '𞅎'),
+    ('𞊐', '𞊭'),
     ('𞋀', '𞋫'),
+    ('𞓐', '𞓫'),
+    ('𞟠', '𞟦'),
+    ('𞟨', '𞟫'),
+    ('𞟭', '𞟮'),
+    ('𞟰', '𞟾'),
     ('𞠀', '𞣄'),
     ('𞤀', '𞥃'),
     ('𞥋', '𞥋'),
@@ -579,7 +610,7 @@
 
 pub const CR: &'static [(char, char)] = &[('\r', '\r')];
 
-pub const DOUBLE_QUOTE: &'static [(char, char)] = &[('\"', '\"')];
+pub const DOUBLE_QUOTE: &'static [(char, char)] = &[('"', '"')];
 
 pub const EXTEND: &'static [(char, char)] = &[
     ('\u{300}', '\u{36f}'),
@@ -606,7 +637,8 @@
     ('\u{825}', '\u{827}'),
     ('\u{829}', '\u{82d}'),
     ('\u{859}', '\u{85b}'),
-    ('\u{8d3}', '\u{8e1}'),
+    ('\u{898}', '\u{89f}'),
+    ('\u{8ca}', '\u{8e1}'),
     ('\u{8e3}', 'ः'),
     ('\u{93a}', '\u{93c}'),
     ('ा', 'ॏ'),
@@ -648,6 +680,7 @@
     ('ொ', '\u{bcd}'),
     ('\u{bd7}', '\u{bd7}'),
     ('\u{c00}', '\u{c04}'),
+    ('\u{c3c}', '\u{c3c}'),
     ('\u{c3e}', 'ౄ'),
     ('\u{c46}', '\u{c48}'),
     ('\u{c4a}', '\u{c4d}'),
@@ -660,6 +693,7 @@
     ('ೊ', '\u{ccd}'),
     ('\u{cd5}', '\u{cd6}'),
     ('\u{ce2}', '\u{ce3}'),
+    ('ೳ', 'ೳ'),
     ('\u{d00}', 'ഃ'),
     ('\u{d3b}', '\u{d3c}'),
     ('\u{d3e}', '\u{d44}'),
@@ -678,7 +712,7 @@
     ('\u{e47}', '\u{e4e}'),
     ('\u{eb1}', '\u{eb1}'),
     ('\u{eb4}', '\u{ebc}'),
-    ('\u{ec8}', '\u{ecd}'),
+    ('\u{ec8}', '\u{ece}'),
     ('\u{f18}', '\u{f19}'),
     ('\u{f35}', '\u{f35}'),
     ('\u{f37}', '\u{f37}'),
@@ -699,13 +733,14 @@
     ('ႏ', 'ႏ'),
     ('ႚ', '\u{109d}'),
     ('\u{135d}', '\u{135f}'),
-    ('\u{1712}', '\u{1714}'),
-    ('\u{1732}', '\u{1734}'),
+    ('\u{1712}', '᜕'),
+    ('\u{1732}', '᜴'),
     ('\u{1752}', '\u{1753}'),
     ('\u{1772}', '\u{1773}'),
     ('\u{17b4}', '\u{17d3}'),
     ('\u{17dd}', '\u{17dd}'),
     ('\u{180b}', '\u{180d}'),
+    ('\u{180f}', '\u{180f}'),
     ('\u{1885}', '\u{1886}'),
     ('\u{18a9}', '\u{18a9}'),
     ('\u{1920}', 'ᤫ'),
@@ -714,7 +749,7 @@
     ('ᩕ', '\u{1a5e}'),
     ('\u{1a60}', '\u{1a7c}'),
     ('\u{1a7f}', '\u{1a7f}'),
-    ('\u{1ab0}', '\u{1ac0}'),
+    ('\u{1ab0}', '\u{1ace}'),
     ('\u{1b00}', 'ᬄ'),
     ('\u{1b34}', '᭄'),
     ('\u{1b6b}', '\u{1b73}'),
@@ -727,8 +762,7 @@
     ('\u{1ced}', '\u{1ced}'),
     ('\u{1cf4}', '\u{1cf4}'),
     ('᳷', '\u{1cf9}'),
-    ('\u{1dc0}', '\u{1df9}'),
-    ('\u{1dfb}', '\u{1dff}'),
+    ('\u{1dc0}', '\u{1dff}'),
     ('\u{200c}', '\u{200c}'),
     ('\u{20d0}', '\u{20f0}'),
     ('\u{2cef}', '\u{2cf1}'),
@@ -782,11 +816,16 @@
     ('\u{10ae5}', '\u{10ae6}'),
     ('\u{10d24}', '\u{10d27}'),
     ('\u{10eab}', '\u{10eac}'),
+    ('\u{10efd}', '\u{10eff}'),
     ('\u{10f46}', '\u{10f50}'),
+    ('\u{10f82}', '\u{10f85}'),
     ('𑀀', '𑀂'),
     ('\u{11038}', '\u{11046}'),
+    ('\u{11070}', '\u{11070}'),
+    ('\u{11073}', '\u{11074}'),
     ('\u{1107f}', '𑂂'),
     ('𑂰', '\u{110ba}'),
+    ('\u{110c2}', '\u{110c2}'),
     ('\u{11100}', '\u{11102}'),
     ('\u{11127}', '\u{11134}'),
     ('𑅅', '𑅆'),
@@ -794,9 +833,10 @@
     ('\u{11180}', '𑆂'),
     ('𑆳', '𑇀'),
     ('\u{111c9}', '\u{111cc}'),
-    ('\u{111ce}', '\u{111cf}'),
+    ('𑇎', '\u{111cf}'),
     ('𑈬', '\u{11237}'),
     ('\u{1123e}', '\u{1123e}'),
+    ('\u{11241}', '\u{11241}'),
     ('\u{112df}', '\u{112ea}'),
     ('\u{11300}', '𑌃'),
     ('\u{1133b}', '\u{1133c}'),
@@ -817,11 +857,11 @@
     ('\u{116ab}', '\u{116b7}'),
     ('\u{1171d}', '\u{1172b}'),
     ('𑠬', '\u{1183a}'),
-    ('\u{11930}', '\u{11935}'),
-    ('\u{11937}', '\u{11938}'),
+    ('\u{11930}', '𑤵'),
+    ('𑤷', '𑤸'),
     ('\u{1193b}', '\u{1193e}'),
-    ('\u{11940}', '\u{11940}'),
-    ('\u{11942}', '\u{11943}'),
+    ('𑥀', '𑥀'),
+    ('𑥂', '\u{11943}'),
     ('𑧑', '\u{119d7}'),
     ('\u{119da}', '\u{119e0}'),
     ('𑧤', '𑧤'),
@@ -844,14 +884,22 @@
     ('\u{11d90}', '\u{11d91}'),
     ('𑶓', '\u{11d97}'),
     ('\u{11ef3}', '𑻶'),
+    ('\u{11f00}', '\u{11f01}'),
+    ('𑼃', '𑼃'),
+    ('𑼴', '\u{11f3a}'),
+    ('𑼾', '\u{11f42}'),
+    ('\u{13440}', '\u{13440}'),
+    ('\u{13447}', '\u{13455}'),
     ('\u{16af0}', '\u{16af4}'),
     ('\u{16b30}', '\u{16b36}'),
     ('\u{16f4f}', '\u{16f4f}'),
     ('𖽑', '𖾇'),
     ('\u{16f8f}', '\u{16f92}'),
     ('\u{16fe4}', '\u{16fe4}'),
-    ('\u{16ff0}', '\u{16ff1}'),
+    ('𖿰', '𖿱'),
     ('\u{1bc9d}', '\u{1bc9e}'),
+    ('\u{1cf00}', '\u{1cf2d}'),
+    ('\u{1cf30}', '\u{1cf46}'),
     ('\u{1d165}', '\u{1d169}'),
     ('𝅭', '\u{1d172}'),
     ('\u{1d17b}', '\u{1d182}'),
@@ -869,8 +917,11 @@
     ('\u{1e01b}', '\u{1e021}'),
     ('\u{1e023}', '\u{1e024}'),
     ('\u{1e026}', '\u{1e02a}'),
+    ('\u{1e08f}', '\u{1e08f}'),
     ('\u{1e130}', '\u{1e136}'),
+    ('\u{1e2ae}', '\u{1e2ae}'),
     ('\u{1e2ec}', '\u{1e2ef}'),
+    ('\u{1e4ec}', '\u{1e4ef}'),
     ('\u{1e8d0}', '\u{1e8d6}'),
     ('\u{1e944}', '\u{1e94a}'),
     ('🏻', '🏿'),
@@ -894,6 +945,7 @@
     ('\u{61c}', '\u{61c}'),
     ('\u{6dd}', '\u{6dd}'),
     ('\u{70f}', '\u{70f}'),
+    ('\u{890}', '\u{891}'),
     ('\u{8e2}', '\u{8e2}'),
     ('\u{180e}', '\u{180e}'),
     ('\u{200e}', '\u{200f}'),
@@ -904,7 +956,7 @@
     ('\u{fff9}', '\u{fffb}'),
     ('\u{110bd}', '\u{110bd}'),
     ('\u{110cd}', '\u{110cd}'),
-    ('\u{13430}', '\u{13438}'),
+    ('\u{13430}', '\u{1343f}'),
     ('\u{1bca0}', '\u{1bca3}'),
     ('\u{1d173}', '\u{1d17a}'),
     ('\u{e0001}', '\u{e0001}'),
@@ -932,7 +984,12 @@
     ('㋐', '㋾'),
     ('㌀', '㍗'),
     ('ヲ', 'ン'),
+    ('𚿰', '𚿳'),
+    ('𚿵', '𚿻'),
+    ('𚿽', '𚿾'),
     ('𛀀', '𛀀'),
+    ('𛄠', '𛄢'),
+    ('𛅕', '𛅕'),
     ('𛅤', '𛅧'),
 ];
 
@@ -1031,17 +1088,20 @@
     ('𑛀', '𑛉'),
     ('𑜰', '𑜹'),
     ('𑣠', '𑣩'),
-    ('\u{11950}', '\u{11959}'),
+    ('𑥐', '𑥙'),
     ('𑱐', '𑱙'),
     ('𑵐', '𑵙'),
     ('𑶠', '𑶩'),
+    ('𑽐', '𑽙'),
     ('𖩠', '𖩩'),
+    ('𖫀', '𖫉'),
     ('𖭐', '𖭙'),
     ('𝟎', '𝟿'),
     ('𞅀', '𞅉'),
     ('𞋰', '𞋹'),
+    ('𞓰', '𞓹'),
     ('𞥐', '𞥙'),
-    ('\u{1fbf0}', '\u{1fbf9}'),
+    ('🯰', '🯹'),
 ];
 
 pub const REGIONAL_INDICATOR: &'static [(char, char)] = &[('🇦', '🇿')];
diff --git a/src/utf8.rs b/src/utf8.rs
index dc05503..b9c8655 100644
--- a/src/utf8.rs
+++ b/src/utf8.rs
@@ -198,7 +198,7 @@
     type Item = &'a Utf8Range;
 
     fn into_iter(self) -> Self::IntoIter {
-        self.as_slice().into_iter()
+        self.as_slice().iter()
     }
 }
 
@@ -448,7 +448,7 @@
         1 => 0x007F,
         2 => 0x07FF,
         3 => 0xFFFF,
-        4 => 0x10FFFF,
+        4 => 0x0010_FFFF,
         _ => unreachable!("invalid UTF-8 byte sequence size"),
     }
 }
@@ -492,7 +492,7 @@
     fn single_codepoint_one_sequence() {
         // Tests that every range of scalar values that contains a single
         // scalar value is recognized by one sequence of byte ranges.
-        for i in 0x0..(0x10FFFF + 1) {
+        for i in 0x0..=0x0010_FFFF {
             let c = match char::from_u32(i) {
                 None => continue,
                 Some(c) => c,